nk.bin烧写地址

huazisgit 2010-12-24 09:15:13
因为板子的网卡用不了,所以我只能用烧写器烧写nk.bin, 但是烧写完后发现nk.bin不能起来。具体情况是这样的。
volatile DWORD * pdwStartRAM;
volatile DWORD * pdwFlash;
DWORD i;
DWORD CRC;

pdwStartRAM = (volatile DWORD *)dwPhysStart;
pdwFlash = (volatile DWORD *)(FLASH_BIN_START);

if ( *(pdwFlash+16) == 0x43454345 )
{
EdbgOutputDebugString("Found pTOC signature.\n");

// Copy Flash image into RAM
EdbgOutputDebugString("Copying FLASH image into RAM.\r\n");
//memcpy((LPVOID)pdwStartRAM,(LPVOID)pdwFlash,dwPhysLen);
pdwStartRAM = (volatile DWORD *)dwPhysStart;
pdwFlash = (volatile DWORD *)(FLASH_BIN_START+0xF80000);
for (i = 0; i < dwPhysLen / 4; i++)
{
*pdwStartRAM = *pdwFlash;
pdwStartRAM++;
pdwFlash++;
}
}
这是一段将nk.bin从flash拷贝到内存的代码。其中FLASH_BIN_START是0xA0080000,对应的物理地址是0x80000, 然后我把nk。bin就烧写到norflash的这个地址,可是运行的时候提示*(pdwFlash+16)这个地址的值并不是0x43454345,请问这是什么原因呢?难道只能用pb下载吗? 如果我烧nk.bin又该怎么做呢? 谢谢了
...全文
132 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhouchuan111 2010-12-26
  • 打赏
  • 举报
回复
这个是这样的:
在eboot中,你需要把内核拷贝到内存中,然后跳转到相应的位置
你看看你的eboot源代码,把内核拷到哪里了
yangkunzhen 2010-12-26
  • 打赏
  • 举报
回复
nk.bin是没法直接在内存中run的,必须通过romimage或者自己在eboot下实现一个类似romimage的程序,吧nk.bin转成nk.nb0
UN_ChairMan 2010-12-26
  • 打赏
  • 举报
回复
\WINCE600\PUBLIC\COMMON\OAK\INC
那个头文件在这个文件夹下面。
我现在也遇到和你类似的问题,不过我没有管TOC这个指针.是直接把flash中的NK.BIN读到内存然后跳转程序直接跑飞。
yangkunzhen 2010-12-24
  • 打赏
  • 举报
回复
烧写到FLASH_BIN_START 这个位置,
你代码上有写!!
huazisgit 2010-12-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 yangkunzhen 的回复:]
在你的config.bib
文件中加入
ROMSTART=
ROMWIDTH=
ROMSIZE=

让PB生成nb0文件,然后你用烧写器把nb0烧进去。
[/Quote]
生成了nk.nb0了, 但是我不知道该烧写到哪个地址啊
yangkunzhen 2010-12-24
  • 打赏
  • 举报
回复
在你的config.bib
文件中加入
ROMSTART=
ROMWIDTH=
ROMSIZE=

让PB生成nb0文件,然后你用烧写器把nb0烧进去。
huazisgit 2010-12-24
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 yangkunzhen 的回复:]
if ( *(pdwFlash+16) == 0x43454345 )
改成
if ( *(pdwFlash+ROM_SIGNATURE_OFFSET) == ROM_SIGNATURE)
头文件是romldr.h
[/Quote]
不好意思,我的那个包里面没有那个头文件, 您能告诉我那两个变量分别是多少? 分别代表什么意思?小弟谢过了。 第一次一直wince,很多地方不大明白吗还望见谅。
yangkunzhen 2010-12-24
  • 打赏
  • 举报
回复
if ( *(pdwFlash+16) == 0x43454345 )
改成
if ( *(pdwFlash+ROM_SIGNATURE_OFFSET) == ROM_SIGNATURE)
头文件是romldr.h
huazisgit 2010-12-24
  • 打赏
  • 举报
回复
上面的错了 应该是nk.nb0

额, 我是这样烧的。可是代码中从flash拷贝到内存的时候有做检查的。。。
pdwFlash = (volatile DWORD *)(FLASH_BIN_START);
if ( *(pdwFlash+16) == 0x43454345 )

nk.bin的这个地址的内容不是0x43454345
huazisgit 2010-12-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 yangkunzhen 的回复:]
烧写到FLASH_BIN_START 这个位置,
你代码上有写!!
[/Quote]
额, 我是这样烧的。可是代码中从flash拷贝到内存的时候有做检查的。。。
pdwFlash = (volatile DWORD *)(FLASH_BIN_START);
if ( *(pdwFlash+16) == 0x43454345 )

nk.bin的这个地址的内容不是0x43454345

19,500

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧