WHC Wi-Fi Fat Host 驱动移植

Linux cfg80211 移植

驱动移植

FullMAC 当前基于 Linux 内核 5.4 ,5.10 以及 5.15 进行测试和验证,若在其他内核版本遇到编译问题,请 联系我们

备注

SPI 会在 CS 引脚置低并检测到 CLK 后立即进行数据传输。总线繁忙时可能存在边界条件:

  • 测试表明,在 CS 置低与主机推送 CLK 之间增加 7μs 延迟可确保总线繁忙时的数据传输安全。

  • 但部分旧版本系统的 SPI 驱动可能不支持 spi_delay,此时需直接修改驱动代码以添加延迟。

环境准备

在 Linux 系统安装以下依赖包:

sudo apt-get install build-essential
sudo apt install dhcpcd hostapd dhcpd
  1. 使能接口

    • Linux PC:跳过此步骤

    • 树莓派

    通过 dtoverlay 配置 SDIO。

    树莓派 4 专用指令为:

    sudo dtoverlay sdio poll_once=off
    

    树莓派 5 指令为:

    sudo dtoverlay sdio
    
  2. 在目录 /component/whc/whc_host_linux 执行以下操作, nanp2p 为可选参数,在需要使能 Wi-Fi NAN 和 Wi-Fi P2P 功能时添加:

    SDIO

    ./fullmac_setup.sh sdio [nan] [p2p]
    

    SPI

    ./fullmac_setup.sh spi [nan] [p2p]
    

    USB

    USB: ./fullmac_setup.sh usb [nan] [p2p]
    
  3. 根据主机运行模式选择输入 1 或 2

    choose target host mode:
    1) Fat host with cfg80211
    2) Slim host without cfg80211
    choose target host mode:
    
  4. whc_host_linux 目录复制到 Linux 内核源码树

  5. 新终端执行编译

    cd {driver_path}/whc_host_linux
    make
    
  1. 加载驱动

    SDIO

    模块路径: /whc_host_linux/fullmac/sdio/fullmac_sdio.ko

    sudo su
    cp sdio/fullmac_sdio.ko /lib/modules/$(uname -r)/
    depmod
    modprobe fullmac_sdio
    

    SPI

    模块路径: /whc_host_linux/fullmac/spi/fullmac_spi.ko

    sudo su
    cp spi/fullmac_spi.ko /lib/modules/$(uname -r)/
    depmod
    modprobe fullmac_spi
    

    USB

    模块路径: /whc_host_linux/fullmac/usb/fullmac_usb.ko

    sudo su
    cp usb/fullmac_usb.ko /lib/modules/$(uname -r)/
    depmod
    modprobe fullmac_usb
    

普通模式验证

  • 驱动加载确认

    在 modprobe 加载成功后,执行 ifconfig 可查看 Wi-Fi 设备信息。

    输出示例:

    • Station 模式:设备 MAC 地址前缀为 00:e0:4c

    • SoftAP 模式:设备 MAC 地址前缀为 00:e1:4c

    ../../_images/ifconfig_sta_softap.png
  • 关闭 NetworkManager 和 DHCP 服务以避免冲突

    Ubuntu 系统注意:若需通过命令行连接 AP,需关闭 NetworkManager 和 DHCP 服务以避免冲突

    sudo systemctl stop NetworkManager dhcpcd.service
    sudo systemctl disable NetworkManager
    
  • 创建配置文件 ``/etc/wpa_supplicant/wpa_supplicant.conf``

    ctrl_interface=/var/run/wpa_supplicant
    network={
       ssid="HUAWEI-JX2UX5_HiLink_5G"
       psk="12345678"
    }
    
  • 启动 WPA 连接

    wpa_supplicant -D nl80211 -i wlanX -c /etc/wpa_supplicant/wpa_supplicant.conf -dd > /var/wifi_log
    
  • 获取 IP 地址

    dhcpcd wlanX
    
  • 配置 SoftAP

    1. 创建配置文件 /etc/hostapd/hostapd.conf

    driver=nl80211
    logger_syslog=-1
    logger_syslog_level=2
    hw_mode=g
    channel=6
    ssid=aaa_test
    wpa=2
    wpa_passphrase=12345678
    wpa_key_mgmt=WPA-PSK
    wpa_pairwise=CCMP
    
    1. 创建 DHCP 配置文件 /etc/udhcpd_wlanX.conf

    start 192.168.43.20
    end 192.168.43.254
    interface wlanX
    opt dns 192.168.43.1
    option subnet 255.255.255.0
    opt router 192.168.43.1
    
    1. 启动 SoftAP

    hostapd /etc/hostapd/hostapd.conf -i wlanX
    
    1. 设置 AP IP 地址

    ifconfig wlanX 192.168.43.1 netmask 255.255.255.0
    
    1. 启动 DHCP 服务

    udhcpd -f /etc/udhcpd_wlanX.conf
    

备注

wlanX 为模式设备名,可在终端执行 ifconfig -a 来获取信息

双 TCPIP 模式验证

  • 驱动加载确认

    在 modprobe 加载成功后,执行 ifconfig 可查看 Wi-Fi 设备信息。

    输出示例:

    • Station 模式:设备 MAC 地址前缀为 00:e0:4c

    • SoftAP 模式:设备 MAC 地址前缀为 00:e1:4c

    ../../_images/ifconfig_sta_softap.png
  • 关闭 NetworkManager 和 DHCP 服务以避免冲突

    Ubuntu 系统注意:若需通过命令行连接 AP,需关闭 NetworkManager 和 DHCP 服务以避免冲突

    sudo systemctl stop NetworkManager dhcpcd.service
    sudo systemctl disable NetworkManager
    
  • 创建配置文件 ``/etc/wpa_supplicant/wpa_supplicant.conf``

    ctrl_interface=/var/run/wpa_supplicant
    network={
       ssid="HUAWEI-JX2UX5_HiLink_5G"
       psk="12345678"
    }
    
  • 启动 WPA 连接

    wpa_supplicant -D nl80211 -i wlanX -c /etc/wpa_supplicant/wpa_supplicant.conf -dd > /var/wifi_log
    
  • 获取 IP 地址

    1. 运行 demo

    cd ${SDK}/component/whc/whc_host_linux/app
    sudo ./whc_slim_host_demo
    
    1. 在 demo 进行初始化操作

    > init
    
    1. 在 demo 输入 cmd 通知 Ameba 获取 IP 地址

    > dhcp
    
    1. 根据 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
    
  • 网络测试

    ping 192.168.x.x
    

备注

wlanX 为模式设备名,可在终端执行 ifconfig -a 来获取信息

RTOS Host 驱动移植

驱动移植

Ameba 作为 FullMAC Host 使用指南

  1. 环境配置

    1. 在目录 {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
    
  2. 固件编译

    生成目标文件:

    ./build.py
    

    输出文件

    • km4_boot_all.bin

    • km0_km4_app.bin

  3. 固件烧录

    使用专用烧录工具将固件写入开发板

第三方平台移植

使用其他 Host 芯片时,需将 component/os/freertos 目录移植至目标系统。

功能验证

  • 执行 WiFi 扫描

    > AT+WLSCAN
    
  • 建立无线连接

    > AT+WLCONN=ssid,ap_test,pw,12345678
    

    备注

    ap_test 为目标 AP 的 ssid,12345678 为目标 AP 的密码,开放网络可省略密码参数。

  • 网络测试

    AT+WLPING=192.168.x.x
    

客制化通路

Fat Host 模式下,如果除了标准的 Wi-Fi/BT/Socket 编程之外,客户还有 Host 与 Device 之间客制化的通信需求,则可以使用 CUST_PATH