状況に合わせてyoctoで作成した独自のLinuxイメージを実行し、SDカードから起動するstm32mp135d odysseyボードがあります。安いath9k Wi-Fi USBドングルを接続しましたが、ドングルを抜いて再接続するまでWi-Fiインターフェイスが表示されないという迷惑な問題に直面しました。
再起動後のトラブルシューティングに役立ついくつかの結果が表示されます。
場合に備えてカーネル情報が重要です。
root@stm32mp1:~# uname -a
Linux stm32mp1 5.15.67 #1 SMP PREEMPT Fri Mar 15 01:01:46 UTC 2024 armv7l GNU/Linux
lsusb出力。
root@stm32mp1:~# lsusb -v
Bus 002 Device 002: ID 040d:3801 VIA Technologies, Inc. VIA USB2.0 WLAN
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 255 Vendor Specific Class
bDeviceSubClass 255 Vendor Specific Subclass
bDeviceProtocol 255 Vendor Specific Protocol
bMaxPacketSize0 64
idVendor 0x040d VIA Technologies, Inc.
idProduct 0x3801
bcdDevice 1.08
iManufacturer 16 VIA TECH
iProduct 32 VIA USB2.0 WLAN
iSerial 48 12345
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 0x003c
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 500mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 6
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0200 1x 512 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0200 1x 512 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x83 EP 3 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 1
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x04 EP 4 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 1
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x05 EP 5 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0200 1x 512 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x06 EP 6 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0200 1x 512 bytes
bInterval 0
Device Qualifier (for other device speed):
bLength 10
bDescriptorType 6
bcdUSB 2.00
bDeviceClass 255 Vendor Specific Class
bDeviceSubClass 255 Vendor Specific Subclass
bDeviceProtocol 255 Vendor Specific Protocol
bMaxPacketSize0 64
bNumConfigurations 1
Device Status: 0x0000
(Bus Powered)
インターフェイスが表示されない
root@stm32mp1:~# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: end0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
link/ether aa:ce:65:8a:8d:22 brd ff:ff:ff:ff:ff:ff
3: end1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 1000
link/ether 62:7b:ce:1d:79:c4 brd ff:ff:ff:ff:ff:ff
4: usb0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN mode DEFAULT group default qlen 1000
link/ether 96:9d:05:79:2b:95 brd ff:ff:ff:ff:ff:ff
dmesg 出力に ath9k ファームウェアのロードに失敗したことが表示されます。
root@stm32mp1:~# dmesg | grep -i "ath9k"
[ 0.351901] usbcore: registered new interface driver ath9k_htc
[ 4.369966] usb 2-1: ath9k_htc: Firmware ath9k_htc/htc_9271-1.4.0.fw requested
[ 4.387041] usb 2-1: Direct firmware load for ath9k_htc/htc_9271-1.4.0.fw failed with error -2
[ 4.401769] usb 2-1: ath9k_htc: Firmware htc_9271.fw requested
[ 4.421233] usb 2-1: ath9k_htc: Failed to get firmware htc_9271.fw
[ 4.427899] usb 2-1: ath9k_htc: USB layer deinitialized
後ろにモジュールを取り外して再接続しましたが、dmesgに次のメッセージが表示されました。
[ 467.033794] usb 2-1: ath9k_htc: Firmware ath9k_htc/htc_9271-1.4.0.fw requested
[ 467.334719] usb 2-1: ath9k_htc: Transferred FW: ath9k_htc/htc_9271-1.4.0.fw, size: 51008
[ 467.585338] ath9k_htc 2-1:1.0: ath9k_htc: HTC initialized with 33 credits
[ 467.854226] ath9k_htc 2-1:1.0: ath9k_htc: FW Version: 1.4
[ 467.858250] ath9k_htc 2-1:1.0: FW RMW support: On
[ 468.025043] ath9k_htc 2-1:1.0 wlu1: renamed from wlan0
インターフェイスが表示されます
5: wlu1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether 00:12:7b:21:6f:39 brd ff:ff:ff:ff:ff:ff
この時点では、問題なくインターフェイスで Hostapd と wpa_supplicant を使用できます。最初は手動でリセットしてください。これが組み込みデバイスであることを考えると、最終製品ではこれを実行したくありません。 dmesgの出力によれば、起動プロセスの初期にath9kファームウェアをロードしようとすると失敗する可能性があるため、遅延を必要とするか、Linuxの起動後に自動的にリセットする方法が必要です。これを行うためにudevルールを使用して何かをすることができるという漠然とした考えはありますか?しかし、よくわかりません。
私が試したこと
- 示されているようにプログラム的にUSBデバイスをリセットします。ここ
modprobe ath9k
modprobe ath9k_htc
答え1
この質問に自分で答えてください。
私の解決策は、起動が完了した後にUSBデバイスをリセットすることで、私にはうまくいきました。これ郵便はがき。
そこにユーザーがこれを
sudo sh -c "echo 0 > /sys/bus/usb/devices/1-4.6/authorized"
sudo sh -c "echo 1 > /sys/bus/usb/devices/1-4.6/authorized"
このスクリプト(または他の方法)を使用して、リセットしたいWi-Fiデバイスの/ sysパスを見つけることができます。
for X in /sys/bus/usb/devices/*; do
echo "$X"
cat "$X/idVendor" 2>/dev/null
cat "$X/idProduct" 2>/dev/null
echo
done
よりエレガントな解決策があるかもしれませんが、私の目的にはこれが効果的です。