Динамическая загрузка ядра Linux с перегрузкой дерева устройств

#linux-kernel #raspberry-pi4

#linux-ядро #raspberry-pi4

Вопрос:

Я хочу создать свой собственный драйвер протокола для моей платы spi, изготовленной на заказ. Платформа, на которую я хочу ее подключить, — это raspberry Pi4 с arm32. Я хочу динамически загружать его с помощью дерева наложенных устройств. Я могу создать файл драйвера, но следующее неясно:

  1. Где именно должен быть размещен драйвер? Я попробовал /lib/modules/5.4.79-v7, /lib/modules/5.4.79-v7/build
  2. Я сделал в config.txt вводим dtoverlays= driver.ko и помещаем dtbo в /boot/overlays. Правильно ли это?
  3. Может ли драйвер загружаться во время выполнения без второй перезагрузки после того, как я поместил файл наложения в нужную папку.
  4. Загружается ли драйвер сначала, если вызывается функция «spi_new_device», или это можно сделать таким образом?

Если я вызываю sudo insmod .ko, драйвер загружается с:

 rpi4: loading out-of-tree module taints kernel.
 

Функция проверки еще не вызвана.

Комментарии:

1. make modules_install INSTALL_MOD_PATH=... разместит его там, где это правильно. Инициализация модуля и проверка устройства — это две отдельные независимые операции (конечно, последняя не может быть выполнена без инициализации драйвера).

2. Вы знаете, где? Переменная INSTALL_MOD_PATH не установлена.

Ответ №1:

  1. Где именно должен быть размещен драйвер? Я попробовал /lib/modules/5.4.79-v7, /lib/modules/5.4.79-v7/build

Ответ: драйвер помещается в /lib/modules/5.4.79-v7/extra, если это дополнительный модуль и сборка с ним.

 make -C /lib/modules/`uname -r`/build M=$PWD modules_install
 
  1. Я сделал в config.txt вводим dtoverlays= driver.ko и помещаем dtbo в /boot/overlays. Правильно ли это?

Ответ: Это можно сделать таким образом с помощью rpi.

  1. Может ли драйвер загружаться во время выполнения без второй перезагрузки после того, как я поместил файл наложения в нужную папку.

Ответ: Если драйвер установлен в extra, он не загружается. Также он не загружается после перезагрузки. Драйвер должен быть загружен с помощью «modprobe», но без расширения «.ko». Modprobe ищет драйвер в lib / modules.