【问题标题】:Need help in understanding Makefile for Kernel Module在理解内核模块的 Makefile 方面需要帮助
【发布时间】:2014-05-01 05:13:08
【问题描述】:

我是内核开发的新手。我试图了解 Hello World 的以下生成文件!程序。但我无法完全弄清楚。

obj-m += hello.o


all:

    sudo make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:

    sudo make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

我无法理解 'obj-m += hello.o' 的含义。我知道这里的 m 表示模块,仅此而已。

还有为什么我们不定义 hello.o 的依赖关系

最后我无法完全弄清楚 all: 和 clean: 下定义的编译规则:

任何帮助将不胜感激。!!

【问题讨论】:

    标签: linux-kernel makefile kernel-module


    【解决方案1】:

    obj-m 是 Makefile 变量。它实际上由两部分组成:'obj' 表示引用的目标是内核对象,而 'm' 部分表示要像模块一样构建对象.

    内核构建规则会考虑该变量。由于内核模块遵循一定的约定,运行 Makefile 将导致从源文件 hello.c 创建模块 hello.ko(如果一切正常)。

    obj”变量也可以采用不同的后缀。例如,'obj-y' 将尝试将引用的对象链接到主内核映像,而不是创建模块。后缀也可以引用内核.config 文件变量,像这样:

    obj-$(CONFIG_HOTPLUG) += hotplug.o
    

    在这种情况下,如果 CONFIG_HOTPLUG 设置为 'y',hoplug 对象将被编译到主内核中;如果设置为 'm',则将创建一个单独的 hotplug.ko 可加载模块。如果未设置任何内容(导致 'obj-'),hotplug 将被完全省略。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-22
      • 1970-01-01
      • 2018-01-11
      • 1970-01-01
      • 2020-06-26
      • 2011-02-17
      • 2012-12-18
      • 1970-01-01
      相关资源
      最近更新 更多