都知道 lobster 指令是用于编译整个文件夹,但是在这里大家往往会陷入一个误区 —— 直接编译所修改的某个 .cpp 或者 .c 文件所在的驱动文件夹,其实不然,下面以具体实例来说明:
修改驱动程序 Saa7111a.cpp 是 DISPLAY 的一部分,如果只编译 DISPLAY 是不行的,实际上编译 DISPLAY 可能无关紧要,真正需要编译的是 MBX 驱动---------------------------------------如何得到MBX?具体步骤如下:
1)例如你修改了 videoPort.cpp,那么可以看到 videoPort.cpp 所在的Source 文件中有 TARGETNAME=VIDEOPORT;
2)需要在Source Insight 中,查找VIDEOPORT(或者可以直接查找 videoport.lib)被包含到哪个 source 中;
3)可以看到有两个驱动的 Source 包含 videoport.lib,其中路径为
Sources(c:\wince600\platform\tt4x0bd\src\drivers\mbx\buildexe) 的Source 文件中的TARGETNAME 有 TARGETNAME=ddi_powervr,该 Source 是在MAX 驱动下;另一个路径为
Sources(c:\wince600\platform\tt4x0bd\src\drivers\display\buildexe)
该文件中有 TARGETNAME=ATLAS_LCDX;
4)此时,在Platform.bib 中有(也可通过搜索来找到):
IFBSP_DISPLAY_ATLAS_ONCHIP_DIRECTX
ddi.dll $(_FLATRELEASEDIR)\atlas_lcdx.dll NK SHK
ENDIF
IFBSP_SUPPORT_MBX
ddi.dll $(_FLATRELEASEDIR)\ddi_powervr.dll NK SHK
#include"$(_TARGETPLATROOT)\FILES\powervr.bib"
ENDIF
5)到此就得确认 BSP_SUPPORT_MBX 和 BSP_DISPLAY_ATLAS_ONCHIP_DIRECTX哪个开启;
6)易得:
SETBSP_SUPPORT_MBX=1
IF"%BSP_SUPPORT_MBX%"=="" (
SET BSP_DISPLAY_ATLAS_ONCHIP_DIRECTX =1
)
IF"%BSP_SUPPORT_MBX%"=="1" (
SET BSP_DISPLAY_ATLAS_ONCHIP_DIRECTX=
SET BSP_APPLY_MSQFE_09M02=1
)
从中就可发现,BSP_SUPPORT_MBX =1,而 BSP_DISPLAY_ATLAS_ONCHIP_DIRECTX反而未定义;
7)到这里,你就可以发现你所编译的驱动程序真正用到的反而是 MBX,而它的直属驱动 DISPLAY 反而没用到;
得出结论:修改了某一个驱动程序,需要编译的不一定是他的直属驱动!!!!
直观的看,就是用 lobster 编译,编译之后,可以看到最终修改了哪些 dll 文件,可以发现,如果只是单纯的编译 display 是没有 dll 驱动文件修改的!!