这个教程教你如何分析一个新的无线路由器设备,并制作自己的uboot,该uboot可以引导SuperWRT系统。
本教程可能需要使用到以下工具:
硬件工具:电脑、Flash编程器、USB转TTL串口,2.45mm单排排针、风枪、电烙铁、焊锡、镊子
软件:WinHex
如果硬件是你们自己开发的,或者你知道设计,请直接访问SuperWRT.com wiki中的《生成带设备信息的uboot》文章:这里
在线生成uboot的网页在(需要首先登陆到社区):
http://superwrt.com/download/generate
其它建议:
如果只是用来改路由器,Flash编程器可以买个便宜的就行,一般也就100-200元,如硕飞的。
USB转TTL串口最好不要用CH350芯片的。
查看硬件规格
首先,当然是要拆壳了。拆开后看硬件规格。
下面拆的是TP-Link WR842N v7.0设备。
主芯片和RAM及Flash如下:
主芯片一般都是比较方正的,这里用的是QCA9533的芯片。可以在这里查看该芯片的一些基本信息。
下面是SPI
Flash(闪存),这里用的是25Q16。一般型号采用25x[数字]的格式,如W25Q32。25+字母后面的数字表示Flash容量大小。如这里的32表示32Mbit,也就是4MByte,即我们常说的4M
Flash。所以,W25Q16就是2M的Flash;没有W25Q08,而是W25Q80,省略了前面的0,是1M的Flash。
这里的RAM用的是W9464G6KH-5,可以用搜索引擎查一下,就知道这颗芯片的信息了。查到是一颗SDRAM DDR 64Mx16 200MHZ。也就是64×16/8/8MByte,即16MB的RAM。
有些设备还会使用外部的Switch,比如这个:
还有一些双频设备,有另外有一个WLAN芯片。
还有些设备的RAM是长这个样子,这种一般是DDR2或更高规格的。
查看串口信息
要进行开发,首先要将串口焊上,TP-Link设备一般预留一个4孔的排针来接串口。当然还可能根本没连排针,这种情况需要自己飞线。
在这四个孔上焊上排针。
有些TP-Link设备可能有这四个孔,但实际的线还需要一个电阻将这个孔之与芯片连通,可以用一个飞线将其连上。
然后使用USB转TTL串口与这个排针连接。四个针分别为RX、Tx、GND、VCC。
注意:一定不要把电源线(VCC)连上,因为设备和USB转串口的这个脚都供电,连在一起工作可能会烧坏芯片。
然后使用Putty打开串口,查看信息,看设备是否正确启动。最好把信息保存一份,当出问题时,可以用来分析。
读取Flash内容
在改写内容前,要做的是备份原Flash内容。
建议:最好不要用别人的Flash内容,因为无线部分的校准信息是因设备而异的,使其它设备的校准信息可能使设备的无线性能下降。
首先用热风枪将Flash吹下来。注意不要硬夹,一定要等锡软了,再用镊子将flash拿下来,不然会损环焊盘。
然后上编程器,把Flash内容读出来,保存好。
焊回Flash
这步可以最后再做,写在这里主要为了排版清楚。
先将原来的锡焊平整,如有需要,可以适当加点锡。
用热风枪先把锡吹软。
用镊子将Flash放好,然后移走热风枪。注意不同管脚不要被锡连上了。
提示:芯片上有小圆点的是1管脚,要与PCB上芯片丝印凹口或有小点的方向一致。
分析设备
不同芯片,甚至不同厂家的分析略有不同,下面仅分析TP-Link使用Atheros芯片的设备。
分析Atheors芯片设备
分析Flash内容
下面以TP-Link WR842N v7.0的Flash为例。
首先用WinHex打开上面读出的Flash镜像。
可以看到都是0x10开头的16进制数字。这是因为mips CPU的跳转指令为0x10开头,这部分都是一些跳转指令。mips CPU在一上电时,会把该区域作为中断向量表来读取。具体请参考《see mips run》这本书。
这个开头的位置其实就是uboot了。然后向后查看,会发现到一个位置全部是0xFF的数据了,这就是uboot结束了。因为Flash在擦除后,没有写内容时,默认为0xFF。
试一下:WR842N v7.0的固件是有两级uboot的,你可以试着找出第二个uboot的位置。
在设备的背面一个标签,写着设备的MAC地址,可以使用WinHex的“搜索→查找16进制数值”的功能,找到MAC地址在Flash中记录的位置。我的这个设备的MAC是EC:26:CA:FF:B1:40,所以查找:EC26CAFFB140。发现它是在Flash的0x20000位置。
设备出厂的MAC地址一般都保存在Flash相对靠前,或靠后的位置,而且会离对齐的地址位置比较近(如:能被0x1000整除的位置)。如果出现在中间,而且在Flash中不只出现这一次的,很可能这里只是一个配置文件。
接下来需要查看校准信息的位置。对于AR934x/QCA953x/QCA955x/QCA956x的芯片来说,它们的校准信息一般以0x0202开头,信息头后面的内容密度比较低(就是0x00很多),然后再出现一大堆重复的数字(这部分是不同频率的校准功率)。如下面这个:
所以,WR842N v7.0的校准信息的位置是Flash的0x20810位置。
提示:对于11AC芯片的校准,是以0x4408开头的。
其它部分对于刷SuperWRT来说就是没用的了。你可以自由分区,不过SuperWRT的tiny版本的firmware至少要保证0x1d0000大小的分区,配置则至少保证大于0x6000。
上面查找WR842N v7.0第二个uboot的位置的问题,可以在这里揭晓答案,是0x28000的地址上。
再看0x21000位置的内容,猜测可能是配置文件。
所以,对于WR842N v7.0的官方分区结构应该是这样的。
0x000000-0x01ffff uboot
0x020000-0x020fff MAC地址和WLAN校准信息
0x021000-0x027fff 配置文件
0x028000-0x1fffff firmware
这里,还要介绍一下SuperWRT的分区建议:
对于支持4k擦除功能的Flash(winband和GD的Flash都是支持的),uboot的大小为0x1c000,然后是0x1000或0x4000大小的SBI分区,用于保存sbi(SuperWRT Board Info)。
不支持4k擦除功能的Flash,uboot的大小为0x20000,直接将SBI包含在内。
至少存在一个config分区,用于存放配置,分区大小不小于0x6000。
一个firmware分区,分区大小不小于0x1d0000。
原来设备的校准信息用CAL分区名,如果校准信息不是连续在一个区域内(如MAC地址写在了Flash前面,校准信息写在了Flash后面),可以用CAL2的分区,依次类推。
所以,我们可以使用一样分区结构来适配SuperWRT:
0x000000-0x01bfff uboot
0x01c000-0x01ffff SBI
0x020000-0x020fff CAL
0x021000-0x027fff config
0x028000-0x1fffff firmware
在SuperWRT在线定制工具中,boot参数替代栏目中,应该这样填写:
bootargs="console=ttyS0,115****00 mtdparts=spi0.0:112k(uboot),16k(SBI),4k(CAL),28k(config),1888k(firmware)"
分析GPIO连接
分析串口的GPIO
对于AR934x/QCA953x/QCA955x的芯片设备,一般串口的GPIO是固定的,虽然可以更改,但一般没有厂家会改动它。而QCA956x的不同设备串口GPIO可能会略不同。
使用SuperWRT uboot在线生成工具,生成一个相应芯片的uboot,这时你不用配置任何GPIO信息,只配好校准和MAC信息位置即可。
注意:对于QCA956x来说,还是要配置一下串口GPIO的,一般在18-24这几个GPIO里试一下。WR886n就是19为Rx,20为Tx。Atheros官方的参考设计里提供了RX20_TX22、RX18_TX22、RX18_TX20、RX24_TX20、RX19_TX22这几种配置。
SuperWRT支持Atheros芯片的uboot的串口速率为115****00bps。
如果串口不能正常工作,你可以用在线工具尝试使用不同的GPIO。
你可以使用原镜像的uboot支持刷入SuperWRT的uboot到Flash中(参考这里),也可以用编程器烧写Flash。
当串口正常工作后,即使网络工作不正常,仍可以用loadb命令通过串口更新uboot,可以减少重新吹焊Flash的操作。(uboot的使用参考这里)
当串口正常工作后,就可以用后面的教程来测试其它GPIO了。
分析其它GPIO
当串口正常后,你就可以进入uboot命令行。使用SuperWRT uboot中提供的gpio命令测试gpio了。
先使用读命令测试出按键的位置:
gpio [测试的号码] 1
(按键后,再重复命令)
gpio [测试的号码] 1
如:下面是对WR886n的测试:
ath> gpio 1 1
GPIO(1): 1
(按住Reset键)
ath> gpio 1 1
GPIO(1): 0
所以,WR886n的Reset键是GPIO 1。
先用输入测试,是为了防止两个输出引脚未通过电阻连起来,消耗电流过大。
然后,用输出进行测试,看什么时候LED被点亮,说明该GPIO是控制那个LED的。
gpio [测试的号码] 1 0
gpio [测试的号码] 1 1
对应设备外壳,找出LED灯的功能定义(比如:是WAN口的灯,系统灯)。
使用SuperWRT在线定制工具填入配置,即刻生成了你设备支持的版本。
结束了
使用在线定制工具还有什么疑问,还可参考这里
别忘了,测试好的uboot要和大家齐分享啊。可以分享在SuperWRT社区的bootloader板块
玩的开心 8-)