虽然我可以使用lsmod它来显示当前活动的内核模块,但我如何才能看到哪些驱动程序静态内置到内核中并且当前处于活动状态?
一段时间以来,我看到一些红色文本在启动过程中闪烁。今天我决定研究一下。systemctl 服务systemd-modules-load.service失败并显示以下文本:
tomas@bonus-debian:~$ sudo systemctl status systemd-modules-load
? systemd-modules-load.service - 加载内核模块
   已加载:已加载(/lib/systemd/system/systemd-modules-load.service;静态;供应商预设:已启用)
   活动:失败(结果:退出代码),因为 ma。2015-11-09 02:58:48 CET;5 分钟前
     文档:man:systemd-modules-load.service(8)
           人:模块-load.d(5)
  进程:644 ExecStart=/lib/systemd/systemd-modules-load(代码=退出,状态=1/FAILURE)
 主PID:644(代码=退出,状态=1/FAILURE)
十一月 09 02:58:48 奖励-debian systemd[1]:启动加载内核模块...
十一月 09 02:58:48bonus-debian systemd-modules-load[644]:找不到模块“-r usbhid”
十一月 09 02:58:48 奖励-debian systemd[1]:systemd-modules-load.service:主进程退出,代码=退出,状态=1/FAILURE
十一月 09 02:58:48 bonus-debian systemd[1]:无法启动加载内核模块。
十一月 09 02:58:48 bonus-debian systemd[1]:systemd-modules-load.service:单元进入失败状态。
十一月 09 02:58:48 bonus-debian systemd[1]:systemd-modules-load.service:失败,结果为“退出代码”。
我以为我会从谷歌搜索这个问题开始:
哎哟。
我的系统似乎并不介意驱动程序加载失败,因为我没有注意到体验下降,但我仍然想修复它。
由于谷歌让我无处可去,我已经被困住了。我不知道从哪里开始寻找。
如何找出 systemctl 服务“systemd-modules-load”失败的原因?
我无法tun在我的 ArchLinux 机器中加载模块。我正在尝试连接 OpenVPN,但日志显示:
nm-openvpn[6662]: Note: Cannot open TUN/TAP dev /dev/net/tun: No such device (errno=19)
lsmod | grep tun
Run Code Online (Sandbox Code Playgroud)
不返回任何内容:
如果我运行:
sudo modprobe tun
Run Code Online (Sandbox Code Playgroud)
它返回失败,但没有错误消息,而且 lsmod 仍然没有tun. 该模块似乎存在,因为有一个tun.ko.gzin /lib/modules/。
我真的不知道还能尝试什么。
有一个损坏的内核模块,因此我什至无法加载操作系统,因此我无法删除或修复它。是否可以在启动时跳过这个模块,使用内核的参数或其他东西?
请问如何彻底删除某个内核模块?我的意思是真正删除,而不是卸载或阻止加载。我尝试使用rmmod,但它只是卸载模块,与modprobe -r. 所以我得到了所有使用的模块的列表modprobe -n -v并手动删除了它们。
rmmod cramfs:
ERROR: Module cramfs does not exist in /proc/modules
Run Code Online (Sandbox Code Playgroud)
所以当我尝试加载模块时,我得到:
modprobe -v -n cramfs:
FATAL: Could not open '/lib/modules/2.6.32-573.12.1.el6.x86_64/kerne/fs/cramfs/cramfs.ko': No such file or directory
Run Code Online (Sandbox Code Playgroud)
但这意味着,系统仍然可以获得有关已删除模块的一些信息,因为它知道cramfs.ko文件的路径。未加载但可加载模块的示例:
modprobe -v -n jffs2
insmod /lib/modules/2.6.32-573.12.1.el6.x86_64/kernel/lib/zlib_deflat/zlib_deflate.ko 
insmod /lib/modules/2.6.32-573.12.1.el6.x86_64/kernel/fs/jffs2/jffs2.ko
rmmod jffs2
ERROR: Module jffs2 does not exist in /proc/modules
Run Code Online (Sandbox Code Playgroud)
有什么办法可以正确删除模块吗?
我在加载/安装内核模块时遇到问题。内核模块成功构建,但是每当我尝试进行 module_install 时,内核似乎都无法加载。它留下以下错误消息:-
At main.c:158:
    - SSL error:02001002:system library:fopen:No such file or directory: bss_file.c:175
    - SSL error:2006D080:BIO routines:BIO_new_file:no such file: bss_file.c:178 sign-file: certs/signing_key.pem: No such file or directory
    DEPMOD 4.10.0-20-generic
Run Code Online (Sandbox Code Playgroud)
我已经阅读了这个问题,并意识到内核现在已经开始只加载正确签名的模块。我发现/usr/src/<linux version>/certs我系统中的内核源目录没有signing_key.pem私钥文件,因此我看到了这个错误。
我该怎么办 ?我可以手动生成一个signing_key.pem文件并进一步使用它吗?有什么好的方法可以这样做?openssl.cnf在这方面,使用生成私钥/证书文件对我有帮助吗?或者我应该完全避免使用签名模块并尝试在没有任何验证的情况下加载模块?
我将Ubuntu 17.04 与内核 4.10.0-20-generic 一起使用。
我试图了解将 Alpine 安装介质制作为只读类型 (LiveCD) 和标准磁盘模式(可以保存操作系统状态)有什么区别。modloop当本文的作者 ( https://wiki.alpinelinux.org/wiki/Create_UEFI_boot_USB ) 为 UEFI 启动模式配置加载程序条目时,我已经看到了该选项:
Contents of loader/entries/alpine.conf
title    Alpine Linux
linux    /boot/vmlinuz-hardened
initrd   /boot/initramfs-hardened
options  modloop=/boot/modloop-hardened modules=loop,squashfs,sd-mod,usb-storage quiet
Run Code Online (Sandbox Code Playgroud)
问题是本节modloop=/boot/modloop-hardened modules=loop,squashfs,sd-mod中列出的选项如何相互关联,它们的含义是什么?
我升级到 Ubuntu 18.04,vmmon.ko现在无法构建 VMWare Workstation 12.5.9的模块。
/usr/lib/vmware/modules/source/vmmon-only/linux/driver.c: In function ‘LinuxDriverInitTSCkHz’:
/usr/lib/vmware/modules/source/vmmon-only/linux/driver.c:268:22: error: assignment from incompatible pointer type [-Werror=incompatible-pointer-types]
    tscTimer.function = LinuxDriverEstimateTSCkHzDeferred;
                      ^
/usr/lib/vmware/modules/source/vmmon-only/linux/driver.c:270:12: error: ‘struct timer_list’ has no member named ‘data’
    tscTimer.data     = 0;
            ^
/usr/lib/vmware/modules/source/vmmon-only/linux/driver.c: In function ‘init_module’:
/usr/lib/vmware/modules/source/vmmon-only/linux/driver.c:312:4: error: implicit declaration of function ‘init_timer’; did you mean ‘init_timers’? [-Werror=implicit-function-declaration]
    init_timer(&linuxState.pollTimer);
    ^~~~~~~~~~
    init_timers
/usr/lib/vmware/modules/source/vmmon-only/linux/driver.c:313:24: error: ‘struct timer_list’ has no member named ‘data’
    linuxState.pollTimer.data = 0;
                        ^
/usr/lib/vmware/modules/source/vmmon-only/linux/driver.c:314:34: error: assignment from incompatible pointer type [-Werror=incompatible-pointer-types]
    linuxState.pollTimer.function = LinuxDriverPollTimeout; …Run Code Online (Sandbox Code Playgroud) 我想用 来控制我的显示器亮度ddcutil,这需要i2c-dev加载模块。
它不会自动加载,因此我按照ArchWiki 上的说明尝试使用 systemd 自动加载它。systemd-modules-load.service没有错误,但启动时未加载该模块。
# Not loaded\n[rcorre@midova ~]$ sudo ddcutil setvcp 10 10\nDisplay not found\n\n# But I\'ve got a file in modules-load.d\n[rcorre@midova ~]$ cat /etc/modules-load.d/i2c-dev\ni2c-dev\n\n# The logs have always been rotated on boot ...\n[rcorre@midova ~]$ sudo systemctl status systemd-modules-load\n\xe2\x97\x8f systemd-modules-load.service - Load Kernel Modules\n   Loaded: loaded (/usr/lib/systemd/system/systemd-modules-load.service; static; vendor preset: disabled)\n   Active: active (exited) since Thu 2019-09-05 06:51:35 EDT; 14min ago\n     Docs: man:systemd-modules-load.service(8)\n           man:modules-load.d(5)\n Main PID: …Run Code Online (Sandbox Code Playgroud) 我在加载我自己为安全启动编译和签名的内核模块时遇到困难。有问题的模块是ec_sys,位于drivers/acpi内核树的目录中。
我使用的是 Debian 11 stable,内核版本 5.10.0-14-amd64,内核版本 5.10.113-1。
简而言之,问题是我尝试加载模块,例如:
sudo modprobe -f ec_sys
Run Code Online (Sandbox Code Playgroud)
以错误结束
modprobe:错误:无法插入“ec_sys”:不允许操作
dmesg 产生以下结果:
锁定:modprobe:未签名模块加载受到限制;参见 man kernel_lockdown.7
如果我理解正确的话,锁定应该阻止将未签名的模块加载到内核中,但事实上我确实按照 Debian 关于该主题的官方文档对其进行了签名,并且进展顺利,没有任何问题。我不知道为什么它仍然被阻止。
只是为了实际加载模块,我什至尝试通过 SysRq+x 组合完全禁用内核锁定,但似乎此内核版本不支持它(根本无法识别“x”命令)。
对于更多背景信息,以下是我在注册机器所有者密钥并用其签署模块之前构建模块所执行的步骤。
# Get the source code
apt source linux 
cd linux-5.10.113
# Generate .config
make localmodconfig
# Enable ec_sys via menuconfig (or just set CONFIG_ACPI_EC_DEBUGFS=m in .config)
make menuconfig
# Prepare modules
make modules_prepare
# Build acpi modules as they're the only ones of interest …Run Code Online (Sandbox Code Playgroud) kernel-module ×10
linux ×8
kernel ×3
boot ×2
debian ×2
linux-kernel ×2
ubuntu ×2
alpine-linux ×1
arch-linux ×1
c ×1
command-line ×1
display ×1
drivers ×1
secure-boot ×1
ssl ×1
systemd ×1
usb-hid ×1
vpn ×1