WINCE在ARM平台的移植及驱动技术详解

wince操作系统简介 wince操作系统是通用型的嵌入式操作系统,它是一个开放的、可升级的32位嵌入式操作系统,是基于掌上型电脑类的电子设备操作系统,它是精简的windows 95,windowsce的图形用户界面相当出色。它1996年开始发布windows ce 1.0版本,2004年7月发布了windows ce .net 5.0版本,目前用得最多的是windowsce .net 4.2版本,其发展速度也是很快的,功能_上自不必描述,它的主要应用领域有pda市场、ppc、smartphone、 工业控制、医疗等。
操作系统移植的原因 为了更快的适应市场需求,在实际开发过程中,我们更倾向于移植操作系统而不是重新开发操作系统。这样不但可以节省时间,还能大大提高开发效率。
由于嵌入式系统是一个软硬件紧密结合的系统,因此操作系统移植包含两个层面上的工作:一个层面是cpu级的,另一个层面是板级的。由于wince操作系统几乎完全是用c语言编写的,所以可移植到众多的32位微处理器。上。这其中包括arm、x86、mips 和sh等, 而且cpu级的移植通常由微软或芯片制造商来完成,这会极大地减轻oem厂商开发过程中移植操作系统的工作量,但板级层面的移植则还是需要由oem厂商来完成的。
一般来说,一个wince系统包括四层结构:应用程序、wince内核映像、板级支持包(bsp)、硬件平台。而基本软件平台则主要由wince系统内核映像(os image)和板卡支持包(bsp) 两部分组成。因为wince系统是一个软硬件紧密结合的系统,因此即使cpu处理器相同,但是如果开发板上的外围硬件不相同, 这个时候还是需要修改bsp来完成一个新的bsp。 因此换句话说,就是wince 的移植过程主要是改写bsp的过程。
嵌入式os负责嵌入式系统全部软、硬件资源的分配、调度,控制和协调各部件的工作,与普通os相比,嵌入式os在系统实时高效性、硬件依赖性、软件固化及应用的专用性方面具有较为突出的特点。
wince在arm平台的移植及驱动技术 1、启励程序bootloader的移植步骤
bootloader就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。在嵌入式系统中,通常并没有像bios那样的固件程序(有的嵌入式cpu也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由bootloader来完成。
修改bootloader是移植wince系统第一步,也是关键的一步。只有得到一个稳定工作的启动程序,才能够进-步完成wince bsp的移植。bootloader主要用来管理目标平台的启动过程,它是一段单独的程序代码,通过这段小程序可以初始化硬件设备、建立内存空间的映射图和下载操作系统的映像文件等,从而将系统的软硬件环境带到一个合适的状态,它- -般存放于目标平台的非易失存储介质中, 如rom或flash。
一般来说,对于bootloader的功能,不同的场合区别很大。比如,在桌面windows版的pc硬件平台,上,由于硬件启动根本就不通过bootloader (而是通过bios),所以bootloader就无需对cpu加电后的初始化做任何工作; 而在嵌入式wince平台上,bootloader 是最先被执行的程序,所以就必须包括加电初始化程序,同时通常bootloader必须包含下载wince映像文档的功能。由于bootloader会涉及到基本的硬件操作,如cpu的结构、指令等,也会又涉及到以太网下载协议和映像文档格式。因此,从零开发实现的话会需要相当长的过程,通常的做法是利用微软为每种类型的cpu提供的某种标准研发板的bootloader例程。
根据我在这次项目移植得到的经验,bootloader 的移植步骤主要是:①是修改相应的dir、source 文件;②是修改makefile.inc;③是修改boot.bib,使其不与config.bib中的内存分配造成冲突;④是改进eboot, 因为eboot烧写nk.bin的时候会查找binfs分区,然后把下载的image烧写到binfs分区。
2、oal的移植步骤 oal的全称是oemadaption layer,即原始设备制造商适配层。它是位于windows ce内核和目标硬件平台之间的一个代码层,oal主要负责windowsce与硬件通信,它与cpu、中断、内存、时钟和调试口等核心设备相关,也是oal各个模块代码被编译后(.lib) 和其它内核库链接到一一起形成windows ce的内核可执行文档nk.exe的关键。简单的说,oal就是用来屏蔽cpu平台的细节和抽象硬件功能,以实现操作系统内核的可移植性。
从逻辑结构上看,oal位于wince操作系统的内核与硬件之间,是连接wince系统与硬件的枢纽;从功能上看,oal颇似桌面pc.上的bios,具有初始化设备、引导操作系统以及抽象硬件功能等作用。但与b10s不同的是,0al隶属于操作系统,是操作系统的一部分。在wince6.0中,oal首先起了穿针引线的作用,这一点可从其启动代码看出来。第二个作用,暴露一些oem函数供kerel调用,具体哪些函数由oemglobal决定。为了方便bsp的升级,6.0基本保留了原来的函数结构。所以,我们可以选择5.0的bsp为参考,将其移植到6.0上来。pb6.0 的安装目录中也包涵一些bsp,其中deviceemulator就是模拟s3c2410平台。所以,我们也可以此为参考。总之,oal代码的来源不是问题。问题是如何快速编译这些代码,并验证其正确性。
下面将介绍快速调试oal的方法。
首先clone一个bsp,命名为2410tiny。如果从5.0的bsp移植,需要修改相应的目录结构,在6.0中不存在cec文件,需要做转换。clone完成后的bsp如下图所示:
其中catalog目录中存放的是2410tiny.pbcxml,它是ce6.0中bsp的组织文件,类似5.0中的cec文件。cesysgen存放了一个makefile文件。
files目录存放了平台对应的配置文件如bib、reg等。这里我们将platform.bib和platform.reg中的内容清空,注意是清空! config.bib 的内容确保准确。
删除src目录下的drivers目录,并修改dirs文件,去掉drivers行。如下图所示:
至此,2410tiny的bsp准备完成,用此bsp定制一个osdesign。在选择模板时选customdevice (第二项),然后直接点击完成,结束向导。进入平台属性页进行设置,如下图所示:
完成后,在catalog items中选中cedb database engine项(我开始没选择该项,结果编译出了一堆错误,将该项选中后,重新编译,就顺利通过了。)点击编译按钮开始编译系统。
等它编译着吧,我们继续往下看。之所以能把src目录下的drivers删除,是因为我们现在还处于调试oal的阶段,可以暂时不考虑drivers。只要有oal和kernel,wince 就能跑起来。从这个角度来说,我觉得oal用来抹平mcu的差异,而drivers则是抹平外围设备的差异。
大概10分钟后,编译完成了,最终生成的nk.bin文件有3m多,如下图所示:
这时,我们可以启动bootloader,完成相关配置后下载该nk.bin文件,如下图所示:
3m多的nk,下载需要14秒左右。由于启用了kitl,所以最终在debugoutput中看到wince启动的相关信息,如下图所示:
现在我们可以用pb6.0的debug工具进行简单调试。先用target control查看系统运行的进程:
可以看到,目前wince6.0只运行了两个进程,nk.exe对应的就是我们的oal.exe!再看看线程和模块的情况:
至此,可以认为wince6.0 的oal已经可以正常工作。
从我在这次项目中得到的经验来看, windows ce安装目录的子目录中都包含有oal的部分源码。oal的移植实现应是在fwxsc1.s. main.c、 flash.c、edeviceinit.c等文件中, 可根据实际需要修改相应的代码。在oal移植过程中,主要是修改这几个函数:修改startup.s函数、修改串口调试函数、修改oeminit函数、修改系统时钟函数和修改中断处理函数等。实际上,大多数情况下开发工程师对oal只要修改即可,甚至无需修改。
3、驱动程序的移植和开发
驱动程序(device drivers)是指能够管理虚拟或者物理设备、协议、服务等的一段软件模块,操作系统是通过驱动程序直接和硬件打交道的。设备驱动程序能为wince提供设备控制功能, 包括: lcd/led/vga/svga显示设备、鼠标、键盘和触摸屏等。根据我在这次项目移植得到的经验,建议设备驱动程序的移植可通过platform builder创建一一个新的平台,然后再根据硬件平台的需要插入和移除驱动。一般来说,需要修改的文件有plaform. bib、platform. reg及驱动程序源代码等。
4、平台文件配置的修改
平台配置文件包括源代码配置文件和操作系统镜像配置文件。源代码配置文件主要是告诉build工具需要用到的路径,包括dirs文件、sources 文件和makefile文件等。操作系统镜像配置文件则主要用于给makeimag工具生成操作系统镜像,包括.bib、.reg、 .dat、 .db等文件。因此,在进行bsp移植的时候,也需要对这些平台配置文件进行适当的修改和变更。
5、移植时需特别注意的地方
很多嵌入式开发实践都证明bsp移植是一个挺复杂、烦琐的过程。因为wince不同版本的bsp包的组织结构是不同的,所以会导致很多链接库无法找到或者是这些库已经被替换、删除,唯一的方法是只有耐心的根据错误提示来一一定位修改。
例如,在移植bootloader时因为bootloader的下载、烧写、启动镜像过程会涉及到内存地址,所以在处理各种入口地址时应该要避免出现差错或内存超出范围,尤其是处理地址冲突时需要特别小心。还有在移植oal时, startup.s以及oeminitdebugserial两个函数需要特别注意,因为它们主要是初始化硬件及串口,系统运行及驱动调试的基础,如果硬件配置以及调试串口有改变,则需要适当的修改

进军无人驾驶!华为已在英国进行路试
苹果弃用的台积电7nm订单将被AMD接手
基于区块链技术打造全新分布式数字身份体系
电流谐波的基本知识
如何维护高精度可编程直流电源?
WINCE在ARM平台的移植及驱动技术详解
引领射频工程师教育,鼎阳科技发布SVA-TB01射频教学套件
UWB定位的优势
RTL8188FTV原理图,RTL8188FTV wifi模块原理图
应用在电源适配器中的GaN/氮化镓
华为mate10:春风十里不如你,我在这里等你
全志h3与全志h8有什么区别
虚拟现实技术的基本特征
疫情后时代,中国MEMS如何破局?(50+院士专家分享)
加州自动驾驶测试进展:谷歌性能遥遥领先 百度还需努力
微波功率晶体管电路及参数分析
Heilind:专业并专注,打造独特的经营模式
微鲸电视43D评测 值不值得买
了解交流异步电机的基本结构与特点
LED驱动电源与灯具品质的关系