x86软件移植到arm(WINCE在ARM平台的移植及驱动技术详解)
WinCE操作系统简介WINCE操作系统是一个通用的嵌入式操作系统。它是一个开放的、可升级的32位嵌入式操作系统。它是基于掌上电脑的电子设备操作系统。它是Windows 95的简化版,WindowsCE的图形用户界面相当优秀。它在1996年发布了Windows CE 1.0版和Windows CE。NET 5.0版于2004年7月发布。目前Windows CE。NET 4.2版是应用最广泛的一个,开发速度也很快。没有必要描述它的功能。其主要应用领域是PDA市场、PPC、智能手机、工业控制、医疗等。
操作系统移植的原因为了更快的适应市场需求,在实际开发过程中,我们更倾向于移植操作系统,而不是重新开发。这样不仅可以节省时间,还可以大大提高开发效率。
由于嵌入式系统是一个软硬件紧密结合的系统,操作系统的移植涉及到两个层次的工作:一个层次是CPU层次,另一个层次是板卡层次。WinCE操作系统几乎完全是用C语言编写的,所以可以移植到很多32位微处理器上。走吧。包括ARM,x86、MIPS,SH等。而且CPU级的移植通常是由微软或者芯片厂商来完成的,这将大大减少OEM厂商在开发过程中移植操作系统的工作量,但是板级的移植仍然需要OEM厂商来完成。
一般来说,WinCE系统由四层组成:应用程序、WinCE内核映像、板级支持包(BSP)和硬件平台。基础软件平台主要由WinCE系统内核镜像(OS镜像)和板卡支持包(BSP)组成。因为WinCE系统是一个软硬件紧密结合的系统,即使CPU处理器相同,如果开发板上的外设硬件不同,仍然需要修改BSP来完成一个新的BSP。所以,换句话说,WinCE的迁移过程主要是重写BSP的过程。
嵌入式操作系统负责分配、调度、控制和协调嵌入式系统的所有软硬件资源。与普通操作系统相比,嵌入式操作系统在实时性、硬件依赖性、软件固化性和应用专用性方面有着更加突出的特点。
ARM平台上WINCE移植与驱动技术1、 Bootloader移植步骤
BootLoader是在操作系统内核运行之前运行的小程序。通过这个小程序,我们可以初始化硬件设备,建立内存空间映射,从而使系统的软硬件环境达到合适的状态,为最终调用操作系统内核准备正确的环境。在嵌入式系统中,通常没有BIOS这样的固件程序(有些嵌入式CPU中还嵌入了一个简短的启动程序),所以整个系统的加载和启动任务完全由BootLoader来完成。
Bootloader的修改是移植WinCE系统的第一步,也是关键的一步。只有得到一个稳定的启动程序,才能一步步完成WinCE BSP的迁移。Boot主要用于管理目标平台的启动过程。它是一个独立的程序代码。通过这个小程序,可以初始化硬件设备,建立内存空间的映射,可以引导加载操作系统的镜像文件。因此,可以使系统的软件和硬件环境达到适当的状态,并且可以将其存储在目标平台的非易失性存储介质中,例如ROM或闪存。
一般来说,Bootloader的功能在不同的情况下差别很大。比如在桌面Windows PC硬件平台上,由于硬件启动根本不经过Bootloader(而是通过BIOS),开机后Bootloader不需要做任何事情来初始化CPU在嵌入式WinCE平台上,Bootloader是第一个执行的程序,所以它必须包含上电初始化程序,通常Bootloader必须包含下载WinCE镜像文件的功能。由于Bootloader会涉及到基本的硬件操作,比如CPU结构和指令,所以也会涉及到以太网下载协议和镜像文件格式。所以从无到有的发展需要很长的时间。通常的方法是使用微软为每种类型的CPU提供的标准R&D板的引导程序例程。
根据我在这个项目中的经验,Bootloader移植的主要步骤是:修改对应的dir和源文件;修改makefile.inc修改boot.bib,使其不与config.bib中的内存分配冲突;就是改进eboot,因为eboot在烧NK的时候会查BINFS分区。BIN,然后将下载的映像刻录到BINFS分区。
2、OAL的移植步骤OAL的全称是OEMAdaption Layer,即原始设备制造商适配层。它是WindowsCE内核和目标硬件平台之间的代码层。OAL主要负责Windows CE和硬件之间的通信。它关系到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的方法。
首先克隆一个BSP,命名为2410Tiny。如果是从5.0的BSP移植过来的,需要修改相应的目录结构。6.0没有CEC文件,需要转换。克隆完成后的BSP如下图所示:
CATALOG目录包含2410Tiny.pbcxml,这是CE6.0中BSP的组织文件,类似于5.0中的CEC文件。CESYSGEN存储一个Makefile文件。
FILES目录存储与平台相对应的配置文件,如BIB、REG等。这里我们清空platform.bib和platform.reg的内容,注意是空的!Config.bib的内容保证了准确性。
删除SRC目录中的驱动程序目录,并修改dirs文件以删除驱动程序行。如下图所示:
至此,2410Tiny的BSP准备完成。用这个BSP定制一个OSDesign。选择模板时选择CustomDevice(第2项),然后直接点击Finish结束向导。进入平台属性页进行设置,如下图所示:
完成后,在Catalog Items中选择CEDB数据库引擎项(我一开始没有选择此项,结果编译了一堆错误。选中此项后,重新编译,顺利通过。)单击编译按钮开始编译系统。
等它编译好了,我们继续看。SRC目录下的驱动之所以可以删除,是因为我们还在调试OAL的阶段,所以可以暂时忽略驱动。只要有OAL和内核,WinCE就能运行。从这个角度来说,我觉得OAL是用来抹平MCU的差异,而驱动是用来抹平外设的差异。
大约10分钟后,编译完成,最终的NK.bin文件超过3M,如下图所示:
此时我们可以启动BOOTLOADER,完成相关配置后下载NK.bin文件,如下图所示:
超过3M的NK,下载大概需要14秒。因为启用了KITL,所以最终会在DebugOutput中看到WinCE启动的信息,如下图所示:
现在我们可以使用PB6.0的调试工具进行简单的调试。首先检查目标控制系统运行的流程:
大家可以看到,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,甚至不需要修改OAL。
3、驱动程序的移植和开发
设备驱动程序是指可以管理虚拟或物理设备、协议、服务等的软件模块。操作系统通过驱动程序直接与硬件打交道。设备驱动可以为WinCE提供设备控制功能,包括LCD/LED/VGA/SVGA显示设备、鼠标、键盘和触摸屏等。根据我在这个项目迁移中的经验,建议设备驱动的迁移可以通过Platform Builder创建一个新的平台,然后根据硬件平台的需要插入和移除驱动。一般来说,需要修改的文件包括Plaform。围兜,站台。reg和驱动程序源代码等。
4、平台文件配置的修改
平台配置文件包括源代码配置文件和操作系统映像配置文件。配置文件主要用来告诉构建工具要使用的路径,包括Dirs文件、源文件和Makefile文件。操作系统映像配置文件主要用于为Makeimag工具生成操作系统映像,包括。围兜,注册,dat,db和其他文件。因此,在移植BSP时,也需要对这些平台配置文件进行适当的修改和更改。
5、移植时需要注意的特殊点
许多嵌入式开发实践证明,BSP迁移是一个复杂而繁琐的过程。由于WinCE不同版本BSP包的组织结构不同,很多链接库找不到或者这些库已经被替换或删除。唯一的办法就是耐心定位,按照错误提示逐一修改。
比如移植Bootloader的时候,由于Bootloader的镜像下载、刻录、启动的过程会涉及到内存地址,所以在处理各种入口地址的时候,尤其是处理地址冲突的时候,需要避免出错或者内存超范围。移植OAL时,需要特别注意两个函数,startup.s和OEMInitDebugSerial,因为它们主要是初始化硬件和串口、系统运行和驱动调试的基础。如果硬件配置和调试串口发生变化,需要进行相应的修改。
推荐阅读
- 核能发电的优点及缺点(核能发电是什么变化)
- 世界末日之后中文版软件介绍(世界末日之后中文版)
- 2011进口丰田霸道4000报价 进口丰田霸道4000价格
- 郭晶晶给裁判打分,郭晶晶给裁判打分原因
- 宾得k50 什么电池 宾得k50
- mazdacx30价格_mazda cx-30
- 孙杨无缘东京奥运,孙杨没参加东京奥运吗
- oppo vivo 哪款手机性价比高? oppo性价比最高的手机
- 高频开关电源的工作原理和特点是什么(高频开关电源的工作原理和特点)
- 长安面包车前挡风玻璃多少钱一块? 长安面包车
- 中超联赛排名表,中超联赛排名
- moto手机怎样? moto手机
- UC3842中文资料(内部结构/引脚功能/电气参数/典型应用)
- 郑州美女主播患癌去世,邱园园生前照片曝光
- 3万左右小货车新车有哪些? 3万左右小货车新车
- oppo reno5 5g怎么样? opporeno5
- 电子狗有用么(电子狗有用吗)
- 笔记本游戏本电脑排行榜前十名 游戏本电脑排行榜前十名
- 北京亚运村汽车市场怎么样,北京亚运村车市在哪里