【发布时间】:2015-03-06 13:45:41
【问题描述】:
我是内核编程的新手。我已经编写了一个 hello world 程序,但我无法编译它。我已经搜索并在 /usr/src 下创建了一个 make 文件,然后执行 sudo make 命令来运行它。但它给出了以下错误:
make -C /lib/modules/3.2.0-23-generic-pae/build M=/usr/src modules
make[1]: Entering directory `/usr/src/linux-headers-3.2.0-23-generic-pae'
make[2]: *** No rule to make target `/usr/src/hello.c', needed by `/usr/src /hello.o'. Stop.
make[1]: *** [_module_/usr/src] Error 2
make[1]: Leaving directory `/usr/src/linux-headers-3.2.0-23-generic-pae'
make: *** [all] Error 2
制作文件:
obj-m += hello.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) clean
hello.c(在 ~Desktop/inet/ 中)
#include <linux/module.h>
#include <linux/kernel.h>
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");
}
在 makefile 中,我注意每个新行只有一个制表符空间!
请大家说说问题所在!
【问题讨论】:
-
格式太差了。请正确格式化代码并输出消息。
-
您是从
/usr/src运行make吗?而您的源文件位于$HOME/Desktop/inet?错误来自 make 不知道如何构建一个不存在的文件 (/usr/src/hello.c),因为那不是您的文件所在的位置。我对内核构建系统的了解不够,无法知道正确的修复方法,但这就是问题所在。 -
你的 Makefile 应该是
~Desktop/inet/而不是/usr/src -
如果我没记错的话,你需要将
init_module声明为__attribute__((constructor))。类似于cleanup_module和destructor。
标签: c linux makefile linux-kernel kernel-module