从build.log文件了解wince编译过程(作者:wogoyixikexie@gliet)
来源:互联网 发布:淘宝客服每天工作流程 编辑:程序博客网 时间:2024/06/03 07:58
——————————————————————————————————————
以前一直觉得wince编译过程很神秘,想了解又无从下手,现在有位高人提示build.log可以看出wince的整个编译过程,现在就来个了结吧。
搜索了一下,居然有多个build.log产生,现在先来看C:/WINCE500这个,这个是最大的。
Starting sysgen phase for project ( common )
Found localized resources for Languages ( 0409 0404 0407 040C 0410 0411 0412 0413 0416 041D 0804 0C0A)
Microsoft (R) Program Maintenance Utility Version Test Version
Copyright (C) Microsoft Corporation. All rights reserved.
Windows CE Version (Release) (Built on Mar 1 2004 21:46:39)
makefile.def: Invoked with predefined settings:
TARGETNAME: dummy
TARGETTYPE: dummy
RELEASETYPE:
TARGETLIBS:
SOURCELIBS:
makefile.def: BUILDROOT is C:/WINCE500/public/common/cesysgen
(C:/WINCE500/PUBLIC/COMMON/CESYSGEN下面包含了makefile等东西)
0 Please add _COMMONPUBROOT and __PROJROOT to your tree's cesysgen/sources file.
Directory: C:/WINCE500/PUBLIC/COMMON/CESYSGEN
TARGETNAME: dummy
RELEASETYPE is not defined. Using DEFAULT.
————————————————————————————————————————
在所有驱动的makefile中有!INCLUDE $(_MAKEENVROOT)/makefile.def
找到(_MAKEENVROOT)/makefile.def所在地方C:/WINCE500/PUBLIC/COMMON/OAK/MISC(这个路径下真是很多wince的精华所在,sysgen菜单的批处理文件就在这里了)
现在来看看这个makefile.def是什么东西。我觉得这个是真的makefile的前奏。
makefile.def非常庞大,不过都是一些环境变量的判断等,比如RELEASETYPE 的判断等,如果没有设置就是默认的。
在它的最后有
!IF EXIST(./makefile.inc)
! IFDEF WINCETARGETFILES
! INCLUDE ./makefile.inc
! ELSE IFDEF WINCETARGETFILE0
! INCLUDE ./makefile.inc
! ELSE IF "$(SPECIAL_IRC_DEPENDENT)" != "0" && "$(SPECIAL_IRC_DEPENDENT)" != ""
#
# Added for internationalization
#
! INCLUDE ./makefile.inc
! ENDIF
!ENDIF
!IF EXIST($(_PROJECTROOT)/oak/misc/makefilepost.inc)
! INCLUDE $(_PROJECTROOT)/oak/misc/makefilepost.inc
!ENDIF
——————从这个可以看出,他结束之后到makefile了:真的好复杂啊。
++++++++++++++++++++++++++++++继续.................
makefile.def: Including C:/WINCE500/public/common/oak/misc/sources.ReleaseType_DEFAULT
Creating appropriate directories and deleting COMMON.LOC
Copying base resources to C:/WINCE500/public/common/oak/lib/ARMV4I/retail/0409
mkdir C:/WINCE500/public/common/oak/lib/ARMV4I/retail/0409 > nul 2>&1
xcopy /I C:/WINCE500/public/common/oak/lib/ARMV4I/retail/*.res C:/WINCE500/public/common/oak/lib/ARMV4I/retail/0409
把一些资源文件拷贝到下面这个路径(拷贝之前创建)
C:/WINCE500/PUBLIC/COMMON/OAK/LIB/ARMV4I/RETAIL/0409
+++++++++++++++++++++++++++++++继续..................
现在以2410 SDHC的DLL是如何生成的为例子在build.log找到相应信息。
BUILD_MARKER:LINK_DLL_END
nmake /NOLOGO C:/WINCE500/PBWorkspaces/KITL/WINCE500/smdk2440a_ARMV4I/cesysgen/oak/target/ARMV4I/retail/sdhc_sc2410.dll
makefile.def: Invoked with predefined settings:
TARGETNAME: sdhc_sc2410
TARGETTYPE: DYNLINK
RELEASETYPE: OAK
TARGETLIBS: C:/WINCE500/public/common/oak/lib/ARMV4I/retail/sdhc_sc2410_lib.lib C:/WINCE500/PBWorkspaces/KITL/WINCE500/smdk2440a_ARMV4I/cesysgen/oak/lib/ARMV4I/retail/ceddk.lib C:/WINCE500/PBWorkspaces/KITL/WINCE500/smdk2440a_ARMV4I/cesysgen/oak/lib/ARMV4I/retail/sdcardlib.lib C:/WINCE500/PBWorkspaces/KITL/WINCE500/smdk2440a_ARMV4I/cesysgen/oak/lib/ARMV4I/retail/sdhclib.lib C:/WINCE500/PBWorkspaces/KITL/WINCE500/smdk2440a_ARMV4I/cesysgen/oak/lib/ARMV4I/retail/sdbus.lib C:/WINCE500/PBWorkspaces/KITL/WINCE500/smdk2440a_ARMV4I/cesysgen/sdk/lib/ARMV4I/retail/coredll.lib
SOURCELIBS:
DEFFILE: C:/WINCE500/public/common/oak/lib/ARMV4I/retail/sdhc_sc2410.def
EXEENTRY: WinMain
DLLENTRY: DllEntry
makefile.def: BUILDROOT is C:/WINCE500/public/common/cesysgen
0 Please add _COMMONPUBROOT and __PROJROOT to your tree's cesysgen/sources file.
Directory: C:/WINCE500/PUBLIC/COMMON/CESYSGEN
TARGETNAME: sdhc_sc2410
makefile.def: Including C:/WINCE500/public/common/oak/misc/sources.ReleaseType_OAK//没有设置ReleaseType即默认OAK了
BUILD_MARKER:LINK_DLL_START Linking C:/WINCE500/PBWorkspaces/KITL/WINCE500/smdk2440a_ARMV4I/cesysgen/oak/lib/ARMV4I/retail/sdhc_sc2410.lib
link -lib -out:C:/WINCE500/PBWorkspaces/KITL/WINCE500/smdk2440a_ARMV4I/cesysgen/oak/lib/ARMV4I/retail/sdhc_sc2410.lib -def:C:/WINCE500/public/common/oak/lib/ARMV4I/retail/sdhc_sc2410.def -machine:thumb @C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/nm16D.tmp
————现在知道这个wince下自带的驱动是如何生成的了。哈哈。
——————————————————————————————————————————
现在再来看BSP下的驱动是如何生成的DLL的。
Linking /WINCE500/PLATFORM/SMDK2440A/Src/Drivers/camera/ directory.
BUILD: [00:0000000746:PROG ] 'NMAKE.EXE -i -c BUILDMSG=Stop. LINKONLY=1 NOPASS0=1 MAKEDLL=1'
BUILD: [01:0000000747:INFO ] makefile.def: BUILDROOT is C:/WINCE500/PLATFORM/SMDK2440A
BUILD: [01:0000000748:INFO ] makefile.def: Including C:/WINCE500/PLATFORM/SMDK2440A/sources.cmn
BUILD: [01:0000000749:INFO ] Directory: C:/WINCE500/PLATFORM/SMDK2440A/Src/Drivers/camera
BUILD: [01:0000000750:INFO ] TARGETNAME: camera
BUILD: [01:0000000751:INFO ] makefile.def: Including C:/WINCE500/public/common/oak/misc/sources.ReleaseType_PLATFORM
BUILD: [01:0000000752:PROGC ] Linking C:/WINCE500/platform/smdk2440a/lib/ARMV4I/retail/camera.lib
BUILD: [01:0000000753:INFO ] link -lib -out:C:/WINCE500/platform/smdk2440a/lib/ARMV4I/retail/camera.lib -def:camera.def -machine:thumb @C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/nm91C.tmp
BUILD: [01:0000000754:INFO ] Microsoft (R) Library Manager Version 7.10.4017
BUILD: [01:0000000755:INFO ] Copyright (C) Microsoft Corporation. All rights reserved.
BUILD: [01:0000000756:INFO ]
BUILD: [01:0000000757:INFO ] -nodefaultlib
BUILD: [01:0000000758:INFO ] -ignore:4001
BUILD: [01:0000000759:INFO ] -subsystem:windowsce,5.00
BUILD: [01:0000000760:INFO ] obj/ARMV4I/retail/camera.obj
BUILD: [01:0000000761:INFO ] C:/WINCE500/platform/smdk2440a/lib/ARMV4I/retail/ceddk.lib
BUILD: [01:0000000762:INFO ] Creating library C:/WINCE500/platform/smdk2440a/lib/ARMV4I/retail/camera.lib and object C:/WINCE500/platform/smdk2440a/lib/ARMV4I/retail/camera.exp
BUILD: [01:0000000763:INFO ] set LIB=C:/WINCE500/sdk/CE/lib
BUILD: [01:0000000764:PROGC ] Linking C:/WINCE500/platform/smdk2440a/target/ARMV4I/retail/camera.dll
BUILD: [01:0000000765:INFO ] link /LARGEADDRESSAWARE -out:C:/WINCE500/platform/smdk2440a/target/ARMV4I/retail/camera.dll
————————从这个camera驱动可以看出,BSP和微软自带的驱动生成DLL几乎是一致的,只是第一次生成的lib位置不同而已。
看了build.log文件
已经得出答案:我们选sysgen没有编译微软的源代码,我们装上PB的时候他的源代码的lib已经存在他规定的路径了。
我们实现的过程就是把他的lib拷贝到工程的相应的路径下,makefile再把他转换成DLL——最后打包
注意虽然BSP下的直接规定生成DLL,但是首先也是生成lib的,最后也和微软自带驱动一样,生成DLL。
谢谢各位的帮助:
转载请标明:作者wogoyixikexie@gliet.桂林电子科技大学一系科协,原文地址:http://blog.csdn.net/gooogleman——如有错误,希望能够留言指出;如果你有更加好的方法,也请在博客后面留言,我会感激你的批评和分享。
- 从build.log文件了解wince编译过程(作者:wogoyixikexie@gliet)
- 从makeimg.out文件看PB打包过程(作者:wogoyixikexie@gliet)
- wince 5.0 .2440 5.0BSP的中断过程(作者:wogoyixikexie@gliet)
- 转:wince 5.0 .2440 5.0BSP的中断过程(作者:wogoyixikexie@gliet)
- wince串口之MDD分析(作者:wogoyixikexie@gliet)
- wince 2440串口驱动PDD分析(作者:wogoyixikexie@gliet)
- 如何删除wince的驱动(作者:wogoyixikexie@gliet)
- MMU代码分析(作者:wogoyixikexie@gliet)
- 0UL是什么意思?(作者:wogoyixikexie@gliet)
- eboot中断学习(作者:wogoyixikexie@gliet)
- ZLG7290(wince下)驱动之不停执行同一动作的解决办法(作者:wogoyixikexie@gliet)
- OEMAddressTable 内存映射表是怎么被wince使用的(作者:wogoyixikexie@gliet)
- wince串口线程、中断等相关学习(作者:wogoyixikexie@gliet)
- wince串口线程、中断等相关学习(作者:wogoyixikexie@gliet)
- wince串口打印函数是如何实现的?(作者wogoyixikexie@gliet)
- 提高wince中断响应速度的一种方法(作者:wogoyixikexie@gliet)
- 如何在wince下添加和删除驱动(作者:wogoyixikexie@gliet)
- 转---------------wince串口线程、中断等相关学习(作者:wogoyixikexie@gliet)
- Arrays和Collections的sort方法
- 服务器托管双线技术方案
- CSDN的Metaweblog API接口漏洞
- Tcl 基础知识精华20句
- 常用的网络命令
- 从build.log文件了解wince编译过程(作者:wogoyixikexie@gliet)
- 世界真小...
- 真正中文攻略之 Scarlett~スカーレット(攻略、存档)
- 智慧型算法系列
- 老板希望员工知道的
- 快速排序C
- 选择法C
- 交换法 C
- Eric S. Raymond 五部曲 之 《如何成为一名Hacker》