驱动编译配置

当我们写好驱动模块的代码后下一步就是编译,如果我们想让他和内核的其他驱动一样自动化编译完成,我们只需要实现自己的Makefile

可以写成如下:

obj-m:test.o

#obj-y:test.o

#obj-n:test.o

其中后面的

-m:表示编译成可装载模块,需要自己Insmod rmmod,比较灵活,适合调试或者升级替换,免除刷机。

-y:表示跟内核笔译在一起,成为不可拆分的一部分,不需要自己去insmod ,同时意味着更新这个驱动整个内核都需要更新,板子需要重新刷机,不便于调试。

-n:表示不编译该模块。

编译成模块后模块的名称是test.ko 编译只依赖test.c一个c文件如果有多个文件依赖,或者想自己定一个模块名称也可改成如下:

obj-m:=MODULE_NAME.o
MODULE_NAME-objs:=file1.o file2.o\
file3.o

  

当然以上是山寨做法,标准的做法应该是实现Kconfig文件及Makefile,并且使用

make manuconfig

调出图形界面来配置。

 

 

Kconfig

#
# IIC  device configuration
#

menuconfig CHAR_I2C
        tristate "L io device support."
         default y
        ---help---
          This is i2c char devices group.

if CHAR_I2C
config CHAR_I2C_TW8836
        tristate "TW8836 MCU I2C DEVICE"
        depends on I2C
        ---help---
        TW8836 Char device driver
        If you have a mcu chip  working with
        an I2C bus say Yes and it will be accessible from within Linux.
        To compile this driver as a module, choose M here; the module will be
        called char_i2c_tw8836.

endif #CHAR_I2C

  

Makefile

#
# Makefile for the iic tw8836  device drivers.
#
obj-$(CONFIG_CHAR_I2C_TW8836) += tw8836.o

  Kconfig中的内容就是提供给make manuconfig显示界面用的,其中CONFIG_CHAR_I2C_TW8836宏来控制这个模块的编译,这个模块又依赖IIC 

make manuconfig配置保存后,会把内核配置文件更新成

.config

文件保存在内核编译目录下,内核编译的时候就会去找这个配置文件,将相应的配置结果更新的各个Makefile里面,此时CONFIG_CHAR_I2C_TW8836变成y /m/n

 

posted @ 2019-03-28 09:56  mcdull^0^  阅读(612)  评论(0编辑  收藏  举报