Chinaunix首页 | 论坛 | 博客
  • 博客访问: 344910
  • 博文数量: 201
  • 博客积分: 305
  • 博客等级: 二等列兵
  • 技术积分: 500
  • 用 户 组: 普通用户
  • 注册时间: 2012-11-30 16:58
文章分类

全部博文(201)

文章存档

2015年(5)

2014年(12)

2013年(173)

2012年(11)

我的朋友

分类: 嵌入式

2013-09-12 21:07:08

方式1常用于编写,调试阶段。驱动源码的文件夹位置独立自由,只要在Makefile中指定好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.   
  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

  1. #CONFIG_ECAT_DRV为m时编译为模块,为y时编进内核  ecat.o为最终链接的目标文件
  2. obj-$(CONFIG_ECAT_DRV) += ecat.o  
  3. #-objs指定依赖的多个.o文件 这些文件都对应相应的.c文件
  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. *  

 

阅读(1207) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~