0xFF
USB Wi-Fi 어댑터 접촉불량에 의한 AP 접속 불안정 문제 본문

리눅스 보드에서 AP 구동을 위해 사용 중인 USB 동글이 커넥터 불안정으로 인해 드라이버에서 잦은 타임아웃이 발생하는 것을 확인했다.
[ 1810.128976] usb 2-1: USB disconnect, device number 38
[ 1810.261956] ath: phy9: Could not kill baseband RX
[ 1810.286093] ath: phy9: Failed to wakeup in 500us
[ 1810.297940] ath: phy9: Failed to wakeup in 500us
[ 1810.320928] usb 2-1: ath9k_htc: USB layer deinitialized
처음에는 동글을 뺐다가 다시 꽂은 뒤 hostapd 데몬을 재시작도 해보고
USB 포트를 바꿔 보기도 했으며, 만듦새가 더 나은 연장 케이블로 교체해보기도 했지만 그때뿐이었다.
그래서 atk9k_htc 드라이버를 수정하여 타임아웃 시간을 늘려볼까도 생각했지만 USB를 납땜해버리지 않는 한(어쩌면 납땜했더라도) 근본적인 해결책은 아닐 것 같았다.
따라서 AP 모드로 사용 중인 인터페이스의 상태 변동에 따라 트리거되는 udev 룰을 만들어 hostapd 데몬을 재시작하기로 했다.
# ip addr
...
10: wlxc01c3043146b: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether c0:1c:30:43:14:6b brd ff:ff:ff:ff:ff:ff
먼저 AP로 사용 중인 AR9271 어댑터의 인터페이스 이름을 확인해 본다.
확인 결과 ‘wlxc01c3043146b’ 인 것을 확인할 수 있었다.
SUBSYSTEM=="net", ACTION=="change", KERNEL=="wlxc01c3043146b", RUN+="/usr/local/bin/hostapd_restart.sh"
이제 /etc/udev/rules.d/99-hostapd-watchdog.rules 경로에 위와 같이 udev rule을 작성한다.
이렇게 작성하면 wlxc01c3043146b 장치의 상태가 변경될 때 RUN 구문에 작성한 스크립트가 실행된다.
우리가 희망하는 것은 up에서 down으로 변경되는 상태에 자동으로 대응하는 것이므로 이에 대한 처리 방법을 작성하면 되겠다.
#!/bin/bash
IFACE="wlxc01c3043146b"
for i in {1..5}
do
if [ "$(cat /sys/class/net/$IFACE/operstate)" != "up" ]; then
echo "Trying to restart hostapd.. ($i / 5)"
sleep 5
/bin/systemctl restart hostapd
/bin/systemctl restart set-ip4hostapd
fi
done
스크립트 내용은 AP 인터페이스의 상태를 확인하여 hostapd와 정적 ip를 할당하는 서비스(set-ip4hostapd)를 down이 아닌 상태(=up)가 될때까지 최대 5번 서비스를 재시작하는 것이다.
sudo udevadm control --reload-rules
sudo udevadm trigger
udev를 재시작한 뒤 Wi-Fi 어댑터를 건드려서 인식 불량을 유도한 다음 udev rule에 의해 hostapd가 재시작되는지 확인한다.
'LINUX' 카테고리의 다른 글
| 젯슨 나노에서 Ollama 서버 구동 (0) | 2026.04.28 |
|---|---|
| hostapd와 dnsmasq를 이용한 Wi-Fi AP 및 Captive Portal 테스트 (0) | 2026.02.24 |
| 젯슨 나노 단독망 네트워크 구성 (0) | 2026.02.22 |
| Dragon Q6A Armbian에서 spidev 활성화 (0) | 2026.02.08 |
| QCS6490 Linux Host에서 LLM 구동 실험 (0) | 2026.02.05 |