4.3.21. Wi-Fi 驱动调试指南
4.3.21.1. 概述
本章
主要 讲述 Wi-Fi 的 适配 和 使用 方法,以 RealTek(瑞昱)系列 的 SDIO WiFi RTL8852BS ,移远 的 FCS960K 为例。 主要
内容 包含: 原理图 确认、添加 源码、内核 配置、DTS 配置、驱动 加载 调试 和 Wi-Fi 使用 以及 常见问题。
4.3.21.2. RealTek RTL8852bs 移植
X5 EVB V1开发板
使用 RTL8852BS 模组,支持 Wi-Fi 和 Bluetooth 功能。 Wi-Fi 使用 SDIO 接口,支持2.4G 频段
和5G 频段,支持 IEEE802.11a/b/g/n/ac/axWLAN 标准。 X5 系统启动
时 自动 加载 Wi-Fi 驱动。 RTL8852BS 模组
的 Bluetooth 功能 调试 请 参考 蓝牙 驱动 。调试 指南
原理图确认
X5 RTL8852bs 的

RTL8852BS Wi-Fi 模组
供电:模组
有 两路 供电,其中 VDD_3V3为主电源, VDD_1V8为 IO 上拉电源。 使能:要
能 正常 工作,需要 WL_REG_ON和SDIO_RESET给高电平,目前 硬件 上电 上拉为 高电平,故 设备树 中 不 需要 配置。 时钟:40MHZ 的
时钟 输入 模组 可以 内部 生成,不 需要 外部 单独 输入 该 信号。 通信:模组 SOC 的
通信 通过 SDIO ,其中 SDIO_DATA_0SDIO_DATA_1SDIO_DATA_2SDIO_DATA_3为 SDIO 的 4 条数据线。 SDIO_CMD和SDIO_CLK分别为 命令 信号线 和 时钟 线。
添加源码
步骤1:获取
驱动 源码 X5 Kernel 版本
为 6.1.83,建议 使用 厂商 提供 的 适配 好 的 内核 版本 驱动。 步骤2:创建
驱动 目录 在
kernel/drivers/staging下创建 rtl8852bs目录,并复制 驱动 源码。 步骤3:配置 Kconfig 和 Makefile
在
kernel/drivers/staging/Kconfig中添加 以下内容: source "drivers/staging/rtl8852bs/Kconfig"
在
kernel/drivers/staging/Makefile中添加 编译 支持: obj-$(CONFIG_RTL8852BS) += rtl8852bs/
步骤4:调整 Kconfig 配置
在
kernel/drivers/staging/rtl8852bs/Kconfig修正帮助 信息 的 语法 解析: config RTL8852BS tristate "Realtek 8852B SDIO WiFi" - ---help--- + help Help message of RTL8852BS
在
kernel/drivers/staging/rtl8852bs/Makefile修改平台 相关 配置: ###################### Platform Related ####################### -CONFIG_PLATFORM_I386_PC = y +CONFIG_PLATFORM_I386_PC = n +CONFIG_PLATFORM_ARM_HOBOT = y ########### CUSTOMER ################################ CONFIG_DRVEXT_MODULE = n @@ -240,6 +240,8 @@ endif ifeq ($(CONFIG_PLATFORM_RTL8198D), y) DRV_PATH = $(src) +else ifeq ($(CONFIG_PLATFORM_ARM_HOBOT), y) +DRV_PATH = $(srctree)/$(src) else DRV_PATH = $(TopDIR) endif
步骤5:新建
平台 编译 选项 根据 RealTek 移植
文档 新建 kernel/drivers/staging/rtl8852bs/platform/arm_hb.mk并添加 HOBOT 平台 配置 编译 选项 ifeq ($(CONFIG_PLATFORM_ARM_HOBOT), y) EXTRA_CFLAGS += -DCONFIG_PLATFORM_ARM_HOBOT EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT EXTRA_CFLAGS += -DCONFIG_RADIO_WORK EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE ifeq ($(CONFIG_PCI_HCI), y) EXTRA_CFLAGS += -DCONFIG_PLATFORM_OPS _PLATFORM_FILES := platform/platform_linux_HB_pci.o \ platform/platform_ARM_HB_pci.o OBJS += $(_PLATFORM_FILES) # Core Config # CONFIG_RTKM - n/m/y for not support / standalone / built-in CONFIG_RTKM = m EXTRA_CFLAGS += -DCONFIG_TX_SKB_ORPHAN # PHL Config EXTRA_CFLAGS += -DRTW_WKARD_98D_RXTAG endif ifeq ($(CONFIG_SDIO_HCI), y) _PLATFORM_FILES = platform/platform_ARM_HB_sdio.o endif endif # CONFIG_PLATFORM_ARM_HOBOT
然后
执行 ./bd.sh boot menuconfig检查是否 能 看到 rtl8852bs 模块,勾选后 解决 编译 错误。
功能测试和调试
WIFI 模组
调试
过程 中 建议 配置 CONFIG_RTW_DEBUG = y,调试结束 后 配置 CONFIG_RTW_DEBUG = n。CONFIG_RTW_LOG_LEVEL可以配置 为 2 或者 4。 配置
为 2 时 仅 输出 error 信息。 配置
为 4 时 输出 包括 warning 和 debug 和 error 信息。
CONFIG_RTW_DEBUG = n #debug 开关
CONFIG_RTW_LOG_LEVEL = 4 #debug level
内核配置
进入build目录./xbuild.sh boot menuconfig 进行
配置命令
执行 ./xbuild.sh boot menuconfig 会
配置选项
1.配置CONFIG_RTL8852BS=m

2.配置CONFIG_CFG80211=m
WiFi 的

3.配置CONFIG_RFKILL=m

DTS 配置
控制器确认
X5上
根据
原理图 连接 和 设备树 pinmux-func.dtsi可知,管脚HSIO_SDIO_CMD对应的 管脚 复用 配置 为 pinctrl_sdio。pinctrl_sdio: sdiogrp { horizon,pins = < HSIO_SDIO_WP HSIO_PINMUX_2 BIT_OFFSET8 MUX_ALT0 &pconf_sd_sdio_pu_ds3_ipctrl HSIO_SDIO_CLK HSIO_PINMUX_0 BIT_OFFSET30 MUX_ALT0 &pconf_sd_sdio_pu_ds5_ipctrl HSIO_SDIO_CMD HSIO_PINMUX_0 BIT_OFFSET28 MUX_ALT0 &pconf_sd_sdio_pu_ds3_ipctrl HSIO_SDIO_DATA0 HSIO_PINMUX_1 BIT_OFFSET0 MUX_ALT0 &pconf_sd_sdio_pu_ds3_ipctrl HSIO_SDIO_DATA1 HSIO_PINMUX_2 BIT_OFFSET30 MUX_ALT0 &pconf_sd_sdio_pu_ds3_ipctrl HSIO_SDIO_DATA2 HSIO_PINMUX_2 BIT_OFFSET28 MUX_ALT0 &pconf_sd_sdio_pu_ds3_ipctrl HSIO_SDIO_DATA3 HSIO_PINMUX_2 BIT_OFFSET26 MUX_ALT0 &pconf_sd_sdio_pu_ds3_ipctrl >; };
pinctrl_sdio配置由板级 配置 设备树 中 的 sdio_1节点引用。 /* SDIO */ &sdio_1 { status = "okay"; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_sdio>; };
进一步
查看 x5.dtsi文件中 sdio_1节点的 配置,确认 其 使用 的 控制器 为 sdhci@35030000。sdio_1: sdhci@35030000 { compatible = "horizon,x5-dwcmshc-sd"; status = "disabled"; reg = <0x35030000 0x10000>, <0x3505008c 0x10>; /* ctrler, dll_ctrl */ interrupt-parent = <&gic>; interrupts = <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>; max-frequency = <200000000>; clocks = <&hpsclks X5_HSIO_SDIO1_BCLK>, <&hpsclks X5_HSIO_SDIO1_HCLK>, <&hpsclks X5_HSIO_SDIO1_ACLK>, <&hpsclks X5_HSIO_SDIO1_CCLK>, <&hpsclks X5_HSIO_SDIO1_TCLK>; clock-names = "core", "bus", "axi", "card", "timer"; bus-width = <4>; non-removable; no-sd; no-mmc; cap-sdio-irq; cap-sd-highspeed; sd-uhs-sdr50; sd-uhs-sdr104; mmc-fixed-voltage = <1800>; disable-wp; resets = <&socrst HSIO_SDIO_RESET>; reset-names = "sd_rst"; };
确认 DTS 配置
关于 dts 的
确认
sdio_1节点的 status = “okay”。 EVB X5 上 WIFI RTL8852BS 是
随 系统 上电 的,设备树 中 默认 使用 non-removable的配置,根据 硬件 设计,如需 手动 控制 上电 时序,可以 去除 配置 non-removable。
在 x5-evb.dtsi 中
```dts
/* SDIO */
&sdio_1 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_sdio>;
};
```
编译烧录
保存
配置 后,需要 重新 编译 ./mk_boot.sh编译内核 镜像, fastboot.exe flash boot boot.img烧录 boot.img 。然后
使用 adb 将 rfkill.ko、cfg80211.ko和8852bs.ko上传到 文件系统,adb的 使用 请 参考 使用 adb。
驱动加载调试
使用
示波器 测量 供电、使能 和 时钟 是否 符合要求,可以 和 硬件 共同 配合 确认。 进入
系统 后 使用 以下 命令 确认 设备树 sdio 节点 配置 是否 生效,显示 okay即可。#cat /sys/firmware/devicetree/base/soc/hsio_apb/sdhci@35030000/status okaySDIO 控制器
在 初始化 后,可以 使用 下面 命令 可以 查看 到 SDIO 控制器 和 mmc index的 对应 关系。 #ls /sys/devices/platform/soc/35000000.hsio_apb/35030000.sdhci/mmc_host mmc2使用
以下 命令 查看 SDIO 控制器 的 配置 和 运行 参数 是否 正确。 #cat /sys/kernel/debug/mmc2/ios clock: 200000000 Hz actual clock: 200000000 Hz vdd: 21 (3.3 ~ 3.4 V) bus mode: 2 (push-pull) chip select: 0 (don't care) power mode: 2 (on) bus width: 2 (4 bits) timing spec: 6 (sd uhs SDR104) signal voltage: 1 (1.80 V) driver type: 0 (driver type B)
使用 insmod 分别
加载 WiFi 所 需 的 驱动。 使用
insmod rfkill.ko加载无线 设备 的 管理 模块。 使用
insmod cfg80211.ko加载无线 设备 的 配置 接口 模块。 使用
insmod 8852bs.ko加载 RTL8852bs 驱动模块。
驱动
加载 时,SDIO 控制器 会 尝试 与 挂载 的 设备 进行 通信,通信 失败 时 需要 检查 设备树 配置 并 使用Ftrace Debug进行 调试,详细 请 参考Ftrace 使用指南。 驱动
加载 通信 成功 后,可以 通过 ifconfig wlan0检查是否 有 wlan0 网络 节点 产生。 wlan0: flags=4098<BROADCAST,MULTICAST> mtu 1500 ether 5c:8a:ae:34:db:ec txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
RTL8852bs wow 功能验证
WOW:Wake on WLAN(无线

使用
脚本 wifi_connect “ssid” “password” wow 启动 脚本 echo mem > /sys/power/state X5 进入 deepsleep 模式
ping 板
端的 ip,将会 向 模组 发送 magic 包 唤醒 主控 板端 ping qq.com 唤醒
成功,仍然 可以 在 网
4.3.21.3. FCS960K 移植
X5 EVB V2开发板
使用 FCS960K 模组,支持 Wi-Fi 和 Bluetooth 功能。 Wi-Fi 使用 SDIO 接口,支持2.4G 频段
和5G 频段,支持 IEEE802.11a/b/g/n/ac/axWLAN 标准。 X5 系统启动
时 自动 加载 Wi-Fi 驱动。 FCS960K 模组
的 Bluetooth 功能 调试 请 参考 蓝牙 驱动 。调试 指南
原理图确认
X5 FCS960K 的

FCS960K 能够
供电:模组
有 两路 供电,其中 VDD_3V3为主电源, VDD_1V8为 IO 上拉电源。 使能:要
能 正常 工作,需要 RF_PWR_EN给高电平。 天线:WIFI/蓝牙
天线 接口, ANT_WIFI/BT,EVB板同时 提供 板载 天线 和 外置 天线 的 切换,并 支持 自由 切换 通信接口
配置 Wi-Fi子系统(SDIO接口)
SDIO_DATA_0SDIO_DATA_1SDIO_DATA_2SDIO_DATA_3为 SDIO 的 4 条数据线。 SDIO_CMD和SDIO_CLK分别为 命令 信号线 和 时钟 线。
蓝牙
子系统(多 模式 可 扩展 接口) 基础
通信 模式(UART Only)
接口
引脚: BT_RXBT_TX
功能
特性:基于UART的 异步 串行 数据通信(如AT指令 交互、低 速率 数据传输),无流控 机制,在 波特率 超载 或 持续 大 数据量 传输 时,存在 数据包 丢失 及 缓冲区 溢出 风险。
增强型
传输 模式(增加 硬件 流控)
接口
引脚: BT_RXBT_TXBT_CTSBT_RTS
功能
特性:可 有效 避免 数据包 丢失 及 缓冲区 溢出 风险,支持A2DP高保真 单向 音频 流 传输。
语音
通信 模式(PCM同步 接口)
接口
引脚: PCM_SYNCPCM_DINPCM_CLKPCM_DOUT
功能
特性:支持 基于SCO链路 的 实时 双向 音频 传输,比如HPF/HSP。
注意事项
为
驱动移植
X5 EVB V2已经
完成FCS960K Wi-Fi模块 的 移植,您 可以 在V1.0.20以及 后续 版本 中 直接 使用WIFI和 蓝牙 如果
您 有 定制 或 开发 需求,可以 阅读 下面 的 章节,了解 详细 的 移植 过程
添加源码
步骤1:获取
驱动 源码 X5 Kernel 版本
为 6.1.83,建议 使用 厂商 提供 的 适配 好 的 内核 版本 驱动。 步骤2:创建
驱动 目录 在
kernel/drivers/net/wireless/下创建 aic8800目录,并复制 驱动 源码。 步骤3:配置 Kconfig 和 Makefile
在
kernel/net/wireless/Kconfig中添加 以下内容: source "drivers/net/wireless/aic8800/Kconfig"
在
kernel/net/wireless/Makefile中添加 编译 支持: obj-$(CONFIG_AIC_WLAN_SUPPORT) += aic8800/
内核配置
进入./bd.sh boot menuconfig 进行
```kconfig
CONFIG_AIC_WLAN_SUPPORT=y
CONFIG_AIC8800_WLAN_SUPPORT=m
CONFIG_BT_HCIUART_H4=y
```
DTS 配置
FC960K 模组kernel/arch/arm64/boot/dts/hobot/x5-evb-lp4-v2p0.dts,具体内容
```dts
/* ANT_CTRL1 */
&hsio_iomuxc {
hsio_gpio0_23: hsio_gpio0_23 {
horizon,pins = <
HSIO_SDIO_WP HSIO_PINMUX_2 BIT_OFFSET8 MUX_ALT2 &pconf_output_high
>;
};
pinctrl_sdio: sdiogrp {
horizon,pins = <
HSIO_SDIO_CLK HSIO_PINMUX_0 BIT_OFFSET30 MUX_ALT0 &pconf_sd_sdio_pu_ds5_ipctrl
HSIO_SDIO_CMD HSIO_PINMUX_0 BIT_OFFSET28 MUX_ALT0 &pconf_sd_sdio_pu_ds3_ipctrl
HSIO_SDIO_DATA0 HSIO_PINMUX_1 BIT_OFFSET0 MUX_ALT0 &pconf_sd_sdio_pu_ds3_ipctrl
HSIO_SDIO_DATA1 HSIO_PINMUX_2 BIT_OFFSET30 MUX_ALT0 &pconf_sd_sdio_pu_ds3_ipctrl
HSIO_SDIO_DATA2 HSIO_PINMUX_2 BIT_OFFSET28 MUX_ALT0 &pconf_sd_sdio_pu_ds3_ipctrl
HSIO_SDIO_DATA3 HSIO_PINMUX_2 BIT_OFFSET26 MUX_ALT0 &pconf_sd_sdio_pu_ds3_ipctrl
>;
};
};
/* ANT_CTRL2 */
&lsio_iomuxc {
lsio_gpio1_4: lsio_gpio1_4 {
horizon,pins = <
LSIO_SPI0_SSN LSIO_PINMUX_1 BIT_OFFSET2 MUX_ALT2 &pconf_output_low
>;
};
};
/* RF_PWR_EN */
&aon_iomuxc {
aon_gpio_3: aon_gpio_3 {
horizon,pins = <
AON_GPIO0_PIN3 INVALID_PINMUX BIT_OFFSET0 MUX_ALT0 &pconf_output_high
>;
};
};
&sdio_1 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_sdio &aon_gpio_3 &hsio_gpio0_23 &lsio_gpio1_4>;
power-gpios = <&aon_gpio_porta 3 GPIO_ACTIVE_HIGH>;
toggle_interval_us = <100000>;
};
```
pinctrl_sdio是sdio管脚复用。 hsio_gpio0_23,lsio_gpio1_4是切换 天线 的gpio引脚。 aon_gpio_3是RF_PWR_EN的引脚,需要 配置 为 高电平 才能 使能 模组。 sdio_1是wifi模块的 对应 的sdio节点 的 配置,其中 status字段 表示 该 节点 的 状态, pinctrl-names字段 表示 复用 配置, pinctrl-0字段 表示 复用 配置, power-gpios字段 表示RF_PWR_EN的gpio引脚, toggle_interval_us字段 表示RF_PWR_EN的 切换 间隔。
添加固件
在system/buildroot/prebuilt/boot-utils-runtime/vendor/etc/firmware 目录
```bash
/vendor/etc/firmware/aic_userconfig_8800d80.txt
/vendor/etc/firmware/fmacfw_8800d80_u02.bin
/vendor/etc/firmware/fmacfwbt_8800d80_u02.bin
/vendor/etc/firmware/fw_adid_8800d80_u02.bin
/vendor/etc/firmware/fw_patch_8800d80_u02.bin
/vendor/etc/firmware/fw_patch_table_8800d80_u02.bin
/vendor/etc/firmware/lmacfw_rf_8800d80_u02.bin
```
如果system/ubuntu/prebuilt/boot-utils-runtime/vendor/etc/firmware 目录
编译烧录
保存
配置 后,执行 ./bd.sh重新编译 内核 镜像 和 系统 镜像; 编译
脚本 会 自动 拷贝 驱动 到 系统 中 /lib/modules/$(uname -r)/kernel/drivers/net/wireless/aic8800SDIO接口
的wifi驱动 会 通过udev规则 进行 加载。
驱动调试
使用
示波器 测量 供电、使能 和 时钟 是否 符合要求,可以 和 硬件 共同 配合 确认。 进入
系统 后 使用 以下 命令 确认 设备树 sdio 节点 配置 是否 生效,显示 okay即可。#cat /sys/firmware/devicetree/base/soc/hsio_apb/sdhci@35030000/status okaySDIO 控制器
在 初始化 后,可以 使用 下面 命令 可以 查看 到 SDIO 控制器 和 mmc index的 对应 关系。 #ls /sys/devices/platform/soc/35000000.hsio_apb/35030000.sdhci/mmc_host mmc2使用
以下 命令 查看 SDIO 控制器 的 配置 和 运行 参数 是否 正确。 #cat /sys/kernel/debug/mmc2/ios clock: 200000000 Hz actual clock: 200000000 Hz vdd: 21 (3.3 ~ 3.4 V) bus mode: 2 (push-pull) chip select: 0 (don't care) power mode: 2 (on) bus width: 2 (4 bits) timing spec: 6 (sd uhs SDR104) signal voltage: 1 (1.80 V) driver type: 0 (driver type B)
驱动
加载 通信 成功 后,可以 通过 ifconfig wlan0检查是否 有 wlan0 网络 节点 产生。 wlan0: flags=4098<BROADCAST,MULTICAST> mtu 1500 ether 5c:8a:ae:34:db:ec txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
4.3.21.4. Wi-Fi 使用
Wi-Fi 的
STA 模式(Station 模式):设备
作为 客户端 连接 到 无线 热点,从而 接入 局域网 或 互联网。 AP 模式(Access Point 模式):设备
作为 无线 热点 供 其他 设备 连接,形成 局域网络。
两种
Wi-Fi STA 模式测试
状态确认
开发板
上电后 默认 工作 在 STA模式。可以通过 iw dev wlan0 info命令查看 wlan0的网络 节点 信息: 网络
节点 信息 的 type 字 段:AP 表示 AP模式,managed 表示STA模式。
运行
```bash
Interface wlan0
ifindex 3
wdev 0x1
addr 5c:8a:ae:34:db:ec
type managed
wiphy 0
channel 36 (5180 MHz), width: 20 MHz (no HT), center1: 5180 MHz
txpower 12.00 dBm
```
联网测试
运行
wifi_connect [ssid] [password]连接热点 联网。 [ssid]和[password]需要替换 为 实际 的 热点 名称 和 密码。
示例:
```bash
wifi_connect "WiFi-Test" "12345678"
```
运行
```bash
Successfully initialized wpa_supplicant
[ 3079.230115] [BB][halbb_la_bb_set_smp_rate] smp_rate_tmp=7, la_smp_rate_log=160 M
udhcpc: started, v1.35.0
udhcpc: broadcasting discover
udhcpc: broadcasting select for 192.168.43.207, server 192.168.43.1
udhcpc: lease of 192.168.43.207 obtained from 192.168.43.1, lease time 3600
deleting routers
adding dns 192.168.43.1
default via 192.168.43.1 dev wlan0
default via 192.168.1.1 dev eth0 metric 700 linkdown
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.10 linkdown
192.168.43.0/24 dev wlan0 proto kernel scope link src 192.168.43.207
local 127.0.0.0/8 dev lo table local proto kernel scope host src 127.0.0.1
local 127.0.0.1 dev lo table local proto kernel scope host src 127.0.0.1
broadcast 127.255.255.255 dev lo table local proto kernel scope link src 127.0.0.1
local 192.168.1.10 dev eth0 table local proto kernel scope host src 192.168.1.10
broadcast 192.168.1.255 dev eth0 table local proto kernel scope link src 192.168.1.10 linkdown
local 192.168.43.207 dev wlan0 table local proto kernel scope host src 192.168.43.207
broadcast 192.168.43.255 dev wlan0 table local proto kernel scope link src 192.168.43.207
PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: seq=1 ttl=50 time=65.481 ms
64 bytes from 8.8.8.8: seq=2 ttl=50 time=70.789 ms
64 bytes from 8.8.8.8: seq=3 ttl=50 time=71.112 ms
```
Wi-Fi AP 模式测试
切换 AP 模式
执行
```bash
/etc/init.d/wifi_init.sh ap
```
运行
```bash
Initialize wlan0 to ap mode
wlan0: interface state UNINITIALIZED->ENABLED
wlan0: AP-ENABLED
Finish initialize wlan0 to ap mode
dnsmasq: started, version 2.86 cachesize 150
root@buildroot:~# dnsmasq: compile time options: IPv6 GNU-getopt DBus no-UBus no-i18n no-IDN DHCP DHCPv6 no-Lua TFTP no-conntrack ipset auth no-cryptohash no-DNSSEC loop-detect inotify dumpfile
dnsmasq: warning: no upstream servers configured
dnsmasq-dhcp: DHCP, IP range 192.168.5.2 -- 192.168.5.254, lease time 12h
dnsmasq: read /etc/hosts - 2 addresses
```
状态确认
切换
后 WIFI 工作 在 AP模式。通过iw dev wlan0 info命令查看 wlan0的网络 节点 信息: 网络
节点 信息 的 type 字 段:AP 表示 AP模式,managed 表示STA模式。网络
节点 信息 的 ssid 字 段 表示 热点 的 名字。
运行
```bash
Interface wlan0
ifindex 3
wdev 0x1
addr 5c:8a:ae:34:db:ec
ssid test
type AP
wiphy 0
channel 1 (2412 MHz), width: 20 MHz (no HT), center1: 2412 MHz
txpower 12.00 dBm
```
连接 AP 热点
使用
手机 连接 SSID 为 test的热点。

连接
成功 后,开发板 会 显示 设备 HONOR_30 使用 IP 192.168.5.153接入了 wlan0 。 dnsmasq-dhcp: DHCPREQUEST(wlan0) 192.168.5.153 c2:31:4e:29:d5:6a dnsmasq-dhcp: DHCPACK(wlan0) 192.168.5.153 c2:31:4e:29:d5:6a HONOR_30-bffd2df053010722
测试设备连通性
测试
```bash
# ping 192.168.5.153
PING 192.168.5.153 (192.168.5.153): 56 data bytes
64 bytes from 192.168.5.153: seq=0 ttl=64 time=8.818 ms
64 bytes from 192.168.5.153: seq=1 ttl=64 time=10.939 ms
64 bytes from 192.168.5.153: seq=2 ttl=64 time=15.955 ms
64 bytes from 192.168.5.153: seq=3 ttl=64 time=6.316 ms
```
4.3.21.5. WIFI 性能测试
关于 WIFI 性能
4.3.21.6. 常见问题
wifi 名字变更
现象:网卡
接口 名称 发生 变更(如 从 wlan0变为其他 名称),导致 配置文件 中 定义 的 网络接口 名称 失效,影响 网络 功能。 分析:系统
中 启用 了 udev 规则 自动 为 网卡 分配 名称,可能 会 修改 默认 名称 wlan0,尤其在 驱动 或硬件 初始化 时 触发 此 行为。 解决
方法 :
使用
ethtool -i wlan0命令查看 网卡 接口 wlan0的驱动 和 固件 信息: # ethtool -i wlan0 driver: rtl8852bs version: v1.19.7.1-91-gcb07686050.202404 firmware-version: N/A expansion-rom-version: bus-info: mmc2:0001:1 supports-statistics: yes supports-test: no supports-eeprom-access: no supports-register-dump: no supports-priv-flags: no
删除
生成 的 临时 的 规则 文件 /etc/udev/rules.d/70-persistent-net.rules。添加
以下 udev 规则,限制 udev 对 驱动 rtl8852bs 的 wlan0 节点 的 修改: echo 'SUBSYSTEM=="net", ACTION=="add", DRIVERS=="rtl8852bs", KERNEL=="wlan*", NAME="wlan0"'> /etc/udev/rules.d/99-disable-netname.rules
重启 udev 服务
或 系统 以 使 规则 生效: /etc/init.d/S10udev start
通信失败错误码
出现mmc2:0001:1: rtw_sdio_raw_read: sdio read failed (-110)
CMD52 导致的 -110 错误
现象:CMD52 命令
超时。 分析:CMD52 是
单字节 寄存器 操作命令,纯 硬件 实现。 解决
方法 :SDIO 设备
未 正常 供电,检查 电源 状态。 时钟
信号 异常,确保 时钟 输入 完整。
CMD53 导致的 -110 错误
现象:CMD53 命令
超时。 分析:CMD53 用于
多块 数据 的 读写操作。 解决
方法 :确认
驱动 和 设备树 配置 是否 与 硬件 匹配,比如 使用 的 SDIO 控制器 是否 一致。 数据线
信号 质量 问题,检查 DATA0~DATA3 连线,一般 飞线 可能 导致 相关 情况 的 发生。 时钟
频率 过高,尝试 降低 SDIO 时钟 频率(如 从 50 MHz 降到 25 MHz)。 修改
设备树 中 SDIO 节点 的 bus-width配置为 1,仅 使用 单条 数据线 DATA0 进行 通信。
SDIO 枚举失败
现象:示波器
测量 不到 CMD 命令 或者 Dynamic Debug 没有 CMD 打印。 分析:确认
模组 硬件 上 Card Detect 管脚 是否 存在 和 设备树 配置。 解决
方法 :如果 WIFI 模组
没有 Card Detect 管脚,必须 将”broken-cd”加上。 如果
需要 对WiFi进行 上下 电,需要 将”non-removable”字 段 删除,host端 才 会 进行 多次 探测;否则 的话WiFi模组 不会 被 二次 探测。