1、hello.c:
1 #include<linux/module.h> 2 #include<linux/kernel.h> 3 #include<linux/init.h> 4 MODULE_LICENSE("GPL"); 5 //__init是属性标志,意思是将函数放入.init.txt的输入段,该段在内核启动完毕后被释放 6 static int __init kmod_init(void) 7 { 8 printk(KERN_ALERT "Hello World!\n"); 9 return 0; 10 } 11 static void __exit kmod_cleanup(void) 12 { 13 printk(KERN_ALERT "Bye World!\n"); 14 } 15 module_init(kmod_init); 16 module_exit(kmod_cleanup); 17 MODULE_AUTHOR("ubuntu-mod-tester"); 18 MODULE_DESCRIPTION("hello");
2、Makefile:
1 obj-m := hello.o 2 KERNELBUILD :=/lib/modules/$(shell uname -r)/build 3 default: 4 make -C $(KERNELBUILD) M=$(shell pwd) modules 5 clean: 6 rm -rf *.o *.ko *.mod.c .*.cmd *.markers *.order *.symvers .tmp_versions
Makefile复制到文件中后,将第4行和第6行开头的空格要修改为tab,否则编译会出错。
-C选项将工作目录转到$(KERNELBUILD)指定的目录下,该目录下有内核顶层的Makefile;
M=选项是把当前路径,传递到内核顶层的Makefile,要求在建立内核模块前,回到指定的路径。
3、编译:
#sudo make
4、加载模块:
#sudo insmod ./hello.ko
5、卸载模块:
#sudo rmmod ./hello
6、查看内核打印:
#dmesg
7、显示如下:
1 [10220.986528] hello: module verification failed: signature and/or required key missing - tainting kernel 2 [10220.987639] Hello World! 3 [10244.817856] Bye World!
标签:kmod,Makefile,编译,init,内核,ubuntu,World,hello,内核模块 From: https://www.cnblogs.com/zzx2bky/p/16971818.html