在BSP开发的早期阶段,我们一般是Clone一个与目标平台最相近的的BSP,然后以此为基础做修改。在实际开发过程中,还可能同时存在多种型号的产品。它们的硬件几乎一样,主要是外设不同,如LCD分辨率、按键定义和GPIO的使用等。这种情况下,一般可通过环境变量、宏定义和条件编译来区分不同的产品型号,一份BSP对应几种型号的产品。但如果外设的差别太大,使用这个方法反而会增加代码维护的难度,单独维护一份,可能更为方便。Clone BSP就是经常使用的一种方法。新建WinCE6.0的项目时同时选择两个BSP,然后根据需要有选择的编译。以上说的这些都是BSP开发中常见的方法。本文介绍另外一种技巧,lgh首创的,用了快一年了,感觉更方便,跟大家分享一下。
假设以DEVICEEMULATOR的BSP为基础,针对两类产品创建两份BSP,DEVICEEMULATOR1和DEVICEEMULATOR2。只需要在Platform的目录下,创建目录DEVICEEMULATOR1和DEVICEEMULATOR2,并将DEVICEEMULATOR的内容拷贝到这两个目录下,重命名DEVICEEMULATOR为DEVICEEMULATORORI。至此,准备工作就做完了。在新建项目之前,只需创建一个目录符号链接。例如需编译DEVICEEMULATOR1的系统时,在命令行窗口输入"mklink /D DEVICEEMULATOR DEVICEEMULATOR1”。同样,需要编译DEVICEEMULATOR2的系统时,在命令行窗口输入"mklink /D DEVICEEMULATOR DEVICEEMULATOR2”。这种切换可以随时进行,为了使用更方便,可以写成批处理文件,内容如下。
mklink /D DEVICEEMULATOR DEVICEEMULATOR1
@echo off
echo.&pause
mklink在Windows 7中直接有支持。在WinXP下,可以使用linkd,对应的批处理文件的内容如下。
@echo off
echo.&pause
使用该方法后,一个项目工程就可以编译出两个不同产品的WinCE操作系统映像。如果选择的系统组件不一样,我们也可以创建多个项目,分别编译,非常灵活。这种方法的关键是在NTFS的分区中创建目录符号链接,所以需要在NTFS的分区上用。