【问题标题】:How to compile Linux kernel module without kernel Makefile?如何在没有内核 Makefile 的情况下编译 Linux 内核模块?
【发布时间】:2020-05-08 00:38:03
【问题描述】:

我有一个 ARM Linux 设备,但我没有内核的 Makefile 来构建内核模块。

我有这个拱门的 GCC 交叉编译器。

如果没有内核的Makefile,如何编译内核模块?

【问题讨论】:

    标签: linux gcc linux-kernel cross-compiling kernel-module


    【解决方案1】:

    没有内核的Makefile如何编译内核模块?

    你不能。您需要内核 Makefile 来编译模块,以及预构建的内核源代码树。在大多数发行版中,您可以通过 linux-headers-xxx 之类的包获取构建模块的内核源代码,其中 xxx 应该是 uname -r 的输出。


    例如,在 Debian 或 Ubuntu 上:

    sudo apt-get install linux-headers-$(uanme -r)
    

    然后您将在/lib/modules/$(uname -r)/build 找到构建模块所需的文件,您可以使用Makefile 构建模块,如下所示:

    KDIR  := /lib/modules/$(shell uname -r)/build
    PWD   := $(shell pwd)
    obj-m := mymodule.o     # same name as the .c file of your module
    
    default:
        $(MAKE) -C $(KDIR) M=$(PWD) modules
    

    这基本上是调用内核Makefile 告诉它在当前目录中构建模块。


    另外,我不知道你为什么说你在 ARM Linux 设备上,并且你有一个交叉编译器。如果您在设备本身上,则根本不需要交叉编译器。如果您在不同的设备上,那么您需要为目标设备使用适当的uname -r 以获得正确的源并进行构建。您可能需要手动执行此操作,因为 uname -r 的输出并不总是有帮助。

    您还需要在模块Makefile 中指定架构和交叉编译工具链前缀,例如:

    default:
        $(MAKE) -C $(KDIR) M=$(PWD) ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- modules
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-22
      • 1970-01-01
      • 2011-05-03
      • 2011-06-06
      • 1970-01-01
      相关资源
      最近更新 更多