天天看点

linux下将驱动编译进内核

以字符设备驱动为例:

1、首先将驱动源码拷贝进linux源码目录下的/drivers/char下

2、修改char目录下的Kconfig

在menu "Character devices"下面添加如下内容:

config FS4412_LED
	tristate "FS4412LED Device Support"
	depends onARCH_EXYNOS4
help
		support  leddevice on FS4412develop board
           

其中config FS4412_LED用在Makefile中的obj-$(CONFIG_FS4412_LED) +=fs4412_led_drv.o

tristate是三个选项,*为编译进内核,m为模块, 空格为不编译

tristate也可以用bool ,则为两个选项,没有模块选项

depends on 表示依赖

help是帮助

3、修改drivers/char/Makefile

在文件最后添加如下代码:

obj-$(CONFIG_FS4412_LED) += fs4412_led_drv.o
           

4、编译LED驱动到内核中

配置内核时按“空格”选择,配置完成后保存退出

$ make menuconfig
Device Drivers  --->
		Character devices  --->
			<*>FS4412  LED Device Support
           

保存退出,重新编译后把uImage拷贝到tftpboot下

$ make uImage
$ cp arch/arm/boot/uImage/tftpboot
           

menuconfig:配置选项菜单文件

.config:执行menuconfig后的实际配置选项文件

Kconfig:是生成menuconfig的源码

Kconfig---->menuconfig—>.config

Kconfig语法:

menu~endmenu:用于生成一个菜单选项

source:用于读取另外一个Kconfig文件内容。类似于C的#include

choice~endchoice:将多个类似的配置选项组合在一起,供用户单选或者多选