51WinCE-博客园分站

WinCE非官方Blog分站

导航

【原创】Windows® Embedded CE 6.0 Fundamentals 读书笔记_Chapter 5

 

chapter 5
这一章是非常重要的一章。介绍关于BSP的内容,我们马上开始学习。首先还是一些单词。
//==========================
determines
implementation
obtain
labor-intensive
Mandatory
separate
infrastructure
compatible
modofcation
Board Support Package (BSP)
Ethernet boot loader (EBOOT)
OEM Abstraction layer(OAL)
Production Quality OAL (PQOAL)
model device driver (MDD)
Platform Dependent Driver (PDD)
Graphics, Windowing, and Events Subsystem (GWES)
Human interface device (HID)
Device Driver Interface (DDI)
Translation Lookaside Buffer (TLB)
Kernel Independent Transport layer (KITl)
interrupt service thread (IST)
//--------简单的翻译-具体请结合文内注释------
确定
执行
获得
劳动密集型
强制性
独立
基础设施
兼容
修改
板级支持包(BSP)
以太网启动加载器(EBOOT)
OEM抽象层(OAL)
量产级OAL(PQOAL)
模型设备驱动程序(MDD)
平台相关驱动程序(PDD)
图形,窗口和事件子系统(GWES)
人机接口设备(HID)
设备驱动程序接口(DDI)
转换后备缓冲器(TLB)
内核独立传输层(KITl)
中断服务线程(IST)

BSP 的含义就是板级支持包。在wince的早期版本中还有一个概念叫做CSP,意思是芯片级支持包,这个概念的提出是在4.2版本的时候,一直沿用的5.0, 但大多数5.0版本都已经采用BSP结构,BSP+CSP结构已经慢慢消失,本章对BSP进行了详细的分析,BSP作为WINCE开发中一个核心的内容, 可以说主要的核心程序都在BSP中。

本章分为以下几个重点来介绍,第一节介绍了BSP的目录结构,分析BSP的构成,第二节讲述了 Bootloader,这里的bootloader,我个人认为可以理解为PC机的BIOS,这里不做详细分析,在讲到第二节的时候我们再来仔细的看看, 第三节OEM适配层,这个部分也十分重要,特别是对与移植BSP来说是个比较关键的地方,第四节讲述了通用平台代码,MS的高手们为了减轻WINCE的开 发难度,提供了一些通用的代码,我们可以参考或者直接使用来降低我们的开发难度,加快开发进程,同样在看到这一节的时候我们再来仔细的看看。接下来是一个 可以说是一个工具,Kitl,核心支持传送层,这里主要用来支撑一些底层的传输协议,为调试wince做基础,第六节描述了驱动的概念,驱动不论是PC机 还是嵌入式WINCE,都是一个比较重要的环节,假设一个机器只有系统没有驱动,可能就没有声音,没有外部输入控制,甚至没有显示,当然驱动也是个很灵活 的概念,如何写驱动,需要写什么驱动这个要依照产品来定义,这里我们稍后再来看。接下来是配置文件,这一节在第四节里面有具体的描述,文中列出了BSP包 中必须包含的几个配置文件,这里只要记住他们就好了。具体的配置文件的描述请大家看Chapter4的配置文件一节。最后是创建一个BSP,也就是BSP 的移植。好了我们来一节一节的来分析,以下一些简单的章节这里就可能用一句话带过。

第一节BSP的路径结构。
首先我们通过文章可 以了解到BSP主要包含了以下几个要点:bootloader,OAL,Drivers和Configuration files,有wince600的朋友这个时候可以打开你的wince600路径,在这个路径下的platfrom中任意打开一个BSP包,来看看他们的 文件结构,这里再次提示一下,在WINCE600或者wince500下的platform文件夹内,放的都是BSP包,如果您没有添加其他的BSP包进 入的话,一般来说会有一些MS的高手或者第三方厂家提供给MS的一些BSP包,这些都是很好的模板,如果你想移植BSP的话可以拿这些BSP包作为一个参 考,甚至是作为一个基础来做。接下来我们会再次看到,文章对BSP又进行了一次描述,BSP包包含了一下几个组件,OAL,DRIVER和 configuration file,这里大家就奇怪了,为什么刚才说有bootloader这里又没有说了。因为bootloader在这里不同的厂家或者BSP可能有不同的设 计,有的采用NBOOT+EBOOT模式,有的采用单独的EBOOT模式,甚至有的可以使用SD卡,COM串口做为bootloader的传输介质或者载 体,所以bootloader的变化是非常丰富的,在第二节我们会再来看,但主要的OAL,DIRVERS和configuration files在wince的BSP包中是一个相对固定的一个构架,这样一个构架也为开发BSP提供了一个方便,并且统一了开发方式,降低在开发过程中的难 度。BSP包的结构大家可以通过文中表格5-1看的很清楚,或者大家完全可以按照上面所提示的方法看自己wince600的platform路径来配合文 中内容了解。

第二节Bootloader启动引导
文章第一节就给出了一个定义,bootloader是任何BSP的一个标准的组 件。也就是说。任何的BSP都有这个部分,他的任务是1.初始化硬件,2.初始化平台并加载镜像到设备,3.加载系统镜像至RAM或者ROM,4.启动系 统并将指针跳转至操作系统入口。这里也明确指出了,bootloader是与操作系统分开执行的,并且有自己的二进制配置文件,Sources以及 makefile文件作为支撑。文章中给出了一组通用的bootloader的参考库以及路径,具体请见表5-3。这里需要注意的是图5-1.图5-1明 确的描述了整个bootloader启动的一个顺序以及在启动中可能用到的一些函数,每个方框中都是一个函数名,大家可以通过主线,在自己的BSP或者 MS提供的BSP包中查找这些函数,看看他们都是来自那些个文件,执行并实现了什么样的功能。

第三节OEM适配层
读到这一个部分 先请大家回到Chapter3的图3-1,大概在87页,我们可以很清楚的看到OAL层的作用是与CPU,RAM,ROM进行一个相互的通讯,OAL的主 要功能在第三节第二段有描述,主要作为启动代码,一系列中断功能的控制,电源管理,定时器控制以及IOCTL控制代码的执行,OAL层在系统实现中是以 oal.exe的形式动态连接到kernel.dll文件中,这样的一个结构当然有一些接口开放给使用者,具体的函数接口参考表格5-5,大家同样可以查 找一下这些函数在什么地方使用过,实现了一些什么样的功能。同时文章也列出了一系列IOCTL的功能变量定义,具体请见图5-6。这里需要说明的 是,IOCTL_HAL_XXX_XXX这类的变量,用户可以根据自己的自身情况进行定义。具体参考大家可以看一看public\common\oak \inc\pkfuncs.h这个头文件中的定义方式。

第四节通用平台代码
通过这一节我们可以学习到MS工程师高深的开发技术, 上一节中我们提出了一个pkfuncs.h文件,这个文件就出自通用平台代码中,这个部分主要是用来减轻wince开发复杂度,通用平台也就是说,一些通 用的器件或者处理方法可以使用这里的一些代码或者库来直接产生对应的功能,而不需要要用户再去自行的开发一套东西出来,这样不但减少了开发的时间,同时也 增强了系统的统一性,从某种程度上来说加强了系统的鲁棒性。通用平台代码为用户提供了不同核心处理器的通用代码,在后面的章节我们还会提及到这里,因为我 们如果构建自己的BSP可以通过克隆BSP的方式来实现,通用平台代码的用处就体现出来。

第五节KITL
这一节就一句话。kitl就是一个目标设备与开发平台之间沟通的介质。

第六节驱动
驱 动是BSP包中重要的组成部分,为板上的芯片进行初始化,并对其进行控制。驱动分为很多中,主要的有流式驱动和本地驱动,或者可以分成分层驱动或者不分层 的驱动,或者内建驱动或者流式驱动等等,说法很多。在第6章会做一个更细致的描述。这里对驱动所在的文件路径进行了简单的描述,具体请参见表5-7。具体 的留在第六章慢慢聊。

第七节配置文件
配置文件我们在第四章中有详细的描述,具体大家可以回过头去看看第四章的第五节configuration files。这里列出了一个BSP包中所必须的一些配置文件。具体请见表5-8。

第八节创建一个BSP
第 一句话就告诉我们,BSP的创建是个很复杂的任务。MS的建议是克隆已经现有的BSP。以其作为基础来定制自己的BSP。通过这两年多的WINCE开发, 我所见到的BSP都是由原始的bsp包升级或者克隆而来。因为如果想完完全全自己写一套BSP。除非人力物力齐全,有强大的开发团队,那个倒是个好事情。 但是一般情况下为了加快开发进度,MS建议还是要采纳,毕竟是别人做的东西。当然,自己二次开发的工作量也不容小视,文中也提及到了比如说新的硬件,以及 一些IOCTL和中断的一些实现,这些需要自己去设计开发,

当然上面我们已经给大家举了一个ioctl的参考例子pkfuncs.h。具体的开发还需要根据情况而定。

第五章学习完毕。

posted on 2009-11-24 11:18  MercuryXu  阅读(543)  评论(0编辑  收藏  举报