Почему мой модуль ядра Makefile создает .ko с ядром 4.14, а не 5.6? - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть Makefile, созданный по следующему примеру: модуль ядра кросс-компиляции

Я собрал ядро ​​4.14 Linux из более старого источника Xilinx, а затем собрал вне модуль -kernel с этим сценарием, указывающий на указанные исходные коды ядра 4.14 и заполняющий пробелы для моей конкретной архитектуры платформы. Это сработало. (Он основан на этом коде, если это имеет значение: dma-proxy. c)

Теперь мне нужна более новая версия, и я получил исходные коды Xilinx с ядром с именем 5.6.0- rc1. ( - отсюда ветка "zynqmp-so c -for-v5.7" ) Сборка этого ядра также работала нормально. Если я теперь использую чистую чистую директорию (включая скрытые файлы) с исходным кодом моего модуля и этот Makefile снова, указывая на более новые исходники ядра, он не создает ни файл .ko, ни сообщение об ошибке. Все, что я получаю, это:

make ARCH=arm64 CROSS_COMPILE="aarch64-linux-gnu-" -C /home/sk/src/XILINX/linux-xlnx SUBDIRS=/home/sk/src/XILINX/dma-proxy/driver modules
make[1]: Entering directory '/home/sk/src/XILINX/linux-xlnx'
CALL    scripts/checksyscalls.sh
CALL    scripts/atomic/check-atomics.sh
MODPOST 28 modules
make[1]: Leaving directory '/home/sk/src/XILINX/linux-xlnx'

Нет файла .ko в моей папке, как это было раньше при сборке с 4.14, и в нем ничего не перечисляется. Мне кажется любопытным, что в нем написано «Модули MODPOST 28», тогда как, указывая его на ядро ​​4.14, оно, как ожидается, говорит: «1 модуль» Что-нибудь изменилось между 4.14 и 5.x, что могло бы вызвать это?

1 Ответ

0 голосов
/ 05 мая 2020

Mkay, вот предложенный шаблон makefile из учебника, на который я ссылался в вопросе:

PWD := $(shell pwd)
obj-m += hello.o

all:
        make ARCH=arm CROSS_COMPILE=$(CROSS) -C $(KERNEL) SUBDIRS=$(PWD) modules
clean:
        make -C $(KERNEL) SUBDIRS=$(PWD) clean

Оказывается, что если я заменю SUBDIRS = $ (PWD) с M = $ (PWD) , это работает. Теперь, если я открою Google для этой переменной M в сочетании со сборкой модулей ядра, я найду текст, показывающий это таким образом. Но net также изобилует примерами, использующими SUBDIRS, и он работал для меня с довольно недавним ядром (4.14).

Затем я нашел ссылки, намекающие на то, что это старый способ сделать это, например, отсюда :

make -C $KDIR SUBDIRS=$PWD
    Same as M=. The SUBDIRS= syntax is kept for backwards compatibility.

На самом деле, это кажется очень старым, например, kernel 2.6.7 old . К сожалению, довольно недавние уроки показывают старый способ.

...