社区
嵌入开发(WinCE)
帖子详情
关于eboot的几个问题
kaios1
2009-01-06 05:30:40
1、为什么我编译成功的eboot.bin烧写到nor中不起作用?害得我每次都的烧写eboot.nb0,但是板商提供的bootloader是.bin格式的
怎么才能让.bin格式的eboot在nor中运行起来?是在boot.bib中有一些选项吗?
2、我编译的eboot有256k太大了,每次烧写都得20几分钟,怎么才能把eboot做的小一点?(板商的才78k,而且还带logo图片)
通过修改boot.bib可以改eboot的大小,但是怎么知道有效数据是多大呢?
...全文
278
15
打赏
收藏
关于eboot的几个问题
1、为什么我编译成功的eboot.bin烧写到nor中不起作用?害得我每次都的烧写eboot.nb0,但是板商提供的bootloader是.bin格式的 怎么才能让.bin格式的eboot在nor中运行起来?是在boot.bib中有一些选项吗? 2、我编译的eboot有256k太大了,每次烧写都得20几分钟,怎么才能把eboot做的小一点?(板商的才78k,而且还带logo图片) 通过修改boot.bib可以改eboot的大小,但是怎么知道有效数据是多大呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
chuchenseu
2009-05-07
打赏
举报
回复
BOOL OEMWriteFlash(DWORD dwStartAddr, DWORD dwLength); 关于这个函数,我在网上找到了微软通用的源代码
BOOL OEMWriteFlash(DWORD dwImageStart, DWORD dwImageLength)
{
DWORD dwFlashAddr, dwExtraBytes = 0;
LPBYTE pbCache = NULL;
UCHAR nNumBlocks = 0;
//确认起始地址和长度都在Flash区域内
if (!OEMIsFlashAddr(dwImageStart) || !OEMIsFlashAddr(dwImageStart + dwImageLength - 1))
{
return(FALSE);
}
//确认起始地址是Block字节对齐的
if (dwImageStart % FLASH_BLOCK_SIZE)
{
return(FALSE);
}
//计算要写入的block数量
nNumBlocks = (UCHAR)(dwImageLength / FLASH_BLOCK_SIZE);
dwExtraBytes = (dwImageLength % FLASH_BLOCK_SIZE);
dwFlashAddr = dwImageStart;
pbCache = OEMMapMemAddr (dwImageStart, dwFlashAddr);
//写Flash
while(nNumBlocks)
{
if (CFI_Write_Block((unsigned32*)dwFlashAddr, (unsigned32*)pbCache, FLASH_BLOCK_SIZE, NULL) != PASS)
{
EdbgOutputDebugString("ERROR: OEMWriteFlash - unable to write to block (block address=0x%x).\r\n", dwFlashAddr);
return(FALSE);
}
dwFlashAddr += FLASH_BLOCK_SIZE;
pbCache = OEMMapMemAddr (dwImageStart, dwFlashAddr);
--nNumBlocks;
}
//将额外的数据写入Flash中
if (dwExtraBytes)
{
if (CFI_Write_Block((unsigned32*)dwFlashAddr, (unsigned32*)pbCache, dwExtraBytes, NULL) != PASS)
{
EdbgOutputDebugString("ERROR: OEMWriteFlash - unable to write to block (block address=0x%x).\r\n", dwFlashAddr);
return(FALSE);
}
}
return(TRUE);
}
但关键是这里面的函数CFI_Write_Block不知道怎么实现啊,BSP里面没有这个函数,请问各位高手这个问题怎么解决啊?老师现在天天催项目进度,都逼死了。。谢谢!
wdmoona
2009-01-07
打赏
举报
回复
[Quote=引用 8 楼 shuiyan 的回复:]
当NOR里是空的时候,需要用JTAG烧eboot.nb0。这个时候eboot.nb0就是你在bib里配置的大小,实际有效数据可能就100多KB,后续的都补0。
当NOR里面已经有可运行的eboot时,通常用串口、USB口、网口下载eboot.bin进行eboot的更新升级。
这是开发板为什么提供bin的原因,因为开发板原来里面肯定有可运行的eboot了。
你的eboot既然可以下载系统镜像了,那么肯定可以下载eboot.bin的,你没试过吗?
[/Quote]
醍醐灌顶的感觉,呵呵,,
该怎么表达谢意呢? :)
scems
2009-01-07
打赏
举报
回复
ding
success000
2009-01-07
打赏
举报
回复
ding
gooogleman
2009-01-07
打赏
举报
回复
我烧写内核都这么快,烧写bootloader就是几秒钟的事情。
——————————————————————————————
我使用JLINK+USB
Seven_zhangxw
2009-01-06
打赏
举报
回复
[Quote=引用 9 楼 kaios1 的回复:]
引用 8 楼 shuiyan 的回复:
当NOR里是空的时候,需要用JTAG烧eboot.nb0。这个时候eboot.nb0就是你在bib里配置的大小,实际有效数据可能就100多KB,后续的都补0。
当NOR里面已经有可运行的eboot时,通常用串口、USB口、网口下载eboot.bin进行eboot的更新升级。
这是开发板为什么提供bin的原因,因为开发板原来里面肯定有可运行的eboot了。
你的eboot既然可以下载系统镜像了,那么肯定可以下载eboot.bin的,你没试过吗?…
[/Quote]
是对nand操作。。。
慢慢研究吧,大家都是从这里成长的。
kaios1
2009-01-06
打赏
举报
回复
[Quote=引用 8 楼 shuiyan 的回复:]
当NOR里是空的时候,需要用JTAG烧eboot.nb0。这个时候eboot.nb0就是你在bib里配置的大小,实际有效数据可能就100多KB,后续的都补0。
当NOR里面已经有可运行的eboot时,通常用串口、USB口、网口下载eboot.bin进行eboot的更新升级。
这是开发板为什么提供bin的原因,因为开发板原来里面肯定有可运行的eboot了。
你的eboot既然可以下载系统镜像了,那么肯定可以下载eboot.bin的,你没试过吗?
[/Quote]
没试过,我现在的情况相当于移植一个eboot吧,eboot的功能都要自己实现。你说的这个eboot刷新的功能
我也知道,但我还没实现呢。现在正在看对flash的操作这部分。
flash.c中的代码是对nor的操作还是对nand的操作?比如这些函数:
BOOL OEMIsFlashAddr(DWORD dwAddr);
LPBYTE OEMMapMemAddr(DWORD dwImageStart, DWORD dwAddr);
BOOL OEMStartEraseFlash(DWORD dwStartAddr, DWORD dwLength);
void OEMContinueEraseFlash(void);
BOOL OEMFinishEraseFlash(void);
BOOL OEMWriteFlash(DWORD dwStartAddr, DWORD dwLength);
我感觉是对nor的操作,因为里面的函数都会对地址范围进行判断(OEMIsFlashAddr),而nand好像不统一编址
功能相当于硬盘,那么nand是怎么操作的呢?
在网上也下了个2440的bsp,但是这些函数除了OEMMapMemAddr其他都是空的。
shuiyan
2009-01-06
打赏
举报
回复
当NOR里是空的时候,需要用JTAG烧eboot.nb0。这个时候eboot.nb0就是你在bib里配置的大小,实际有效数据可能就100多KB,后续的都补0。
当NOR里面已经有可运行的eboot时,通常用串口、USB口、网口下载eboot.bin进行eboot的更新升级。
这是开发板为什么提供bin的原因,因为开发板原来里面肯定有可运行的eboot了。
你的eboot既然可以下载系统镜像了,那么肯定可以下载eboot.bin的,你没试过吗?
kaios1
2009-01-06
打赏
举报
回复
[Quote=引用 4 楼 gooogleman 的回复:]
__还是我用ADS bootloader好,爆快,30M烧写不超过两分钟
PB下不怎么好的。
[/Quote]
你这是烧内核吧?30M?
我说的是用jtag烧写eboot,唉,你什么时候看贴能仔细点啊
kaios1
2009-01-06
打赏
举报
回复
[Quote=引用 2 楼 hzdysymbol 的回复:]
LS正解
要把Eboot做小只需要把不需要的功能全都拿掉,以前经常会做一版最精简的bootloader,专门用做烧Jtag用的
你的eboot还不支持自更新吗?
[/Quote]
呵呵,我的eboot连下载内核的功能还没实现呢。现在主要是文件太大,调试太不方便了,每次烧写都费很长时间。
前一段下载内核的时候总是下载到52%就停了,后来发现是内存配置有冲突,现在倒是可以下到SDRAM里了,不过在擦除
nand的时候,又不停地提示坏块,无法擦除。硬件肯定是没有问题的,因为我用他们提供的bootloader擦一遍nand就
可以下载了。但是用我做的这个eboot又会出现那个不停地提示坏块而无法下载的情况。估计是写nand的代码有问题,
这几天正在研究呢,也没什么头绪,前辈给点提示了,呵呵!
kaios1
2009-01-06
打赏
举报
回复
[Quote=引用 1 楼 yashi 的回复:]
1.烧nb0文件是对的,pb编译出来的bin文件是带有特定格式的,直接用JTAG烧录是无法正确运行的。至于你说板商提供的bootloader是bin格式的问题,那是因为它不是用pb编译的,这个bin和pb生成的bin格式是不一样的。你把这个bin名称修改为nb0烧录下去也不会有问题,关键是文件格式,而不是名称。
2.你先看看eboot.bin文件有多大,这个基本上是真实的文件大小;eboot.nb0是在bib中设定了大小的,其余部分用0来补齐,。
[/Quote]
多谢,基本明白了!
gooogleman
2009-01-06
打赏
举报
回复
[Quote=引用楼主 kaios1 的帖子:]
1、为什么我编译成功的eboot.bin烧写到nor中不起作用?害得我每次都的烧写eboot.nb0,但是板商提供的bootloader是.bin格式的
怎么才能让.bin格式的eboot在nor中运行起来?是在boot.bib中有一些选项吗?
2、我编译的eboot有256k太大了,每次烧写都得20几分钟,怎么才能把eboot做的小一点?(板商的才78k,而且还带logo图片)
通过修改boot.bib可以改eboot的大小,但是怎么知道有效数据是多大呢?
[/Quote]
__还是我用ADS bootloader好,爆快,30M烧写不超过两分钟
PB下不怎么好的。
xqhrs232
2009-01-06
打赏
举报
回复
eboot.bin文件大小就是有效的大小
hzdysymbol
2009-01-06
打赏
举报
回复
LS正解
要把Eboot做小只需要把不需要的功能全都拿掉,以前经常会做一版最精简的bootloader,专门用做烧Jtag用的
你的eboot还不支持自更新吗?
yashi
2009-01-06
打赏
举报
回复
1.烧nb0文件是对的,pb编译出来的bin文件是带有特定格式的,直接用JTAG烧录是无法正确运行的。至于你说板商提供的bootloader是bin格式的问题,那是因为它不是用pb编译的,这个bin和pb生成的bin格式是不一样的。你把这个bin名称修改为nb0烧录下去也不会有问题,关键是文件格式,而不是名称。
2.你先看看eboot.bin文件有多大,这个基本上是真实的文件大小;eboot.nb0是在bib中设定了大小的,其余部分用0来补齐,。
WinCE6.0的E
BOOT
概要
本文详细介绍了WinCE6.0在硬件设备上的移植过程,特别是E
BOOT
(通过Ethernet下载操作系统的
BOOT
LOADER)的角色和功能。E
BOOT
负责初始化MCU、调用
Boot
loaderMain()及相关函数,最终启动WinCE操作系统。E
BOOT
可以从NOR Flash或NAND Flash引导,根据硬件设计选择不同的引导方式。此外,文章还提到了E
BOOT
的内存配置和自加载过程,并指出E
BOOT
可扩展功能,如初始化LCD和显示进度。
WINCE E
BOOT
的配置方法
本文分享了使用E
BOOT
作为WinCE调试工具的经验,包括如何修改E
BOOT
支持RTL8139网卡、编译E
BOOT
、配置PB环境、启动WinCE及连接设备等步骤。
E
BOOT
架构及流程
本文介绍了E
BOOT
的架构及工作流程,详细说明了各组件的功能,如BLCOMMON负责内存分配与NK.bin文件验证;OEMCode提供硬件接口支持;E
boot
实现网络下载服务等。此外还阐述了E
BOOT
的运行过程,包括初始化、下载NK.bin及启动流程。
E
boot
软件框架
本文详细介绍了E
boot
的工作原理及其组成模块,包括BLCOMMON、E
boot
特定代码、存储管理及EDBG驱动等内容。E
boot
是一种通过以太网下载系统镜像的
Boot
loader,适用于嵌入式系统的开发。
wince下E
BOOT
详解
本文详细介绍了如何为特定硬件设备定制WinCE6.0操作系统,包括创建板级支持包(BSP)、系统设计(OS Design)及运行时映像文件(Rum-time Image)的过程。重点讲解了E
BOOT
的功能及其实现步骤。
嵌入开发(WinCE)
19,523
社区成员
41,565
社区内容
发帖
与我相关
我的任务
嵌入开发(WinCE)
硬件/嵌入开发 嵌入开发(WinCE)
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章