EBOOT下读取内核镜像问题
我用的是三星的BSP,目前我已经基本上跑通了eboot了,现在正在做从flash中把nk.bin读取的ram中运行,问题现在就出在这里了, 在nk.bin文件中我可以看出来加载地址是0x80200000和镜像大小,程序流程是这样的,将存储在flash中的nk.bin读到0x80200000,
在oemaddrtab_cfg.inc中是这样的
DCD 0x80000000, 0x33E00000, 2 ; 64 MB DRAM BANK 6
DCD 0x8C000000, 0x30000000, 62 ; 64 MB DRAM BANK 6
我的理解是0x80200000是内核运行的地址(0x80200000不在DRAM区域中),我就有点糊涂了,0x80200000到底是什么呢?按照bsp程序中的写法是将读取的数据放到0x80200000处之后运行,wince就跑起来了,但是这个地方不是板子上的ram空间啊???我实际的情况是读数据到0x80200000处程序就飞了,不知道飞到哪里去了,串口一点信息都不输出,还有我还试过用另外一种方法来测试,
我直接调用最底层驱动读数据(放在一个临时buffer中),数据是正确的,之后我马上把数据放到0x80200000处,之后通过串口输出0x80200000处的数据,发现数据基本上都是0a 0a之类的数据.
现在我可以保证从flash读取数据是正确的(我编写过测试程序),我是不是哪里没有处理好呢,到底是什么原因导致了我的这个问题,是不是我哪里想错了?请各位帮帮忙看看,谢谢
[解决办法]
0x80200000是虚拟地址空间,具体可看OEMAddressTable里面的映射关系,对应的是存放nk的内存地址,就是DRAM。
[解决办法]
1.三星的BSP里面EBOOT都是可以运行的,所以有点奇怪,你为什么要自己做?
2.如楼上所说,0x80200000是虚拟地址,它最终肯定是指向你的RAM地址的。