Как я могу скомпилировать модуль ядра, не имея 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