WHC Wi-Fi Slim Host 驱动移植
驱动移植
FullMAC 当前基于 Linux 内核 5.4 ,5.10 以及 5.15 进行测试和验证,若在其他内核版本遇到编译问题,请`联系我们 <https://aiot.realmcu.com/contact-us/technical-consult>`__。
备注
SPI 会在 CS 引脚置低并检测到 CLK 后立即进行数据传输。总线繁忙时可能存在边界条件:
测试表明,在 CS 置低与主机推送 CLK 之间增加 7μs 延迟可确保总线繁忙时的数据传输安全。
但部分旧版本系统的 SPI 驱动可能不支持
spi_delay
,此时需直接修改驱动代码以添加延迟。
环境准备
在 Linux 系统安装以下依赖包:
sudo apt-get install build-essential
sudo apt install dhcpcd hostapd dhcpd
使能接口
Linux PC:跳过此步骤
树莓派:
通过
dtoverlay
配置 SDIO。树莓派 4 专用指令为:
sudo dtoverlay sdio poll_once=off
树莓派 5 指令为:
sudo dtoverlay sdio
在目录
/component/wifi/whc/whc_host_linux
执行以下操作,nan
和p2p
为可选参数,在需要使能 Wi-Fi NAN 和 Wi-Fi P2P 功能时添加:./fullmac_setup.sh sdio [nan] [p2p]
./fullmac_setup.sh spi [nan] [p2p]
./fullmac_setup.sh usb [nan] [p2p]
根据主机运行模式选择输入 1 或 2
choose target host mode: 1) Fat host with cfg80211 2) Slim host without cfg80211 choose target host mode:
将
whc_host_linux
目录复制到 Linux 内核源码树新终端执行编译
cd {driver_path}/whc_host_linux make
加载驱动
模块路径:
/whc_host_linux/fullmac/sdio/fullmac_sdio.ko
sudo su cp sdio/fullmac_sdio.ko /lib/modules/$(uname -r)/ depmod modprobe fullmac_sdio
模块路径:
/whc_host_linux/fullmac/spi/fullmac_spi.ko
sudo su cp spi/fullmac_spi.ko /lib/modules/$(uname -r)/ depmod modprobe fullmac_spi
模块路径:
/whc_host_linux/fullmac/usb/fullmac_usb.ko
sudo su cp usb/fullmac_usb.ko /lib/modules/$(uname -r)/ depmod modprobe fullmac_usb
Ameba 作为 FullMAC Host 使用指南
环境配置
在目录
{SDK}/amebaxxx_gcc_project
执行配置工具
(Top) -> CONFIG WHC INTF -> WHC_MODE ----Configuration---- ( ) WHC_IPC ( ) FULLMAC_DEV (X) FULLMAC_HOST (Top) -> CONFIG WHC INTF -> FULLMAC HOST config ----Configuration---- (X) Support WHC CMD PATH (X) Support WHC WIFI API PATH
固件编译
生成目标文件:
./build.py
输出文件:
km4_boot_all.bin
km0_km4_app.bin
固件烧录
使用专用烧录工具将固件写入开发板
第三方平台移植
使用其他 Host 芯片时,需将 component/os/freertos
目录移植至目标系统。
演示程序介绍
Slim Host 模式下,Wi-Fi 无法使用标准的 Wi-Fi API,此时一定会使用 CUST_PATH 。 所以我们需要开发一个非标准的 Demo 程序来进行演示。
Demo 程序支援 USER Space 和 Kernel Space 的双向沟通,可以通过两类命令实现双向控制:
内核级配置
setmac
:配置设备 MAC 地址netifon
:激活网络接口载波
设备级控制
getmac
:获取设备 MAC 地址getip
:获取设备 IP 配置setrdy
:通知设备主机状态tickps
:Tickless Power Save 指令, 通知设备可以进入低功耗模式wifion
:通知设备进行 wifi init
其通信架构如下图所示:
Demo 程序支持的命令
命令格式 |
功能描述 |
init |
初始化内核 Netlink 通信通道 |
getmac <device_idx> |
获取指定设备MAC地址 device_idx:设备端口索引,只能是 0 或 1
|
getip <device_idx> |
获取设备网络层配置 device_idx:设备端口索引,同 getmac 命令 |
setrdy <state> |
通知设备主机状态 state:主机状态, ready 或者 unready |
setmac <device_idx> <mac> |
配置接口硬件地址
|
netifon <device_idx> |
激活接口物理层载波 device_idx:设备端口索引,同 getmac 命令 |
tickps <subtype> |
Tickless Power Save指令 subtype: ticklessPower Save指令类型
|
wifion |
通知设备初始化Wi-Fi |
connect <ssid> <pw> |
通知设备连线
|
dhcp |
通知设备进行IP协商 |
Demo 程序的编译和执行
# 进入模块目录
cd ${SDK}/component/wifi/whc/whc_host_linux/app
# 编译可执行文件
make
# 以特权模式运行
sudo ./whc_slim_host_demo
Demo 程序通信架构如下图所示:
Demo 程序支持的命令
命令格式 |
功能描述 |
whc hostrtos |
设置Host OS 模式 |
whc getmac <device_idx> |
获取指定设备MAC地址 device_idx:设备端口索引,只能是 0 或 1
|
whc getip <device_idx> |
获取设备网络层配置 device_idx:设备端口索引,同 getmac 命令 |
whc setrdy <state> |
通知设备主机就绪 state:主机状态, ready 或者 unready |
whc wifion |
通知设备初始化WIFI |
whc connect <ssid> <pw> |
通知设备连线
|
whc dhcp |
通知设备进行IP协商 |
whc scan |
通知设备进行网络扫描 |
Demo 程序的编译和执行
Demo 程序已预编译并嵌入固件中,无需手动编译即可直接运行。
功能验证与 Demo 演示
运行应用程序
cd ${SDK}/component/wifi/whc/whc_host_linux/app sudo ./whc_slim_host_demo
在 demo 执行初始化序列
> init > wifion > getmac 0 00:E0:4C:XX:XX:XX > setmac 0 00:E0:4C:XX:XX:XX
在 demo 执行 WiFi 扫描
> scan
在 demo 建立无线连接
> netifon 0 > connect ap_test 12345678
备注
ap_test
为目标 AP 的 ssid,12345678
为目标 AP 的密码,开放网络可省略密码参数。
在终端中执行以下命令,通过 dhcpcd 动态获取 IP 地址
> dhcpcd wlanX
备注
wlanX
为模式设备名,可在终端执行ifconfig -a
来获取信息网络测试
ping 192.168.x.x
运行应用程序
cd ${SDK}/component/wifi/whc/whc_host_linux/app sudo ./whc_slim_host_demo
在 demo 执行初始化序列
> init > wifion > getmac 0 00:E0:4C:XX:XX:XX > setmac 0 00:E0:4C:XX:XX:XX
在 demo 执行 WiFi 扫描
> scan
在 demo 建立无线连接
> netifon 0 > connect ap_test 12345678
备注
ap_test
为目标 AP 的 ssid,12345678
为目标 AP 的密码,开放网络可省略密码参数。
在 Ameba 连线结束后,在 demo 输入 cmd 获取 IP 地址
> getip 0
根据 Ameba 回传的 IP 地址信息,在终端配置 IP 地址以及网关
sudo ip addr add 192.168.x.x/24 dev wlanX sudo ip link set wlanX up sudo ip route add default via 192.168.x.x dev wlanX
备注
wlanX
为模式设备名,可在终端执行ifconfig -a
来获取信息在网络层配置结束后,在 demo 输入 cmd 开启网络设备的载波状态
> netifon 0
网络测试
ping 192.168.x.x
初始化配置
在串口输入 Cmd, 执行初始化序列
> whc hostrtos > whc wifion > whc getmac
在串口输入指令执行 WiFi 扫描
> whc scan
在串口输入指令建立无线连接
> whc connect ap_test 12345678
备注
ap_test
为目标 AP 的 ssid,12345678
为目标 AP 的密码,开放网络可省略密码参数。网络测试
AT+WLPING=192.168.x.x