在搭建Wince6.0完开发平台以后,我们先熟悉一下 WINCE600的目录组织和 PQOAL的相关概念。不然会像无头苍蝇一样,找不到北。我曾经在这里晕了好久。
安装完成后, 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目录。 文中如有疏漏,请您指正!谢谢。