0
点赞
收藏
分享

微信扫一扫

编译linuxPC上运行的内核模块的方法

SPEIKE 2022-02-15 阅读 81
linux

编译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$ 
举报

相关推荐

0 条评论