编译linuxPC上运行的内核模块的方法
查看PC内核版本
lzc@lzc-ThinkPad-T430:/opt/Typora-linux-x64$ uname -a
Linux lzc-ThinkPad-T430 5.13.0-27-generic #29~20.04.1-Ubuntu SMP Fri Jan 14 00:32:30 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
编写Makefile
obj-m:=test_module.o
KDIR:=/lib/modules/5.13.0-27-generic/build/
all:
make -C $(KDIR) M=$(PWD) modules
clean:
rm -f *.o *.ko *.mod *.mod.c *.symvers *.bak *.order
编写源代码
#include <linux/module.h>
#include <linux/kernel.h>
static int __init test_module_init(void)
{
printk(KERN_INFO "---test_module_init\n");
return 0;
}
static void __exit test_module__exit(void)
{
printk(KERN_INFO "---test_module_exit\n");
}
module_init(test_module_init);
module_exit(test_module__exit);
MODULE_LICENSE("GPL");
编译
编译
进入源码目录执行make命令
lzc@lzc-ThinkPad-T430:~/work/c/kernel/test$ make
make -C /lib/modules/5.13.0-27-generic/build/ M=/home/lzc/work/c/kernel/test modules
make[1]: 进入目录“/usr/src/linux-headers-5.13.0-27-generic”
CC [M] /home/lzc/work/c/kernel/test/test_module.o
MODPOST /home/lzc/work/c/kernel/test/Module.symvers
CC [M] /home/lzc/work/c/kernel/test/test_module.mod.o
LD [M] /home/lzc/work/c/kernel/test/test_module.ko
BTF [M] /home/lzc/work/c/kernel/test/test_module.ko
Skipping BTF generation for /home/lzc/work/c/kernel/test/test_module.ko due to unavailability of vmlinux
make[1]: 离开目录“/usr/src/linux-headers-5.13.0-27-generic”
lzc@lzc-ThinkPad-T430:~/work/c/kernel/test$
清理
lzc@lzc-ThinkPad-T430:~/work/c/kernel/test$ make clean
rm -f *.o *.ko *.mod *.mod.c *.symvers *.bak *.order
lzc@lzc-ThinkPad-T430:~/work/c/kernel/test$ make
加载和卸载模块
lzc@lzc-ThinkPad-T430:~/work/c/kernel/test$ sudo insmod test_module.ko
lzc@lzc-ThinkPad-T430:~/work/c/kernel/test$ lsmod | grep test_module
test_module 16384 0
lzc@lzc-ThinkPad-T430:~/work/c/kernel/test$ sudo rmmod test_module.ko
lzc@lzc-ThinkPad-T430:~/work/c/kernel/test$ lsmod | grep test_module
lzc@lzc-ThinkPad-T430:~/work/c/kernel/test$
查看日志
lzc@lzc-ThinkPad-T430:~/work/c/kernel/test$ dmesg | grep test_module
[ 1078.369973] test_module: loading out-of-tree module taints kernel.
[ 1078.370031] test_module: module verification failed: signature and/or required key missing - tainting kernel
[ 1078.370448] ---test_module_init
[ 1159.494605] ---test_module_exit
[ 1307.161964] ---test_module_init
[ 1351.762579] ---test_module_exit
lzc@lzc-ThinkPad-T430:~/work/c/kernel/test$