这是一个简单hello.c文件
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");
static int __init hello_init(void)
{
printk(KERN_ALERT "Hello world\n");
return 0;
}
static void __exit hello_exit(void)
{
printk(KERN_ALERT "Hello world exit\n");
}
module_init(hello_init);
module_exit(hello_exit);
Makefile
obj-m +=hello.o
KDIR:=/lib/modules/2.6.13/build
all:
make -C $(KDIR) M=$(PWD) modules
clean:
make -C $(KDIR) M=$(PWD) clean
一切正常 但如果我在hello.c里添加#include<stdio.h>就出错
make -C /lib/modules/2.6.13/build M=/work modules
make[1]: 正在进入目录 `/work/kernel-2.6.13'
CC [M] /work/hello.o
/work/hello.c:2:19: stdio.h: No such file or directory
make[2]: *** [/work/hello.o] 错误 1
make[1]: *** [_module_/work] 错误 2
make[1]:正在离开目录 `/work/kernel-2.6.13'
make: *** [all] 错误 2
新手不会求指教
------解决方案--------------------
“但如果我在hello.c里添加#include<stdio.h>就出错”
内核中,不能使用用户空间用的 C库的头文件
你这样使用 就是错的
stdio.h 不是让你在kernel中使用的
kernel中有自己的一些头文件
头文件不能乱添加,明确用到了,再添加~!