Как скомпилировать модуль ядра Linux без Makefile ядра? - PullRequest
0 голосов
/ 08 мая 2020

У меня есть устройство ARM Linux, но у меня нет Makefile ядра для сборки модуля ядра.

У меня есть кросс-компилятор G CC для этой арки.

Как я могу скомпилировать модуль ядра без Makefile ядра?

1 Ответ

1 голос
/ 08 мая 2020

Как я могу скомпилировать модуль ядра, не имея 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...