ath9k_htc wifi는 부팅할 때마다 플러그를 뽑았다가 다시 연결해야 합니다.

ath9k_htc wifi는 부팅할 때마다 플러그를 뽑았다가 다시 연결해야 합니다.

상황에 맞게 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 규칙을 사용하여 뭔가를 할 수 있다는 막연한 생각이 있습니까? 하지만 잘 모르겠습니다.

내가 시도한 것들

  1. 표시된 대로 프로그래밍 방식으로 USB 장치를 재설정합니다.여기
  2. modprobe ath9k
  3. 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

더 우아한 해결책이 있을 수 있지만 제 목적에는 이것이 효과적입니다.

관련 정보