norflash分区表说明和调整方法

如果使用nor flash,ROM code会从flash 0 Offset地址读取IPL,之后的IPL\IPL_CUST\uboot\kernel默认都是通过查找flash里分区表信息去识别分区。

IPL和IPL_CUST会从40K,48K,60K,128K,256K,512K的位置依次查找分区表信息(代码不开放,客户改不了)。UBOOT和KERNEL同理也会去固定位置依次查找分区表(客户可以改):

uboot:位于drivers/mstar/partition/part_mxp.c::static const int mxp_offset[] = {0xA000/*40K*/, 0xC000/*48K*/, 0xF000/*60K*/, 0x20000/*128K*/, 0x40000/*256K*/, 0x80000/*512K*/};
kernel:位于drivers/sstar/flash_isp/part_mxp.c:static const int mxp_offset[] = {0xA000/*40K*/, 0xC000/*48K*/, 0xF000/*60K*/, 0x20000/*128K*/, 0x40000/*256K*/, 0x80000/*512K*/};

调整分区的方法:

  1. 旧SDK是改mxp_gen.c生成mxp_sf.bin烧录到MXPT分区。

  2. 新SDK是用mxpgenerator工具生成mxp_sf.bin烧录到flash。

    ./project/image/makefiletools/bin/mxpgenerator "0x00000(IPL),0x10000(IPL_CUST) ,0x20000(MXPT),0x30000(UBOOT), 0x4F000 (UBOOT_ENV)" "0x200000(KERNEL),0x400000(rootfs),0x300000(nvrservice),0x6B0000(customer)" /home/benis.chen/I6b0_source/release/release_1220/sourcecode/project/image/output/images/boot/MXP_SF.bin

  3. 如果ENV分区位置调整,需要对应更改uboot代码include/configs/infinity6b0.h,把宏CONFIG_ENV_OFFSET做对应修改。

  4. 内核也可以改成读取bootargs传mtdparts的方式识别分区信息:kernel config 一定要打开CONFIG_MTD_CMDLINE_PARTS,CONFIG_MS_FLASH_ISP_MXP_PARTS可以去掉。如果后者没有去掉,实际上mtdparts也会覆盖掉MXP的分区表,所以无所谓bootars里的 mtdparts 的名字必须是NOR_FLASH 比如:bootargs=mtdparts=NOR_FLASH:320K(boot),2048K(kernel),12544K(program),64K(cliinfo),64K(mtd_runtime),1M(config),-(calibration) root=/dev/mtdblock2 rootfstype=squashfs