您构建程序的方式是构建内核模块而不是 c 程序应用程序的方式。并且stdio.h
不存在于内核开发环境中,这就是您收到错误的原因:
error: "stdio.h: No such file or directory" error
1)如果你想构建一个 linux 应用程序,那么你的 Makefile 是错误的:
你应该修改你的 Makefile
使用以下 Makefile:
all: hello
test: test.c
gcc -o hello hello.c
clean:
rm -r *.o hello
2)如果你想构建一个内核模块那么你的c代码是错误的
- 您不能
stdio.h
在内核空间开发中使用。它在内核开发环境中不存在,所以这就是您收到错误的原因
- 您不能
main()
在内核模块 C 代码中使用
- 您不能
printf()
在内核模块 C 代码中使用
代替using stdio.h
,您必须使用以下 include
#include <linux/module.h> /* Needed by all modules */
#include <linux/kernel.h> /* Needed for KERN_INFO */
代替using int main() {
,你必须使用
int init_module(void) {
而不是使用 printf()
使用printk()
使用以下hello 模块而不是您的 hello 代码
/*
* hello-1.c - The simplest kernel module.
*/
#include <linux/module.h> /* Needed by all modules */
#include <linux/kernel.h> /* Needed for KERN_INFO */
int init_module(void)
{
printk(KERN_INFO "Hello world 1.\n");
/*
* A non 0 return means init_module failed; module can't be loaded.
*/
return 0;
}
void cleanup_module(void)
{
printk(KERN_INFO "Goodbye world 1.\n");
}
有关内核模块开发的更多详细信息,请参阅以下链接