关于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的大小,但是怎么知道有效数据是多大呢?
...全文
228 15 打赏 收藏 转发到动态 举报
写回复
用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来补齐,。
本书是深圳市英蓓特信息技术有限公司《嵌入式教学平台EduKit-IV实验丛书》之一,主要基于英蓓特公司目前最新嵌入式教学平台EduKit-IV,搭配核心Xscale PXA270板和其他相关模块,主要介绍嵌入式操作系统Windows CE6.0及其BSP包的开发,应用的开发等。 经历过近几年的嵌入式ARM的推广,一般老师和学生对于嵌入式ARM已经有一定的了解,市面上也存在大量低端的ARM7和ARM9学习板以供课余学习。 本教程主要介绍Windows CE6.0在Xsacle PXA270上的移植,通过从浅入深的介绍,引领学生步入Windows CE6.0开发的大门,整个教程从Windows CE的理论介绍,到BSP的开发、应用程序的设计,贯穿Windows CE学习整个过程。完整的学习本书,学生可以全面的掌握高端多媒体的嵌入式平台的整个开发流程和经验。其中本书还是国内首个把Windows CE架构提升到6.0的书籍,希望给老师和学生带来最新的知识。 本书各章节内容主要安排如下: 第一章:介绍EMBEST EDUKIT-IV嵌入式实验平台的软硬件资源,重点根据硬件接口定义,讲述了实验平台主板及CPU子板的原理、功能及结构。 第二章:讲述嵌入式操作系统Windows CE 6.0开发平台的特点、系统原理,并且根据Windows CE开发实践,介绍了Windows CE设备开发的基本方法。 第三章:讲述嵌入式ARM处理器特点及应用选型,并且介绍了Intel Xscale270处理器的应用接口。 第四章:主要包含了Windows CE工6.0开发的基础实验,包括平台定制,Eboot烧写、映像下载运行等实验,力求引领读者了解Windows CE开发的基本流程。 第五章:主要介绍使用VS2005开发WinCE应用程序,内容涵盖图形、对话框编程,进程、多线程处理,文件的访问与读写,注册表的访问等。 第六章:根据Intel Xscale270的接口资源以及实验平台的硬件配置,介绍基本接口实验,包括简单LED控制、中断、ADC/DAC控制、直流/步进电机等实验,重点引导读者了解Windows CE 6.0驱动开发及应用程序开发。 第七章:本章节包含一些通信接口实验,包括串口、IIC、IIS、USB、UDP、TCP等通信实验。 第八章:本章节包含一些人机接口实验,包括LCD、TSP、DotLED等接口操作实验。 第九章:本章节包含一些高级应用实验,包括GPS、GPRS、蓝牙、摄像头等接口操作实验。 本书可作为电子,通信,自动化,计算机等电类专业嵌入式系统课程实验教学的教材,也可以供嵌入式系统相关工程技术人员参考。

19,504

社区成员

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

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