wince oal介绍

转载 2013年12月02日 16:30:45

作者:ARM-WinCE

我个人认为OAL应该是WinCE BSP中最为重要的一个模块了,简单回顾一下,WinCE BSP由Bootloader,Drivers,OAL和配置文件组成。Bootloader一般指EBOOT,Drivers指一些需要的设备驱动,而OAL被称为OEM Adaption Layer,是WinCE操作系统和底层交互的中间层,其中很多WinCE的功能的支持,都是在OAL里面实现。有人说OAL可大可小,一点不假,根据不同的需求,可以说是变化无穷,呵呵。

这里主要介绍WinCE 6.0的OAL架构,它与WinCE5.0有些区别。不过我会对区别做个简单介绍。

WinCE5.0下面,OAL位于BSP_Name/SRC/Kernel目录下面,其包含的目录结构如下:

 /OAL:包含所有和硬件相关的OAL代码,最后生成oal.lib。

 /Kern:包含oal.lib和会被内核用到的库。

 /KernKitl:包含oal.lib,KITL和会被内核用到的库

 /KernKitlProf:包含oal.lib,KITL,支持profiling的库和会被内核用到的库

WinCE6.0下面,OAL位于BSP_Name/SRC/OAL目录下面,其包含的目录结构如下:

 /OALLIB:包含所有和硬件以及调试相关的OAL代码,最后生成OAL.lib

 /OALEXE:包含oal.lib和被内核用到的库

 

实际上在WinCE5.0下面有三个版本的kernel,如下:

 OAL + Kernel = kern.exe

 OAL + Kernel + KITL = kernkitl.exe

 OAL + Kernel + KITL +Profiler = kernkitlprof.exe

而在WinCE6.0下面OAL,KITL和Kernel被分别分开了,如下:

 OAL = oal.exe

 Kernel = kernel.dll

 KITL = kitl.dll

在WinCE5.0下,OAL和KITL被连接到kernel当中,而且会有三个不同的版本。而在WinCE6.0中,OAL,KITL和kernel都独立成三个模块oal.exe,kitl.dll和kernel.dll。一个最主要的原因是如果微软每更新一次kernel,OEM都需要更新一次,并且要重新链接OAL产生一个新的kernel,然后再release。而在WinCE6.0下就不需要再链接OAL,而只是release一个新的kernel.dll就可以了。另一个好处就是在WinCE6.0中OAL,KITL和kernel分成三个模块,彼此之间是通过标准的接口函数来访问对方,这样比较安全,而在WinCE5.0中,OAL被链接到Kernel的时候,导致一些未被描述过的内核函数也可以被调用,而调用这些函数是很不安全的。最后还有一个好处就是在WinCE5.0中,OAL,KITL和Kernel 只能是用一个Debug Zone,而在WinCE6.0中,由于它们彼此独立,所以有各自的Debug Zone,可以分别调试,而且这为以后的KITL动态加载打下了基础,当然在WinCE6.0中还没有实现。

说了半天,下面看一下WinCE6.0的OAL的架构,如图:

kernel.dll:内核模块以和OAL,KITL分开,其中OEMGlobal是一个由Oal模块导出的数据结构,里面包含了会被kernel调用的OAL函数和变量,在/public/common/oak/inc/oemglobal.h中有定义,如果kernel想访问kitl.dll就会通过KITLIoctl接口来访问。

kitl.dll:该模块支持KITL功能,会直接访问硬件,KITL可以基于USB,Ethernet或者是串口。有时候该模块也会和kernel.dll和oal.exe交互,它会通过NKGlobal来访问kernel模块,通过OEMGlobal来访问OAL模块。

oal.exe:包含了支持硬件的相关库,一般肯定会支持Startup,Cache,Interrupt,Timer和IOCTL几个库,RTC根据需要可选。OAL模块访问kernel模块通过NKGlobal数据结构实现,在/public/common/oak/inc/nkglobal.h中定义。

应该说OEMGlobalNKGlobal是两个重要的数据结构,用于OAL和Kernel之间的交互,这两个结构都有默认定义,分别在/private/winceos/coreos/nk/oemmain/oemglobal.c和/private/winceos/coreos/nk/kernel/nkglobal.c定义。他们会被编译为OEMMain.lib和NKMain.lib,而在BSP中的OAL应该链接OEMMain.lib库并实现相应的OEM函数。

OAL实际上就是一个硬件的抽象层,WinCE的内核通过OAL来和硬件进行通信,应该说它并不包含硬件外设的驱动,而只是对基于处理器本身的硬件模块的控制。如前面的图所示,包含以下模块:

Startup Library:实现了内核的启动

Interrupt Library:支持WinCE的中断处理

Cache Library:用于实现Cache功能

OS Timer Library:内核所需的定时器功能

RTC Library:实时时钟功能

IOCTL Library:内核的输入/输出函数

上述模块可以说是OAL中必须实现的,而OAL还可以包含更多的模块来实现更多的功能,模块如下:

Module Name

Description

Boot Arguments

支持引导参数传入

Debug

支持Debug功能,一般指串口打印

Flash

实现Flash操作的功能

Interrupt Latency Timing

支持ILTimer功能,可对ISR和IST的延时进行测试

Log

实现Log功能

Power Management

实现处理器级的电源管理功能

Profiler

支持Profiler功能,从而对内核性能进行评测

Memory

实现物理地址和虚拟地址之间的转换

PCI

实现内核中对PCI总线的支持

OAL中可支持的模块很多,基本要实现的模块有Startup,Interrupt,Timer,Debug和IOCTL等,而其他的一些模块属于根据自己的需要进行裁减的,所以说OAL可大可小。 

 

由于在做BSP开发的时候,BSP都是Clone过来的,所以OAL已经存在,只是根据自己的平台和需要来改相应的模块或者添加新的模块。前面提到WinCE5.0的OAL和WinCE6.0下的架构发生了变化,如果想从WinCE5.0升级到WinCE6.0,这里有一个经典的视频,推荐给大家:

http://channel9.msdn.com/posts/mikehall/Porting-a-CE-50-BSP-to-CE-60-Travis-Hobrla/

WinCE BSP中OAL层中的OEMIoControl介绍

作者:ARM-WinCE 在WinCE的BSP中的OAL部分,会有一个ioctl.c或者oemioctl.c文件,里面主要定义了一个叫OEMIoControl(..)的函数。可以说OEMIoContr...
  • nanjianhui
  • nanjianhui
  • 2008-01-13 10:04:00
  • 4623

ARM与WinCE

  • 2008年05月31日 10:04
  • 1.6MB
  • 下载

WinCE OAL中的Startup.s介绍

作者:ARM-WinCE 应该说Startup.s是OAL最开始的入口,就像EBOOT中的Startup.s一样,它也是WinCE内核最开始运行的代码。一般在BSP中,EBOOT的Startup.s和...
  • nanjianhui
  • nanjianhui
  • 2009-01-31 18:42:00
  • 4052

WinCE讲义(内部资料)

  • 2010年10月20日 21:54
  • 5MB
  • 下载

windows CE 6.0的内核介绍及OAL开发

  • 2008年12月04日 14:32
  • 4.12MB
  • 下载

WinCE OAL中的中断处理

作者:ARM-WinCE 关于WinCE的中断处理,OAL中主要是实现了ISR部分,一般IST会在设备驱动中实现。推荐一篇WinCE的中断架构的文章,如下:http://msdn.microsoft....
  • nanjianhui
  • nanjianhui
  • 2009-03-03 16:46:00
  • 4926

Wince OAL层浅析

我想即使读者看过微软的关于驱动开发的培训教材和CE帮助文档中的驱动部分,头脑中仍然一片茫然。要想真正了解驱动程序必须结合一些驱动程序源码,在此我以串口驱动程序(COM16550)中初始化过程为线索简单...
  • gaoyang610
  • gaoyang610
  • 2013-04-11 18:11:11
  • 560

WinCE OAL架构分析

作者:ARM-WinCE我个人认为OAL应该是WinCE BSP中最为重要的一个模块了,简单回顾一下,WinCE BSP由Bootloader,Drivers,OAL和配置文件组成。Bootloade...
  • nanjianhui
  • nanjianhui
  • 2009-01-18 18:47:00
  • 6722

WinCE OAL架构分析

我个人认为OAL应该是WinCE BSP中最为重要的一个模块了,简单回顾一下,WinCE BSP由Bootloader,Drivers,OAL和配置文件组成。Bootloader一般指EBOOT,Dr...
  • techtitan
  • techtitan
  • 2010-07-15 10:44:00
  • 379

WINCE OAL层简介

原文地址::http://blog.csdn.net/chenyt2007/article/details/1661632 相关文章 1、WinCE OAL架构分析----http://blog....
  • xqhrs232
  • xqhrs232
  • 2013-08-17 22:33:12
  • 546
收藏助手
不良信息举报
您举报文章:wince oal介绍
举报原因:
原因补充:

(最多只允许输入30个字)