背景
好多年没有搞过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 driver
Current support:
1) HOST_VNET_MODE
2) HOST_RAWDATA_MODE
*/
#define CONFIG_HOSTIF_MODE HOST_VNET_MODE
编译烧录固件
- 执行编译脚本命令:./build_fhostif_wifi_case.sh HOS