[WIFI学院] - 总纲 - OpenIPC RTL8812EU 驱动学习路线

OpenIPC RTL8812EU 驱动学习路线

1. 学习目标

本学习路线用于指导 RTL8812EU 驱动的长期源码研究。

研究对象固定为:https://github.com/svpcom/rtl8812eu.git

主要应用背景为:

  • OpenIPC
  • WFB-NG
  • RTL8812EU
  • Monitor Mode
  • Packet Injection
  • FPV 数字图传

学习起点:

对 Linux 下 WiFi 驱动基本没有概念,但具备 C/C++、嵌入式软件和源码阅读能力。

最终目标不是简单做到:

能够在 Linux 下编译和使用 RTL8812EU 驱动。

而是达到:

理解 RTL8812EU 从 Linux 网络接口一直到 USB、Firmware、MAC、Baseband、RF 的完整工作原理,能够独立阅读、修改 RTL8812EU 驱动,并能够将其中与无线收发相关的核心逻辑从 Linux/Realtek Vendor Driver 框架中剥离出来,移植到 MCU、RTOS 或其他非 Linux 平台。

因此整个学习过程需要同时建立四方面能力:

  1. WiFi / IEEE 802.11 基础
  2. Linux 网络与 WiFi 驱动基础
  3. Realtek RTL8812EU 驱动架构理解
  4. 从 Linux Driver 中抽象出硬件驱动层并移植到其他平台的能力

2. 总体学习路线

整个学习过程划分为以下阶段:

阶段 0:建立 WiFi 驱动整体地图
        ↓
阶段 1:Linux 驱动基础
        ↓
阶段 2:Linux 网络设备基础
        ↓
阶段 3:IEEE 802.11 基础
        ↓
阶段 4:Linux WiFi 子系统
        ↓
阶段 5:USB WiFi 设备基础
        ↓
阶段 6:RTL8812EU 驱动总体架构
        ↓
阶段 7:RTL8812EU 驱动初始化
        ↓
阶段 8:Firmware 与硬件初始化
        ↓
阶段 9:RTL8812EU TX 数据通路
        ↓
阶段 10:Monitor Mode 与 Packet Injection
        ↓
阶段 11:RTL8812EU RX 数据通路
        ↓
阶段 12:MAC / Baseband / RF 控制
        ↓
阶段 13:OpenIPC / WFB-NG 专用修改
        ↓
阶段 14:抽离 Linux 依赖
        ↓
阶段 15:设计 MCU / RTOS RTL8812EU 驱动
        ↓
阶段 16:完成 RTL8812EU 非 Linux 平台移植

整个过程中始终围绕一个核心问题:

一帧数据究竟如何从应用程序出发,经过 Linux、RTL8812EU 驱动、USB、RTL8812EU 芯片,最后变成天线发射出去的无线信号?

以及它的反方向:

天线收到一个无线信号以后,RTL8812EU 如何经过 RF、Baseband、MAC、USB、驱动,最终把一个 802.11 数据帧交给应用程序?

3. 阶段 0:建立 WiFi 驱动整体地图

这一阶段暂时不深入代码。

目标是先建立一个最粗略的认知地图。

需要理解:

  • 什么是网卡
  • 什么是 WiFi NIC
  • Host 和 WiFi 芯片分别是什么
  • Linux WiFi 驱动处于什么位置
  • USB WiFi 芯片和普通 USB 外设有什么区别
  • WiFi 芯片内部大概有什么模块
  • Driver 和 Firmware 有什么区别
  • MAC 是什么
  • PHY 是什么
  • Baseband 是什么
  • RF 是什么
  • MAC/BB/RF 之间是什么关系
  • FullMAC 是什么
  • SoftMAC 是什么
  • Realtek Vendor Driver 属于什么类型
  • RTL8812EU 中 Host、Firmware 和硬件分别负责什么

最终建立如下整体认识:

Application
    |
Linux Socket
    |
Linux Network Stack
    |
Linux WiFi Subsystem
    |
RTL8812EU Driver
    |
USB
    |
RTL8812EU
    |
+------------------+
| Firmware / MCU   |
+------------------+
| MAC              |
+------------------+
| Baseband / PHY   |
+------------------+
| RF               |
+------------------+
    |
Antenna

这一阶段最重要的目标不是掌握细节,而是以后看到任何一个函数时,大概知道它位于整条链路的什么位置。

4. 阶段 1:Linux 驱动基础

这一阶段学习 Linux Device Driver 的最基本概念。

不需要系统学习所有 Linux 驱动,只学习阅读 RTL8812EU 所必需的部分。

需要理解:

  • Kernel Space 与 User Space
  • Linux Kernel Module
  • .ko 文件是什么
  • module_init / module_exit
  • probe / disconnect
  • device / driver
  • bus / device / driver 模型
  • struct device
  • driver_data
  • 内核内存分配
  • kmalloc / kzalloc / kfree
  • DMA 的基本概念
  • spinlock
  • mutex
  • semaphore
  • completion
  • atomic
  • workqueue
  • timer
  • tasklet
  • kernel thread
  • interrupt
  • wait queue

重点不是背 Linux API。

重点是看到类似代码:

spin_lock_irqsave(...);

能够知道:

这里是在保护一个可能被并发访问的数据结构。

看到:

schedule_work(...);

能够知道:

这里没有立即完成工作,而是把工作交给另一个执行上下文。

达到能够阅读驱动控制流程的程度即可。

5. 阶段 2:Linux 网络设备基础

在学习 WiFi 驱动之前,需要先理解 Linux 如何看待一张普通网卡。

需要理解:

  • Network Device
  • struct net_device
  • network interface
  • eth0 / wlan0
  • interface up/down
  • net_device_ops
  • ndo_open
  • ndo_stop
  • ndo_start_xmit
  • sk_buff
  • struct sk_buff
  • TX queue
  • RX packet
  • netif_rx
  • NAPI 的基本概念

重点研究:

Application
    |
Socket
    |
TCP/IP
    |
struct sk_buff
    |
net_device
    |
Driver
    |
Hardware

需要理解:

Linux 网络驱动的核心工作,本质上就是在 Linux 的 sk_buff 与硬件能够理解的数据格式之间建立桥梁。

这一认识之后会直接帮助理解 RTL8812EU 的 TX/RX 数据路径。

6. 阶段 3:IEEE 802.11 基础

这一阶段开始学习 WiFi 本身。

只学习理解 RTL8812EU 和 WFB-NG 所需要的内容。

首先理解 802.11 Frame:

  • Management Frame
  • Control Frame
  • Data Frame

理解:

  • Frame Control
  • Duration
  • Address1
  • Address2
  • Address3
  • Sequence Control
  • Address4
  • QoS Control
  • Frame Body
  • FCS

需要重点理解:

  • To DS
  • From DS
  • BSSID
  • STA
  • AP
  • Infrastructure
  • Monitor Mode

然后学习 PHY 基础:

  • OFDM
  • Subcarrier
  • Symbol
  • Guard Interval
  • Modulation
  • BPSK
  • QPSK
  • 16-QAM
  • 64-QAM
  • Coding Rate
  • MCS
  • HT
  • VHT
  • 802.11n
  • 802.11ac
  • 20 MHz
  • 40 MHz
  • 80 MHz
  • SGI
  • STBC
  • LDPC
  • Spatial Stream
  • MIMO

目标不是成为 RF 工程师。

而是看到:

MCS3
BW40
SGI
STBC
LDPC
NSS=2

能够知道这些参数最终会影响 PHY 如何发送这一帧。

7. 阶段 4:Linux WiFi 子系统

这一阶段研究:

Linux 普通网络驱动和 WiFi 驱动有什么不同?

需要建立以下概念:

  • Wireless Extensions
  • cfg80211
  • nl80211
  • mac80211
  • Vendor Driver

重点理解:

User Space
    |
nl80211
    |
cfg80211
    |
WiFi Driver

以及:

User Space
    |
nl80211
    |
cfg80211
    |
mac80211
    |
SoftMAC Driver

需要弄清楚:

RTL8812EU 为什么不是一个典型的 mac80211 SoftMAC Driver?

以及:

Realtek Vendor Driver 自己实现了哪些本来可能由 mac80211 完成的功能?

这一阶段还需要学习:

  • station mode
  • AP mode
  • monitor mode
  • interface type
  • channel configuration
  • frequency
  • regulatory domain

完成这一阶段后,应当能够理解 RTL8812EU 与 Linux WiFi 框架之间的边界。

8. 阶段 5:USB WiFi 设备基础

RTL8812EU 是 USB WiFi 芯片,因此必须理解 USB。

只学习 RTL8812EU 所需要的 USB 内容。

需要理解:

  • USB Host
  • USB Device
  • USB Descriptor
  • Configuration
  • Interface
  • Endpoint
  • Control Transfer
  • Bulk Transfer
  • Interrupt Transfer
  • USB IN
  • USB OUT
  • URB

重点理解:

Host Memory
    |
URB
    |
USB Host Controller
    |
USB
    |
RTL8812EU

研究 Linux 中:

  • usb_driver
  • usb_device_id
  • probe
  • disconnect
  • usb_submit_urb
  • bulk endpoint

最终需要回答:

RTL8812EU 的一个 TX 数据包是如何通过 USB 送入芯片的?

以及:

RTL8812EU 收到的数据又是如何通过 USB 返回 Host 的?

9. 阶段 6:RTL8812EU 驱动总体架构

完成前面的基础学习之后,第一次正式进入:

svpcom/rtl8812eu

首先只研究目录结构。

重点目录:

core/
hal/
include/
os_dep/
platform/

建立基本分层:

Linux
 |
os_dep
 |
core
 |
HAL
 |
RTL8812E / RTL8822E Hardware

需要弄清楚:

os_dep

主要负责:

Linux 操作系统相关接口。

core

主要负责:

Realtek 驱动核心逻辑。

hal

主要负责:

Hardware Abstraction Layer。

include

主要负责:

公共结构体、宏、接口定义。

platform

主要负责:

不同 Host Platform 的适配。

这一阶段还要认识 RTL8812EU 驱动最重要的数据结构。

尤其是:

struct adapter

需要研究:

为什么 Realtek Driver 中大量函数都围绕 adapter 展开?

最终画出 RTL8812EU 软件架构图。

10. 阶段 7:RTL8812EU 驱动初始化

从 Linux 加载:

8812eu.ko

开始跟踪源码。

研究:

module_init
    ↓
USB Driver Register
    ↓
USB Device Match
    ↓
probe
    ↓
adapter allocation
    ↓
USB interface initialization
    ↓
HAL initialization
    ↓
Firmware
    ↓
MAC / BB / RF
    ↓
net_device
    ↓
cfg80211
    ↓
wlan interface

这一阶段要求真正沿着源码调用链走一遍。

最终需要能够回答:

把 RTL8812EU 插入 USB 以后,到 Linux 出现 wlan0,中间究竟发生了什么?

11. 阶段 8:Firmware 与硬件初始化

这是从“Linux Driver”逐渐进入“WiFi 芯片”的关键阶段。

需要研究:

  • Firmware 文件
  • Firmware 下载
  • RTL8812EU 内部 MCU
  • Firmware boot
  • Firmware command
  • Host-to-Controller Command
  • C2H
  • H2C

理解:

Linux Driver
      |
      | H2C
      v
Firmware
      |
      | C2H
      v
Linux Driver

同时开始研究硬件初始化:

  • MAC register
  • BB register
  • RF register
  • register read/write
  • USB control transfer
  • power sequence
  • clock
  • RF power
  • channel
  • bandwidth

这一阶段需要逐渐建立:

Host Driver
Firmware
MAC Hardware
BB Hardware
RF Hardware

五者之间的边界。

12. 阶段 9:RTL8812EU TX 数据通路

这是整个项目最重要的阶段之一。

完整追踪:

Linux
  ↓
sk_buff
  ↓
RTL8812EU Driver
  ↓
xmit_frame
  ↓
xmit_buf
  ↓
TX Descriptor
  ↓
USB Buffer
  ↓
URB
  ↓
USB Bulk OUT
  ↓
RTL8812EU
  ↓
MAC
  ↓
Baseband
  ↓
RF
  ↓
Antenna

需要重点研究 Realtek Driver 中:

  • xmit_priv
  • xmit_frame
  • xmit_buf
  • pkt_attrib
  • TX descriptor
  • USB aggregation
  • TX queue

尤其需要理解:

TX Descriptor 是什么?

这是后续 MCU 移植最重要的知识之一。

因为 Host 并不是简单地:

USB Send(80211_Frame)

而通常是:

TX Descriptor
+
802.11 Frame

TX Descriptor 会告诉 RTL8812EU:

  • 数据长度
  • Queue
  • Rate
  • MCS
  • Bandwidth
  • SGI
  • STBC
  • LDPC
  • Retry
  • Aggregation
  • Sequence
  • PHY 参数

最终目标:

能够手工解释一个 RTL8812EU USB TX Buffer 的结构。

13. 阶段 10:Monitor Mode 与 Packet Injection

这是 OpenIPC/WFB-NG 最核心的阶段。

研究:

wfb_tx
    ↓
raw socket
    ↓
monitor interface
    ↓
Radiotap
    ↓
802.11 Frame
    ↓
RTL8812EU Driver
    ↓
TX Descriptor
    ↓
USB
    ↓
RTL8812EU

需要学习 Radiotap:

  • Radiotap Header
  • Flags
  • Rate
  • Channel
  • MCS
  • VHT
  • TX Flags

然后研究 svpcom 对 Realtek Driver 做出的修改。

重点回答:

wfb_tx 指定的 MCS 最终在哪里变成 RTL8812EU TX Descriptor 中的 Rate?

继续研究:

  • MCS
  • BW
  • SGI
  • STBC
  • LDPC
  • TX Power
  • 10 MHz
  • 20 MHz
  • 40 MHz
  • 80 MHz

尤其研究:

10 MHz 模式为什么可以工作?

以及:

Radiotap 参数、Driver 参数、TX Descriptor、BB 配置之间是什么关系?

这一阶段完成以后,应当基本理解 OpenIPC FPV 的发送核心。

14. 阶段 11:RTL8812EU RX 数据通路

然后研究反方向:

Antenna
    ↓
RF
    ↓
Baseband
    ↓
MAC
    ↓
RTL8812EU RX Buffer
    ↓
USB Bulk IN
    ↓
URB
    ↓
RX Descriptor
    ↓
recv_frame
    ↓
Monitor Mode
    ↓
Radiotap
    ↓
Socket
    ↓
wfb_rx

重点研究:

  • recv_priv
  • recv_buf
  • recv_frame
  • RX descriptor
  • USB RX aggregation

研究 RX Descriptor 中:

  • Packet Length
  • CRC
  • Rate
  • MCS
  • Bandwidth
  • RSSI
  • Signal Strength
  • PHY Status

理解:

Driver 是如何知道这个数据包使用什么 MCS 收到的?

以及:

RSSI 是从哪里来的?

最终能够解释:

wfb_rx 看到的 Radiotap Header 是谁生成的,以及其中的信息来自 RTL8812EU 的什么地方。

15. 阶段 12:MAC / Baseband / RF 控制

前面的研究主要是:

Packet Path

这一阶段开始深入:

Hardware Control Path

重点研究:

MAC

  • TX/RX Queue
  • Retry
  • ACK
  • Sequence
  • Aggregation
  • Timing

Baseband

  • OFDM
  • Modulation
  • Coding
  • MCS
  • Channel Bandwidth
  • PHY Status

RF

  • Channel
  • Frequency
  • TX Power
  • RF Path
  • Antenna

重点学习驱动中的:

read register
write register
set_bb_reg
query_bb_reg
set_rf_reg
query_rf_reg

理解类似:

PHY_SetBBReg(...)
PHY_SetRFReg(...)

这样的函数最终到底在控制什么硬件。

这一阶段开始真正建立:

Driver Register Operation → Hardware Behavior

之间的对应关系。

16. 阶段 13:OpenIPC / WFB-NG 专用修改

完成原始 Realtek Driver 理解后,再研究 svpcom 修改。

不要一开始就研究 patch。

因为如果不知道原始 Driver 在干什么,就无法真正理解修改的意义。

需要通过:

Upstream Realtek Driver
        VS
svpcom rtl8812eu

进行比较。

重点寻找:

  • Monitor Mode 修改
  • Packet Injection 修改
  • Radiotap 修改
  • MCS 控制
  • TX Rate 控制
  • Bandwidth 修改
  • 10 MHz 支持
  • TX Power
  • FEC/FPV 相关优化
  • Latency 优化
  • Queue 优化
  • Retry 行为修改

最终建立完整链路:

WFB-NG parameter
       ↓
Radiotap
       ↓
RTL8812EU Driver
       ↓
TX Descriptor
       ↓
MAC / BB configuration
       ↓
RF

这一步完成后,OpenIPC 使用 RTL8812EU 进行数字图传的核心原理应该已经基本清晰。

17. 阶段 14:抽离 Linux 依赖

这是从“读懂 Driver”进入“能够移植 Driver”的关键阶段。

开始把 RTL8812EU Driver 分类。

把所有代码划分成:

Linux Specific
Realtek Core
USB Transport
Firmware Interface
Hardware HAL

例如:

Linux Specific:

sk_buff
net_device
cfg80211
spinlock
mutex
workqueue
timer
kmalloc

这些不能直接移植到 MCU。

而:

TX Descriptor
RX Descriptor
Register Definition
Firmware Download
H2C
C2H
MAC Configuration
BB Configuration
RF Configuration

这些才是 RTL8812EU 真正的硬件知识。

逐渐形成:

Linux Driver
      |
      | 去除
      v
OS Independent RTL8812EU Core

这是整个学习路线非常重要的思想转变。

18. 阶段 15:设计 MCU / RTOS RTL8812EU 驱动

完成 Linux Driver 解剖以后,重新设计驱动。

例如:

Application
    |
RTL8812EU API
    |
+----------------------+
| RTL8812EU Core       |
+----------------------+
| TX / RX              |
| Firmware             |
| MAC                  |
| BB                   |
| RF                   |
+----------------------+
| Platform Abstraction |
+----------------------+
| USB Host Driver      |
+----------------------+

设计平台抽象接口,例如:

rtl_malloc();
rtl_free();

rtl_mutex_lock();
rtl_mutex_unlock();

rtl_delay_ms();
rtl_delay_us();

rtl_usb_control_read();
rtl_usb_control_write();

rtl_usb_bulk_read();
rtl_usb_bulk_write();

然后让 RTL8812EU Core 不再依赖:

Linux
net_device
sk_buff
cfg80211

而只依赖:

Platform API
USB API

此时 Driver 才真正具备跨平台能力。

19. 阶段 16:RTL8812EU MCU / RTOS 移植

最终目标平台可能是:

MCU
RTOS
Bare Metal
Other OS

需要实现:

MCU USB Host
      ↓
RTL8812EU USB Driver
      ↓
Firmware Download
      ↓
MAC Initialization
      ↓
BB Initialization
      ↓
RF Initialization
      ↓
Set Channel
      ↓
Set Bandwidth
      ↓
TX
      ↓
RX

第一阶段甚至不需要实现完整 WiFi。

可以只实现 OpenIPC/WFB-NG 所需要的最小功能:

rtl8812_init()

rtl8812_load_firmware()

rtl8812_set_channel()

rtl8812_set_bandwidth()

rtl8812_set_tx_power()

rtl8812_set_rate()

rtl8812_tx_raw_frame()

rtl8812_rx_raw_frame()

也就是说:

不实现 STA。

不实现 AP。

不实现 WPA。

不实现完整 Linux WiFi Stack。

只把 RTL8812EU 当成:

一个可以指定 PHY 参数发送和接收 Raw 802.11 Frame 的无线收发器。

这很可能是将 RTL8812EU 移植到 MCU 用于 WFB 类数字图传时最值得优先实现的架构。

20. 学习过程中始终维护的五张图

整个研究过程中,需要逐渐完善五张图。

第一张:软件架构图

WFB-NG
 |
Linux
 |
cfg80211
 |
RTL8812EU Driver
 |
USB
 |
RTL8812EU

第二张:TX 数据流图

wfb_tx
 ↓
Radiotap
 ↓
Driver
 ↓
TX Descriptor
 ↓
USB
 ↓
MAC
 ↓
BB
 ↓
RF

第三张:RX 数据流图

RF
 ↓
BB
 ↓
MAC
 ↓
RX Descriptor
 ↓
USB
 ↓
Driver
 ↓
Radiotap
 ↓
wfb_rx

第四张:控制路径图

Application
 ↓
Driver
 ↓
Register / H2C
 ↓
Firmware / MAC / BB / RF

第五张:移植分层图

Application
      |
RTL8812EU Core
      |
Hardware Abstraction
      |
USB Host
      |
Platform

以后遇到任何代码,都尝试把它放进这五张图中的某个位置。

21. 源码研究原则

整个学习过程中遵循以下原则。

原则一:先原理,后代码

遇到一个完全陌生的机制时,不立即逐行解释代码。

按照:

为什么需要它
    ↓
它解决什么问题
    ↓
抽象模型
    ↓
简单例子
    ↓
数据结构
    ↓
源码

的顺序学习。

原则二:沿调用链学习

不要随机阅读文件。

例如 TX:

入口
 ↓
函数 A
 ↓
函数 B
 ↓
函数 C
 ↓
TX Descriptor
 ↓
USB

始终沿一条完整路径研究。

原则三:区分“Linux知识”和“RTL8812EU知识”

看到代码时始终问:

这是 Linux 要求这样做,还是 RTL8812EU 硬件要求这样做?

例如:

sk_buff

属于 Linux。

而:

TX Descriptor

属于 RTL8812EU。

这一区分对于最终 MCU 移植极其重要。

原则四:区分 Driver、Firmware 和 Hardware

始终判断一个功能究竟由谁实现:

Host Driver
Firmware
MAC Hardware
Baseband Hardware
RF Hardware

不要笼统地把所有行为都称为“驱动实现”。

原则五:不要被 Realtek Vendor Driver 的复杂度吓住

RTL8812EU Driver 包含大量:

  • STA
  • AP
  • Security
  • Power Saving
  • Regulatory
  • Compatibility
  • Different Chip
  • Different Bus
  • Different Kernel Version

相关代码。

但 OpenIPC FPV 真正关注的核心路径远小于整个 Driver。

最终需要逐渐识别:

必须理解
重要但可以以后理解
OpenIPC基本不用

三类代码。

22. 学习过程中的主线问题

整个研究过程中始终围绕以下问题推进。

问题 1

RTL8812EU 插入 USB 后:

Linux 是如何发现它的?

问题 2

Driver 加载后:

RTL8812EU 是如何完成初始化的?

问题 3

Firmware:

谁把 Firmware 下载进 RTL8812EU?

Firmware 在哪里运行?

Firmware 负责什么?

问题 4

TX:

一帧 802.11 Frame 如何变成 USB 数据?

问题 5

TX Descriptor:

RTL8812EU 怎么知道这一帧应该用什么 MCS、带宽和 PHY 参数发送?

问题 6

USB:

Host 究竟向 RTL8812EU 的哪个 Endpoint 发送什么数据?

问题 7

Hardware:

USB 收到的数据如何进入 MAC → BB → RF?

问题 8

RX:

RF 收到的数据如何最终变成 Host 中的 802.11 Frame?

问题 9

Radiotap:

Radiotap Header 和 RTL8812EU TX/RX Descriptor 是什么关系?

问题 10

WFB-NG:

wfb_tx 设置的 MCS/BW/STBC/LDPC 最终如何影响 RTL8812EU?

问题 11

Linux Dependency:

哪些代码只是为了适配 Linux?

问题 12

Hardware Dependency:

哪些代码是控制 RTL8812EU 必不可少的?

问题 13

Porting:

如果没有 Linux,只给一个 MCU + USB Host,需要保留哪些代码?

23. 最终能力目标

完成整个路线以后,应当能够独立回答:

RTL8812EU Driver 为什么这样设计?

能够打开一个 RTL8812EU 函数判断:

它属于 Linux 层?
Core?
USB?
Firmware?
MAC?
BB?
RF?

能够完整追踪:

wfb_tx
→ Linux
→ RTL8812EU Driver
→ TX Descriptor
→ USB
→ MAC
→ BB
→ RF
→ Antenna

以及:

Antenna
→ RF
→ BB
→ MAC
→ RX Descriptor
→ USB
→ RTL8812EU Driver
→ Linux
→ wfb_rx

最终能够做到:

Linux RTL8812EU Driver
          ↓
识别 Linux 依赖
          ↓
识别 Realtek Core
          ↓
识别 Firmware Interface
          ↓
识别 USB Transport
          ↓
识别 MAC/BB/RF HAL
          ↓
重新设计 Platform Abstraction
          ↓
MCU / RTOS RTL8812EU Driver

这才是本项目真正的终点。

24. 当前学习进度

当前状态:

[ ] 阶段 0:建立 WiFi 驱动整体地图
[ ] 阶段 1:Linux 驱动基础
[ ] 阶段 2:Linux 网络设备基础
[ ] 阶段 3:IEEE 802.11 基础
[ ] 阶段 4:Linux WiFi 子系统
[ ] 阶段 5:USB WiFi 设备基础
[ ] 阶段 6:RTL8812EU 驱动总体架构
[ ] 阶段 7:RTL8812EU 驱动初始化
[ ] 阶段 8:Firmware 与硬件初始化
[ ] 阶段 9:RTL8812EU TX 数据通路
[ ] 阶段 10:Monitor Mode 与 Packet Injection
[ ] 阶段 11:RTL8812EU RX 数据通路
[ ] 阶段 12:MAC / Baseband / RF 控制
[ ] 阶段 13:OpenIPC / WFB-NG 专用修改
[ ] 阶段 14:抽离 Linux 依赖
[ ] 阶段 15:设计 MCU / RTOS RTL8812EU 驱动
[ ] 阶段 16:完成 RTL8812EU 非 Linux 平台移植

25. 下一步

从:

阶段 0:建立 WiFi 驱动整体地图

正式开始。

第一阶段暂时不阅读 RTL8812EU 具体源码。

首先回答最基础的问题:

一块 USB WiFi 网卡究竟是什么?

然后逐层建立:

Host
Driver
USB
Firmware
MAC
Baseband
RF
Antenna

之间的关系。

在这个整体地图建立完成以后,再进入 Linux Driver 基础。

后续即使研究过程中产生大量分支,只要重新回到本文档,并查看“当前学习进度”,即可继续沿主线推进。

posted on 2026-09-29 15:01  longyue  阅读(28)  评论(0)    收藏  举报

导航