在 linux 中使用 makefile 编译内核模块
Compiling a kernel module using makefile in linux
我是内核编程的新手。我写了一个 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 中,我注意每一行都有一个制表符 space!
请大神指点一下问题所在!
将您的 Makefile
移动到模块源 hello.c
所在的位置。这意味着 ~/Desktop/inet/
。看起来您已将 Makefile
放入 /usr/src/
$ sudo mv /usr/src/Makefile ~/Desktop/inet/
$ cd ~/Desktop/inet/
$ make
只需使用 make
而不是 sudo make
我是内核编程的新手。我写了一个 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 中,我注意每一行都有一个制表符 space!
请大神指点一下问题所在!
将您的 Makefile
移动到模块源 hello.c
所在的位置。这意味着 ~/Desktop/inet/
。看起来您已将 Makefile
放入 /usr/src/
$ sudo mv /usr/src/Makefile ~/Desktop/inet/
$ cd ~/Desktop/inet/
$ make
只需使用 make
而不是 sudo make