我写了一个简单的linux模块&它的文件
这是我的模块
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void) {
printk("<1> Hello world!\n");
return 0;
}
static void hello_exit(void) {
printk("<1> Bye, cruel world\n");
}
module_init(hello_init);
module_exit(hello_exit);
这是我的make文件
obj-m :=Hello.o
KDIR = /usr/src/linux-headers-3.5.0-17
all:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
clean:
rm -rf *.o *.ko *.mod.* *.symvers *.order
当我执行make -f MakeFile时 它给出了以下o / p
make -C /usr/src/linux-headers-3.5.0-17 SUBDIRS=/home/linux/Desktop modules
make[1]: Entering directory `/usr/src/linux-headers-3.5.0-17'
WARNING: Symbol version dump /usr/src/linux-headers-3.5.0-17/Module.symvers
is missing; modules will have no dependencies and modversions.
scripts/Makefile.build:44: /home/linux/Desktop/Makefile: No such file or directory
make[2]: *** No rule to make target `/home/linux/Desktop/Makefile'. Stop.
make[1]: *** [_module_/home/linux/Desktop] Error 2
make[1]: Leaving directory `/usr/src/linux-headers-3.5.0-17'
make: *** [all] Error 2
任何人都可以告诉我如何摆脱这些错误。 提前致谢
答案 0 :(得分:2)
在Makefile中进行以下更改
首先通过键入uname -a
来检查正在运行的内核然后转到cd / usr / src /
然后检查你的linux源代码名称
例如
uname -a Linux vinay-VirtualBox 3.2.0-50-generic-pae#76-Ubuntu SMP Tue 7月9日19:24:55 UTC 2013 i686 i686 i386 GNU / Linux
这里的源代码名称是linux-headers-3.2.0-50-generic-pae 在你的情况下同样的事情 e.g
linux-headers-3.2.0-23 linux-headers-3.2.0-23-generic-pae
所以使用linux-headers-3.2.0-23-generic-pae
代替
linux-headers-3.2.0-23即在makefile中替换
即KDIR = / usr / src / linux-headers-3.5.0-17-generic-pae
或为了避免上述问题使用
KDIR == /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
KDIR == /lib/modules/$(shell uname -r)/build
$(MAKE) -C $(KDIR) M=$(PWD) modules
答案 1 :(得分:0)
obj-m += xyz.o
KDIR:=/usr/src/linux-headers-3.5.0-46-generic
all:
make -C $(KDIR) M=$(PWD) modules
clean:
make -C $(KDIR) M=$(PWD) clean
您确定/usr/src/
包含linux-headers-3.5.0-46通用文件吗?
如果不是这样,请下载:
sudo apt-get install linux-headers-3.5.0-46
sudo apt-get install linux-headers-3.5.0-46-generic