IPL Q&A
Q1:从flash中读取的cis.bin数据与烧入的数据不一致
第一次烧写完cis.bin,IPL.bin,IPL_CUST.bin,uboot后,再将数据dump出来对比,发现cis.bin区域跟原始数据不一样了。

1. cis.bin,包含GCIS.bin,PARTINFO.pni和SPINANDINFO.sni,GCIS.bin保存了一份默认的flash信息数据,PARTINFO.pni为分区信息,SPINANDINFO.sni为支持的spinand flash信息。
2. 数据不一致,是因为IPL启动会在SPINANDINFO.sni找到匹配的flash ID,然后读出flash信息回写到flash cis区域(包括GCIS和PARTINFO),从而导致数据不一致。
3. 另外还有一点,写数据前会先擦除(按block),所以烧写完启动后,sni的区域(0x1000开始)也都被擦掉了;第一次启动后就不需要SPINANDINFO了。
Q2:GCIS,IPL,IPL_CUST 的作用分别是什么?
GCIS是保存一份默认的SPINAND flash信息,大多数SPINAND flash都可以通过这个参数启动,但是可能会存在参数不匹配的问题,所以真正量产还是建议用cis.bin(包含GCIS.bin,PARTINFO.pni和SPINANDINFO.sni)。
IPL主要功能是做一些基础的硬件初始化,例如设定当前DDR参数,以及GPIO/IIC相关等。
IPL_CUST会根据当前板子的实际情况初始化客制化板子硬件的可执行的二进制文件,例如客制化的GPIO管脚,IIC配置。
Q3:IPL.bin和IPL_CUST.bin有没有两个合一的文件?Nandflash和Norflash的IPL是通用的吗?
有的,IPLX.bin在project\board\m6\boot\ipl路径下,nandflash和norflash 的 IPL是通用(一样)的。
Q4:如何制作cis.bin?
cis.bin,包含GCIS.bin,PARTINFO.pni和SPINANDINFO.sni,GCIS.bin保存了一份默认的flash信息数据,PARTINFO.pni为分区信息,SPINANDINFO.sni为支持的spinand flash信息。
GCIS.bin,PARTINFO.pni分别占用前面2k空间,后面再追加SPINANDINFO.sni。
制作方式参考project\image\image.mk,
dd if=/dev/zero bs=2k count=2 | tr '\000' '\377' > cis.bin dd if=GCIS.bin of=cis.bin bs=2k count=1 conv=notrunc seek=0 dd if=PARTINFO.pni of= cis.bin bs=2k count=1 conv=notrunc seek=1 cat SPINANDINFO.sni >> cis.bin