0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PR: デジタル創作サークルUniProject
UniProject公式HP

TP-Link Archer TX1U NanoをOrange Pi + Armbianで動かすまで ― AIC8800DC、usb_modeswitch、Kernel Oopsとの戦い

0
Posted at

はじめに

Orange Pi PC Plusを、Wake on LANや遠隔管理用の常時稼働ノードにしようと思いました。

そこでUSB Wi-Fiを追加するために買ったのが、

TP-Link Archer TX1U Nano/A

です。

Amazon上では「Wi-Fi 6 / 287Mbps / Bluetoothなし」の小型USB無線LAN子機。

普通なら、

USBに挿す

Wi-Fiが出る

終わり

だと思うじゃないですか。

終わりませんでした。

今回の実機では、Linuxから見ると中身がAICSemi系で、最終的に AIC8800DC として扱う必要がありました。

しかも途中で、

pid:0x3625 vid:0x0110 unsupport

からの

Unable to handle kernel NULL pointer dereference

まで踏みました。

同じUSB子機やAIC8800系で詰まった人向けに、実際に何が起きたかを残しておきます。

この記事は2026年9月8日に実際に作業したログを元にしています。
Armbianやドライバ側は更新されるため、将来そのまま通る保証はありません。

環境

項目 内容
SBC Orange Pi PC Plus
OS Armbian
SoC系統 Allwinner sun8i
最終Kernel 6.18.49-current-sunxi
USB Wi-Fi TP-Link Archer TX1U Nano/A
商品仕様 Wi-Fi 6 / 287Mbps / Bluetoothなし
Linux上のチップ AICSemi AIC8800DC

最初の lsusb

まずUSB子機を挿して、

lsusb

を確認しました。

最初に出てきたのは、Wi-Fiデバイスっぽいものではなく、

a69c:5721 AICSemi AIC MSC

でした。

MSC?

MSC は Mass Storage Class 系のモードです。

つまりこの時点では、

「USB Wi-Fi子機を挿したのに、まだWi-Fi側のUSBデバイスとして立ち上がっていない」

状態でした。

ここでかなり時間を使いました。

usb_modeswitch で切り替える

usb-modeswitch を入れます。

sudo apt update
sudo apt install -y usb-modeswitch

そして、

sudo usb_modeswitch -K -v a69c -p 5721

を実行。

再び、

lsusb

すると、

3625:0110 AICSemi AIC8800DC

へ変わりました。

これでようやく、

AIC8800DC用のドライバを探す

という正しいスタートラインに立てました。

ここでの教訓

製品名が

TP-Link Archer TX1U Nano

だからといって、Linuxでその文字列だけを検索するのでは足りないことがあります。

今回かなり役立ったのは、

a69c:5721
3625:0110
AICSemi
AIC8800DC

という実際のUSB IDとチップ名でした。

次の罠: Kernelとheadersが違う

外部ドライバをビルドしようとしたところ、別の問題がありました。

途中の環境では、

実行中:
6.12.63-current-sunxi

に対して、

headers:
6.18.49-current-sunxi

という状態になっていました。

これはまずい。

確認には、

uname -r
ls -l /lib/modules/$(uname -r)/build
dpkg -l | grep linux-headers

を使いました。

最終的には再起動して、

6.18.49-current-sunxi

へ統一。

外部moduleをビルドするときは、最初にここを見た方がいいです。

ドライバを入れれば終わり……ではなかった

AIC8800系Linux Driverをいくつか試しました。

途中では ronnyf/AIC8800-Linux-Driver 系も試しています。

USB ID 3625:0110 を認識させるため、USB device tableに、

{USB_DEVICE_AND_INTERFACE_INFO(0x3625, 0x0110, 0xff, 0xff, 0xff)},

を追加してビルドする方法も試しました。

module自体はロードされ、

lsmod | grep aic

で、

aic8800_fdrv
cfg80211
aic_load_fw

まで見えるようになりました。

一見すると良さそうです。

しかし lsusb -t を見ると正常にbindされていない。

そして dmesg には、

AICWFDBG(LOGERROR) aicwf_usb_probe pid:0x3625 vid:0x0110 unsupport

が出ていました。

そしてKernel Oops

さらにその直後、

Unable to handle kernel NULL pointer dereference at virtual address 00000000
Internal error: Oops: 5 [#1] SMP THUMB2

まで発生。

ログ上では、

aicwf_usb_free_urb
aicwf_usb_deinit
aicwf_usb_probe

周辺がスタックに出ていました。

この時点で、

USB IDを追加してprobeに入ればOK

ではないことが分かります。

AIC8800系には複数の派生があり、PID・chip mapping・firmwareの組み合わせが合っている必要があるようです。

少なくとも今回の個体では、PIDだけ通す方法では正常動作しませんでした。

一歩進んだ: AIC8800DCとして認識

別のドライバ構成では、かなり先まで進みました。

dmesg に、

Product: AIC8800DC
AICWFDBG(LOGINFO) aicwf_usb_chipmatch USE AIC8800DC
AICWFDBG(LOGINFO) aicwf_parse_usb endpoints = 4
AICWFDBG(LOGINFO) Aic high speed USB device detected

が出現。

さらに、

chip_id=7, chip_sub_id=1

まで読めています。

firmwareも、

/lib/firmware/aic8800DC/fmacfw_patch_8800dc_u02.bin
/lib/firmware/aic8800DC/fmacfw_patch_tbl_8800dc_u02.bin
/lib/firmware/aic8800DC/fmacfw_calib_8800dc_u02.bin

からロードされました。

「来た!」と思ったんですが……

start app fail: -110

次はこれ。

Start app: 00130009, 4
start app fail: -110
dpd calib fail: -110
err_lmac_reqs
aicwf_rwnx_usb_platform_init err -1

最終的にはprobe失敗。

ここで分かったのは、

USB認識
↓
chip判定
↓
firmwareファイル読込

まで成功しても、

まだWi-Fiが使えるとは限らない

ということです。

ドライバ沼、深い。

最終的に使った aic8800d80

最終盤では、

~/aic8800d80/drivers/aic8800

で作業しました。

cd ~/aic8800d80/drivers/aic8800
make

ビルド中、

Skipping BTF generation ... due to unavailability of vmlinux

という表示も出ましたが、今回の環境ではmoduleのビルド自体は完了しました。

続いて、

sudo make install
sudo depmod -a

を実行。

make install により、現在のKernel

6.18.49-current-sunxi

向けのmoduleとして、

aic_load_fw.ko
aic8800_fdrv.ko

などが /lib/modules/.../ 以下へ配置されました。

moduleを確認

lsmod | grep aic

確認できたのは、

aic8800_fdrv
cfg80211
aic_load_fw

です。

必要なら手動で、

sudo modprobe aic_load_fw
sudo modprobe aic8800_fdrv

します。

ただし自動でロードされている場合は不要です。

lsmod だけで安心しない

今回かなり大事だったのがこれ。

lsusb
lsusb -t

です。

lsmod にドライバ名があっても、

そのUSBデバイスへ実際にbindされているとは限りません。

あわせて、

iw dev
ip link
rfkill list
nmcli device status

まで確認した方がいいです。

Wi-Fiへ接続する

最終的なSSID入力操作そのものは保存していた端末ログに残っていなかったため、ここだけ再現用の標準手順です。

nmtui

sudo nmtui

Activate a connection からSSIDを選択。

または nmcli なら、

sudo nmcli device wifi connect "<SSID>" password "<PASSWORD>"

確認:

nmcli device status
ip addr
ip route

疎通:

ping -c 3 1.1.1.1
ping -c 3 google.com

そして再起動後も、

sudo reboot

からの、

lsusb
lsusb -t
lsmod | grep aic
iw dev
nmcli device status

で復帰することを確認します。

今回の流れをまとめる

ざっくりこうでした。

Archer TX1U Nano/Aを挿す
        ↓
a69c:5721 AIC MSC
        ↓
usb_modeswitch
        ↓
3625:0110 AIC8800DC
        ↓
Kernel / headers不一致に気付く
        ↓
6.18.49-current-sunxiへ揃える
        ↓
AIC8800系ドライバを試す
        ↓
3625:0110 unsupport
        ↓
USB ID追加
        ↓
Kernel Oops
        ↓
別構成でAIC8800DC認識
        ↓
firmwareロード
        ↓
start app fail: -110
        ↓
aic8800d80をビルド・インストール
        ↓
Wi-Fi利用可能

同じ症状の人が最初に見るべきもの

個人的には、次の順番で見た方が早いと思います。

uname -r
lsusb
lsusb -t
lsmod | grep aic
iw dev
rfkill list
dmesg | grep -Ei 'aic|firmware|usb|wlan'

特に、

a69c:5721
3625:0110

のどちらで見えているかは重要です。

今後

このOrange Piは、単にWi-Fiを使うためではなく、

iPhone / 外出先
       ↓
   Tailscale
       ↓
 Orange Pi
       ↓
Wake on LAN
       ↓
メインPC / サーバ

という構成の中継ノードにする予定です。

WOLのためだけにルーターへUDPポートを直接開けるのではなく、TailscaleでOrange Piへ入り、LAN内へMagic Packetを送る構成にします。

Orange Pi自体の電源を落とせば、その遠隔経路も止められるので、管理上も分かりやすい構成になります。

次はTailscaleとWOLを設定していきます。

補足

この記事は実際の会話履歴と2026-09-08に保存した端末ログを元に再構成しました。

保存ログで確認できた事実と、記事として再現するための一般的な接続手順を分けています。

特に最終SSID接続時の nmcli / nmtui 操作だけは完全な端末ログが残っていなかったため、その部分は標準的な手順を書いています

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?