学习嵌入式系统的经验总结及教学大纲。 (一些参考资料,请初学者自行查找)没有链接的,请大家见谅
1、
2、
3、
4、
5、
6、
7、
8、
9、
推荐用书:
通用版:Windows CE实用开发技术 (第二版)
应用软件开发:Windows CE嵌入式高级编程及其实例详解
驱动开发:Windows CE工程实践完全解析
每一章的细化介绍及参考出处
1、
参考课件第一章的第一、二节。
2、
参考课件中第一章的第三节。
主要参考飞凌OK6410-A开发板WINCE用户手册第一章及视频讲解WinCE-01wince概述
我的经验是在这个阶段中不适合去深入学习WINCE系统的结构等深度的知识。只是简单的对WINCE有个认知,有个浅度的认识即可。对其历史和现在的应用和未来的展望和定位做出详细的了解。
3、
这一部分首先需要生产arm11芯片的厂商,及做开发板的厂商,目前有几个主流的做ARM11嵌入式开发板的厂商有哪些。这些资料主要参考(http://blog.youkuaiyun.com/qihuanfengyun/article/details/6270308,)。介绍我们使用的飞凌OK6410的开发板的特点及其资源,还有这款ARM11的特点及现代产品中的应用等。主要参考资料为OK6410的开发板硬件手册。
了解了硬件资源后,进行的是WINCE的用户体验,运行一些软件及安装一些软件来更一层的了解系统,感受系统,学会使用系统。(主要参考资料为OK6410开发板WINCE用户手册第二章)。
烧写镜像文件的认识。
Bootloader(又为EBOOT,UBOOT等):(参考资料有Windows CE实用开发技术 第2版)。http://tech.ddvip.com/2008-10/122386574977161.html 。
Bootloader的概念就是一个用于引导的loader,在系统上电的时候最先被运行,然后对硬件平台做最基本的初始化,最后把操作系统加载起来。不同的嵌入式操作系统都有自己的Bootloader,但是本质功能都是一样的。
在WinCE中用的最多的就是EBOOT,是一个基于网络的Bootloader,而且可以根据需要带有命令行菜单功能,网络调试功能以及文件系统的相关功能。在这里我只谈ARM平台的引导,因为其他架构的CPU我没用过,就不吹牛了。一般基于不同的硬件设计,会有不同的引导方式:
NORFlash Boot:
一般ARM处理器的片选0都会接有NORFlash,这样在ARM上电以后,会从0地址开始执行程序,也就是从NORFlash的0地址开始执行。所以把EBOOT烧到NORFlash的0地址开始的地方,这样在上电以后,EBOOT开始执行,可以在NORFlash里面执行,也可以自拷贝到SDRAM中执行。最后加载WinCE image并运行。
NANDFlash Boot with EBOOT:
由于NORFlash容量小,价格贵,现在很多ARM处理器支持NandFlash引导。不同厂家的处理器对Nandflash的引导略有区别,具体要看datasheet。但是本质就是先从Nandflash中读出一个小的Loader来运行,这个Loader再从Nandflash中加载EBOOT到SDRAM中运行,最后EBOOT加载WinCE image,就是NK.bin。
NANDFlash Boot without EBOOT:
如果在NandFlash引导的时候不需要EBOOT,也可以不用EBOOT。这样就是系统启动后从Nandflash中加载一个小的Loader,小的Loader对硬件系统作基本的初始化,然后直接加载WinCE image,一般应该是NK.nb0,然后运行。
这里来说一下NK.bin与NK.nb0,两个不同的WinCE image。
NK.nb0:就是一个可以直接运行的WinCE映像文件,直接拷贝到SDRAM中就可以运行。
NK.bin:被称为Windows CE binary image data format文件格式,是一种包含了多个独立纪录(Section)的二进制文件。在加载的时候,需要分别加载,不同的Section加载到不同的地方。所以NK.bin需要Bootloader进行解释性加载。但是他的Size会比NK.nb0小。可以使用viewbin命令查询NK.bin中的纪录信息。
viewbin –rec nk.bin
前面已经讲过了一般系统会使用到的引导方式,下面介绍一下EBOOT。在WinCE中EBOOT一个作用可以加载WinCE image,还可以通过网络配合Platform Builder下载WinCE image进行调试。在开发一个新的BSP的时候,首先会基于一个相似的平台的BSP进行克隆,然后要做的就是要开发和调试EBOOT了,EBOOT的架构如图:
BLCOMMON:相当于EBOOT的一个基本框架,主要完成bootloader相关内存的分配,解析NK.bin文件并进行效验,初始化平台,通过网络下载image等功能。
OEM Code:主要是基于硬件平台,为BLCOMMON提供相应的接口函数,帮助完成相应的功能。
Eboot:一个小的网络协议栈,为网络下载image提供DHCP,TFTP,UDP等网络服务功能。
Network Driver:硬件平台的网络驱动部分,支持上层的网络功能。
Bootpart:为Flash设备提供分区功能,bootloader可以创建一个BinFS分区和一个文件系统分区。还可以用它来创建一个引导分区用来存放引导参数。
Flash Memory:硬件平台的Flash驱动。
先说下.bin和nb0(x)文件的差别:
两个都是CE的镜像,通过串口直接下载用nb0,pb下载用bin,nb0文件要大一些。
.nb0是可以直接烧到FLASH/ROM中的,是代码镜像,可以直接跳转到其入口执行。
nb0是非压缩的数据,里面的数据是实际的NK展开以后在内存里面的数
.bin是Microsoft binary image格式的文件,必须按其格式定义解开到其指定的地址空间的位置才能执行。
bin是有压缩的数据,里面的数据是压缩以后类似于成块形的数据,被loader拷贝到内存以后没有区别。
常见的Windows CE运行时映像有以bin和nb0为扩展名的两种格式。
BIN文件是默认的Windows CE运行时映像格式。它按照Section组织文件的内容,每个Section都有自己的起始地址,长度和校验和。BIN文件不能直接被执行,必须被按照一定的格式解开到内存里才能执行。
NBx(有可能是NB0,NB1……根据配置而定)文件是可以被烧进Flash ROM中的按