如何自动加载新的VID&PID到模块usb_serial

如何自动加载新的VID&PID到模块usb_serial

我有一个4G模块需要我运行

echo '03f0 581d' > /sys/bus/usb-serial/drivers/generic/new_id

每次启动/恢复后使调制解调器可见。我应该如何使其自动?

  • 将VID&PID添加到USB串口源并重新编译
  • 创建在启动/恢复时运行的脚本,动态添加它们
  • 某种 udev 规则?

最好的方法是什么。我认为这种udev方法听起来最合理。我认为这也可以在暂停/恢复期间起作用吗?

调制解调器是 HP lt4112 LTE/HSPA+ Gobi 4G 调制解调器(华为 ME906E)。

额外问题:为什么在挂起/恢复周期后需要重新运行该命令。当笔记本电脑暂停到 RAM 时,内核模块是否会被卸载或以某种方式重置?

答案1

假设您的设备的供应商和产品 ID 分别如上面配置,即03f0581d,您可以创建一个乌德夫规则将自动初始化设备并将其绑定到库米, 如下所示:

file /etc/udev/rules.d/98-modem-rules.rules

使用您喜欢的文本编辑器(需要适当的权限)创建文件,sudo内容如下:

ACTION!="add|change", GOTO="mbim_to_qmi_rules_end"
SUBSYSTEM!="usb|drivers", GOTO="mbim_to_qmi_rules_end"

# load qmi_wwan module
SUBSYSTEM=="usb", \
ATTR{idVendor}=="03f0", ATTR{idProduct}=="581d", \
RUN+="/sbin/modprobe -b qmi_wwan"

# Initialize the LTE lt112 module to operational status:
SUBSYSTEM=="usb", \
ATTR{idVendor}=="03f0", ATTR{idProduct}=="581d", \
ATTR{bConfigurationValue}="3"

# add the new id in the qmi_wwan driver
SUBSYSTEM=="drivers", \
ENV{DEVPATH}=="/bus/usb/drivers/qmi_wwan", \
ATTR{new_id}="03f0 581d"

# load qcserial module
SUBSYSTEM=="usb", \
ATTR{idVendor}=="03f0", ATTR{idProduct}=="581d", \
RUN+="/sbin/modprobe -b qcserial"

# add the new id in the qcserial driver
SUBSYSTEM=="drivers", \
ENV{DEVPATH}=="/bus/usb-serial/drivers/qcserial", \
ATTR{new_id}="03f0 581d"
LABEL="mbim_to_qmi_rules_end"

在您的计算机上,您还需要安装适当的软件包:

假设 Ubuntu(因为没有给出发行版信息),运行:

sudo apt install libqmi libqmi-utils

完成后,激活新的 udev 规则:

sudo udevadm control --reload-rules
sudo udevadm trigger

您可能还会发现调制解调器管理器,一个 GUI 前端,用于查看调制解调器统计信息,例如网络信号强度等,以供使用。

它可以通过以下方式安装:

sudo apt install modem-manager-gui

插入SIM卡后需要冷启动。

更新:

另一种方法是安装该软件包usb-modeswitch-data(它也会引入USB模式开关作为依赖项)。

该软件包包含 udev 规则,允许 usb-modeswitch 正确初始化设备,并为多个设备提供多个条目。请参阅同一内容的变更日志这里

包中的 udev 规则存储在名为40-usb_modeswitch.rules.对于您的特定硬件,其位于第 32-33 行:

# HP hs4112
ATTR{idVendor}=="03f0", ATTR{idProduct}=="581d", RUN+="usb_modeswitch '/%k'"

安装usb-modeswitch和后usb-modeswitch-data,您需要重新启动,即使在识别 SIM 卡之前重新加载 udev 规则也是如此。

相关内容