1. Tina Linux 与 Wi-Fi 概述

各位工程师朋友,咱们开始这门课之前,先聊聊 Tina Linux 到底是什么,以及它和 Wi-Fi 怎么搭上线的。我最早接触 Tina 是在一个智能音箱项目上,当时被客户要求三天内把 Wi-Fi 连上,结果发现这系统比我想象的顺手——当然,坑也不少。今天这一章,咱们先把地基打牢。

1.1 Tina Linux 简介

Tina Linux 是全志科技基于 OpenWrt 深度定制的一个嵌入式 Linux 发行版。说白了,它就是把 OpenWrt 那套网络配置、包管理、文件系统结构拿过来,再针对全志自家的芯片做了一堆优化。

你可能会问:为什么不用标准的 OpenWrt?嗯,这里有个现实问题。全志的芯片,比如 R系列、V系列,外设寄存器地址、时钟树、DMA 通道都和主流参考设计不太一样。Tina 把这些底层适配都做好了,你拿到 SDK 直接编译,基本就能跑起来。

我个人习惯把 Tina 看作一个「半成品」——它给了你 80% 的通用功能,剩下 20% 的硬件调优、Wi-Fi 性能调优,得靠你自己填。这也是咱们这门课的价值所在。

核心特点:
  • 基于 OpenWrt 19.07 / 21.02 分支,兼容 luci、netifd、wpad
  • 支持全志全系列 ARM Cortex-A7/A53 芯片
  • 内置 Wi-Fi 驱动框架(SDIO / USB / SPI 接口)
  • 提供 make menuconfig 内核配置 + make kernel_menuconfig 双层次配置
  • 支持 overlayfs 文件系统,方便 OTA 升级

1.2 Wi-Fi 子系统架构

Wi-Fi 在 Tina 里不是孤立的。它从上到下分四层,每一层都有自己的一摊事。我画了一张图,你看完就明白了。

Tina Linux Wi-Fi 子系统架构图 Tina Linux Wi-Fi 子系统架构 应用层 wpa_supplicant / hostapd / iw / iwconfig / dhcpcd / udhcpc 网络配置层 netifd / libnl / cfg80211 / wext 内核驱动层 mac80211 / cfg80211 内核模块 / SDIO/USB/SPI 总线驱动 硬件抽象层 Wi-Fi 芯片固件 / 射频前端 / 天线匹配 / 电源管理 数据流方向:应用层 → 网络配置层 → 内核驱动层 → 硬件抽象层

这张图你得记住。以后排查 Wi-Fi 问题,第一步就是定位问题出在哪一层。我见过太多人一上来就怀疑驱动,结果最后发现是 wpa_supplicant 配置写错了。

各层职责简述

层级 关键组件 主要职责
应用层 wpa_supplicant, hostapd, iw 扫描、连接、认证、DHCP
网络配置层 netifd, libnl, cfg80211 接口管理、策略路由、事件通知
内核驱动层 mac80211, SDIO/USB 驱动 帧收发、电源管理、硬件寄存器操作
硬件抽象层 芯片固件、射频前端 物理层信号处理、天线调谐
避坑指南: 我曾经在一个项目里,Wi-Fi 扫描列表总是空的。查了两天,最后发现是内核里 cfg80211 模块没编译进去。记住:lsmod | grep cfg80211 是排查的第一步。

1.3 支持的芯片平台

Tina Linux 支持的 Wi-Fi 芯片,我按接口类型分了三类。你拿到板子先看原理图,Wi-Fi 模块接在哪个总线上,基本就能确定驱动框架。

SDIO 接口芯片

这是最常见的。全志芯片自带 SDIO 控制器,Wi-Fi 芯片通过 SDIO 协议和 CPU 通信。吞吐量高,适合 802.11n/ac。

  • Realtek RTL8189FTV:单频 2.4G,802.11n,USB/SDIO 双模。我在智能家居项目里用过,性价比高,但驱动有点老。
  • Realtek RTL8821CS:双频 2.4G+5G,802.11ac,SDIO 3.0。适合需要 5G 频段的产品。
  • Broadcom BCM43362:单频 2.4G,802.11n。老牌芯片,稳定性好,但驱动闭源。
  • MediaTek MT7668:双频,支持蓝牙共存。我建议做 IoT 网关的优先考虑这颗。

USB 接口芯片

USB Wi-Fi 芯片在 Tina 里也很常见,尤其是开发板阶段。但注意:USB 总线延迟比 SDIO 高,高吞吐场景下容易丢包。

  • Realtek RTL8188EUS:经典 USB 2.0 单频芯片。驱动成熟,网上资料多。
  • Realtek RTL8192EU:USB 2.0 双频,支持 802.11n。我踩过坑:它的固件文件必须放在 /lib/firmware/rtlwifi/ 下,路径错了驱动加载失败。
  • MediaTek MT7601U:低功耗 USB 芯片,适合电池供电设备。

SPI 接口芯片

SPI Wi-Fi 芯片吞吐量低(一般不超过 20Mbps),但功耗极低。适合传感器、门锁等低带宽场景。

  • Realtek RTL8723BS:SPI + SDIO 双模,带蓝牙。我建议用 SDIO 模式,SPI 模式驱动 bug 较多。
  • Broadcom BCM43438:树莓派 Zero W 同款芯片。Tina 上需要手动移植 dts。
重要提醒: 芯片选型时,一定要确认 Tina SDK 里是否已经包含对应驱动。全志官方维护的驱动列表在 package/kernel/wifi/ 目录下。如果找不到,你可能需要自己移植——那又是另一门课了。

1.4 快速确认你的平台

拿到一块新板子,怎么快速知道它用的是什么 Wi-Fi 芯片?我一般三步走:

  1. 看原理图:找到 Wi-Fi 模块的型号丝印,比如 AP6212、RTL8189FTV。
  2. 查 dts:在 target/linux/sunxi/dts/ 下找到对应板级的 dts 文件,搜索 wifi 或 mmc 节点。
  3. 看内核日志:上电后执行 dmesg | grep -i wifi,驱动加载成功会有类似 rtl8189ftv: loading firmware 的打印。
实战经验: 我遇到过一块板子,dts 里配的是 RTL8189FTV,但实际贴片是 RTL8821CS。结果驱动加载失败,Wi-Fi 完全不能用。所以,永远不要只看代码,要拆机看实物。

好了,这一章的内容就这些。你理解了 Tina Linux 的定位、Wi-Fi 子系统的四层架构,以及常见芯片平台,后面章节的配置和调试就有了上下文。记住:架构图那张 SVG 我建议你存下来,以后排查问题对着它一层层查,效率会高很多。