我有一个带有 make 文件的设备驱动程序 hello world 的简单代码。它在 12.04 LTS 的情况下执行得很好,但最近我将我的 ubuntu 升级到 14.04,此后相同的程序无法编译。 在
上显示错误消息make
make -C /lib/modules/3.13.0-45-generic/build M= modules
make[1]: Entering directory `/usr/src/linux-headers-3.13.0-45-generic'
make[2]: *** No rule to make target `/usr/src/linux-headers-3.13.0-45-generic/arch/x86/syscalls/syscall_32.tbl', needed by `arch/x86/syscalls/../include/generated/uapi/asm/unistd_32.h'. Stop.
make[1]: *** [archheaders] Error 2
make[1]: Leaving directory `/usr/src/linux-headers-3.13.0-45-generic'
make: *** [all] Error 2
提前致谢......
最佳答案
您的 make 文件不适用于其他版本的内核,因为内核库模块将位于/lib/modules/kernelversion/build 中。
所以你应该使用 make -C/lib/modules/"应该是当前运行的内核"/build
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
这将使用“shell uname -r”自动加载当前运行的内核版本。
示例生成文件
KERNELDIR := /lib/modules/$(shell uname -r)/build
CLEANFILE := *.dis *.o *.ko *.mod.* *.symvers *.*.old
obj-m := hello.o
default:
make -C $(KERNELDIR) M=$(CURDIR) modules
clean:
rm -f $(CLEANFILE)
关于c - 设备驱动程序 Hello world 的 make 文件出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28353795/