在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”。這種切換可以随時進行,為了使用更友善,可以寫成批處理檔案,内容如下。
rmdir DEVICEEMULATOR /q
mklink /D DEVICEEMULATOR DEVICEEMULATOR1
@echo off
echo.&pause
mklink在Windows 7中直接有支援。在WinXP下,可以使用linkd,對應的批處理檔案的内容如下。
linkd DEVICEEMULATOR DEVICEEMULATOR1
使用該方法後,一個項目工程就可以編譯出兩個不同産品的WinCE作業系統映像。如果選擇的系統元件不一樣,我們也可以建立多個項目,分别編譯,非常靈活。這種方法的關鍵是在NTFS的分區中建立目錄符号連結,是以需要在NTFS的分區上用。