Как узнать, кто загружает конкретный модуль ядра Linux?

#linux-device-driver #kernel-module #spi #imx8 #spidev

Вопрос:

Я создал определенный драйвер в качестве модуля (m) для Linux, spi-imx от NXP. Тем не менее, Linux проверяет этот драйвер при загрузке. Я изо всех сил пытаюсь выяснить, какой процесс/другой модуль/драйвер запрашивает этот драйвер spi-imx. A depmod не показывает никаких зависимостей между spi-imx и другими модулями (за исключением подмодуля spidev as).

После некоторых исследований я обнаружил, что Linux автоматически (?) вызывает modprobe при обнаружении нового устройства. Итак, Linux действительно вызывает modprobe, потому что статус ecSPI в дереве устройств «в порядке»? Если да, то как я могу это предотвратить? Я хотел бы динамически загружать spi-imx из приложения пользовательского пространства через modprobe. История этого: сопроцессор использует эту строку SPI параллельно процессу загрузки Linux. Это, конечно, мешает и прерывает использование сопроцессором линии SPI. Когда сопроцессор завершит передачу данных через SPI (также механизм загрузки), он должен передать строку SPI в Linux.

Я очень благодарен за любые советы, ссылки, подсказки и комментарии по этому поводу.

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

1. Если устройство присутствует в системе и описано в таблицах встроенного ПО (ACPI, дерево устройств и т. Д.), Linux попытается его перечислить. Ваша проблема в неправильном соединении контактов с афаикой. Вам нужно запросить PIN-коды, чтобы драйвер хост-контроллера SPI не был проверен.

2. Несколько хакерским вариантом было бы занести модуль в черный список в файле /etc/modprobe.d/*.conf, содержащем строку blacklist spi-imx . Это предотвратит автоматическую загрузку модуля (устройством, соответствующим одному из его псевдонимов), но его все равно можно загрузить с помощью команд modprobe или insmod .

Ответ №1:

Большое спасибо за ответы. Как вы, ребята, упомянули, я также обнаружил, что Linux сам проверяет устройство, если оно присутствует («хорошо»).

Одним из возможных решений является полное отключение вызова modprobe с помощью записи типа «установить spi-imx /bin/false» в файле *.conf. Но это делает невозможной загрузку драйвера через modprobe для Linux и для пользовательского пространства.

«черный список spi-imx» внутри файла *.conf, расположенного по адресу /etc/modprobe.d/, позволяет предотвратить проверку драйвера Linux при загрузке. После этого модпроб из пользовательского пространства может успешно загрузить драйвер.

Еще раз спасибо и с наилучшими пожеланиями