Как автоматически загрузить новый VID&PID в модуль usb_serial

Как автоматически загрузить новый VID&PID в модуль usb_serial

У меня есть модуль 4G, который требует от меня запуска

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

после каждого запуска/возобновления, чтобы модем был виден. Как сделать это автоматическим?

  • Добавьте VID&PID в исходники usb-serial и перекомпилируйте
  • Создайте скрипт, который запускается при запуске/возобновлении работы и добавляет их динамически.
  • Какое-то правило udev?

Какой подход будет лучшим? Я думаю, что этот udevподход звучит наиболее разумно. Я предполагаю, что он будет работать и для приостановки/возобновления?

Модем — HP lt4112 LTE/HSPA+ Gobi 4G Modem (Huawei ME906E).

Бонусный вопрос: Почему команду нужно запускать повторно после цикла приостановки/возобновления. Модуль ядра выгружается или каким-то образом сбрасывается, когда ноутбук приостанавливается в ОЗУ?

решение1

Предполагая, что идентификаторы поставщика и продукта вашего устройства настроены так, как указано выше, т.е. 03f0и 581dсоответственно, вы можете создатьудевправило, которое автоматически инициализирует устройство и привязывает его кlibqmi, как показано ниже:

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

Вы также можете найтимодем-менеджер, графический интерфейс пользователя для просмотра статистики модема, такой как уровень сигнала сети и т. д., может быть полезен.

Его можно установить через:

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потребуется перезагрузка, даже после перезагрузки правил udev, прежде чем SIM-карта будет распознана.

Связанный контент