使用 ERGO WO2-CRC9 USB 调制解调器/路由器会使我的笔记本电脑非常热且耗电

使用 ERGO WO2-CRC9 USB 调制解调器/路由器会使我的笔记本电脑非常热且耗电

我是 LUbuntu 22.04.2 LTS 用户。当我插入 ERGO LTE USB Wi-Fi 路由器 WO2-CRC9 时,笔记本电脑(HP Probook)在电流负载下会保持非常非常热的状态,风扇持续运转,即使路由器的 Wi-Fi 功能已关闭,电池也会在 1...2 小时内放电,而不是 5 小时。

systemd-udevd 进程消耗了近 100% 的处理器资源。“TOP”输出的片段如下:

PID  КОР.      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND    
**** root      **   0  154488 136432   4664 R  99,7   0,2  70:54.78 systemd-udevd                                                                                                         
**** root      **   0   25060   4840   2272 S  22,3   0,0  15:36.65 systemd-udevd
        ...

解决方案来自https://unix.stackexchange.com/questions/233247/why-is-systemd-udev-pegging-my-cpu通过编辑 /lib/udev/rules.d/69-libmtp.rules 没有帮助。

udevadm monitor
UDEV  [104.881828] change   /devices/pci0000:00/0000:00:08.1/0000:03:00.3/usb1/1-2/1-2:1.5/host0/target0:0:0/0:0:0:0/block/sr0 (block)
KERNEL[104.890895] change   /devices/pci0000:00/0000:00:08.1/0000:03:00.3/usb1/1-2/1-2:1.5/host0/target0:0:0/0:0:0:0/block/sr0 (block)
KERNEL[104.898884] change   /devices/pci0000:00/0000:00:08.1/0000:03:00.3/usb1/1-2/1-2:1.5/host0/target0:0:0/0:0:0:0/block/sr0 (block)
KERNEL[104.914578] change   /devices/pci0000:00/0000:00:08.1/0000:03:00.3/usb1/1-2/1-2:1.5/host0/target0:0:0/0:0:0:0/block/sr0 (block)
#(infinite loop)

看来,在断开虚拟 CD-ROM 与 Windows 驱动程序的连接后,UDEV 会尝试找到它,从而导致无限循环。

解决方法是使用宏(从 Ubuntu 16 升级到 18.04 后,systemd-udevd 使用 100% CPU)每次插入调制解调器后,而不是每次系统启动时:

#!/bin/sh
sudo systemctl stop systemd-udevd systemd-udevd-kernel.socket systemd-udevd-control.socket
sleep 5
sudo systemctl start systemd-udevd systemd-udevd-kernel.socket systemd-udevd-control.socket

这也允许在不重启的情况下移除和插入调制解调器。但宏必须重复。如何避免额外的手动操作?

致以最诚挚的问候。维克多。

答案1

警告:此解决方案会导致调制解调器后连接的所有设备运行不正确!抱歉!

为了解决这个问题,需要创建一个 UDEV 规则。但这里有一个问题:

udevadm info --attribute-walk  --path=/devices/pci0000:00/0000:00:08.1/0000:03:00.3/usb1/1-2/1-2:1.5/host0/target0:0:0/0:0:0:0/block/sr0

显示没有唯一属性。为父设备找到了唯一有用的属性:ATTRS{model}=="Mobile CMCC CD "但在绑定之后,设备开始运行之前会有很多事件。如果在此过程中我们重新启动 UDEV,这个复杂的设备将无法运行。因此,我们应该留出足够的时间来执行所有功能。

解决方案。

  1. 创建一个名为restart-udev-from-rule.sh的宏,使其可执行,并将其放入/usr/bin(由于未知原因,无法将以下行格式化为代码):

    /bin/sh #!/bin/sh 复制代码

    睡 5

    systemctl 停止 systemd-udevd systemd-udevd-kernel.socket systemd-udevd-control.socket

    睡 5

    systemctl 启动 systemd-udevd systemd-udevd-kernel.socket systemd-udevd-control.socket

  2. 创建文件 80-local.rules 并将其放入 /etc/udev/rules.d :

    SUBSYSTEM=="scsi", ATTRS{model}=="移动CMCC CD ", ACTION=="添加", RUN+="/usr/bin/restart-udev-from-rule.sh"

  3. 重新开始。

  4. 为了测试效果,udevadm monitor插入调制解调器后运行。

已知限制:

插入调制解调器后 10 秒内不要插入/移除设备,因为 UDEV 将无法运行。即使没有必要,也可以为任何其他调制解调器激活该规则。这是因为没有唯一标识符。

相关内容