2025-02-10
大多数时候我们都不需要将内核驱动添加到内核源码中,可以通过insmod
命令在需要的时候自己手动安装驱动。不过将驱动添加到源码树中有下面的好处:
make menuconfig
来管理驱动,所以可以将该驱动编译为内置驱动,就不需要手动安装下面来看一下具体是怎么操作。
hello.c
驱动程序#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
static int __init hello_init(void) {
printk(KERN_INFO "Hi, hello!\n");
return 0;
}
static void __exit hello_exit(void) {
printk(KERN_INFO "Goodbye, hello!\n");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("your-name");
MODULE_VERSION("v0.0.1");
MODULE_DESCRIPTION("A simple hello kernel module");
将上面的hello.c
文件移动到源码的drivers/char
目录下。当然你也可以放到其他的驱动目录下。
Kconfig
文件Kconfig
文件和make menuconfig
配置相关,可以通过图形来管理驱动。编辑drivers/char/Kconfig
,在endmenu
之前添加下面内容:
config HELLO
tristate "HELLO DRIVER"
default y
help
hello driver
config HELLO
是驱动配置名称,后面编辑Makefile
时会用到。
tristate
表示这个驱动有3个选项,分别为:不启动
,编译到内核
,编译为单独模块
。
default
有3个值:n
, y
, m
。与tristate
进行对应。
help
是驱动的描述信息,可以在make menuconfig
中查看。
Makefile
文件在drivers/char/Makefile
中添加obj-$(CONFIG_HELLO) += hello.o
。就会在编译字符设备驱动时一起编译hello
驱动。注意这里不会单独编译成hello.ko
驱动,而是会和其他字符设备驱动一起编译成一个built-in.a
静态库。
最后回到内核源码根目录,执行make
命令重新编译内核,可以看到编译hello
驱动的过程。如果想修改驱动编译方式,可以运行make menuconfig
进行设置。具体在Device Drivers
->Character devices
->HELLO DRIVER
选项中。希望对你有所帮助。