1. 系統(tǒng)整體架構(gòu)
1.1 分層架構(gòu)
系統(tǒng)采用分層設(shè)計(jì),從上到下依次為:
應(yīng)用層 (Application):提供用戶(hù)接口,通過(guò) Android API 與透?jìng)鞣?wù)交互。
Android Framework & JNI:封裝 Native 服務(wù)接口,橋接應(yīng)用層與 Native 層。
Native Service (C++):核心透?jìng)鞣?wù),負(fù)責(zé)數(shù)據(jù)路由、設(shè)備管理和通信邏輯。
HAL層 (硬件抽象層):封裝 RTL8822 WiFi 模塊的操作,屏蔽底層硬件差異。
Linux Kernel Driver (RTL8822):基于 RTL8822 驅(qū)動(dòng),提供 USB WiFi 設(shè)備支持。
硬件層 (RK3568):運(yùn)行在 RK3568 平臺(tái),集成 USB WiFi 模塊。
PlantUML 分層架構(gòu)圖:

1.2 核心模塊設(shè)計(jì)
A端架構(gòu) (STA模式)
功能:A端作為 WiFi 客戶(hù)端(STA模式),通過(guò)串口或 APP 接收數(shù)據(jù),聚合后通過(guò) USB 控制 RTL8822 模塊發(fā)送到 B端;同時(shí)接收 B端數(shù)據(jù),分發(fā)到串口或 APP。
數(shù)據(jù)流:
輸入:外部設(shè)備通過(guò)串口發(fā)送數(shù)據(jù),或 APP 直接發(fā)送數(shù)據(jù)。
處理:數(shù)據(jù)聚合器封裝數(shù)據(jù),USB 控制模塊通過(guò) RTL8822 (STA) 發(fā)送。
輸出:接收到的數(shù)據(jù)經(jīng)數(shù)據(jù)分發(fā)器分發(fā)到串口或推送至 APP。
PlantUML A端數(shù)據(jù)流圖:

B端架構(gòu) (AP模式)
功能:B端作為 WiFi 接入點(diǎn)(AP模式),通過(guò)以太網(wǎng)接收網(wǎng)絡(luò)客戶(hù)端數(shù)據(jù),發(fā)送到 A端;接收 A端數(shù)據(jù)后轉(zhuǎn)發(fā)到網(wǎng)絡(luò)客戶(hù)端。
數(shù)據(jù)流:
輸入:網(wǎng)絡(luò)客戶(hù)端通過(guò)以太網(wǎng)發(fā)送數(shù)據(jù)到 TCP 服務(wù)器。
處理:TCP 服務(wù)器處理數(shù)據(jù),USB 控制模塊通過(guò) RTL8822 (AP) 發(fā)送。
輸出:接收到的數(shù)據(jù)經(jīng)網(wǎng)絡(luò)轉(zhuǎn)發(fā)器發(fā)送到 TCP 客戶(hù)端。
PlantUML B端數(shù)據(jù)流圖:

2. 詳細(xì)技術(shù)實(shí)現(xiàn)方案
2.1 驅(qū)動(dòng)層實(shí)現(xiàn)
2.1.1 RTL8822 驅(qū)動(dòng)集成
內(nèi)核模塊編譯:
修改
Makefile適配 Android 內(nèi)核版本。配置
Kconfig啟用 USB 接口支持。編譯生成
rtl8822cu.ko內(nèi)核模塊,加載到系統(tǒng)。USB 設(shè)備識(shí)別:
在
include/autoconf.h中配置 RTL8822 參數(shù)。在
os_dep/linux/usb_intf.c中添加設(shè)備 Vendor ID 和 Product ID。確保系統(tǒng)正確識(shí)別兩個(gè) USB WiFi 設(shè)備(A端 STA 模式,B端 AP 模式)。
權(quán)限配置:
在
system/etc/permissions中添加 USB 主機(jī)功能權(quán)限。聲明
android.hardware.usb.host和android.permission.USB_PERMISSION。
2.1.2 HAL 層封裝
功能:定義標(biāo)準(zhǔn)接口,封裝 RTL8822 模塊的初始化、數(shù)據(jù)收發(fā)和網(wǎng)絡(luò)配置功能。
接口描述:
初始化 WiFi 模塊,指定設(shè)備 ID 和模式(STA 或 AP)。
發(fā)送數(shù)據(jù)接口,將數(shù)據(jù)通過(guò) USB 傳輸?shù)?WiFi 模塊。
注冊(cè)數(shù)據(jù)接收回調(diào),處理接收到的數(shù)據(jù)。
配置網(wǎng)絡(luò)參數(shù),如 SSID、密碼等。
2.2 Native Service 實(shí)現(xiàn)
2.2.1 核心透?jìng)鞣?wù)
功能:管理 WiFi、串口和網(wǎng)絡(luò)模塊,協(xié)調(diào)數(shù)據(jù)路由。
組件:
WiFi Manager:管理 USB WiFi 設(shè)備,處理設(shè)備初始化和模式切換。
Serial Manager(A端):處理串口數(shù)據(jù)讀寫(xiě)。
Network Manager(B端):處理 TCP 網(wǎng)絡(luò)數(shù)據(jù)。
Data Router:根據(jù)數(shù)據(jù)來(lái)源和目標(biāo)進(jìn)行路由。
2.2.2 數(shù)據(jù)路由引擎
功能:
A端:將串口或 APP 數(shù)據(jù)封裝后通過(guò) STA 模式發(fā)送;接收數(shù)據(jù)后分發(fā)到串口或 APP。
B端:將網(wǎng)絡(luò)數(shù)據(jù)封裝后通過(guò) AP 模式發(fā)送;接收數(shù)據(jù)后轉(zhuǎn)發(fā)到網(wǎng)絡(luò)客戶(hù)端。
實(shí)現(xiàn)要點(diǎn):
數(shù)據(jù)包封裝/解封裝,包含頭部信息(如序列號(hào)、類(lèi)型)。
使用 CRC32 校驗(yàn)確保數(shù)據(jù)完整性。
支持重傳機(jī)制處理丟包。
2.2.3 USB 通信管理
功能:
枚舉 USB 設(shè)備,初始化 RTL8822 模塊。
管理 STA 和 AP 模式的設(shè)備,處理數(shù)據(jù)收發(fā)。
支持動(dòng)態(tài)模式切換(STA ? AP)。
實(shí)現(xiàn)要點(diǎn):
維護(hù)設(shè)備列表,記錄設(shè)備文件描述符和模式。
使用異步 I/O 避免阻塞。
實(shí)現(xiàn)設(shè)備互斥鎖,防止并發(fā)訪問(wèn)沖突。
2.3 Framework 層實(shí)現(xiàn)
2.3.1 Android Service
功能:作為系統(tǒng)服務(wù)運(yùn)行,橋接 Native 層和應(yīng)用層。
實(shí)現(xiàn)要點(diǎn):
通過(guò) Binder 機(jī)制與 Native 服務(wù)通信。
提供數(shù)據(jù)發(fā)送和回調(diào)注冊(cè)接口。
確保服務(wù)在系統(tǒng)啟動(dòng)時(shí)自動(dòng)運(yùn)行。
2.3.2 應(yīng)用接口 API
功能:為應(yīng)用層提供簡(jiǎn)潔的 API,屏蔽底層復(fù)雜性。
接口描述:
sendData(byte[] data):發(fā)送數(shù)據(jù)到透?jìng)鞣?wù)。registerCallback(WifiTransparentCallback callback):注冊(cè)數(shù)據(jù)接收回調(diào)。
2.4 系統(tǒng)集成配置
2.4.1 系統(tǒng)啟動(dòng)配置
定義
init.rc文件,啟動(dòng) WiFi 透?jìng)鞣?wù)。設(shè)置服務(wù)運(yùn)行用戶(hù)和權(quán)限(
system,net_admin,net_raw,wifi)。
2.4.2 SELinux 權(quán)限配置
定義
wifi_transparent域,允許訪問(wèn) USB 設(shè)備和網(wǎng)絡(luò)套接字。配置
chr_file和usb_device的讀寫(xiě)權(quán)限。
2.4.3 網(wǎng)絡(luò)路由配置
功能:隔離 WiFi 和以太網(wǎng)流量,避免沖突。
實(shí)現(xiàn):
創(chuàng)建獨(dú)立路由表(
table 100用于 WiFi,table 101用于以太網(wǎng))。使用
ip rule配置策略路由,確保流量正確分發(fā)。
3. 開(kāi)發(fā)流程和里程碑
- 基礎(chǔ)驅(qū)動(dòng)適配:
完成 RTL8822 驅(qū)動(dòng)編譯和內(nèi)核集成。
實(shí)現(xiàn) USB 設(shè)備枚舉和通信。
驗(yàn)證設(shè)備模式切換(STA/AP)。
- HAL 和 Native Service:
開(kāi)發(fā) HAL 層接口。
實(shí)現(xiàn)核心透?jìng)鞣?wù)和 USB 通信管理。
開(kāi)發(fā)數(shù)據(jù)路由引擎。
- Framework 集成:
實(shí)現(xiàn) Android 系統(tǒng)服務(wù)。
封裝應(yīng)用層 API。
配置系統(tǒng)權(quán)限和 SELinux 策略。
- 系統(tǒng)集成和優(yōu)化:
實(shí)現(xiàn)后臺(tái)?;顧C(jī)制。
添加異?;謴?fù)邏輯。
優(yōu)化性能和網(wǎng)絡(luò)路由。
4. 關(guān)鍵技術(shù)挑戰(zhàn)及解決方案
- USB 設(shè)備并發(fā)訪問(wèn):
挑戰(zhàn):兩個(gè) RTL8822 設(shè)備同時(shí)操作可能導(dǎo)致沖突。
解決方案:
使用設(shè)備隊(duì)列管理 USB 操作。
實(shí)現(xiàn)互斥鎖機(jī)制。
采用異步 I/O 避免阻塞。
- 網(wǎng)絡(luò)接口沖突:
挑戰(zhàn):WiFi 和以太網(wǎng)流量可能混淆。
解決方案:
配置策略路由表分離流量。
使用 iptables 管理流量規(guī)則。
啟用網(wǎng)絡(luò)命名空間隔離。
- 后臺(tái)?;?/strong>:
挑戰(zhàn):Android 11 以上版本對(duì)后臺(tái)服務(wù)限制嚴(yán)格。
解決方案:
注冊(cè)為系統(tǒng)級(jí)服務(wù)。
實(shí)現(xiàn) Native 守護(hù)進(jìn)程。
備選方案:使用 WakeLock 或前臺(tái)服務(wù)。
- 數(shù)據(jù)完整性:
挑戰(zhàn):無(wú)線傳輸可能出現(xiàn)丟包或亂序。
解決方案:
應(yīng)用層添加序列號(hào)管理。
使用 CRC32 校驗(yàn)數(shù)據(jù)。
實(shí)現(xiàn)重傳機(jī)制。
優(yōu)化緩沖區(qū)管理。
5. 總結(jié)
該方案基于 RK3568 平臺(tái)和 RTL8822 WiFi 模塊,實(shí)現(xiàn)了一個(gè)高效、模塊化的 WiFi 透?jìng)飨到y(tǒng)。關(guān)鍵特點(diǎn)包括:
簡(jiǎn)潔高效:聚焦核心功能,避免復(fù)雜設(shè)計(jì)。
模塊化:分層架構(gòu)便于維護(hù)和擴(kuò)展。
Android 原生集成:利用標(biāo)準(zhǔn) Android 服務(wù)框架。
穩(wěn)定可靠:包含錯(cuò)誤恢復(fù)和數(shù)據(jù)校驗(yàn)機(jī)制。
PlantUML 系統(tǒng)交互總覽圖:
