Chinaunix首页 | 论坛 | 博客
  • 博客访问: 152422
  • 博文数量: 43
  • 博客积分: 3000
  • 博客等级: 中校
  • 技术积分: 601
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-22 17:24
文章分类
文章存档

2010年(43)

我的朋友

分类: LINUX

2010-12-03 19:31:51

转载  关于EBoot和NBoot及.bin文件和.nb0文件的差别

关于EBoot和NBoot的区别:

        S3C2410处理器支持将启动代码存储在NAND Flash中。为了实现这一功能,2410配备了一个名为“Steppingstone”的内部SRAM。在启动时,NAND Flash中第一个4K字节的内容将被加载到Steppingstone中并执行。这个工作由MCU主动完成,而我们只需将NAND Flash配置为Auto Boot模式即可。

       一般来说,启动代码会拷贝存储在NAND Flash中的内容至SDRAM中。在使用ECC校验时,NAND Flash中数据的有效性将被确认。在完成拷贝的工作后,启动代码将跳转到已加载到SDRAM中的主程序中,这时启动代码的使命完成,MCU由主程序来控制。

       WinCE操作系统从文件的组成来看一般分为两部分:BOOTLOADERNK.bin。在WinCE中,BOOTLOADER一般为EBOOT。它的主要功能是初始化硬件设备,主要包括CPU内部的相关控制器、内存、网络、串口甚至USB口和LCD。在初始化完成后,它将通过网络或USB从外部下载NK.bin,或从本地Flash中加载NK.bin并执行,从而启动WinCE操作系统。可以看到Eboot虽然是启动代码,但它得完成相当多的工作,最终的映像文件也将超过4K。所以,我们不能直接将Eboot存放在NAND Flash的第一个4K字节中。我们需要一个更小的启动代码,这就是通常所说的NBOOT(NAND BOOT)

       通过上面的介绍,我们知道了NBOOT在整个系统中扮演的角色,它负责将EBOOT加载到内存并运行。在EBOOT开始执行后,NBOOT就退出了历史的舞台,事实上也不再有上场的机会。

       NBOOT的代码实现中,我们必须完成以下几个部分。

1.初始化CPU内部相关控制器,如设置GPIO,关闭Watch Dog,关闭中断,设置系统时钟。

2.初始化内存。

3.初始化串口,主要用来输出调试信息。

4.初始化NAND Flash,因为在MCU启动时默认是Auto Boot模式,为了从NAND Flash中读取EBOOT,需要将其配置成 NAND Flash Mode

5.读取NAND Flash中的EBOOT映像文件,并放在内存指定的位置,这个地址是跟EBOOT有关,介绍EBOOT时再详细说明。

6.完成读取之后,跳转到EBOOT的起始位置,执行EBOOT代码。

一般来说,前面两个功能在startup.s中实现,WinCE6.0下可以参考文件C:"WINCE600"PLATFORM"DEVICEEMULATOR"SRC"BOOTLOADER"EBOOT"startup.s的相关代码。后面四个功能可在main.c中实现。总之,在实现必备功能的情况下,尽可能减少代码量,以将最后的NBOOT映像文件控制在4K以内。

NBOOT的编译环境一般有两种,ADS1.2(或RVDS)、Platform Builder。用ADS1.2编译NBOOT是比较方便的,需要注意的就是RO BaseRW Base的设置,RO Base必须设置为0x0。否则,系统启动时NBOOT将不被运行。在Post-Linker中选择ARM from ELF,在Linker——ARM fromELF——Output Format中选择Plain Binary,这样,编译完成后最终生成NBoot.bin。该文件就可以固化在NAND Flash的第0BLOCK中。Platform Builder 6.0是作为VS2005的插件来用的,所以,我们现在也可以用VS2005来编译NBOOT,这样就免得再安装ADSRVDS等软件。用VS2005来编译NBOOT也有两种方法,第一种跟编译EBOOT映像文件类似,第二种是自己写makefile文件,然后用命令行的方式调用ARM编译器来编译。两种方法各有优点,第一种方法在编译OS时,会自动编译生成映像,而第二种方法可由ADS下的程序直接移植过来,不过,要写好makefile文件是相当困难的事情。一般还是少用为好。

----------------------------------------------------------

.bin文件和.nb0文件的差别

eboot.nb0
eboot.bin
nk.nb0
nk.bin

.bin文件和.nb0文件的差别:

.nb0是可以直接烧到FLASH/ROM中的,是代码镜像,可以直接跳转到其入口执行。 
.bin是Microsoft binary image格式的文件,必须按其格式定义解开到其指定的地址空间的位置才能执行。

两个都是CE的镜像,通过串口直接下载用nb0,pb下载用bin,nb0文件要大一些。

nb0是非压缩的数据,里面的数据是实际的NK展开以后在内存里面的数
bin是有压缩的数据,里面的数据是压缩以后类似于成块形的数据,被loader拷贝到内存以后没有区别。

阅读(1864) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~