WinCE 6.0学习笔记一

本文转载自:http://www.cnblogs.com/we-hjb/archive/2008/10/25/1319601.html

在介绍S3C2410的WinCE6.0移植之前,我们先熟悉一下WINCE600的目录组织和PQOAL的相关概念。

这里简单说一下WinCE6.0开发环境的搭建。WinCE6.0的开发环境是Platform Builder6.0,但与Platform Builder 5.0不同的是,它作为VS2005的一个插件来用。所以,我们需要先安装VS2005,并且安装相应的SP1。PB6.0目前应该是不支持VS2008的。然后顺序安装PB6.0、PB6.0的SP1、R2。虽然微软没有严格说明,但还是建议将这些软件都默认安装到C盘,以免出现意外的情况。当然,这要求C盘足够大,至少得有10G的可用空间,以免安装的过程中出错。

安装完成后, C盘的根目录下产生一个WINCE600的目录,这里包括WinCE6.0的源代码、BSP和一些编译WinCE时需要用到的工具和库文件。另外还产生一个C:\Program Files\Microsoft Platform Builder\6.00的目录,这里主要包括PB6.0的开发环境工具、帮助文件和其他一些开发时用到的工具。

下面我们看一下WINCE600的目录组织。


目录


说明


CRC


存放了一个PB6.0安装时用到的校验文件crc.ini


OSDesigns


用来存放PB的工程,对应PB5.0中的PBWORKSPACES


OTHERS


存放了一些运行库、用于编译操作系统的二进制文件、注册表文件、批处理文件


PLATFORM


存放了和硬件平台相关的BSP及MCU相关的代码和其他一些文件


PRIVATE


存放了WinCE6.0开放的源代码


PUBLIC


存放了WinCE6.0的相关组件,这里应该是纯软件的代码和库


SDK


存放了用于编译WinCE6.0的相关工具和DLL文件

更详细的目录组织说明请参看MSDN http://msdn.microsoft.com/en-us/library/aa908702.aspx

一般来说,在移植BSP的过程中,我们只会修改PLATFORM下的相关目录和文件,而其他的除OSDesigns之外的目录,最好都不要修改,以免出错。PLATFORM目录下除了COMMON目录外,其他都是特定硬件平台的BSP,而COMMON目录中则包涵了不同体系结构的相关代码(ARM、X86、MIPS、SHX)、与平台无关的代码(COMMON)和SOC的相关代码(SOC),这些代码都不能直接修改,如果需要修改,应该先CLONE出来,再做修改。

PQOAL这个概念在WinCE5.0中就引入了,全称为Production Quality OAL,产品级的OAL。它的基本原则如下:

不同芯片或片上系统的代码必须分离开来;

BSP中的代码应该是组件化的并且有逻辑的组织在一起;

芯片级代码、片上系统的代码和板级支持包(BSP)中的代码都应该是高质量的,以便于代码重用。

PQOAL并不是一个硬性的规定,你可以按照自己的想法来组织BSP的目录及相关文件。但我还是建议尽量按照PQOAL的原则来组织,这会给后期的调试、移植和发布带来很大的便利。这是前人成功的经验,没有理由不用。

下面就从PQOAL的角度分析PLATFORM的目录组织。

PLATFORM\COMMON:这里存放了所有可重用的代码。这一部分代码将在BSP之前编译。

PLATFORM\COMMON\SRC\COMMON:这里存放了被BSP中重用的通用代码,这一部分代码是跟硬件平台无关的。譬如一般的IOCTL处理函数、与内核交互的公共的中断程序等等,另外还包括一下库文件,如OAL_IOCTL.lib、oal_intr.lib、oal_log.lib、kitl_log.lib等等。这一部分代码由微软提供,一般不能修改。

PLATFROM\COMMON\SRC\<CPU>:CPU表示MCU的不同体系结构,如ARM、MIPS、SH和X86。这些目录分别存放了各体系结构的MCU的相关代码,如CACHE相关代码、物理地址和虚拟地址转换的代码等等。这部分代码只针对MCU的内核,不涉及具体的芯片。这一部分代码也由微软提供,不建议修改。

PLATFORM\COMMON\SRC\SOC:该目录下存放了不同的MCU对应的代码,跟BSP对应,这里可看做是CSP(CHIPSET SUPPORT PACKAGE)。这一部分的代码一般来说不能直接修改,如果需要移植类似平台的BSP,应该复制一个,重命名后再做修改。这里的目录和其中链接后的库文件的命名也遵循一定的规则(芯片名称_厂商名称_版本号)。这里需要注意的是SOC目录下dirs文件需要包括体系结构的说明,如PLATFORM\COMMON\SRC\SOC\PXA27X_MS_V1中的dirs文件以DIRS_ARM= \打头。这与BSP中的一般的DIRS文件不同。我在移植BSP的时候,并没有在这里做任何修改,只是将其中相关的文件拷贝到我自己的BSP目录下,这样方便BSP的发布。

PLATFORM\BSPName:这里存放了跟开发板对应的相关代码。在编译WinCE操作系统时,它在\PLATFORM\COMMON的目录之后编译。我们在针对一款新的硬件平台移植WinCE6.0时就是在这里做相应的添加和修改。

WinCE6.0中BSP的目录组织如下:


目录


说明


CATALOG


存放BSP的CATALOG file


CESYSGEN


编译的过程中,bib和reg文件将被拷贝到这


FILES


存放BSP的bib、reg、dat等配置文件和无须编译的二进制文件


SRC


存放BSP的所有源代码


SRC\BOOTLOADER


存放BOOTLOADER的源代码


SRC\COMMON


存放共享代码,链接后的库可被BOOTLOADER、OAL和驱动使用


SRC\DRIVERS


存放设备驱动的代码


SRC\INC


存放相关头文件


SRC\KITL


存放KITL的相关代码


SRC\OAL\OALEXE


链接OAL.lib和其他一些库,生成OAL.exe


SRC\OAL\OALLIB


存放OAL的源代码,编译生成OAL.lib

本文分析了WINCE600的目录组织,并从PQOAL的角度分析了PLATFORM目录。文中如有疏漏,请您指正!谢谢。

时间: 2024-10-13 10:59:53

WinCE 6.0学习笔记一的相关文章

微软企业库5.0学习笔记(10)ASP.NET模块依赖注入

您可以使用HTTP模块,一个到ASP.NET HttpApplicationState类的扩展,在Global.asax编写代码强制ASP.NET在每一个页面请求时自动注入依赖的对象,就像在ASP.NET Web窗体应用程序中讨论的一样. 下列方法显示了一个合适的方法能够获取PreRequestHandlerExecute事件将它自己注入到ASP.NET的执行流水线,在每个页面请求中通过容器的BuildUp方法运行Http模块,并获取OnPageInitComplete事件.当OnPageIni

一起学ASP.NET Core 2.0学习笔记(二): ef core2.0 及mysql provider 、Fluent API相关配置及迁移

不得不说微软的技术迭代还是很快的,上了微软的船就得跟着她走下去,前文一起学ASP.NET Core 2.0学习笔记(一): CentOS下 .net core2 sdk nginx.supervisor.mysql环境搭建搭建好了.net core linux的相关环境,今天就来说说ef core相关的配置及迁移: 简介: Entity Framework(以下简称EF) 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案,EF Core是Entity

Swift 2.0学习笔记(Day5)——我所知道的标识符和关键字

Swift 2.0学习笔记(Day5)--我所知道的标识符和关键字   原创文章,欢迎转载.转载请注明:关东升的博客 好多计算机语言都有标识符和关键字,一直没有好好的总结,就是这样的用着,现在小小的整理一下Swift中的标识符和关键字. 什么是标识符呢? 标识符就是给变量.常量.方法.函数.枚举.结构体.类.协议等由开发人员指定的名字. 其实,构成标识符的字母是有一定规范的,Swift中命名规则是: 区分大小写,Myname与myname是两个不同的标识符: 标识符首字符可以以下划线(_)或者字

Quartz.NET 2.0 学习笔记(1) :Quartz.NET简介

转自:http://www.cnblogs.com/lzrabbit/archive/2012/04/13/2447609.html Quartz.NET 项目地址 http://quartznet.sourceforge.net/ Quartz.NET 2.0 学习笔记(1) :Quartz.NET简介 Quartz.NET 2.0 学习笔记(2) :和1.0的几点不同 Quartz.NET 2.0 学习笔记(3) :通过配置文件实现任务调度 Quartz.NET 2.0 学习笔记(4) :c

Swift 2.0学习笔记(Day 29)——访问级别

Swift 2.0学习笔记(Day 29)——访问级别 原创文章,欢迎转载.转载请注明:关东升的博客 访问级别: Swift提供了3种不同访问级别,对应的访问修饰符为:public.internal和private.这些访问修饰符可以修饰类.结构体.枚举等面向对象的类型,还可以修饰变量.常量.下标.元组.函数.属性等内容. l public.可以访问自己模块中的任何public实体.如果使用import语句引入其他模块,我们可以访问其他模块中的public实体. l internal.只能访问自

Hadoop1.0.0学习笔记

Hadoop1.0.0学习笔记 一.  安装JDK,配置环境JAVA环境变量 exportJAVA_HOME=/home/ligang/jdk1.6.0_26 exportJRE_HOME=/home/ligang/jdk1.6.0_26/jre exportCLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH 二.  安装Hadoop-1.0.0 1.     下载hadoop文件,地址为:http://hadoop.apache.org/co

Swift 2.0学习笔记(Day 37)——默认构造函数

Swift 2.0学习笔记(Day 37)--默认构造函数原创文章,欢迎转载.转载请注明:关东升的博客 结构体和类的实例在构造过程中会调用一种特殊的init方法,称为构造函数.构造函数没有返回值,可以重载.在多个构造函数重载的情况下,运行环境可以根据它的外部参数名或参数列表调用合适的构造函数.默认构造函数结构体和类在构造过程中会调用一个构造函数,即便是没有编写任何构造函数,编译器也会提供一个默认的构造函数.下面看示例代码: class Rectangle { var width: Double

Swift 2.0学习笔记(Day 9)——离开表达式你试试!

Swift 2.0学习笔记(Day 9)--离开表达式你试试! 原创文章,欢迎转载.转载请注明:关东升的博客   表达式啊是很重要地. 在Swift中,表达式有3种形式. l  不指定数据类型 var a1 = 10 l  指定数据类型 var a1:Int  = 10 l  使用分号 var a1:Int = 10; vara2:Int = 20 在Swift语言中,一条语句结束后可以不加分号也可以添加分号,但是有一种情况必须要用分号,那就是多条语句写在一行的时候,需要通过分号来区别语句. 例

Swift 2.0学习笔记(Day 3)——Swift 2.0之后增加的关键字

Swift 2.0学习笔记(Day 3)——Swift 2.0之后增加的关键字 看了之前的学习笔记知道了什么是关键字,现在提示各位在Swift 2.0之后增加defer.guard.repeat.catch.rethrows.throw.throws和try关键字,其中repeat关键字替代do - while循环中的do,即中repeat - while循环.而do关键字用于错误处理.catch.rethrows.throw.throws和try是错误处理关键字. 错误处理是Swift 2.0