驱动程序嵌入linux内核

一  在Linux内核中增加驱动需要完成以下三项工作:

  • 将编写的源代码复制到Linux内核源代码的相应目录
  • 在目录的Kconfig文件中增加新源代码对应项目的编译配置选项
  • 在目录的Makefile文件中增加对新源代码的编译条目

二. 实例

  • 先把驱动代码first_drv复制到drivers/char目录下

设备驱动程序存放在内核源码树根目录drivers/的子目录下,字符设备存在于drivers/char/目录下,块设备存放在drivers/block/目录下i2c设备则存放在drivers/usb/目录下

  • 修改char目录下的Kconfig和Makefile
    • 修改Kconfig

添加下面一句

source"drivers/char/first_drv/Kconfig"

表示将first-drv目录下的Kconfig挂载到char目录下的Kconfig里面(为了使本层的Kconfig文件能起作用,我们需要修改父目录的Kconfig文件,加入 source语句,对驱动程序而言,Kconfig通常和源代码处于同一目录。如果你建立了一个新字目录,而且也希望Kconfig文件存在于该目录中的话,那么就必须在一个已存在的Kconfig文件中将它引入,需要用上面的语句将其写入drivers/char目录中的Kconfig中。

  • 修改上一级Makefile,也就是driver/char/Makefile

添加以下内容:

obj-$(CONFIG_FIRST_DRV)+=first-drv/

这行编译指令告诉模块构建系统在编译模块时需要进入first-drv/子目录中。此时的驱动程序的编译取决于一个特殊配置CONFIG_FIRSTDRV配置选项。

  • 在自己的驱动程序文件夹中添加Kconfig和Makefile
    • 添加Makefile
obj-$(CONFIG_FIRST_DRV)+=first_drv.o
    • 添加Kconfig
menu "FIRST_DRV" 
comment"FIRST_DRV Driver" 
config FIRST_DRV 
tristate "FIRST_DRV" 
default n 
help If you say Y here,support for the usbtmc with computer interface will becompiled into he kernel and accessible via device node. You can also say M here and the driver will be built as a module named usbtmc.ko. 
If unsure,say N. 
endmenu

  正确配置好后,我们在源码下执行make menuconfig后,在出现的LinuxKernel Configuration图形界面中选择DeviceDrivers下的characterdevcie中,将会看到新加的FIRST_DRV菜单,

make modules就可以在内核相关目录下生成ko文件了,make uImage就可以把此模块编译进内核

猜你喜欢

转载自blog.csdn.net/qq_18737805/article/details/85126355