这个问题真心是处理了一个下午,还自己去下载了个最新的内核拿来编译,其实是完全没必要的,因为ubuntu系统是可以直接下载新内核的。
你可以在/usr/src/文件夹下找到这些内核文件夹,比如说我自己的系统:
写博客的时候使用的是3.13.0-19的内核。
写一个hello.c的测试文件:
1 #include <linux/kernel.h> /*Needed by all modules*/ 2 #include <linux/module.h> /*Needed for KERN_* */ 3 #include <linux/init.h> /* Needed for the macros */ 4 5 MODULE_LICENSE("GPL"); 6 7 static int year=2014; 8 9 static int hello_init(void) 10 { 11 printk(KERN_WARNING "Hello kernel, it's %d!\n",year); 12 return 0; 13 } 14 15 16 static void hello_exit(void) 17 { 18 printk("Bye, kernel!\n"); 19 } 20 21 /* main module function*/ 22 module_init(hello_init); 23 module_exit(hello_exit);
然后用kbuild标准写一个Makefile文件:
1 obj-m := hello.o 2 3 all : 4 $(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules 5 6 clean: 7 $(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
obj-m := name.o表示会编译一个模块(-m),生成的name.o文件来自于name.c文件。
本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/OS/Linux/
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索文件
, include
, 内核
, static
, 一个
, Modules
<assert.h>
,以便于您获取更多的相关知识。
时间: 2023-01-06