研究6678快一个月了,但是始终有几个问题找不到答案:
1..out文件+rmd文件生成.b文件, 以I2C eeprom启动为例, rmd文件中的 ORG到底是什么意思?如果填0x400,在烧写的时候,就是写到eeprom的0x400处?还是RBL在搬运的时候,将数据搬到0x400的内存处?
2. 通过romparse生成.ccs文件,romparse需要一个.map.pp的文件,这个文件是描述boot parameter table吗?romparse的作用是在boot table前面加上boot parameter table吗? 哪里有文档介绍.map.pp里面详细参数的如何设定?
3. ibl用make evm_c6678_i2c就可以编译,但是我如何选择配置这个ibl的boot parameter table中的各项参数呀?我怎么配置二级启动的方式?必须用i2cparam_c66x_le.out + i2cConfig.gel来配置二级启动参数?
4. 将mcsdk里面的post程序编出来之后,post_evm6678l.dat 前面有boot parameter table吗? 也就是说post_i2crom.bin 和 i2crom_0x51_c6678_le.bin在文件结构上有不同?
5. 我要将post_i2rom.bin烧写到0x50或者0x51处,配置相应的启动方式之后,都能执行;但是系统默认编译出来的IBL无论烧写到0x50还是0x51处,都无法执行,各位有遇到过这种情况吗?
问题有点多,望见谅.其实我只想实现写一个简单的点灯程序,构建成i2crom.bin,烧到eeprom 的0x51里面, 然后启动成功,led灯亮.但是TI的开发资源包大而全,资料太分散,看了很多不得要领.ibl的编译生成过程也是复杂成分.我目前将boot_loader目录下几乎所有文档都看了,说的都相当的模糊.
Andy Yin1:
1 org指定的是烧写到ROM中的起始地址,具体参考手册SPRU186 section11.4;
2 你的理解是对的,boot parameter table 格式参考RBL中tiboot.h及bootloader user guide对不同boot mode下的各自定义;
3 mcsdk中提供的IBL是一个二次加载的例程,如果要使用mcsdk中的IBL,就需要满足其传递boot parameter的格式要求;这只是一个例程,你也可以按照你定义的方式进行二级参数的传递。
关于IBL确实没有一个详尽的文档,建议最好从IBL的源码着手看看,其他的文档写的不是很详细。
sir Li:
回复 Andy Yin1:
谢谢Andy.
sir Li:
谢谢Andy, 总算搞清楚了:
i2c_eeprom有1M bit == 128K, 0x50处代表前64K, 0x51处代表后64K, i2crom_0x51_c6678_le.bin里面包括了一个"启动参数表集合"和 boot table; 而"启动参数表集合"是7个 boot parameter table的集合,根据 DEVSTAT[7:3]的parameter index来选择这7个中的哪一个来作为本次启动的 boot parameter table.
"启动参数表集合" 中就描述了ibl 的支持的二级启动:spi nor / nand / ethernet , 如果想改变这些"启动参数",就改变i2cConfig.gel中的相应的值,然后用i2cparam_c66x_le.out将i2cConfig.gel中的值烧进去,它只会改变"启动参数表集合".但当你重新烧写i2crom_0x51_c6678_le.bin的时候,又重新覆盖"启动参数表集合".
当你选择的启动参数(boot paramter)支持的二级启动是ibl_BOOT_FORMAT_ELF的时候,那么直接将编译出来的elf格式的.out文件烧写到spi nor或者nand处就可以了.