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

本文介绍了两种在Linux下编译驱动模块的方法。方式1适用于驱动源码独立于内核源码的情况,通过Makefile指定内核目录和编译路径。方式2适用于集成阶段,将驱动源码放入内核源码树中,修改Makefile和KConfig文件,通过make menuconfig选择驱动模块并编译。
摘要由CSDN通过智能技术生成

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

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

 

方式1:

 本地Makefile文件内容如下:

[python]  view plain copy
  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 plain copy
  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 plain copy
  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 plain copy
  1. *  
  2. *#添加下面这一句  
  3. obj-$(CONFIG_ECAT_DRV) += ecat/  #打开下一级目录编译  
  4. *  
  5. *  

 

4. 上层Kconfig

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值