将art分区从64K修改为128K

因客户需求,现需将AP的art分区从原来的64KB大小改为128KB。
AP上查看当前磁盘分区信息:

root@HSAP:/proc# cat /proc/mtd
dev:    size   erasesize  name
mtd0: 00040000 00010000 "u-boot"
mtd1: 00010000 00010000 "u-boot-env"
mtd2: 00e30000 00010000 "rootfs"
mtd3: 00960000 00010000 "rootfs_data"
mtd4: 00160000 00010000 "uImage"
mtd5: 00010000 00010000 "mid0"
mtd6: 00010000 00010000 "art"
mtd7: 00fa0000 00010000 "firmware"

从上面我们可以看到,art是第六分区,size是0x10000,即大小时64KB。现在我们需要把art分区改成128KB,扩大该分区。因为art分区处于flash的最后部分了,即地址已经很大了,而且firmware分区需要的空间大,所以我们只能向前扩大art的分区,即去掉mid0分区。
在AP的底层代码APSDK下找到该AP产品对应的mach-xxx.c文件,现给出我的路径在APSDK下target/linux/ar71xx/files/arch/mips/ath79/mach-xinruiacn.c,进入mach-xinruiacn.c后修改art分区的起始地址。因为是向前扩大所以可以直接将地址减小64K。
现给出修改前的mach-xinruiacn.c的部分代码:

112 
113 static void __init xinruiacn_setup(void)
114 {
115         u8 *mac = (u8 *)KSEG1ADDR(0x1fff0000);
116 
117         u8 *art = (u8 *)KSEG1ADDR(0x1fff1000);
118        
119 
120         printk("cal_data=%04x ,basemac = %02x:%02x:%02x:%02x:%02x:%02x\n",
121                         *((u16 *)art),mac[0],mac[1],mac[2],mac[3],mac[4],mac[5]);
122 
123         ath79_register_m25p80(NULL);
124 

只需将 u8 *mac = (u8 *)KSEG1ADDR(0x1fff0000),中的0x1fff0000改为0x1ffe0000; u8 *art = (u8 *)KSEG1ADDR(0x1fff1000),中的0x1fff1000改为0x1ffe1000;即两个地址都减小了64k(0x10000)。
还要修改一个文件,即target/linux/ar71xx/image/Makefile,找到xinruiacn_mtdlayout将art分区改为128k,同时去掉mid0分区。
修改前的部分代码:

1031 #xinxui
1032 xinruiacn_mtdlayout=mtdparts=spi0.0:256k(u-boot)ro,64k(u-boot-env),14528k(rootfs),1408k(uImage),64k(mid0),64k(art),16000k@0x50000(firmware)

修改后的部分代码:

1031 #xinxui
1032 xinruiacn_mtdlayout=mtdparts=spi0.0:256k(u-boot)ro,64k(u-boot-env),14528k(rootfs),1408k(uImage),128k(art),16000k@0x50000(firmware)

然后重新编译底层,获取新的imageBuilder和SDK,并重新编译上层代码,获得bin文件,烧到AP中即可。

你可能感兴趣的:(将art分区从64K修改为128K)