Omap-l138 启动,RBL—>my_bootloader- arm_rtos / dspbios.
My_bootloader.bin 是AIS格式的文件,RBL负责把它加载到相应的内存去。但是,当my_bootloader把arm_rtos加载到内存的时候,如何实现以下链接文件时,正确加载arm_rtos?(arm_rtos.bin 或arm_rtos.hex)
我的链接文件link.cmd
MEMORY
{
SHAREDRAM: o = 0x80000000 l = 0x00020000
ARMRAM: o = 0xFFFF0000 l = 0x00002000
DDR_MEM: o = 0xc0000000 l = 0x2000000
}
SECTIONS
{
.boot > DDR_MEM
.cinit > SHAREDRAM /* Initialization Tables */
.pinit > SHAREDRAM /* C++ Constructor Tables */
.const > SHAREDRAM /* Constant Data */
.switch > DDR_MEM /* Jump Tables */
.text > DDR_MEM /* Executable Code */
.bss{ *(.bss) } > SHAREDRAM
.far > SHAREDRAM /* Far Global & Static Variables */
.stack > SHAREDRAM /* Software System Stack */
.svcstack > SHAREDRAM /* Supervisor Mode Stack */
.irqstack > SHAREDRAM /* IRQ Interrupt Stack */
.fiqstack > SHAREDRAM /* FIQ Interrupt Stack */
.sysmem > SHAREDRAM /* Dynamic Memory Allocation Area */
.cio > SHAREDRAM /* C I/O Buffer */
.intvecs > ARMRAM /* Interrupt Vectors */
.data > SHAREDRAM
}
要是我自已写bootloader的时候,是不是要把 .boot .switch .text section 搬到DDR_MEM相应的内存.
.cinit .pinit .const .bss .far .stack …搬到SHAREDRAM
.intvecs 搬到ARMRAM的内存去呢?
如何实现以上各section的copy 到DDR 和 shareRAM中去?
我搞不太明白..没做过….
是不是要把相应的SECTION搬到相应的内存去?
假如:.boot section 是启动的,.map可知,程序入口地址是0xc8001000,难道我直接从NOR FLASH读出来,
搬到内存上去(搬到内存何处?),直接跳到入口地址.就行了?
zhihua xie zhihua xie:
意思就是:要是自己去实现RBL的功能,如何去实现?(RBL肯定能把各section的代码从NOR FLASH加载到相应的运行域)
Tony Tang:
回复 zhihua xie zhihua xie:
一方面可以参考TI提供的UBL。
关键是my_bootloader要知道arm_rtos.bin 的格式,如果是image格式(如uboot.bin),则将整个image搬到目的内存,然后跳转到入口地址。
所谓的image格式即为内存映像,只需要知道内存的首地址,整块搬过去即可。
zhihua xie zhihua xie:
回复 Tony Tang:
如果要从NOR FLASH 存储器COPY DSPBIOS也是这样做?CCS3.3如何生成内存映像的BIN格式?
Tony Tang:
回复 zhihua xie zhihua xie:
不分有没有DSP BIOS, 你问的是ARM的还是DSP的?这里有一点点区别。因为ARM的hex470.exe不支持-boot选项生成boot table, 而DSP的hex6x.exe支持-boot生成boot table形式的加载表。
请参考贴:www.deyisupport.com/…/5319.aspx