调整分区表的方法
为了减少flash闲余空间,客户可以自行调整flash分区表。
SSC3xx系列出厂时带一段ROM code,上电执行顺序为:ROM code -> IPL -> IPL_CUST -> UBOOT->KERNEL。ROM code会从flash 0 Offset地址读取IPL,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/};
调整分区的方法:
A.改mxp_gen.c生成mxp_sf.bin烧录到MXPT分区。 B.如果ENV分区位置调整,需要对应更改uboot代码include/configs/infinity6.h,把宏CONFIG_ENV_OFFSET做对应修改。
C.可以使用IPLX代替IPL+IPL_CUST,能减少一点flash体积。
如果不烧录分区表,使用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