【发布时间】:2018-12-27 17:27:55
【问题描述】:
发出 make 命令编译 Linux 内核模块编程指南中的示例 2.4 后,我得到以下响应:
$ make
make -C /lib/modules/3.11.0-12-generic/build M= modules
make[1]: Entering directory `/usr/src/linux-headers-3.11.0-12-generic'
/usr/src/linux-headers-3.11.0-12-generic/arch/x86/Makefile:107: CONFIG_X86_X32 enabled but no binutils support
make[2]: *** No rule to make target `/usr/src/linux-headers-3.11.0-12-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.11.0-12-generic'
make: *** [all] Error 2
以下是相应 makefile 的内容:
obj−m += hello−1.o
obj−m += hello−2.o
all:
make −C /lib/modules/$(shell uname −r)/build M=$(PWD) modules
clean:
make −C /lib/modules/$(shell uname −r)/build M=$(PWD) clean
感谢您的帮助,因为我对这个话题完全是个菜鸟。
编辑:重写 makefile 后,由于某种神秘原因编译成功。
【问题讨论】:
-
arch/x86 /syscalls/syscall_32.tbl中的空格使它看起来像是平台检测代码的某些部分或它所依赖的工具已失败。你有古怪的系统、shell 还是make? -
$(PWD) 似乎也失败了,所以我怀疑您安装的工具有问题。
-
更新内核头文件一次
sudo apt-get install build-essential linux-headers-$(uname -r)
标签: linux linux-kernel kernel-module