是否可以从正在运行的内核重新激活(而不是重新加载)驱动程序?

是否可以从正在运行的内核重新激活(而不是重新加载)驱动程序?

与某些经常无法运行的设备作斗争暂停,我遇到了 SE U&L 问题重新加载驱动程序

就我而言,没有检测到一些设备,我可以看到驱动程序(displaylink-driver.service)已加载但不活动/死亡。那么,是否可以重新启动驱动程序呢?

$ lsusb
# missing usb devices (detected by $ lsusb before the issue)
Bus 004 Device 005: ID 17ef:a357 Lenovo USB3.1 Hub             
Bus 004 Device 004: ID 17ef:a359 Lenovo ThinkPad Lan
Bus 004 Device 003: ID 17e9:6015 DisplayLink ThinkPad Hybrid USB-C with USB-A Dock
Bus 004 Device 002: ID 17ef:a356 Lenovo USB3.1 Hub

$ sudo systemctl status displaylink-driver.service 
● displaylink-driver.service - DisplayLink Driver Service
     Loaded: loaded (/lib/systemd/system/displaylink-driver.service; static)
     Active: inactive (dead)

May 26 14:50:56 debija systemd[1]: Starting DisplayLink Driver Service...
May 26 14:50:56 debija systemd[1]: Started DisplayLink Driver Service.
May 26 18:03:21 debija systemd[1]: Stopping DisplayLink Driver Service...
May 26 18:03:22 debija systemd[1]: displaylink-driver.service: Succeeded.
May 26 18:03:22 debija systemd[1]: Stopped DisplayLink Driver Service.
May 26 18:03:22 debija systemd[1]: displaylink-driver.service: Consumed 41min 25.761s CPU time.

答案1

是的,sudo rmmod driver-name && sudo modprobe driver-name。这将删除驱动程序(也称为模块或模块集合)并再次加载它。

有些设备由多个驱动程序提供服务,例如蓝牙或音频,在这种情况下您需要rmmod drv1 drv2 drv3。您需要重复此操作,直到指定命令的每个驱动程序显示“未加载”。

如果rmmod由于某种原因失败,一般只能重启才能恢复。当然有rmmod -f,但它经常导致系统崩溃。

与 不同的是rmmod,您modprobe一次只能使用一名驱动程序。在大多数情况下modprobe drv-name就足够了,因为该命令通常会处理依赖项并自动加载所有所需的驱动程序。

用于lsmod查看您已加载并运行哪些模块。

要了解哪些驱动程序为设备提供服务,请使用sudo lspci -vvv显示哪些 PCI/PCIe 设备使用哪些驱动程序。对于 USB 设备,您可以使用 lshw cf。找出哪些模块与 USB 设备关联?

现在displaylink-driver.service不是一个司机。这是一项服务。并且systemctl不是旨在与设备驱动程序一起使用。这是一个服务经理。一般来说,rmmod smth第一次运行并且显示当前未加载,这可能意味着指定的驱动程序从未使用过。我不确定服务和驱动程序如何相关,因为它们通常不是。有一些非常具体的服务可以加载驱动程序,例如,vboxdrv它是 VirtualBox 的一部分,但仅此而已。它的名称中甚至包含“drv”。 Linux 中的服务旨在启动各种后台作业(控制台应用程序、守护进程、服务器等)。有一个名为的服务systemd-modules-load.service会加载不会自动加载的其他模块。

相关内容