【问题标题】:Very basic makefile linux非常基本的makefile linux
【发布时间】:2017-09-19 07:58:21
【问题描述】:

我是 linux 的初学者,对 makefile 有疑问 我已经通过互联网搜索,但它对我不起作用 我使用的是 ubuntu 16.04v,问题是关于 pg.96-99,编程作业 1,操作系统概念书第 9 章的问题。

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

int simple init(void)
{
printk(KERN INFO "Loading Module\n");
return 0;
}

void simple exit(void)
{
printk(KERN INFO "Removing Module\n");
}

module init(simple init);
module exit(simple exit);

MODULE LICENSE("GPL");
MODULE DESCRIPTION("Simple Module");
MODULE AUTHOR("SGG");

这是代码,问题如下。

此内核模块simple.c 使用随附的 Makefile 编译 这个项目的源代码。要编译模块,请输入 在命令行下:make

编译产生几个文件。文件simple.ko 代表 编译内核模块。以下步骤说明了插入此模块 进入 Linux 内核。

但我不知道如何使用 Makefile 进行编译。 我尝试了很多次,但找不到原因。也许需要附上另一个代码?请告诉我。

【问题讨论】:

  • 你有makefile吗?可以发在这里吗?您在编译此驱动程序的机器上是否安装了内核头文件和源代码?
  • "使用源代码随附的 Makefile" 这表示您应该有一个名为 Makefile 的文件。将此文件放在源代码旁边,然后在文件夹中的终端中写入make
  • @HansPetterTaugbølKragset 我明白了。但是OP得到了什么错误?如果 OP 可以发布错误,这将有助于我们提供一些见解。

标签: c linux makefile


【解决方案1】:

这是非常基本的。如果你有 c 源代码,你需要编译。为了编译和链接 makefile 被使用。您可以编写自己的 makefile 来编译您的加载模块。就是这么说的。


这是一个非常通用的简单内核加载模块示例,您可以编辑源文件名和路径。


只需执行 vi Makefile。

ma​​kefile 模板

obj-m = hello.o
KVERSION = $(shell uname -r)
all:
        make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules
clean:
        make -C /lib/modules/$(KVERSION)/build M=$(PWD) clean

保存并关闭文件。在此之前不要忘记编辑您的加载模块名称。


有关上述 makefile 的信息

  1. Makefile 的第一行称为目标定义,它定义了要构建的模块hello.o。例如obj-m 定义了一个可加载的模块目标

  2. $(shell uname -r) 是返回当前内核构建版本的有用调用

  3. 然后M=$(PWD)变量赋值告诉make命令实际的项目文件在哪里

关于Compiling Linux Kernel Modules.的详细信息

【讨论】:

    【解决方案2】:

    这可能对你的 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
    

    取自http://www.tldp.org/LDP/lkmpg/2.6/html/lkmpg.html

    另外,一定要安装内核头文件

    【讨论】:

      【解决方案3】:

      如果您的模块所在的路径中有一个名为 Makefile 的文件,则转到该路径在命令行中运行命令“make”。这将编译模块代码并创建 simple.ko 文件。

      要将模块加载到内核中,请使用“insmod”命令(例如:“insmod simple.ko”)。要了解更多信息,请在命令行中输入“man insmod”。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-24
        • 2013-09-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多