分享

linux驱动模块(多文件)的makefile实现

 Runs丶SS11 2014-10-16

方式1常用于编写,调试阶段。驱动源码的文件夹位置独立自由,只要在Makefile中指定好Linux内核源码的路径。

方式2常用于最后集成阶段,在调试基本完成后,可以将驱动源代码文件(夹)放置在Linux内核源码的driver/xxx/的相应路径中,修改本层和上层的Makefile和KConfig文件,并重新make menuconfig内核,可以在Menu中选中新加入的驱动模块,然后make module,就可以在驱动源码文件夹生成.ko文件。

 

方式1:

 本地Makefile文件内容如下:

[python] view plaincopy
  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.   
  13. .PHONY: modules modules_install clean  
  14.   
  15. else   #再次读取这个Makefile文件时,下面的执行  
  16. MODULE_NAME := ecat    #指定驱动模块的名字  
  17. # 注意:驱动模块的名字 千万 不能和本文件夹内的任何文件同名!  
  18. RESMAIN_CORE_OBJS := ecat2440.o    #指定驱动模块的核心文件(有init 和 exit)  
  19. RESMAIN_GLUE_OBJS := ecateoe.o eoeappl.o mcihw.o ecatslv.o mailbox.o ecatappl.o #依赖文件  
  20. $(MODULE_NAME)-objs := $(RESMAIN_GLUE_OBJS) $(RESMAIN_CORE_OBJS)   
  21. #xxx-objs := 指定驱动模块的所有依赖文件  
  22. obj-m := ecat.o   #最终由xxx-objs链接生成ecat.o,再生成ecat.ko  
  23. endif  
  24. # change by myself for test   

 

方式2:

 

1. 本地Makefile

[python] view plaincopy
  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

[python] view plaincopy
  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

[python] view plaincopy
  1. *  
  2. *#添加下面这一句  
  3. obj-$(CONFIG_ECAT_DRV) += ecat/  #打开下一级目录编译  
  4. *  
  5. *  

 

4. 上层Kconfig

[python] view plaincopy
  1. *  
  2. *#添加下面这一句  
  3. source "driver/xxx/ecat/Kconfig"  
  4. #导入子文件夹中的Kconfig文件,可以为相对路径  
  5. *  
  6. *  

 转载自:http://blog.csdn.net/keyearth/article/details/6338614

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多