背景
小米 8(代号 dipper,骁龙 845)长期插电当服务器用,WiFi 不稳定,4G 流量要钱。想通过 USB 外接有线网卡解决网络问题,结果踩遍了市面上主流 USB 网卡芯片的坑。
环境:LineageOS 22.2(Android 15),内核 4.9.337,USB-C 接口实测为 USB 2.0(未焊 SuperSpeed 差分对)。
四款芯片逐一测试
| 芯片 | 直插速度 | 过 Hub 速度 | 问题 |
|---|---|---|---|
| RTL8152B | ~702 KB/s | ~2.8 KB/s | Rx status -71 协议错误,驱动 bug 限速 |
| AX88772D | 不识别 | — | 缺驱动,SD845 + 4.9 内核无 ASIX 驱动支持 |
| RTL8153B | 不识别 | — | PID 不在内核设备表中,USB 2.0 下本插 3.0 芯片无意义 |
| AX88179 | 免驱可通 | — | 4.9 旧驱动高负载死锁,社区大量案例 |
结论:四款芯片全线阵亡。不是其中某款不好,是 SD845 + LineageOS 4.9 内核的组合对任何 USB 网卡都不友好。
RTL8152B 底层问题
RTL8152B 直插时有速度(702 KB/s),但 dmesg 里大量报 Rx status -71,这是 DWC3 USB 控制器与 RTL8152 驱动之间的协议层级错误。经过 Hub 后速度降到 KB 级,基本不可用。
问题不在 USB 1.1 低带宽模式——连接后确认运行在 USB 2.0 High-Speed(480 Mbps),但有效吞吐被驱动级 bug 限制。
AX88179 的幻觉
AX88179 是唯一能免驱工作的千兆芯片。但它的兼容性是"生得够早、PID 占座成功"——内核主线里固化了两组 VID:PID,SD845 恰好认得出。
然而 4.9 内核上 AX88179 的驱动极老,有已知 tx_fixup 和 FIFO 溢出 bug,高负载下会断连。社区从 Raspberry Pi 到各类 ARM 设备都有类似报告。
根因分析
第一层:USB 2.0 物理上限
Mi8 的 USB-C 口实际只有 USB 2.0 信号线(480 Mbps 理论,有效吞吐约 280-330 Mbps)。SuperSpeed 差分对从未出线。千兆网卡插上去也只能跑 2.0 速度。
第二层:软件中断被钉小核
这是最深的性能瓶颈。骁龙 845 的 4.9 内核把网络软中断(softirq)死死绑定在 Core 0——这是四个小核(Cortex-A55)中的一个。
小核频率低、算力弱。千兆大流量到来时高频中断直接把 Core 0 的 %si(softirq 开销)吃满到 100%。CPU 在中断上下文和进程上下文之间疯狂切换,有效吞吐断崖式下降。
第三层:4.9 内核驱动生态断档
LineageOS 22.2 仍在用 4.9 内核(Android 通用内核(GKI)前的老分支),USB 网卡驱动版本极老。RTL8153 的 PID 表不完整,AX88179 的 tx_fixup 有 bug,RTL8152 处理大批量 URB 时协议栈掉链子。
这些问题在 5.x/6.x 主线内核中大部分已修复,但 SD845 没有官方主线内核支持,民间移植也是小众项目,缺乏维护。
终局方案:USB Tethering
四条 USB 网卡路线全部走不通后,终局方案是 USB Tethering(RNDIS)——通过 USB 数据线把手机虚拟成网卡,走高通硬件 DMA 通道,绕过 Core 0 小核的软中断瓶颈。
实测速度:
ADB reverse 隧道(SOCKS5 代理):274 Mbps(34 MB/s)274 Mbps 刚好在 USB 2.0 上限范围内,且实测中没有出现任何断连或协议错误。DMA 通道直接让数据绕过 Core 0 的 %si 瓶颈,到达大核处理。
经验总结
- 别在 4.9 内核上折腾外置 USB 网卡——所有主流芯片在这个内核版本上都有坑
- USB Tethering 才是移动设备的最佳外接网络方案——零成本、无需额外硬件、借助已有 USB 线
- 280 Mbps 不是 USB 带宽极限,是软中断瓶颈——换了 Tethering 跑到了同样的速度,证明 USB 2.0 物理层还能更高
- SD845 的硬件底子不差——DWC3 USB 控制器本身能力很强(文件传输可超 2400 Mbps),问题出在 4.9 内核的软件栈太久没更新
附:各芯片最终结论
| 芯片 | 终局判定 | 理由 |
|---|---|---|
| RTL8152B | ❌ 废弃 | 驱动 bug 限速 702 KB/s,协议层错误 |
| AX88772D | ❌ 废弃 | 4.9 内核无驱动 |
| RTL8153B | ❌ 废弃 | PID 缺失 + USB 2.0 限制了千兆芯片 |
| AX88179 | ❌ 废弃 | 高负载有死锁风险,且 USB 2.0 上限在这里 |
| RNDIS(USB Tethering) | ✅ 终局方案 | 274 Mbps,零额外成本,无断连 |