Openwrt 备份和恢复ART信息
环境
- MT7688 EVB with SPI FLASH
- U-Boot 1.1.3
- Openwrt 19.07
ART说明
Openwrt有一个ART分区(或者叫factory分区),用于保存相关无线网络的信息,比如射频调教参数和MAC地址。
如果ART分区被误擦除或者不匹配,射频性能可能大打折扣甚至无法启用wifi功能
过程
获取分区信息
cat /proc/mtd
可以看到mtd2为art分区,并且大小为0x10000 = 64KB
提取ART分区文件
读取该分区生成art.bin
dd if=/dev/mtd2 of=/tmp/art.bin
修改ART文件(如果有修改MAC需求)
将art.bin上传到host,方便用二进制编辑器修改
scp /tmp/art.bin mcai@192.168.2.186:/tmp
notepad++(需安装hex editor插件)打开art.bin,如下红色框为MAC地址
修改为如下
恢复ART分区
将art_new.bin从Host下载到目标板
在目标板shell中执行
scp mcai@192.168.2.186:/tmp/art_new.bin /tmp
mtd -r write /tmp/art_new.bin art
提示无法对mtd进行写入
在kernel中恢复ART分区
由于openwrt默认未开启mtd写入功能,需要在配置中打开,如下
然后在设备树里去掉确认ART分区是是否有写保护,如果有的话去掉,如下
上面确认修改好,再次写入新的ART文件,如下写入成功
验证ART恢复成功
重启后使用hexdump确认新ART文件是否写入成功,如下已经修改了,验证写入成功
hexdump -C /dev/mtd2
在uboot下恢复ART分区
首先在uboot源码目录文件autoconf.h和include/configs/rt2880.h的RAM_BASE和FLASH_BASE的相关信息
#define CFG_SDRAM_BASE 0x80000000
#define TEXT_BASE 0xBC000000
查看下art分区地址,
[ 0.363169] 4 fixed-partitions partitions found on MTD device spi0.0 [ 0.369641] Creating 4 MTD partitions on "spi0.0": [ 0.374510] 0x000000000000-0x000000030000 : "u-boot" [ 0.380465] 0x000000030000-0x000000040000 : "u-boot-env" [ 0.386774] 0x000000040000-0x000000050000 : "factory" [ 0.392728] 0x000000050000-0x000001000000 : "firmware"
计算出在uboot中art分区地址为0xBC040000,大小为0x10000
通过tftp载入bin到内存中
开启tftpd32,将art_new.bin拷入目录
然后在目标板将host上的art_new.bin下载到内存(CFG_SDRAM_BASE)里
tftpboot 0x80000000 art_new.bin
如下表示下载到内存中成功
擦除并写入新数据
查看spi命令
spi erase 0xBC040000 0x10000
先测试下spi的读写,写入一个值后读出
spi write 0xbc040000 0x1234
spi read 0xbc040000 0x10
如下,spi write写入没有生效,应该是uboot版本有问题,需要确认可以读写没问题的uboot再来测试
疑问
修改MAC地址后实际并未生效
如下,成功修改MAC地址后,系统启动后并未采用新的MAC,而是随机生成的;参考文章里有提到ART分区还有MAC校验码也要修改,但是不知道具体是哪个,暂时把问题放在这,以后单独出一个文章研究