【问题标题】:Compiling Linux kernel - hello world编译 Linux 内核 - hello world
【发布时间】:2012-04-20 21:25:50
【问题描述】:

我正在尝试编译 Linux 内核: http://tldp.org/LDP/lkmpg/2.6/html/lkmpg.html

我有一个简单的 hello world 程序 hello-1.cpp

#include <linux/module.h>
#include <linux/kernel.h>

int init_module(void)
{
    return 0;
}

void cleanup_module(void)
{
}

但我正在尝试使用 Makefile 构建它:

obj-m += hello-1.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

我遇到了几个错误。

make -C /home/pacman/linux-2.6.34.11/2.6.35.6-45.fc14.i686/build M=/home/pacman/p1 modules
make: *** /home/pacman/linux-2.6.34.11/2.6.35.6-45.fc14.i686/build: No such file or directory.  Stop.

make: * [all] 错误 2

我忘记定义什么了吗?

【问题讨论】:

  • 在我的例子中编译正确。在您的情况下,找不到作为参数传递给 make 的构建目录。尝试按照website 中的教程进行操作,看看它是否可以解决您的问题,或者作为替代方案,您可以搜索内核版本的构建目录并将其作为 make 的参数传递。
  • 我应该在 /home/pacman/linux-2.6.34.11 目录中看到构建目录或文件吗?我有一个文件 Kbuild。
  • 我使用 Ubuntu 作为发行版。您正在使用 FC。所以,我找到了这个post,他们解释说你需要有与你的内核相匹配的内核开发包。
  • 有些不匹配,您的 Makefile 命令行以 make -C /lib/modules/... 开头,但命令行显示 make -C /home/pacman/...
  • 你的问题解决了吗?

标签: linux kernel


【解决方案1】:

将 hello-1.cpp 重命名为 hello-1.c(模块必须用 C 编写)并添加以下行:

module_init(init_module);
module_exit(cleanup_module);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-20
    • 1970-01-01
    • 1970-01-01
    • 2018-04-04
    • 2014-07-19
    相关资源
    最近更新 更多