编译一个外部模块

1.下载与目标机器kernel版本一致的kernel源码。本地编译该kernel源码并创建编译外置模块时所需的文件。

~/kernel/linux-5.19$ pwd
/home/meetabs/kernel/linux-5.19

# 编译kernel
make -j16

# 创建编译外置模块时所需的文件
make -j16 modules_prepare

2.编写第一个内核模块helloworld。Makefile文件里面的路径修改为正确的路径。直接执行make即可得到helloworld.ko模块。

#include <linux/init.h>
#include <linux/module.h>

static int __init hello_init(void)
{
printk("Hello World enter\n");
return 0;
}

static void __exit hello_exit(void)
{
printk("Hello World exit\n ");
}

module_init(hello_init);
module_exit(hello_exit);

MODULE_LICENSE("GPL v2");
KERNEL_DIR="/home/meetabs/kernel/linux-5.19"

obj-m += helloWorld.o

build:
make -C ${KERNEL_DIR} M=$(CURDIR) modules
clean:
rm -f *.o *.ko *.mod* *.order *.symvers

3.使用insmod和rmmod命令即可验证helloworld.ko是否生效。

meetabs@testing:~$ insmod helloWorld.ko 
meetabs@testing:~$ dmesg
[ 3768.028551] Hello World enter
meetabs@testing:~$ rmmod helloWorld
meetabs@testing:~$ dmesg
[ 3779.121813] Hello World exit