您当前的位置:五五电子网电子知识单片机-工控设备嵌入式系统-技术Windows CE OAL层的结构与开发 正文
Windows CE OAL层的结构与开发

Windows CE OAL层的结构与开发

点击数:7390 次   录入时间:03-04 11:40:08   整理:http://www.55dianzi.com   嵌入式系统-技术

       3 加强OAL

      
第二阶段主要目的是充分利用板上硬件资源和加强调试手段。主要包括中断、KITL、以太网口调试函数和OEMIOControl四方面内容。我们把包含这四方面内容的OAL层称为加强OAL。   

       3.1 中 断

  & nbsp;    外设硬件与CPU的数据交换基本上是异步进行的、最常用的中断形式。CE的中断处理顺序如图3所示。由图3可知,CE的中断实际上是由两部分ISR和IST组成的。其中IST包含在驱动程序中,而ISR包含在OAL层中。所以,要想支持一个硬件,首先必须从0AL层为其作好准备。这个准备用两步完成。 

CE的中断处理顺序


       ①创建中断标识符。下面代码节选自SAMSUNG2410的oalintr.h。中断映射表通常位于\Platform\\INC。#define SYSINTR USB (SYSlNTR FIRMWARE+11) #define SYSINTR USBD (SYSlNTR_FIRMWARE+12)    

       ② 创建并注册ISR。ISR的主要任务是返回中断标识符。ISR代码通常位于\Platform\\KERNEL\HAL下。 下面代码节选自SAMSUNG2410的armint.c。
节选自SAMSUNG2410的armint

       在中断处理中,还有三个函数也起着至关重要的作用。它是OEMInterruptEnable()、OEMInterruptDISAble()和OEMInterruptDone()。    

       ◇OEMInterruptEnable()用于执行允许设备产生中断的硬件操作;    

       ◇OEMInterruptDisable()禁止设备发出中断申请;    

       ◇OEMInterruptDone()中断处理结束。    

       3.2 以太网口调试函数

      
以太网口调试函数与串口调试函数相比,具有更快的速度。    

       ◇OEMEthInit 初始化以太网调试口;    

       ◇OEMEthEnableInts开以太网适配器中断;    

       ◇OEMEthDisableInts关以太网适配器中断;    

       ◇OEMEthISR 以太网适配器中断服务例程;    

       ◇OEMEthGetFrame从以太网调试口收数据;

www.55dianzi.com     
       ◇OEMEthSendFrame从以太网调试口发数据;    

       ◇OEMEthQueryClientlnfo获取平台相关信息;   

       ◇OEMEthGetSecs 返回从某一特定时间开始的计时值。本函数用于处理超时。    

       3.3 KITL 

       KITL全称为Kernel Independent TransportLayer。它的主要用途是提供更方便的调试手段,如图4所示。KITL出现在 Windows CE .net之后,把软件传输协议与硬件传输层隔离 开。KITL使得开发者不必了解硬件传输层如何与软件协议层接口。    

       以下是应该在OEMInit函数中加入的KITL初始化代码。    

       ①初始化所有PCI桥和设备,枚举它们并且给它们分配资源,然后使能,使他们能正常工作。注:此条适于有KITL网络接口卡(NIC)和NIC桥的情况。    

       ② 对相关总线进行初始化,使得CPU能够正确识别NIC。    

       ③通过调用KitlInit函数来初始化KITL。这部分代码可参照其它平台,代码文件为Halkitl.c。    

       ④执行0EMKitlInit函数,进行相关的硬件初始化工作。搜索是否存在KITL 网口、串口或并口连接。    

       ⑤执行完OEMKitlInit后,把Kitl.1ib和Kitleth.1ib包含入平台资源文件\\Kernel\Buildexe\Kernkitl,以便把KITL打包进内核。有关KITL的其它函数请参考微软MSDN。

KITL功能结构


       3.4 OEMIOControl

      
OEMIOContr01在 OAL 层是一个非常重要的函数,应用程序是通过调用KernelIoContrOI来调用OEMl0Control的。内核对许多硬件平台信息的获得都要通过对它的调用来实现。此外,0EMl0Contr0I还是用户模式应用代码到内核模式OAL代码之间的转换入口。这就是说,用在用户模式下通过调用0EMl0Control可以获得内核模式的权力。0EMIOControl函数原型如下:
0EMIOControl函数原型

       硬件资源利用和调试手段的加强大大丰富了OAL的功能,但是嵌入式系统通常会面临的功耗问题和由于网络功能的日益普及而带来的安全性问题并没有涉及到。   

       4 完整OAL

      
完整OAL是指在加强OAL的基础上扩充了功耗和安全性验证的OAL。所以这一阶段的主要工作集中在电源管理与模块认证两部分。   

       4.1 电源管理

      
OAL层的电源管理与驱动程序的电源管理颇为不同。一种设备驱动程序仅负责某种特定的设备,如果可能,则把这种设备置为省电模式,当形势需要时再把设备置为满载荷模式。OAL层的电源管理则是负责整个系统功耗管理。例如,调度器在下一个25ms没有线程要运行时,系统将被置为省电模式。   

www.55dianzi.com
       电源管理函数响应关闭系统和使系统空闲的系统调用。这些系统调用可能是软触发也可能是硬触发。以下两个函数是须在 OAL 层中实现的电源管理函数:    

       ◇0EMIdle一一把设备置为空闲状态,此时系统处于低功耗状态;    

       ◇0EMPoweroff一一把设备置为断电状态;    

       ◇OEMPowerOff和OEMIdle的程序代码可在如下目录中参照例程%_WINCER00T%\Platform\\Kerlael\Hal。    

      4.2 模块认证

      
自从 Windows CE 3.0以来,在RAM中加载和运行模块前,内核可以对其进行授权核查。对于在ROM中运行的模块则不需要此过程。模块认证实际上是在被加载的模块后添加一数字签名,只有当系统用公开密钥验证数字签名通过后,该模块才可以被加载到RAM中运行。这样系统可以阻止或限制一些模块的运行,达到系统安全的目的。要达到以上目的须完成以下两个函数:    

       ◇OEMCertifyModuleInit,用于初始化验证过程,每验 证一个模块调用一次;    

上一页  [1] [2] [3]  下一页


本文关键字:开发  Windows  嵌入式系统-技术单片机-工控设备 - 嵌入式系统-技术