軟件設(shè)計(jì)方案

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)圖:

image.png

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ù)流圖:

image.png

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ù)流圖:

image.png

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.hostandroid.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_fileusb_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ā)流程和里程碑

  1. 基礎(chǔ)驅(qū)動(dòng)適配
  • 完成 RTL8822 驅(qū)動(dòng)編譯和內(nèi)核集成。

  • 實(shí)現(xiàn) USB 設(shè)備枚舉和通信。

  • 驗(yàn)證設(shè)備模式切換(STA/AP)。

  1. HAL 和 Native Service
  • 開(kāi)發(fā) HAL 層接口。

  • 實(shí)現(xiàn)核心透?jìng)鞣?wù)和 USB 通信管理。

  • 開(kāi)發(fā)數(shù)據(jù)路由引擎。

  1. Framework 集成
  • 實(shí)現(xiàn) Android 系統(tǒng)服務(wù)。

  • 封裝應(yīng)用層 API。

  • 配置系統(tǒng)權(quán)限和 SELinux 策略。

  1. 系統(tǒng)集成和優(yōu)化
  • 實(shí)現(xiàn)后臺(tái)?;顧C(jī)制。

  • 添加異?;謴?fù)邏輯。

  • 優(yōu)化性能和網(wǎng)絡(luò)路由。


4. 關(guān)鍵技術(shù)挑戰(zhàn)及解決方案

  1. USB 設(shè)備并發(fā)訪問(wèn)
  • 挑戰(zhàn):兩個(gè) RTL8822 設(shè)備同時(shí)操作可能導(dǎo)致沖突。

  • 解決方案

  • 使用設(shè)備隊(duì)列管理 USB 操作。

  • 實(shí)現(xiàn)互斥鎖機(jī)制。

  • 采用異步 I/O 避免阻塞。

  1. 網(wǎng)絡(luò)接口沖突
  • 挑戰(zhàn):WiFi 和以太網(wǎng)流量可能混淆。

  • 解決方案

  • 配置策略路由表分離流量。

  • 使用 iptables 管理流量規(guī)則。

  • 啟用網(wǎng)絡(luò)命名空間隔離。

  1. 后臺(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ù)。

  1. 數(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)交互總覽圖:

image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容