1. 程式人生 > >linux驅動模組(多檔案)的makefile實現

linux驅動模組(多檔案)的makefile實現

方式1常用於編寫,除錯階段。驅動原始碼的資料夾位置獨立自由,只要在中指定好Linux核心原始碼的路徑。

方式2常用於最後整合階段,在除錯基本完成後,可以將驅動原始碼檔案(夾)放置在Linux核心原始碼的driver/xxx/的相應路徑中,修改本層和上層的Makefile和KConfig檔案,並重新make menuconfig核心,可以在Menu中選中新加入的驅動模組,然後make module,就可以在驅動原始碼資料夾生成.ko檔案。

方式1:

 本地Makefile檔案內容如下:

  1. ifeq ($(KERNELRELEASE),)           #開始滿足這個條件
  2. KERNELDIR ?= /opt/xxxxxx/linux-2.6
    .32.2#指定Linux核心目錄位置
  3. PWD := $(shell pwd)    #列印當前驅動原始碼的本地位置
  4. modules:               #編譯為驅動模組
  5.     $(MAKE) -C $(KERNELDIR) M=$(PWD) modules  
  6. #-C 指定核心Makefile的路徑,可以使用相對路徑。
  7. #-M 指定要編譯的檔案的路徑,同樣可以使用相對路徑。
  8. modules_install:  
  9.     $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install  
  10. clean:  
  11.     rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions modules.order Module.symvers  
  12. .PHONY: modules modules_install clean  
  13. else#再次讀取這個Makefile檔案時,下面的執行
  14. MODULE_NAME := ecat    #指定驅動模組的名字
  15. # 注意:驅動模組的名字 千萬 不能和本資料夾內的任何檔案同名!
  16. RESMAIN_CORE_OBJS := ecat2440.o    #指定驅動模組的核心檔案(有init 和 exit)
  17. RESMAIN_GLUE_OBJS := ecateoe.o eoeappl.o mcihw.o ecatslv.o mailbox.o ecatappl.o #依賴檔案
  18. $(MODULE_NAME)-objs := $(RESMAIN_GLUE_OBJS) $(RESMAIN_CORE_OBJS)   
  19. #xxx-objs := 指定驅動模組的所有依賴檔案
  20. obj-m := ecat.o   #最終由xxx-objs連結生成ecat.o,再生成ecat.ko
  21. endif  
  22. # change by myself for test 

方式2:

1. 本地Makefile

  1. #CONFIG_ECAT_DRV為m時編譯為模組,為y時編進核心
  2. obj-$(CONFIG_ECAT_DRV) += ecat.o  
  3. #-objs指定依賴的多個.o檔案
  4. ecat-objs := ecateoe.o eoeappl.o mcihw.o ecatslv.o mailbox.o ecatappl.o ecat2440.o  

2. 本地Kconfig

  1. #建立一個本地子目錄。“”為顯示的目錄名字
  2. menu "ecat driver here"
  3.     depends on NET  #依賴於上層的某個開關
  4. config ECAT_DRV  #配置變數名,必須和Makefile中的變數後半段一樣 
  5.     bool "ecat driver"#bool量, 顯示的名字
  6.     ---help---  #下面為要顯示的幫助文字
  7.         This is test for ecat.  
  8. endmenu  #本地子目錄結束

3. 上層Makefile

  1. *  
  2. *#新增下面這一句
  3. obj-$(CONFIG_ECAT_DRV) += ecat/  #開啟下一級目錄編譯
  4. *  
  5. *  

4. 上層Kconfig

  1. *  
  2. *#新增下面這一句
  3. source "driver/xxx/ecat/Kconfig"
  4. #匯入子資料夾中的Kconfig檔案,可以為相對路徑
  5. *  
  6. *  

 轉載自:http://blog.csdn.net/keyearth/article/details/6338614