Como carregar automaticamente um novo VID e PID para o módulo usb_serial

Como carregar automaticamente um novo VID e PID para o módulo usb_serial

Eu tenho um módulo 4G que exige que eu execute

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

após cada inicialização/retomada para tornar o modem visível. Como devo tornar isso automático?

  • Adicione o VID e PID às fontes usb-serial e recompile
  • Crie um script que seja executado na inicialização/retomada e os adicione dinamicamente
  • Algum tipo de regra do udev?

Qual seria a melhor abordagem. Acho que a udevabordagem parece a mais razoável. Presumo que isso também funcionaria em suspensão/retomada?

O modem é um modem HP lt4112 LTE/HSPA+ Gobi 4G (Huawei ME906E).

Pergunta bônus: Por que o comando precisa ser executado novamente após um ciclo de suspensão/retomada. O módulo do kernel é descarregado ou redefinido de alguma forma quando o laptop é suspenso na RAM?

Responder1

Supondo que os IDs do fornecedor e do produto do seu dispositivo estejam configurados acima, ou seja, 03f0e 581drespectivamente, você pode criar umudevregra que irá inicializar automaticamente o dispositivo e vinculá-lo alibqmi, como mostrado abaixo:

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

Crie o arquivo usando seu editor de texto favorito (e sudosão necessárias permissões apropriadas) com o conteúdo:

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"

Na sua máquina, você também precisará instalar os pacotes apropriados:

Assumindo o Ubuntu (já que nenhuma informação de distribuição foi fornecida), execute:

sudo apt install libqmi libqmi-utils

Quando terminar, ative a nova regra do udev:

sudo udevadm control --reload-rules
sudo udevadm trigger

Você também pode encontrargerenciador de modem, um front-end GUI para ver estatísticas do modem, como intensidade do sinal da rede, etc., para ser útil.

Pode ser instalado através de:

sudo apt install modem-manager-gui

Será necessária uma inicialização a frio após inserir um cartão SIM.

Atualizar:

Uma alternativa para isso seria instalar o pacote usb-modeswitch-data(que também puxaráinterruptor de modo usbcomo uma dependência).

O pacote contém regras do udev que permitem que o usb-modeswitch inicialize o dispositivo corretamente, com múltiplas entradas para vários dispositivos. Veja o(s) changelog(s) no mesmoaqui.

As regras do udev no pacote são armazenadas em um arquivo chamado 40-usb_modeswitch.rules. Para o seu hardware específico, está na linha 32-33:

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

Depois de instalar usb-modeswitche usb-modeswitch-data, você precisará reinicializar, mesmo depois de recarregar as regras do udev antes que o cartão SIM seja reconhecido.

informação relacionada