引 言 windows ce是微软针对嵌入式领域推出的一款全新的操作系统。之所以说它是一款全新的操作系统,是因为尽管windows ce的ui非常接近其它的桌面版windows操作系统,但是它的内核完全是重新写的,并不是任何一款桌面版windows的精简版本。 windows ce是一种支持多种cpu架构的操作系统,这其中包括arm、x86、mips和shx,极大地减轻了0em开发过程中移植操作系统的工作量。 操作系统移植包含两个层面上的工作:一个层面是cpu级的,另一个层面是板级的。cpu级的移植通常由微软或芯片制造商来完成;板级移植则是由oem来完成的。0al正是0em完成这一系统移植的工作核心!1 b10s不同的是,0al隶属于操作系统,是操作系统的一部分。从存在方式上,讲oal是一组函数的集合体,这些函数体现出0al的功能,如图1所示。
2 最小化的oal width=308 border=0>
首先来看一下os的启动顺序。 ①cpu执行引导向量,跳转到硬件初始化代码,即startup函数; ②在start up函数完成最小硬件环境初始化后跳转到kernelstart函数(当cpu为x86架构时为kernel initial-ize函数),来对内核进行初始化; ③kernelstart函数调用oeminitdebugserial完成对调试串口的初始化,调用0eminit函数来完成硬件初始化工作以及设置时钟、中断,调用oemgetextensiondram函数来判断是否还有另外一块dram。 至此,内核加载完毕。由此可见,os启动的重中之重是startup函数的正确加载。2.1 startup startup阶段的特点是kernel还没有加载起来,调试工作比较困难。startup函数的两大核心任务分别是把cpu初始化到一已知状态和调用内核初始化函数来初始化内核。以下是startup函数中通常包含的内容: ①把处理器置为监控模式; ②禁止cpu的irq和fiq输入; ③禁止内存管理单元mmu和指令、数据cache; ④刷新指令和数据cache、tlb、清空写buffr; ⑤确定启动的原因一hard reset,wake from sleep, gpio reset,watchdog reset,eboot handoff; ⑥根据目标板需要配置gpio,比如连接led的gpio; ⑦配置内存管理器,设置刷新频率,使能时钟; ⑧配置中断控制器; ⑨初始化实时时钟(rtc)为0,使能实时时钟; ⑩设置电源管理寄存器; ⑾打开所有板级时钟和片内外部时钟; ⑿取得oemaddresstable的物理基地址并把它存在r0中; ⒀跳转到kernelstart。 bootloader和oal中均包含startup函数。它的功能大致相同,都是要初始化最小硬件环境。bootloader是在为自己的执行准备硬件环境,oal则是为kernel的执行准备硬件环境。由于这两种硬件环境要求基本相同,所以它们的代码也有很大部分可以相互借鉴。但应该明白,bootloader与oal在物理上是独立的,它们并不是同一段代码。而且,如果可以确定这一硬件部分bootloader已经初始化过,则在oal中不必重复。当然,前提是每次加载都要经过bootloader这一环节。最典型的例子就是x86 数码管要直观得多,是调试oal层代码不可或缺的一组工具。这个函数组由四个函数组成,分别是0 e m i width=464 border=0>
①创建中断标识符。下面代码节选自samsung2410的oalintr.h。中断映射表通常位于
3.4 switch(dwlocontrolcode) {caseioctl_hal_set_device_info: case10ctl_hal_reboot: ……default: return false; } return true: } 硬件资源利用和调试手段的加强大大丰富了oal的功能,但是嵌入式系统通常会面临的功耗问题和由于网络功能的日益普及而带来的安全性问题并没有涉及到。4 完整oal 完整oal是指在加强oal的基础上扩充了功耗和安全性验证的oal。所以这一阶段的主要工作集中在电源管理与模块认证两部分。4.1 电源管理 target=_blank>零八我的爱
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』