【问题标题】:Linux Kernel Module Programming Guide - Example 2.4Linux 内核模块编程指南 - 示例 2.4
【发布时间】: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


【解决方案1】:

您的设置中似乎存在冲突,您可以执行以下操作。 1)如果您的安装是 64 位,则检查以下文件 vim /boot/config-3.8.0-19-generic CONFIG_X86_X32=y 那么有问题 它应该 CONFIG_X86_X32=n 和 CONFIG_X86_X64=y

2) 其他选项是使用 apt-get remove binutils 安装删除您的 binutils,然后使用 apt-get install binutils 再次安装

【讨论】:

    【解决方案2】:

    重写makefile解决了问题

    【讨论】:

    • 重写有什么变化?
    【解决方案3】:

    CONFIG_X86_X32 enabled but no binutils support 的常见原因是编译目录中的空格,但这显然不是您的问题。

    如果内核源目录属于root 并且您以非特权用户身份运行,我在某些情况下拥有CONFIG_X86_X32 enabled but no binutils support。使用 sudo make 构建为我解决了这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-21
      • 1970-01-01
      • 2011-05-03
      • 2017-10-01
      • 2011-04-23
      • 2011-06-06
      相关资源
      最近更新 更多