Назад | Перейти на главную страницу

Не удалось найти модуль ядра Linux

Я пытаюсь добавить драйвер для конкретного оборудования при запуске.

Файл модуля находится по адресу /lib/modules/4.4.0-66-generic/kernel/drivers/misc/. Также я пробовал /lib/modules/4.4.0-66-generic/kernel/drivers/misc/.

Модуль успешно загружен командой:

$ sudo insmod /lib/modules/4.4.0-66-generic/kernel/drivers/misc/tmk1553b.ko d0=1 t0="MRTAI" nrt=8 misc=1

Но не смог загрузить модуль при запуске.

Конфигурация:

ОС: Ubuntu 16.04.2

$ uname -a
Linux dmitry-ws2 4.4.0-66-generic #87-Ubuntu SMP Fri Mar 3 15:29:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
$ cat /etc/modules
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.

tmk1553b d0=1 t0="MRTAI" nrt=8 misc=1

Сделал команду:

$ depmod

После перезагрузки компьютера или сервиса systemd-load-module module tmk1553b не отображается в списке загруженных модулей ядра.

Результаты диагностики Failed to find module "tmk1553b ..." ошибка.

$ sudo systemctl restart systemd-modules-load.service 
Job for systemd-modules-load.service failed because the control process exited with error code. See "systemctl status systemd-modules-load.service" and "journalctl -xe" for details.
$ systemctl status systemd-modules-load.service 
● systemd-modules-load.service - Load Kernel Modules
   Loaded: loaded (/lib/systemd/system/systemd-modules-load.service; static; vendor preset: enabled)
   Active: failed (Result: exit-code) since Чт 2017-03-30 11:22:17 MSK; 25s ago
     Docs: man:systemd-modules-load.service(8)
           man:modules-load.d(5)
  Process: 3971 ExecStart=/lib/systemd/systemd-modules-load (code=exited, status=1/FAILURE)
 Main PID: 3971 (code=exited, status=1/FAILURE)

мар 30 11:22:17 dmitry-ws2 systemd[1]: Stopped Load Kernel Modules.
мар 30 11:22:17 dmitry-ws2 systemd[1]: Starting Load Kernel Modules...
мар 30 11:22:17 dmitry-ws2 systemd[1]: systemd-modules-load.service: Main process exited, code=exited, status=1/FAILURE
мар 30 11:22:17 dmitry-ws2 systemd[1]: Failed to start Load Kernel Modules.
мар 30 11:22:17 dmitry-ws2 systemd[1]: systemd-modules-load.service: Unit entered failed state.
мар 30 11:22:17 dmitry-ws2 systemd[1]: systemd-modules-load.service: Failed with result 'exit-code'.
$ journalctl -xe
мар 30 11:22:17 dmitry-ws2 sudo[3968]:   dmitry : TTY=pts/1 ; PWD=XXX; USER=root ; COMMAND=/bin/systemctl restart systemd-modules-load.service
мар 30 11:22:17 dmitry-ws2 sudo[3968]: pam_unix(sudo:session): session opened for user root by dmitry(uid=0)
мар 30 11:22:17 dmitry-ws2 systemd[1]: Stopped Load Kernel Modules.
-- Subject: Завершена остановка юнита systemd-modules-load.service.
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Процесс остановки юнита systemd-modules-load.service был завершен.
мар 30 11:22:17 dmitry-ws2 systemd[1]: Starting Load Kernel Modules...
-- Subject: Начинается запуск юнита systemd-modules-load.service
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Начат процесс запуска юнита systemd-modules-load.service.
мар 30 11:22:17 dmitry-ws2 systemd-modules-load[3971]: Failed to find module 'tmk1553b d0="1" t0="MRTAI" nrt=8 misc=1'
мар 30 11:22:17 dmitry-ws2 systemd[1]: systemd-modules-load.service: Main process exited, code=exited, status=1/FAILURE
мар 30 11:22:17 dmitry-ws2 systemd[1]: Failed to start Load Kernel Modules.
-- Subject: Ошибка юнита systemd-modules-load.service
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Произошел сбой юнита systemd-modules-load.service.
-- 
-- Результат: failed.

Что не так?

ОБНОВЛЕНИЕ 1:

$ cat /lib/modules/4.4.0-66-generic/modules.dep | grep tmk1553b
kernel/drivers/misc/tmk1553b.ko:

modprobe команда успешно возвращается

$ sudo modprobe tmk1553b d0=1 t0="MRTAI" nrt=8 misc=1

ОБНОВЛЕНИЕ 2:

Действия, которые я сделал во время установки драйвера:

$ cp tmk1553b.ko /lib/modules/`uname -r`/kernel/drivers/misc/
$ echo tmk1553b d0=1 t0="MRTAI" nrt=8 misc=1 >> /etc/modules
$ depmod
$ reboot

Эта последовательность хорошо работает в Ubuntu 14.04, но не работает в Ubuntu 16.04.2.

Исследования показали, что systemd не может загружать модули с опциями. Решение сработало для меня:

  • поместите имя модуля в /etc/modules
  • разместить параметры модуля в /etc/modprobe.d/options-tmk1553b.conf
$ cat /etc/modules
tmk1553b
$ cat /etc/modprobe.d/options-tmk1553b.conf
options tmk1553b d0=1 t0="MRTAI" nrt=8 misc=1

Похоже, это обычное поведение для дистрибутивов Linux с systemd система инициализации

Для успешной загрузки во время загрузки ваш модуль должен быть загружен с помощью modprobe вместо того insmod. Вы можете попробовать использовать:

modprobe tmk1553b d0=1 t0="MRTAI" nrt=8 misc=1

Бег sudo depmod необходимо после установки модуля по пути /lib/modules/$(uname -r). Вы можете подтвердить это, посмотрев файл своего модуля в файле:

/lib/modules/$(uname -r)/modules.dep