背景
好多年沒有搞過wifi相關的內容了,最近也被安排上了,把一顆低功耗aic8800M40的芯片在arm-linux開發板上做bring up,記錄一下SDIO wifi調試的過程和經驗,SDIO驅動這里需要改動一些linux內核HOST驅動代碼,會在文章中貼出來:
AIC8800M40芯片簡介
這個wifi芯片是一顆低功耗wifi藍牙芯片,跟常電的wifi芯片有所區別的是,如果跑低功耗模式,wifi協議棧是直接跑在芯片上面,所以也就不需要常規使用的cfg80211,wpa_supplicant和hostapd了;AIC8800M40芯片需要先刷一個固件進去,整個wifi協議棧都是跑在芯片上面,然后linux arm主控通過SDIO接口和AIC8800M40通信,這里我們會在linux上面跑一個虛擬的網卡,這個是為了便于和應用層做socket通信,可以簡單的把這個虛擬網卡理解為一個以太網卡就行了,上層的tcp和udp數據包就可以通過虛擬網卡發送出去。
然后芯片支持的WIFI6 feature如下:
CMOS single‐chip fully‐integrated RF, Modemand MAC
? Support 2.4GHz/5GHz Wi‐Fi6
? Data rates up to 286.8Mbps with 20/40MHz bandwidth
? Support 5MHz/10MHz mode
? RX sensitivity ‐97dBmin 11b 1M mode
? Tx power up to 23dBm in 11b mode, 18dBm in HT/VHT/HE MCS7 mode
? Support STA, AP, Wi‐Fi Direct modes concurrently
? Support STBC, beamforming
? Support Wi‐Fi6 TWT
? Support Two NAV, Buffer Report, Spatial reuse, Multi‐BSSID, intra‐PPDU power save
? Support LDPC
? SupportMU‐MIMO,OFDMA
? Support DCM, Mid‐amble, UORA
? Support WEP/WPA/WPA2/WPA3‐SAE Personal, MFP
固件的選擇和編譯
首先sdk目錄下有個config目錄,下面有四個系列的芯片aic8800 aic8800m40 aic8800m80x2 aic8800mc,這里我們選擇aic8800m40,然后進入這個目錄下有很多選擇:
目前只需要測試wifi,所以選擇target_wifi_fhostif,這個模式支持usb和sdio接口2。接下來做如下配置:
ubuntu的配置
- ubuntu 選擇配置python 2.7
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 1
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 2
sudo update-alternatives --config python
- 下載安裝gcc-arm-none-eabi-9-2019-q4-major工具鏈,并配置環境變量
export GNUARM_4_8_LIB=/opt/gcc-arm-none-eabi-9-2019-q4-major/lib/gcc/arm-none-eabi/9.2.1
export PATH=/opt/gcc-arm-none-eabi-9-2019-q4-major/arm-none-eabi/bin:$PATH
修改代碼
- 打開文件 /config/aic8800m40/target_wifi_fhostif/tgt_cfg/tgt_cfg_wifi.h
- 定義虛擬網卡模式
/** Hostif mode selection, match with host driverCurrent support:
1) HOST_VNET_MODE
2) HOST_RAWDATA_MODE*/#define CONFIG_HOSTIF_MODE HOST_VNET_MODE
編譯燒錄固件
- 執行編譯腳本命令:./build_fhostif_wifi_case.sh HOSTIF=