【问题标题】:User Mode Linux - Installing a module error用户模式 ​​Linux - 安装模块错误
【发布时间】:2011-01-30 02:59:55
【问题描述】:

我正在尝试在用户模式 ​​Linux 中的模块上运行“make”来安装一个简单的 makefile。这是我的制作文件:

obj-m    := hello.o

KDIR    := /lib/modules/$(shell uname -r)/build
PWD    := $(shell pwd)

default:
    $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules

当我在用户模式 ​​Linux 中运行它时,我收到以下错误:

make[1]: 进入目录`/lib/modules/2.6.28/build'
make[1]: *** 没有规则来制作目标“模块”。停止。
make[1]: 离开目录`/lib/modules/2.6.28/build'
make: *** [默认] 错误 2

问题是/lib/modules/ 下没有文件。没有 2.6.28 或 build 的目录。根据我的阅读,这些应该是指向/usr/src 的符号链接,但在/usr/src 下,我也看不到任何文件。

【问题讨论】:

    标签: linux-kernel kernel kernel-module user-mode-linux


    【解决方案1】:

    必须使用 UML 内核的源代码和头文件为其编译模块。

    你可以在 UML 中编译它,也可以在主系统中编译它,但你必须使用 UML 的内核头文件和构建脚本

    【讨论】:

    • 谢谢。我想在主系统中编译,并且我在主系统的一个目录中拥有完整的源代码树,我为 UML 实例“制作”并引导到该目录中。您如何使用 UML 的标头并在主系统中构建脚本?再次感谢!
    • @Zach,打开一个创建 linux 内核模块的手册,看看 Makefiles 和编译选项。更改内核的路径。
    • @osgx,谢谢。例如,上面的 makefile 以 /lib/modules/2.6.28/build 为目标。如果我要在我的主机上编译它,它会查看主机 /lib/modules/2.6.28/build 目录。我将如何让它查看将从中编译 UML 的源代码树?我找不到与 /lib/modules/ 相关的未编译源的相关目录.......知道我的意思吗?我的描述可能不够清楚。
    • 将 KDIR 从 KDIR := /lib/modules/$(shell uname -r)/build 更改为 KDIR := /home/Zach/kernels/uml/uml-2.6.36
    • 并添加以制作字符串arch=um
    【解决方案2】:

    您需要构建和安装您正在编译的内核版本。从kernel.org 获取源代码,配置(我认为make menuconfig 从正在运行的内核中获取配置),构建并安装它。你可以在你的主目录中以普通用户进行构建,当然你需要root来安装它。

    编辑:

    以防万一您错过了 - 这里是User Mode Linux HOWTO。它包含用于构建和安装内核和模块的特定项目。希望这会有所帮助。

    【讨论】:

    • 我愿意。我在 UML 中构建和安装 linux 2.6.28。然后我运行 ./linux 进入 UML 实例并尝试编译我为 UML 实例构建的模块。在我的 UML 实例中,我没有 lib/modules/.... 的目录,也没有 /usr/src/.... 的目录,因此上面的 makefile 失败并出现上述错误。
    • 嗯,对UML不太熟悉。您可能可以说服内核构建安装到 UML 挂载的任何目录中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多