eboot下载nk.bin有点问题?

xuefeng_baggio 2009-11-17 01:57:43
突然发现自己很落伍了。这些问题csdn高人们是去年或者更早在问的。我到现在才发现自己这里很多不懂。废话少说了。上次eboot启动后一直没时间来学习这块。今天把usb中断实现了。可是下载nk.bin时出问题了?现在有几个问题想确认下?
1.eboot通过usb下载的到底是nk.nb0呢?还是nk.bin?个人感觉是nb0,理由是nb0下载进去就可以执行了不要bin文件那个什么格式之类的说法?不知道对不对?
2.现在下载的调试信息出来个错误就是"Don't support raw image"看了源码可能和
#define ROM_RAMIMAGE_START 0x80000000
#define ROM_RAMIMAGE_SIZE 0x02000000这两个有关系?我有看了config.bib
NK 80200000 01E00000 RAMIMAGE
RAM 82000000 01E00000 RAM
FLASH 92000000 00100000 RESERVED我就有问题了?我这个bsp是拿的官方改的。这里ROM_RAMIMAGE_START为什么会是80000000而不是82000000??我查看了立于泰的bsp也是这样?所以我很困惑了!难道我错了??呵呵
这里是哪个源码,各位帮我看看吧?

// Is it a ram image?
else if ((dwStartAddr >= ROM_RAMIMAGE_START) &&
((dwStartAddr + dwLength - 1) < (ROM_RAMIMAGE_START + ROM_RAMIMAGE_SIZE)))
{
OALMSG(TRUE, (TEXT("RAM image\r\n")));
g_ImageType = IMAGE_TYPE_RAMIMAGE;
return TRUE;
}
else if (!dwStartAddr && !dwLength)
{
OALMSG(TRUE, (TEXT("Don't support raw image\r\n"))); g_ImageType = IMAGE_TYPE_RAWBIN;
return FALSE;
...全文
3997 34 打赏 收藏 转发到动态 举报
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
fishly_0 2010-04-22
  • 打赏
  • 举报
回复
mark
博说医械研发 2009-11-19
  • 打赏
  • 举报
回复
在EBOOT启动的时候在DNW界面按下空格,看下Menu,大概内容如下:


0) IP address: 133.133.0.0
1) Subnet mask: 255.255.255.0
2) DHCP: Disabled
3) Boot delay: 1 seconds
4) Reset to factory default configuration
5) Startup image: LAUNCH EXISTING
6) Program disk image into NAND Flash: Enabled
7) Program CS8900 MAC address (00:00:00:00:00:00)
8) Kernel Debugger: ENABLED
A) Format FIL (Erase All Blocks)
B) Format VFL (Format FIL + VFL Format)
C) Format FTL (Erase FTL Area + FTL Format)
E) Erase Physical Block 0
F) Make Initial Bad Block Information (Warning)
T) MLC Low level test
D) Download image now
L) LAUNCH existing Boot Media image
R) Read Configuration
U) DOWNLOAD image now(USB)
W) Write Configuration Right Now
S) Go into Sleep Mode


Program disk image into NAND Flash:要是Enabled才行
博说医械研发 2009-11-19
  • 打赏
  • 举报
回复
这个是设置是否下载NK的时候将NK写到NAND里边去
估计你设置的不是写到NAND
xuefeng_baggio 2009-11-19
  • 打赏
  • 举报
回复
看样子我得请韦伯大哥吃饭了!呵呵!再次感谢下!我现在跟到OEMLANCH发现个问题
+OEMLaunch.
+OEMLaunch+++baggio dwImageStart=-2145386496.
+OEMLaunch++ baggio dwImageLength=14967164.
+OEMLaunch+++baggio dwLaunchAddr=-2145199368.
+OEMLaunch+++baggio g_bDownloadImage=1.
+OEMLaunch+++baggio g_pBootCfg->ConfigFlags & TARGET_TYPE_NAND=0.
上面是调试信息

在oemlanch中有个判断
if (g_bDownloadImage && (g_pBootCfg->ConfigFlags & TARGET_TYPE_NAND))
我不知道这个判断的意思是什么??但是我红色部分读出来是0 我不知道为什么是0??这是那个宏
#define TARGET_TYPE_NAND 0x00000800 // NAND Flash
想问下韦伯兄 这是什么判断??是干嘛的呢??这里进不去 我就不能在下载nk时写入TOC 导致读出的都是0??
xqhrs232 2009-11-19
  • 打赏
  • 举报
回复
关注这样的底层问题.
博说医械研发 2009-11-19
  • 打赏
  • 举报
回复
EBOOT在下载NK.BIN并写入到FLASH中后会根据新的NK更新TOC,并将TOC的内容写到FLASH中去,下次开机的时候会从TOC中读取NK的启动地址等信息,既然第一次可以启动OS,说明更新TOC那步是正确的。
所以你要查看一下写完NK后写TOC到FLASH是否正确,再看下启动的时候读取的TOC是否正确。
xuefeng_baggio 2009-11-19
  • 打赏
  • 举报
回复
谢谢韦伯大哥帮助!今天eboot进展的很好 已经可以下载nk.bin了。 并且在下载后可以正常OEMLanch到OAL层!不错!鼓励下自己!呵呵!但是问题还是没有解决!我不知道有没有朋友想我这样傻到拿个官方的直接来改!纯属学习 !现在我的nk下载后如果复位一次就出问题了!调试信息如下:
INFO : Ep0Handler
0 seconds.
Launching image from boot media ...
OEMPlatformInit: IMAGE_TYPE_RAMIMAGE
+ReadOSImageFromBootMedia
ReadOSImageFromBootMedia: ERROR_INVALID_ADDRESS: (address=0x0, sectors=0x0, launch address=0x0)...
OEMPlatformInit ERROR: Failed to load kernel region into RAM.
也就是说复位后可以知道是IMAGE_TYPE_RAMIMAGE 但是读os镜像时出问题了??

具体如下
在ReadOSImageFromBootMedia()函数中
if ( !OEMVerifyMemory(g_pTOC->id[g_dwTocEntry].dwLoadAddress, sizeof(DWORD)) ||
!OEMVerifyMemory(g_pTOC->id[g_dwTocEntry].dwJumpAddress, sizeof(DWORD)) ||
!g_pTOC->id[g_dwTocEntry].dwTtlSectors )
{
OALMSG(TRUE, (TEXT("ReadOSImageFromBootMedia: ERROR_INVALID_ADDRESS: (address=0x%x, sectors=0x%x, launch address=0x%x)...\r\n"),
g_pTOC->id[g_dwTocEntry].dwLoadAddress, g_pTOC->id[g_dwTocEntry].dwTtlSectors, g_pTOC->id[g_dwTocEntry].dwJumpAddress));
return FALSE;
}

很奇怪的调试发现这里的g_pTOC->id[g_dwTocEntry].dwLoadAddress和g_pTOC->id[g_dwTocEntry].dwJumpAddress读出来都是0 所以就挂了??还有大侠研究这里 这是怎么回事呀??似乎是TOC出问题了!但是我调试发现TOC在下载时没有问题呀??为什么复位后就出问题呢???
博说医械研发 2009-11-19
  • 打赏
  • 举报
回复
好的,呵呵
xuefeng_baggio 2009-11-19
  • 打赏
  • 举报
回复
首先我要珍重的感谢下韦伯大哥的指导!你的帮助使用有了很大的信心!嘎嘎!我很高兴地宣布搞定了!确实是block有关系!PAGES_PER_BLOCK这个宏我刚开始定义成32了!
#define SECTOR_TO_BLOCK(sector) ((sector) >> 8 )这个刚开始也错了!我拿的人家bsp改的 这里都有问题!现在改好了!可以下载nk.bin了。复位后也能正常启动os了。呵呵 这是阶段性的成功!下面还有更困难的东西在等我!希望韦伯兄一直能关注下!
博说医械研发 2009-11-19
  • 打赏
  • 举报
回复
Erasing flash block这个在写OS到FLASH之前是必须要做的,NAND FLASH是要先擦除再写的,问题是目前擦除的地址出现了问题,你详细看下WriteOSImageToBootMedia函数的内容,这里应该是引用了一个参数指明了NK的起始BLOCK和总共多少个BLOCK,从NK的BLOCK开始擦,你目前应该是连同EBOOT的BLOCK一起擦了。改些参数就可以了
xuefeng_baggio 2009-11-19
  • 打赏
  • 举报
回复
真粗心这个都没看出了!现在可以了 但是新问题不断呀?不知道这个bsp的bootloader怎么这么多问题??现在可以写WriteOSImageToBootMedia()但是每次都去Erasing flash block(s)我没让他去擦flash呀?为什么会自己去擦flash呢??更郁闷的是擦完了确实可以跳转到oal层。但是掉电以后nboot都起不来了!!这又是为何呀??好像nand里都给擦干净了!我跟了下发现这里程序都是public里的??我不知道 是不是我的eboot哪里没有配置好吗??请韦伯大哥指点!都不好意思了!呵呵!


+WriteOSImageToBootMedia: g_dwTocEntry =1, ImageStart: 0x80200000, ImageLength: 0xe4617c, LaunchAddr:0x8022daf8
INFO: OEMLaunch: Found chain extenstion: '' @ 0x80200000
Writing single region/multi-region update, dwBINFSPartLength: 14967164
IsValidMBR: MBR sector = 0x240
OpenPartition: Invalid MBR. Formatting flash.
Enter LowLevelFormat [0x0, 0xfff].
Erasing flash block(s) [0x0, 0xfff] (please wait): EraseBlocks: found a bad block (0x0) - skipping...
EraseBlocks: found a bad block (0x1) - skipping...
EraseBlocks: found a bad block (0x2) - skipping...
EraseBlocks: found a bad block (0x3) - skipping...
博说医械研发 2009-11-18
  • 打赏
  • 举报
回复
如果USB下载代码不是你BSP自带的而是你自己写的你就要注重一点这里了。
通过DNW下载吗?
有几点需要注意,DNW通过USB下载后,下载到了什么位置?各个版本的DNW不同,有些版本需要自己设置,有些版本帮你设置好了。
所以在你的USB代码部分要看一下你接收到地址数据的地址是什么,第一次接到数据的时候打印一下数据地址及前几十字节的数据(前几个字节可能不是BIN文件的数据,而是DNW下载附加的数据,这点需要注意一下;另外如果打印时间过长可能会影响USB数据通讯,如果这样可以全部接收完再打印或者通过AXD查看)。
blcommon.c是通过EBOOT的OEMReadData()函数来读取你的BIN文件数据的,所以你也要查看一下这里的代码,也可以加些打印信息,看看数据地址及数据内容。
xuefeng_baggio 2009-11-18
  • 打赏
  • 举报
回复
我的nk.bin好像和你的确是不一样呀??
00000000 42 30 30 30 46 46 0A 00 00 20 80 7c 61 E4 00 00
00000010 00 20 00 31 00 38 00 3A 00 33 00 38 00 3A 00 33
这是 前两行。
42 30 30 30 46 46 0A这个是开始的"B000FF\x0A"?
00 00 20 80 这个是nk.bin的起始地址??
7c 61 E4 00 这个是nk.bin的大小?
这些应该都是对的呀??韦伯大哥请你明示这是什么原因呢?我查了我的usb部分 都是和网上一样的?不过我现在严重怀疑网上代码?因为usb中断是我自己实现的!还有就是通过dnw下载时有个下载地址 应该是内存地址 我想知道这个地址是nk镜像的起始地址80200000还是80000000???
博说医械研发 2009-11-18
  • 打赏
  • 举报
回复
OEMMultiBINNotify的参数也是blcommon.c中的代码送给他的参数,所以你还是要看对bin文件的解析
ProgrammerNO1 2009-11-18
  • 打赏
  • 举报
回复
友情帮顶~~~
xuefeng_baggio 2009-11-18
  • 打赏
  • 举报
回复
没人顶了??还是没有解决呢?
博说医械研发 2009-11-18
  • 打赏
  • 举报
回复
不好意思,我这边暂时也东西要调试,没时间帮你具体看代码。

你把blcommon.c、EBOOT中的那些OEMXXXXXXX()函数,再加上USB部分的代码一起看下,打印信息对调试是很有帮助的,能加的地方尽量都加一些,包括打印各函数的参数值,各数据的地址等,自己调试出来记忆更深刻!
xuefeng_baggio 2009-11-18
  • 打赏
  • 举报
回复
韦伯大哥我18楼那个问题可能是下载问题的根本原因!可惜下午开发板出了问题。下载eboot起不来了?从理论上分析我觉得eboot的UbootReadData()中 应该有对这个下载数据进行分析的程序。但是我没找到?还有这个下载流程 我终于看明白了?现在问题可能就是UbootReadData()函数的这弄错了?但是我在网上下载的bsp中 只要带usb下载的eboot这边代码都是一样的?所以纳闷了!!您能帮我看看嘛》》?
博说医械研发 2009-11-18
  • 打赏
  • 举报
回复
目前楼主还没到启动的地方,下载更新OS还没成功。
xuefeng_baggio 2009-11-18
  • 打赏
  • 举报
回复
GM请明示!我内存表:
DCD 0x80000000, 0x30000000, 64 ; 32 MB DRAM BANK 6 DCD 0x84000000, 0x10000000, 32 ; nGCS2: PCMCIA/PCCARD
DCD 0x86000000, 0x18000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 3
DCD 0x88000000, 0x20000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 4
DCD 0x8A000000, 0x28000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 5
DCD 0x8C000000, 0x08000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 1
DCD 0x90800000, 0x48000000, 1 ; Memory control register

我现在搞不清楚那个dnw下载工具中下载地址到底是哪个?0x30000000还是0x30200000?还是什么??这里应该是下载nk的地址吗??GM请回答!谢谢!
加载更多回复(14)

19,502

社区成员

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

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