Linux驱动(8)--内核编译与配置
内核编译驱动
1. Menuconfig
Linux编译器是通过.config文件确认哪些代码要编译进内核,如果我们要配置和裁剪内核,需要对.config文件下手。更改.config文件的工具就是muneconfig, 它是基于文本菜单的配置界面。在Linux源码目录下输入命令
make Menuconfig
即可进入配置界面,具体界面如下如所示:
我们可以通过配置menuconfig菜单来对哪些代码编译进内核进行添加与选择。
2. Kconfig
我们可以通过menuconfig选择哪个驱动或者文件需要编译进内核中,但是我们怎么将我们编写的驱动添加到menuconfig中呢?这就要用到Kconfig文件了,我们编写驱动时,绝大多数是字符型驱动,这里就以字符型驱动为例,来描述一下怎么将自己写好的字符型驱动,添加到menuconfig中。
在源码目录下的每个文件夹下都有一个Kconfig文件,当然驱动文件夹driversl里面的每一个子文件夹里也都有一个Kconfig文件。首先,打开字符型驱动文件夹下的Kconfig文件:
vim LinuxKernelPath/drivers/char/Kconfig
我们找到该文件的末尾中的一段:
...
config LEDS_CTL
bool "Enable LEDS config"
default y
help
Enable LEDS config
config BUZZER_CTL
bool "Enable BUZZER config"
default n
help
Enable BUZZER config
...
我们只需要仿照这个格式填写我们的驱动就可以添加到menuconfig中了,以helloworld为例:
config HELLOWORLD_CTL
bool "Enable HELLOWORLD config"
default n
help
Enable HELLOWORLD config
将这段代码加入到Kconfig中,我们就可以在menuconfig菜单中找到并配置它,具体的位置为:device drivers–>character devices–>Enable HELLOWORLD config:
前面为*号表示编译进内核,为空的话为不编译仅内核。
3. Makefile
现在知道怎么将我们驱动添加到配置文件了,那么我们写好的驱动文件(.c文件)要放在哪里呢?我们编写好的HelloWorld.c文件应该放在内核源目录下的字符型驱动文件夹下。即:
/LinuxKernelPath/drivers/char/
并且我们要在该目录下的Makefile 文件中添加一下语句:
obj-$(CONFIG_HELLOWORLD_CTL) += HelloWorld.o
表示编译的时候会编译HelloWorld.c。观察Makefile可以发现,有的语句是这么写的:
obj-y += misc.o
obi后面直接加一个y表示该驱动是强制编译到内核的。
4. 内核配置与编译的流程
以HelloWorld.c驱动为例,讲述一下将该驱动编译到内核的流程:
① 在该路径
/LinuxKernelPath/drivers/char/
下的Kconfig文件中添加有关驱动的描述:
config HELLOWORLD_CTL
bool "Enable HELLOWORLD config"
default n
help
Enable HELLOWORLD config
② 在menuconfig中配置HELLOWORLD config
③ 在路径:
/LinuxKernelPath/drivers/char/
下加入语句:
obj-$(CONFIG_HELLOWORLD_CTL) += HelloWorld.o
④ 在源码目录下,运行命令编译内核:
make zImage
编译好的内核在该路径中:
/LinuxKernelPath/arch/arm/boot/
⑤ 在内核运行fastboot工具,移植到ARM板中即可。
5. 注意
虽然HelloWorld驱动被编译到了内核中,但是该驱动在板子还是无法使用的,因为没有注册设备,这在下一节中会涉及到,一般来说,驱动要工作之间首先要对设备进行注册!
更多推荐
所有评论(0)