0.driverbase-makefile和source简单语法

makefile总是一句话不变:

!INCLUDE $(NTMAKEENV)\makefile.def

意味着直接使用DDK目录下的makefile.def,一般在DDK安装目录的bin文件夹下.

0.driverbase-makefile和source简单语法_第1张图片
source语法:source语法:

1.TARGETNAME:指定build将生成的文件名(不带后缀)
2.TARGETTYPE:指定build将生成的文件后缀名(DRIVER),如下:

定义
生成文件后缀
PROGRAM
应用层程序,不输出任何函数.
.EXE
PROGLIB
应用层程序,同时也有输出函数
.EXE
DYNLINK
动态库文件可以输出函数,
其它二进制文件可以引用这些函数,
标记这不是一个独立的.EXE文件.
.dll
LIBRARY
生成一个静态库,这个文件中包含了函数的内容,其它程序在静态LINK时把这些函数都编译进对应的文件.
当你要生成一个动态库时,同时也会生成一个LIB.
但当你想生成一个静态库时,那么只生成一个LIB文件.
.LIB
EXPORT_DRIVER
一个内核下的DLL,
相当于应用层的DLL,同时生成LIB文件
要有对应的DriverEntry函数
否则出错.
.Sys
DRIVER_LIBRARY
内核状态下的静态库,
包含了函数说明和代码.
相当于应用层的静态库
不能有DriverEntry函数,
否则在LINK时会出现DriverEntry重复的错误.
.Lib
DRIVER
驱动程序
.sys
MINIPORT
驱动程序但不连接
Ntoskrnl.lib或hal.lib
.sys
GDI_DRIVER
图像驱动程序
连接win32k.sys
.dll

3.TARGETPATH: 指定build将生成的obj文件存放的文件夹(可使用相对路径)
4.TARGETLIBS:指定必须链接的文件列表
5.INCLUDES:指定增加的文件夹路径
6.SOURCE:指定build需编译的源码文件
source语法中可以使用大量的环境变量,查看环境变量可以通过打开cmd–>set即可:(使用环境变量无非是%path%或$(path))

而驱动自身的环境变量是通过setenv.bat来设置的,这个文件一般在DDK目录bin文件夹中存在(其实文件内部就是一些设置环境变量的set操作)
你这样调:setenv d:\ddk chk  (set checked environment)驱动在不同的编译中通过它来设置不同的环境变量,所以sources中可以使用:

!if $(FREEBUILD)
#----------if free--------------------------------
!if $(AMD64)
#----------if X64---------
!else
!endif

如果你需要生成map文件可以通过

LINKER_FLAGS=/map:..\Bin\Free\i386\Loader.map

这样来指定
最后贴个自己的小示例:

TARGETTYPE=DRIVER
 
!if $(FREEBUILD)
#----------------------free---------------------
 
!if $(AMD64)
TARGETNAME=Loader64
TARGETPATH=..\Bin\Free64
LINKER_FLAGS=/map:..\Bin\Free64\amd64\Loader.map
!else
TARGETNAME=Loader
TARGETPATH=..\Bin\Free
LINKER_FLAGS=/map:..\Bin\Free\i386\Loader.map
!endif
 
#----------------------chk---------------------
!else
 
!if $(AMD64)
TARGETNAME=Loader64
TARGETPATH=..\Bin\Chk64
LINKER_FLAGS=/map:..\Bin\Chk64\amd64\Loader.map
!else
TARGETNAME=Loader
TARGETPATH=..\Bin\Chk
LINKER_FLAGS=/map:..\Bin\Chk\i386\Loader.map
!endif
 
!endif
 
SOURCES=Driver.cpp

简单说明

TARGETNAME=HelloWDM 		//编译出来的驱动程序的名称
TARGETTYPE=DRIVER       	//编译的类型是驱动程序编译
DRIVERTYPE=WDM         		//驱动程序的类型是WDM驱动程序
TARGETPATH=OBJ             	//生成的文件存放在OBJ目录中
INCLUDES=$(BASEDIR)\inc;\   	//这是需要引入的头文件
         $(BASEDIR)\inc\ddk;\
TARGETLIBS=$(BASEDIR)\lib\*\free\usbd.lib\  //这是需要引入的库文件
SOURCES=HelloWDM.cpp\    	//这是源码文件


 


TARGETNAME=HelloWDM 		//编译出来的驱动程序的名称
TARGETTYPE=DRIVER       	//编译的类型是驱动程序编译
DRIVERTYPE=WDM         		//驱动程序的类型是WDM驱动程序
TARGETPATH=OBJ             	//生成的文件存放在OBJ目录中
INCLUDES=$(BASEDIR)\inc;\   	//这是需要引入的头文件
         $(BASEDIR)\inc\ddk;\
TARGETLIBS=$(BASEDIR)\lib\*\free\usbd.lib\  //这是需要引入的库文件
SOURCES=HelloWDM.cpp\    	//这是源码文件


 

 


LINKER_FLAGS=/map:..\Bin\Free\i386\Loader.map


如果你需要生成map文件可以通过

 

 




 

你可能感兴趣的:(0.driverbase-makefile和source简单语法)