shiqx429
驱动牛犊
驱动牛犊
  • 注册日期2006-04-26
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分472分
  • 威望57点
  • 贡献值0点
  • 好评度55点
  • 原创分0分
  • 专家分0分
阅读:1334回复:5

EBOOT下读取内核镜像问题

楼主#
更多 发布于:2007-12-24 10:29
我用的是三星的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读取数据是正确的(我编写过测试程序),我是不是哪里没有处理好呢,到底是什么原因导致了我的这个问题,是不是我哪里想错了?请各位帮帮忙看看,谢谢
shiqx429
驱动牛犊
驱动牛犊
  • 注册日期2006-04-26
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分472分
  • 威望57点
  • 贡献值0点
  • 好评度55点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-12-24 11:01
补充一下,我的底层测试函数
pLowFuncTbl->Read(0,dwStartPage,0xff,0,(unsigned char *)0x8ca00000,0,0,0);
MLC_Print_Page_Data((unsigned char *)(0x8ca00000),NULL);

pLowFuncTbl->Read(0,dwStartPage,0xff,0,(unsigned char *)0x80200000,0,0,0);
MLC_Print_Page_Data((unsigned char *)(0x80200000),NULL);

串口输出是
0x8ca00000处
93 be 00 ea 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
45 43 45 43 dc d6 c4 81 dc d6 a4 01 00 00 00 00
0x80200000处
0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
qinlei_sz
驱动小牛
驱动小牛
  • 注册日期2007-03-24
  • 最后登录2012-12-18
  • 粉丝0
  • 关注0
  • 积分1090分
  • 威望510点
  • 贡献值0点
  • 好评度145点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-12-24 11:23
跳到0x80201000这里运行看看,或打印这里看看。
shiqx429
驱动牛犊
驱动牛犊
  • 注册日期2006-04-26
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分472分
  • 威望57点
  • 贡献值0点
  • 好评度55点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-12-24 12:36
试过了  是一样的
0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
shiqx429
驱动牛犊
驱动牛犊
  • 注册日期2006-04-26
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分472分
  • 威望57点
  • 贡献值0点
  • 好评度55点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-12-25 09:21
自己顶一下
Selene23
驱动牛犊
驱动牛犊
  • 注册日期2007-08-02
  • 最后登录2008-07-03
  • 粉丝0
  • 关注0
  • 积分41分
  • 威望13点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-12-25 11:22
我的eboot 的configure 中, 有:
 dwLoadAddress: 0x80200000
  dwJumpAddress: 0x8022CAF8

所以大概运行的地址会有一个offset, 但是这个值不知怎样确定的, 是与具体的编译或eboot load 的具体步骤有关, 你试试看这个值, 但是你的可能不一样,

从80200000输出的值, 如果继续输出的话, 仍然是0a 20 .....吗?
一直到多少才不是了呢?这样可以看看你的offset 具体是多少,
比较笨的办法, 但是不知道原因, 也只能这样试试了。
游客

返回顶部