如何在没有内核Makefile的情况下编译Linux内核模块?

时间:2020-05-08 00:38:03

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

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

我已经将GCC交叉编译器安装到了这个拱门上。

如何在没有Makefile内核的情况下编译内核模块?

1 个答案:

答案 0 :(得分: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