Huawei Brovi E3372-325 USB LTE 모델을 Raspberry Pi와 함께 작동시키려고 합니다. 이 제품은 상자에서 꺼내자마자 바로 작동하며 연결하면 CDROM으로 나타납니다. (이것은 분명히 Windows에서 드라이버 설치를 자동화하는 데 사용됩니다.)
지금까지 내가 찾은이 게시물udev 규칙 구성 파일을 사용합니다. 시스템이 실행되는 동안 usb_modeswitch를 실행하여 모뎀을 핫플러그하면 이를 활성화할 수 있습니다. 그러나 부팅 시 모뎀이 연결되어 있으면 작동하지 않고 대신 CD ROM으로 나타납니다.
그래서 이제 부팅 시 usb_modeswitch를 실행하는 시스템 서비스를 작성하려고 합니다. 이를 달성하기 위한 단계로 모뎀을 연결한 상태로 부팅한 다음 구성 파일에서 usb_modeswitch 명령을 수동으로 실행해 보았습니다. 그러나 이는 원하는 효과를 얻지 못했습니다.
명령은
/sbin/usb_modeswitch -v 3566 -p 2001 -W -R -w 400
/sbin/usb_modeswitch -v 3566 -p 2001 -W -R
이 작업을 수행하려면 어떻게 해야 합니까? udev 규칙 구성이 나열된 두 명령보다 더 많은 작업을 트리거합니까? 아니면 왜 겉보기에 동일한 명령이 동일한 효과를 내지 못하는 걸까요?
고쳐 쓰다
분명히 전원을 켠 후 모뎀은 잠시 모뎀으로 표시된 다음 CDROM 모드로 전환하지만 모뎀 모드로 다시 전환하라는 명령을 받아들이지 않는 것 같습니다. CDROM 모드는 Windows에서 드라이버를 자동으로 설치하는 데 사용됩니다. 그러나 이는 드라이버를 설치한 후 드라이브가할 수 있는모뎀 모드로 다시 전환합니다. 그렇다면 usb_modeswitch와 Windows 드라이버는 모뎀 모드로 전환하기 위해 서로 다른 명령을 사용하는 것 같습니다.
답변1
이 명령 자체로는 유용한 작업이 수행되지 않습니다. 둘 다 USB 포트를 재설정할 뿐입니다. 실제 모드 전환은 -J
또는 -X
옵션을 사용하여 수행됩니다(전자는 CDC 의사 이더넷 모드로 전환하고 후자는 MBIM 모뎀 모드로 전환).
그러나 모뎀도 마찬가지인 것 같습니다.시작RNDIS 의사 이더넷 모드에서 CDROM 모드로의 전환은 1초 동안 RNDIS 인터페이스에 바인딩된 것이 없는 경우에만 발생합니다. 따라서 정상적인 연결(udev가 드라이버를 즉시 로드할 준비가 된 경우)과 시스템 부팅(USB 장치 초기화와 드라이버 로드 사이에 약간의 시간이 있는 경우) 동안 동작이 달라집니다.
적어도 처음에 내 제품을 받았을 때는 그랬지만, 이틀 후 그 행동이 이상하게 변했습니다. 나는 그것이 펌웨어 업데이트 1을 다운로드했음에 틀림없다고 생각하며 이제는 완전히 다르게 "부팅"되는 것 같습니다. 연결되면 1초 동안만 3566:2001에 머물렀다가 12d1:1f01이 됩니다. usb_modeswitch는 이를 인식하고 CDC false로 전환합니다. 이더넷 모드. (또한 많이 얼었습니다.)
1 단순한 모뎀이 아니라 내부 웹 서버와 자동 업데이트를 갖춘 완벽한 Linux 기기입니다.
답변2
핫 스와핑에 적합한 솔루션을 찾았습니다.그리고시작시.
1. 솔루션을 복사하여 붙여넣습니다.
echo -e "ACTION!=\"add\", GOTO=\"modeswitch_rules_end\"\nSUBSYSTEM!=\"usb\", GOTO=\"modeswitch_rules_end\"\n\n# All known install partitions are on interface 0\nATTRS{bInterfaceNumber}!=\"00\", GOTO=\"modeswitch_rules_end\"\n\n# only storage class devices are handled; negative\n# filtering here would exclude some quirky devices\nATTRS{bDeviceClass}==\"e0\", GOTO=\"modeswitch_rules_begin\"\nATTRS{bInterfaceClass}==\"e0\", GOTO=\"modeswitch_rules_begin\"\nGOTO=\"modeswitch_rules_end\"\n\nLABEL=\"modeswitch_rules_begin\"\n# Huawei E3372-325\nATTRS{idVendor}==\"3566\", ATTRS{idProduct}==\"2001\", RUN+=\"/sbin/usb_modeswitch -v 3566 -p 2001 -W -R -w 400\"\nATTRS{idVendor}==\"3566\", ATTRS{idProduct}==\"2001\", RUN+=\"/sbin/usb_modeswitch -v 3566 -p 2001 -W -R\"\n\nLABEL=\"modeswitch_rules_end\"" | sudo tee /etc/udev/rules.d/40-huawei.rules > /dev/null
echo -e "[Unit]\nDescription=Switch E3372 dongle to modem mode\nAfter=multi-user.target\n\n[Service]\nType=simple\nExecStart=usb_modeswitch -v 3566 -p 2001 -X\nExecStartPost=sleep 1\nExecStartPost=modprobe option\nExecStartPost=sleep 1\nExecStartPost=/bin/bash -c 'echo \"3566 2001 ff\" | sudo tee /sys/bus/usb-serial/drivers/option1/new_id > /dev/null'\nExecStartPost=sleep 1\nExecStartPost=/bin/bash -c 'ls -la /dev/ttyUSB4 | grep dialout && { echo AT^RESET > /dev/ttyUSB4; timeout 2 cat /dev/ttyUSB4; }'\n\n[Install]\nWantedBy=multi-user.target\n" | sudo tee /etc/systemd/system/modeswitch_e3372_modem.service > /dev/null
sudo systemctl daemon-reload
sudo systemctl enable modeswitch_e3372_modem.service
Udev 규칙은 먼저 핫 플러그의 모뎀 모드를 모뎀 모드로 전환하기 위해 위에서 생성되었습니다.이 게시물:
ACTION!="add", GOTO="modeswitch_rules_end"
SUBSYSTEM!="usb", GOTO="modeswitch_rules_end"
# All known install partitions are on interface 0
ATTRS{bInterfaceNumber}!="00", GOTO="modeswitch_rules_end"
# only storage class devices are handled; negative
# filtering here would exclude some quirky devices
ATTRS{bDeviceClass}=="e0", GOTO="modeswitch_rules_begin"
ATTRS{bInterfaceClass}=="e0", GOTO="modeswitch_rules_begin"
GOTO="modeswitch_rules_end"
LABEL="modeswitch_rules_begin"
# Huawei E3372-325
ATTRS{idVendor}=="3566", ATTRS{idProduct}=="2001", RUN+="/sbin/usb_modeswitch -v 3566 -p 2001 -W -R -w 400"
ATTRS{idVendor}=="3566", ATTRS{idProduct}=="2001", RUN+="/sbin/usb_modeswitch -v 3566 -p 2001 -W -R"
LABEL="modeswitch_rules_end"
그런 다음 부팅 후 모뎀을 재설정하여 명령을 받아들이는 1초 동안 모뎀과 통신할 수 있도록 시스템 서비스를 만듭니다(기본적으로).이 게시물):
[Unit]
Description=Switch E3372 dongle to modem mode
After=multi-user.target
[Service]
Type=simple
ExecStart=usb_modeswitch -v 3566 -p 2001 -X
ExecStartPost=sleep 1
ExecStartPost=modprobe option
ExecStartPost=sleep 1
ExecStartPost=/bin/bash -c 'echo "3566 2001 ff" | sudo tee /sys/bus/usb-serial/drivers/option1/new_id > /dev/null'
ExecStartPost=sleep 1
ExecStartPost=/bin/bash -c 'ls -la /dev/ttyUSB4 | grep dialout && { echo AT^RESET > /dev/ttyUSB4; timeout 2 cat /dev/ttyUSB4; }'
[Install]
WantedBy=multi-user.target