編寫驅動的makefile使要

通常在編譯linux驅動時,咱們須要在交叉編譯環境中進行編譯,因此要在編譯環境中搭建交叉編譯環境。編寫驅動的makefile使須要制定驅動依賴的內核的路徑,makefile寫法以下:
  KERN_DIR = /xxx/xxx/linux-2.6.22.6
  
  all:
      make -C $(KERN_DIR) M=`pwd` modules 
  
  clean:
      make -C $(KERN_DIR) M=`pwd` modules clean
      rm -rf modules.order
  
 obj-m    += buttons.olinux

     KERN_DIR=/XXX/XXX/linux-2.6.22.6,這句是對KERN_DIR進行賦值,肯定後面使用內核源碼時的內核源碼路徑。shell

  make -C $(KERN_DIR) M='pwd' modules,這句是makefile的規則:-C選項的做用是指將當前工做目錄轉移到你所指定的位置,當make的目標爲all時,-C $(KDIR) 指明跳轉到內核源碼目錄下讀取那裏的Makefile。ui

    M=$(PWD) 代表而後從內核makefile中返回到當前目錄繼續讀入、執行當前的Makefile。M是內核根目錄下的Makefile中使用的變量,"M="選項的做用是,當用戶須要以某個內核爲基礎編譯一個外部模塊的話,須要在make modules命令中加入"m=dir",程序會自動到你所指定的dir目錄中查找模塊源碼,將其編譯,生成ko文件。M=‘pwd’這句話是用來制定咱們編譯的驅動的路徑。這句能夠這樣來寫PWD:=$(shell pwd)  M='PWD'。源碼

================================================================================編譯

當make的目標爲all時,-C $(KDIR) 指明跳轉到內核源碼目錄下讀取那裏的Makefile;M=$(PWD) 代表而後返回到當前目錄繼續讀入、執行當前的Makefile。
當從內核源碼目錄返回時,KERNELRELEASE已被被定義,kbuild也被啓動去解析kbuild語法的語句,make將繼續讀取else以前的內容,其爲kbuild語法的語句, 指明模塊源碼中各文件的依賴關係,以及要生成的目標模塊名。
 基礎

相關文章
相關標籤/搜索