找不到 Linux 内核模块

找不到 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 星期五 3 月 3 日 15:29:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
$ cat /etc/modules
# /etc/modules:启动时加载的内核模块。
#
# 此文件包含应加载的内核模块的名称
# 在启动时,每行一个。以“#”开头的行将被忽略。

tmk1553b d0=1 t0="MRTAI" nrt=8 杂项=1

发出命令:

$ depmod

重新启动计算机或服务后,systemd-load-module 模块tmk1553b没有出现在已加载的内核模块列表中。

诊断返回Failed to find module "tmk1553b ..."错误。

$ sudo systemctl 重启 systemd-modules-load.service
systemd-modules-load.service 作业失败,因为控制进程退出并显示错误代码。有关详细信息,请参阅“systemctl status systemd-modules-load.service”和“journalctl -xe”。
$ systemctl status systemd-modules-load.service
● systemd-modules-load.service - 加载内核模块
   已加载:已加载(/lib/systemd/system/systemd-modules-load.service;静态;供应商预设:已启用)
   活动:失败(结果:退出代码)自 2017-03-30 11:22:17 MSK;25 秒前
     文档:man:systemd-modules-load.service(8)
           手册:modules-load.d(5)
  进程:3971 ExecStart=/lib/systemd/systemd-modules-load(代码=已退出,状态=1/FAILURE)
 主 PID:3971(代码=已退出,状态=1/失败)

3月30日 11:22:17 dmitry-ws2 systemd[1]: 停止加载内核模块。
3月30日 11:22:17 dmitry-ws2 systemd[1]: 正在开始加载内核模块...
3月30日 11:22:17 dmitry-ws2 systemd[1]: systemd-modules-load.service: 主进程已退出, code=exited, status=1/FAILURE
3月30日 11:22:17 dmitry-ws2 systemd[1]: 无法启动加载内核模块。
3 月 30 日 11:22:17 dmitry-ws2 systemd[1]: systemd-modules-load.service: 单元进入失败状态。
3 月 30 日 11:22:17 dmitry-ws2 systemd[1]: systemd-modules-load.service: 失败,结果为“退出代码”。
$ journalctl-xe
3月30日 11:22:17 dmitry-ws2 sudo[3968]: dmitry : TTY=pts/1; PWD=XXX; USER=root; COMMAND=/bin/systemctl restart systemd-modules-load.service
3 月 30 日 11:22:17 dmitry-ws2 sudo[3968]: pam_unix(sudo:session): dmitry(uid=0) 为用户 root 打开了会话
3月30日 11:22:17 dmitry-ws2 systemd[1]: 停止加载内核模块。
-- 主题: 卸载 systemd-modules-load.service。
-- 定义者:systemd
-- 支持:http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- 启用 systemd-modules-load.service 服务。
3月30日 11:22:17 dmitry-ws2 systemd[1]: 正在开始加载内核模块...
-- 主题:Systemd-modules-load.service 错误日志
-- 定义者:systemd
-- 支持:http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- 访问 systemd-modules-load.service 的服务日志。
3 月 30 日 11:22:17 dmitry-ws2 systemd-modules-load[3971]: 无法找到模块“tmk1553b d0="1" t0="MRTAI" nrt=8 misc=1”
3月30日 11:22:17 dmitry-ws2 systemd[1]: systemd-modules-load.service: 主进程已退出, code=exited, status=1/FAILURE
3月30日 11:22:17 dmitry-ws2 systemd[1]: 无法启动加载内核模块。
-- 主题:systemd-modules-load.service 问题
-- 定义者:systemd
-- 支持:http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- 请参阅 systemd-modules-load.service 文档。
--
—— 搜索结果:失败。

出了什么问题?

更新 1:

$ cat /lib/modules/4.4.0-66-generic/modules.dep | grep tmk1553b
内核/驱动程序/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
$重启

此序列在 Ubuntu 14.04 上运行良好,但在 Ubuntu 16.04.2 上失败

答案1

调查显示,systemd 无法加载带有选项的模块。解决方案对我有用:

  • 将模块名称放置到/etc/modules
  • 将模块选项放置到/etc/modprobe.d/options-tmk1553b.conf
$ cat /etc/modules
tmk1553b
$ cat /etc/modprobe.d/options-tmk1553b.conf
选项 tmk1553b d0=1 t0="MRTAI" nrt=8 misc=1

这似乎是具有systemdinit 系统的 Linux 发行版的常见行为

答案2

为了在启动时成功加载,您的模块应该使用modprobe而不是 来加载insmod。您可以尝试使用:

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

sudo depmod在路径下安装模块后,需要运行/lib/modules/$(uname -r)。您可以在文件中查找模块文件来确认这一点:

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

相关内容