解决Linux系统下3G模块和USB总线总断开链接问题 (linux 3g 模块总u总断开链接)
在Linux系统中使用3G模块和USB总线时,经常会遇到断开链接的问题,这是因为Linux系统默认将USB总线接口的电源管理模式设置为开启,这就导致了模块或设备在一段时间没有使用后,就会断开链接。但是,在某些情况下,我们希望这些设备不要断开链接,例如:3G模块在连接网络时,如果频繁断开链接就会导致网络不稳定,甚至断网。因此,这篇文章将分享如何。
1. 查看USB总线电源管理模式的设置
我们需要查看USB总线电源管理模式的设置。在终端中输入以下命令:
$ cat /sys/bus/u/devices/u*/power/control
如果运行结果显示”auto”,则表示电源管理模式处于开启状态,设备会在一段时间没有使用后断开链接。如果后续命令无法解决链接问题,可以将电源管理模式设置成”on”,表示关闭电源管理模式,设备不会随机断开链接。在终端中输入以下命令:
$ sudo su
$ echo on > /sys/bus/u/devices/u*/power/control
这里注意,如果是移动设备的电源管理,如3G模块等,需要先查看这个设备的位置,在上面的命令中将“u*”替换成对应的位置。
2. 解决3G模块的电源管理问题
如果只是解决3G模块的电源管理问题,可以使用以下命令使得系统在检测到3G模块后禁止USB总线电源管理模式:
$ sudo nano /etc/udev/rules.d/50-3g-modem.rules
然后,添加以下代码:
ACTION==”add”, SUBSYSTEMS==”u”, ATTRS{idVendor}==”12d1″, ATTRS{idProduct}==”14dc”, RUN+=”/usr/bin/u_modeswitch -v 12d1 -p 14dc -M ‘5553424312345678000000000000061e000000000000000000000000000000′”
ACTION==”add”, SUBSYSTEMS==”u”, ATTRS{idVendor}==”12d1″, ATTRS{idProduct}==”14dc”, RUN+=”/bin/bash -c ‘modprobe option && echo Y > /sys/module/userial/parameters/rprime_autosuspend'”
ACTION==”remove”, SUBSYSTEMS==”u”, ATTRS{idVendor}==”12d1″, ATTRS{idProduct}==”14dc”, RUN+=”/bin/bash -c ‘echo N > /sys/module/userial/parameters/rprime_autosuspend'”
这里的”12d1″和”14dc”分别代表3G模块的厂商ID和设备ID,如果您的3G模块与这个不同,需要修改成对应的ID。
3. 解决USB总线电源管理模式的问题
如果您的USB总线上连接了多个设备,而只有其中一个设备需要保持不断开链接,我们需要将其他设备的电源管理模式调整成“on”,只有需要保持链接的设备取消电源管理模式。这里需要修改udev规则。在终端中输入以下命令:
$ sudo nano /etc/udev/rules.d/99-disable-autosuspend.rules
然后,添加以下代码:
ACTION==”add”, SUBSYSTEM==”u”, TEST==”power/control”, ATTR{power/control}=”on”
ACTION==”add”, SUBSYSTEM==”u”, ATTR{idVendor}==””, ATTR{idProduct}==””, TEST==”power/control”, ATTR{power/control}=”off”
这里需要将和替换成需要保持链接设备的厂商ID和设备ID。
4. 安装使用TLP
TLP是一款Linux下的电源管理工具,可以优化电池寿命、处理器性能和热管理等。TLP不仅针对笔记本电脑的电源管理,还可以为USB和蓝牙设备提供管理。安装TLP:
$ sudo add-apt-repository ppa:linrunner/tlp
$ sudo apt-get update
$ sudo apt-get install tlp tlp-rdw
启用TLP:
$ sudo systemctl enable tlp
$ sudo systemctl enable tlp-sleep.service