修改了bootloader装载的方式

2006/7/21 23:36:05
目前是直接读取elf格式的cfe,然后根据elf的内容把代码和数据写到rom里面,实际上是实现了一个elf可执行文件loader,我觉得这种方式 不太符合一般嵌入式开发人员的思维习惯,我决定在初始化rom的时候,把cfe的binary文件直接拷贝到rom里面,这样就和一般的开发板很相似了.

刚开始这样做的时候遇到了一点麻烦,发现cfe启动不了了,用remote gdb跟了一下,发现在env_envvars的值是0,所以在env_findenv里面跑飞了,但是实际上env_envvars是初始化了的
queue_t env_envvars = {&env_envvars,&env_envvars};
而且以前通过elf的形式装载是没有问题的,于是马上就猜想到可能是数据段装载的问题,用mips-linux-objdump查看
cfe: file format elf32-tradbigmips

Sections:
Idx Name Size VMA LMA File off Algn
0 .text 00037ba5 9fc00000 bfc00000 00001000 2**4
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .data 000015f0 81f00000 bfc37bb0 00039000 2**3
CONTENTS, ALLOC, LOAD, DATA

可以看到数据段和代码段的vma,lma的偏移不同,利马就想到可能是linker script的问题,通过查看Makefile 和cfe/arch/mips/common/src/cfe_ldscript.template,把CFG_BOOTRAM设置成1,问题解决

Sections:
Idx Name Size VMA LMA File off Algn
0 .text 00037ba5 9fc00000 9fc00000 00001000 2**4
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .data 000015f0 9fc37ba8 9fc37ba8 00038ba8 2**3
CONTENTS, ALLOC, LOAD, DATA
posted @ 2011-04-05 13:47  konggang  阅读(572)  评论(0编辑  收藏  举报