位置:51电子网 » 技术资料 » 嵌入式系统

WindowsCEOAL层的结构与开发

发布时间:2007/4/23 0:00:00 访问次数:1588

引 言 
    Windows CE是微软针对嵌入式领域推出的一款全新的操作系统。之所以说它是一款全新的操作系统,是因为尽管Windows CE的UI非常接近其它的桌面版Windows操作系统,但是它的内核完全是重新写的,并不是任何一款桌面版Windows的精简版本。 Windows CE是一种支持多种CPU架构的操作系统,这其中包括ARM、x86、MIPS和SHx,极大地减轻了0EM开发过程中移植操作系统的工作量。
    操作系统移植包含两个层面上的工作:一个层面是CPU级的,另一个层面是板级的。CPU级的移植通常由微软或芯片制造商来完成;板级移植则是由OEM来完成的。0AL正是0EM完成这一系统移植的工作核心!

1 OAL 
    OAL的全称是OEM Adaption Layer,即原始设备制造商适配层。从逻辑结构上看,它位于操作系统的内核与硬件之间,是连接系统与硬件的枢纽;从功能上看,OAL颇似桌面机上的BIOS,具有初始化设备、引导操作系统以及抽象硬件功能等作用。与B10S不同的是,0AL隶属于操作系统,是操作系统的一部分。从存在方式上,讲OAL是一组函数的集合体,这些函数体现出0AL的功能,如图1所示。

 


2 最小化的OAL 
    OAL层的首要任务是加载内核。OAL层中为内核的启动作种种铺垫的函数的集合构成最小OAL层。我们可以由此深入0AL层,如图2所示。 



首先来看一下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中的Startup,见例程:
Naked_Startup()
{_asm 

cli 
jmp KernelInitialize 
}

S t a r t u P执行完毕后,跳转至K e r n e 1 S t a r t/Kemellnitialize(x86下)。
2.2 Kernel Start 
    Kernel Start主要完成内核的最小初始化并且通过调用OEMInit函数来完成板级硬件初始化。以下是ARM内核初始化过程: 
    ① 初始化一级页表; 
    ②使能MMU和cache;

引 言 
    Windows CE是微软针对嵌入式领域推出的一款全新的操作系统。之所以说它是一款全新的操作系统,是因为尽管Windows CE的UI非常接近其它的桌面版Windows操作系统,但是它的内核完全是重新写的,并不是任何一款桌面版Windows的精简版本。 Windows CE是一种支持多种CPU架构的操作系统,这其中包括ARM、x86、MIPS和SHx,极大地减轻了0EM开发过程中移植操作系统的工作量。
    操作系统移植包含两个层面上的工作:一个层面是CPU级的,另一个层面是板级的。CPU级的移植通常由微软或芯片制造商来完成;板级移植则是由OEM来完成的。0AL正是0EM完成这一系统移植的工作核心!

1 OAL 
    OAL的全称是OEM Adaption Layer,即原始设备制造商适配层。从逻辑结构上看,它位于操作系统的内核与硬件之间,是连接系统与硬件的枢纽;从功能上看,OAL颇似桌面机上的BIOS,具有初始化设备、引导操作系统以及抽象硬件功能等作用。与B10S不同的是,0AL隶属于操作系统,是操作系统的一部分。从存在方式上,讲OAL是一组函数的集合体,这些函数体现出0AL的功能,如图1所示。

 


2 最小化的OAL 
    OAL层的首要任务是加载内核。OAL层中为内核的启动作种种铺垫的函数的集合构成最小OAL层。我们可以由此深入0AL层,如图2所示。 



首先来看一下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中的Startup,见例程:
Naked_Startup()
{_asm 

cli 
jmp KernelInitialize 
}

S t a r t u P执行完毕后,跳转至K e r n e 1 S t a r t/Kemellnitialize(x86下)。
2.2 Kernel Start 
    Kernel Start主要完成内核的最小初始化并且通过调用OEMInit函数来完成板级硬件初始化。以下是ARM内核初始化过程: 
    ① 初始化一级页表; 
    ②使能MMU和cache;

相关IC型号

热门点击

 

推荐技术资料

DFRobot—玩的就是
    如果说新车间的特点是“灵动”,FQPF12N60C那么... [详细]
版权所有:51dzw.COM
深圳服务热线:13751165337  13692101218
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式


 复制成功!