
我有一個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 分別如上面配置,即03f0
和581d
,您可以建立一個烏德夫規則將自動初始化設備並將其綁定到庫米, 如下圖所示:
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 規則也是如此。