c - 设备驱动程序 Hello world 的 make 文件出错

标签 c linux linux-kernel makefile linux-device-driver

我有一个带有 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/

相关文章:

linux - 性能:内核模块符号未显示在分析中

c - Linux Kernel - 为什么一个函数在 System.map 中的地址比实时看到的地址早一个字节?

c++ - 使用 gdb 进行调试 - (gdb) "x/s pointer"输出

c - 年份不显示在 Linux 上

c - Ubuntu 11.10 中 getchar() 的 while 循环中 EOF 不起作用

c - 线程内带有 malloc 的变量

linux - 如何在不提示密码的情况下以不同的用户身份运行 shell 脚本

c++ - 使用枚举的一些很好的例子

php - Memcached 没有出现在 phpinfo() 中

linux-kernel - 正式的 Linux 内核内存模型