我正在尝试在启动时添加特定硬件的驱动程序。
模块文件位于/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
这似乎是具有systemd
init 系统的 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