1. 程式人生 > >8.driverbase-makefile和source簡單語法

8.driverbase-makefile和source簡單語法

makefile總是一句話不變:

!INCLUDE $(NTMAKEENV)\makefile.def

意味著直接使用DDK目錄下的makefile.def,一般在DDK安裝目錄的bin資料夾下.


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檔案可以通過

相關推薦

8.driverbase-makefilesource簡單語法

makefile總是一句話不變: !INCLUDE $(NTMAKEENV)\makefile.def 意味著直接使用DDK目錄下的makefile.def,一般在DDK安裝目錄的bin資料夾下. source語法:source語法: 1.TARGETNAME:指定bui

Flume自定義Source、SinkInterceptor(簡單功能實現)

next generated lose 指定 char atomic -i 根據 進行   1.Event    event是flume傳輸的最小對象,從source獲取數據後會先封裝成event,然後將event發送到channel,sink從channel拿event消

大資料之scala(一) --- 安裝scala,簡單語法介紹,條件表示式,輸入輸出,迴圈,函式,過程,lazy ,異常,陣列

一、安裝和執行Scala解釋程式 --------------------------------------------- 1.下載scala-2.11.7.msi 2.管理員執行--安裝 3.進入scala/bin,找到scala.bat,管理員執行,進入scala命

C#的簡單語法初始化器

程式碼如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using Sy

簡單談談Makefile交叉編譯工具鏈

先來簡單談談生成一個可執行檔案所需要的過程 預處理(preprocessing)->編譯(compilation)->彙編(assembly)->連線(linking)

15/8/27/預設自定義Toast/簡單、多選項、單選、多選AlterDialog

Toast Toast分為預設的和自定義佈局的Toast 1.Toast是獨立, 不依賴於Activity,但是不能對他進行操作,因此通常用於提示資訊, 2.預設的Toast比較簡單其程式碼如下: Toast toast=Toast.mak

Makefileshell指令碼簡單編寫

CROSS =/opt/hisi-linux-nptl/arm-hisiv100-linux/bin/arm-hisiv100-linux-uclibcgnueabi-#CROSS =SRCDIRS =./ \./include\./src\./gsoap\ASFLAGS =CFLAGS =-WallCX

【2017-05-18】WebForm的Repeater控件一些簡單控件

tar bsp textbox span -1 使用 str .text 內容 一、Repeater控件 1、 <%@ %> - 這裏面寫一些聲明和引用的 <% %> - 編寫C#代碼的 <%= %> - 往界面上輸出一個變量的值 &l

shell 中 exec source 命令解析

mage 開始 概念 繼續 uil target 緩沖區 mman bash內部命令 文章大部分來源於:http://www.cnblogs.com/zhaoyl/archive/2012/07/07/2580749.html 作為筆記留存博客備忘。 exec和source

走入計算機的第四天(linux的熱鍵一些簡單的命令)

簡單介紹 所有 環境 信息 名稱 命令 -- log stdin 1linux的簡單介紹 linux是一款免費使用和自由傳播的內似於unix的操作系統軟件,是一個基於POSI和unix的多用戶,多任務,支持多線程和多CPU的一種操作系統。主要用於服務器,特別是網絡服務器

[shell]systemexeclp簡單示例

div print logs $1 script col echo null ram shell腳本:hello.sh #!/bin/bash echo "i am in shell script" echo "param 1 is $1" echo "param 2 i

centos6.8安裝ElasticsearchKibana

elasticsearch kibana 註: Elasticsearch Kibana 的下載地址統一為https://www.elastic.co/downloads/需要相應的安裝軟件可以加本人微信:WJT1356973472(戰神)一:安裝Elasticsearch下載elasticsear

js中的callapply簡單演示

想象 規則 簡單 提升 道理 win 多重繼承 類型 時間 對於想要深入研究js的小夥伴們,call和apply好像就是基礎中的基礎,因為什麽呢?如果你好好看過jq還有一些新的框架,你就會發現,他們最底層的封裝方法就是各種回調。這樣的好處就是省去了開發者要寫大量代

iOS SocialAccounts簡單使用

count mon sed type eid httpurl orm ice sin ACAccountStore *account = [[ACAccountStore alloc] init]; ACAccountType *type = [accoun

bootstrap Table API一些簡單使用方法

type 字段名 specified 匹配 請求方式 css 情況 ebo 空字符 官網: http://bootstrap-table.wenzhixin.net.cn/zh-cn/documentation/ 後端分頁問題:後端返回”rows”、“”total,這樣才能

JDK環境變量與Java簡單語法介紹

jdk環境變量 java Dos界面輸入路徑參數: 如果沒有配置JDK環境變量的話,常用的編譯方式就是把javac.exe程序所在的路徑復制粘貼到cmd中,然後加上java文件的所在路徑進行編譯:含義:找到javac.exe程序,然後告訴需要編譯的路徑(參數) 註意:兩者之間要敲一個空格。PAT

GitGithub簡單教程

發布 code workspace align cal 團隊合作 github init 出現 網絡上關於Git和GitHub的教程不少,但是這些教程有的命令太少不夠用,有的命令太多,使得初期學習的時候需要額外花不少時間在一些當前用不到的命令上。這篇文章主要的目標是用較少的

qt-4.8.4安裝環境變量配置

eight pat too dir ack console int separate fonts 在Linux中分別安裝應用於不同平臺的Qt:PC。嵌入式X86;ARM。 這三者PC版、嵌入式X86版和ARM版的差別主要體如今:當configure時分別加了不同的

SpringMvcservlet簡單對比介紹

標簽 word div ron -name ride path eight edi 引言:由於最近要開始springMVC的學習,所以現在先簡單介紹一下springMVC,自己也是一個初學者,所以也有很多不懂,主要是以討論為主。 一、servlet實現登錄。 咱們先來看

web的基礎html簡單的標簽

新增 演變 gin 不同的 編寫 識別器 tex 單元 樣式 一、企業應用計算的演變 Host-based Client、server Web-base(是當前用的最多的一種模式) 不同的客戶端可以按裝不同的東西,一代比一代更好,但是第三種(BS)是有缺點的,不支持大型