鸣谢
Bootloader
Breed->功能强大的多线程 Bootloader
ART
如何提取 ART 数据
OpenWRT 下以太网MAC地址的写入
新手固件ART提取教程,一看就懂!(44楼)
添加新设备
Adding a new device
ar71xx: add support for TP-Link TL-WDR6500 v2
openWRT手札之一:target profile添加新路由器
openWRT手札之二:kernel arch machine新增路由器
准备 linux 内核板级支持(新)
模板
ar71xx: add support for TP-Link TL-WDR6500 v2
ar71xx: add support for RB750r2
ar71xx: add support for TL-WR802N Version 2
做补丁(patch)
廖雪峰-Git教程
如何贡献代码
如何提交内核补丁
官方指导
如何利用git制作和提交patch
多个commit 合并为一个patch
补丁规范化
LEDE Project-Submitting patches
两位老外
Christian Lamparter
Piotr Dymacz
意外资源
Pyra Kernel Git Source Tree
OpenWrt 智能路由器开发指南(罕见的出版物)
TP-Link TL-WDR5600 v1
CPU: Qualcomm QCA9561(750MHz)
Wireless: Qualcomm QCA9561(2.4G) + QCA9887(5G)
Flash: Winbond W25Q64FVSIG(8M)
RAM: ESMT M14D5121632A(64M)
与TP-Link TL-WDR6500 v2的主要区别在于无线部分(QCA9882),去年6月就想做了,可惜条件尚不成熟。ath10k-firmware关于QCA9887的驱动包也是有的,当然到了现在情况更好,8个月前LEDE编译菜单里都没有看到QCA9887,只能手动加。
- 拿到一块裸板
- 通电检查各功能,原厂系统是否正常
- 拆开,看芯片标示(SoC, Wireless, Flash),找TTL针
- 寻找合适的bootloader和可能的固件
- 取下Flash上编程器,备份,取出ART
- 刷入bootloader,Flash焊回原处
- 进bootloader改MAC地址,刷固件、ART
- 重启看ttl输出
- 调整:无线,网口,灯序
- 新建分支,找模板patch,改源码,做适配
I.提取原厂ART数据
ART = Atheros Radio Test – it contains mac addresses and calibration data for the wifi (EEPROM). If it is missing or corrupt, ath9k won’t come up anymore.
Winhex/bless编辑器,找mac关键字,再向下找ART数据。
1.”mac”关键字
* “mac”字段后跟着机器的MAC地址,若外壳损毁可由此找回,通过breed控制台对MAC地址进行更新。
2.往下找0x0202开头的数据
在0001D804找到机器的MAC地址,
往下到0001DFFC,从这里开始是ART数据,以0x0202开头,共0x440字节(1.06kb),整块ART数据大小和贴吧里的一样。
3.新建64k空白文件,art数据置入
breed会给上传的ART固件做检测(大小不是64k会提示),但不会自动偏移0x1000字节(即需要手动在art.bin中空出0xfff字节,以0x1000为ART数据的起始点)。新建64k空白文件,全部填充FF,务必以偏移量1000处为起始点(0202前是4个字节的FF)。具体可参考TL-WDR6500的ART数据。
!可能因ART数据写入位置不正确而导致的错误:
A.数据从0x1001处开始,可以正常启动,但两个无线都不正常(误报firmware损坏):
[ 11.247025] ath10k_pci 0000:00:00.0: firmware crashed! (uuid da80bf5d-78aa-4c27-a21b-4f923cc80a1e)
[ 11.256325] ath10k_pci 0000:00:00.0: qca9887 hw1.0 target 0x4100016d chip_id 0x004000ff sub 0000:0000
[ 11.265856] ath10k_pci 0000:00:00.0: kconfig debug 0 debugfs 1 tracing 0 dfs 1 testmode 1
[ 11.278772] ath10k_pci 0000:00:00.0: firmware ver 10.2.4-1.0-00013 api 5 features no-p2p,ignore-otp,skip-clock-init,mfp crc32 14a57ac6
[ 11.291284] ath10k_pci 0000:00:00.0: board_file api 1 bmi_id N/A crc32 546cca0d
[ 11.298840] ath10k_pci 0000:00:00.0: htt-ver 0.0 wmi-op 5 htt-op 2 cal file max-sta 128 raw 0 hwcrypto 1
[ 11.310652] ath10k_pci 0000:00:00.0: firmware register dump:
[ 11.316504] ath10k_pci 0000:00:00.0: [00]: 0x4100016D 0x000015B3 0x009B436A 0x00955B31
[ 11.324687] ath10k_pci 0000:00:00.0: [04]: 0x009B436A 0x00060130 0x0000001D 0xFD24D656
[ 11.332859] ath10k_pci 0000:00:00.0: [08]: 0xFFFFFFFF 0x00401F6A 0x0000096C 0xFFFFFFFF
[ 11.341038] ath10k_pci 0000:00:00.0: [12]: 0x00000009 0x00000000 0x00958360 0x0095836B
B.不设置偏移量直接写(0偏移量处),不断重启(网传是无线的锅),好像没有ART就只能重启了。
*写入规则:
Linux 下的无线驱动是 ath9k,它要求 ART 数据位于 Flash 的最后 64KB 中。
但是不能直接将 ART 数据写在最后 64KB 的起始位置。ART 数据位于 最后 64KB 起始向下 0x1000 处。
4M Flash 应写在 0x3F1000 处;
8M Flash 应写在 0x7F1000 处;
16M Flash 应写在 0xFF1000处。
II.固件bug
1.用6500的breed及固件(CPU与6500相同);
2.进breed,更新MAC;
3.WAN灯由18改至19(区别于6500),低电平触发;
4.WAN启用导致机器卡死,打补丁ar71xx: fix gmac0 speed function for qca956x;
III.patch制作
# 新建分支并切换git branch 分支名 && git checkout 分支名# 查看修改git status# 添加修改git add target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wdr5600-v1.cgit add ......# 提交修改至本地数据库,并写好说明git commit# 与master分支比对,生成git专用patchgit format-patch -M master# 查看提交历史git log# 合并多次提交(数字3代表前三次)git rebase -i HEAD~3# 回滚至某次提交(git log查编号)git reset --hard 编号(fa8da6ab6019d760e85a202c28c88fc1ade33d83)# 另外新建分支,验证patch# 提交patch至指定邮件列表(需接入国际互联网)# 写完给自己发一遍,检查是否有其它格式问题git send-email --smtp-server /usr/bin/msmtp --to lede-dev@lists.infradead.org XXX.patch
IV.版权及开源许可证
术语
外置功放电路(PA:Power Amplifier)
低噪声功放接收电路(LNA:Low Noise Amplifier)