1.概述
这节主要是 WIFI&BT 模块、SDIO WIFI 模块的移植和测试。
2.硬件资源
SDIO WIFI 模块
USB-TTL 模块
3.软件资源
Linux 5.4.31
4.环境准备
Linux 虚拟环境
安装好 SDK
5.操作步骤
5.1.移植 AP6212
这个移植一般分两步,设备树配置硬件信息和拷贝 wifi 固件到系统。
1) 设备树配置 wifi 硬件信息
351 /* Wifi */
352 &sdmmc3 {
353
arm,primecell-periphid = <0x10153180>;
354
pinctrl-names = "default", "opendrain", "sleep";
355
pinctrl-0 = <&sdmmc3_b4_pins_a>;
356
pinctrl-1 = <&sdmmc3_b4_od_pins_a>;
357
pinctrl-2 = <&sdmmc3_b4_sleep_pins_a>;
358
non-removable;
359
st,neg-edge;
360
bus-width = <4>;
361
vmmc-supply = <&v3v3>;
362
mmc-pwrseq = <&wifi_pwrseq>;
363
#address-cells = <1>;
364
#size-cells = <0>;
365
keep-power-in-suspend;
366
status = "okay";
367
368
brcmf: bcrmf@1 {
369
reg = <1>;
370
compatible = "brcm,bcm4329-fmac";
371
};
372 };
这里分别对几个关键设备树语法进行说明.
non-removable:表示不能进行热插拔,设备一直连接(比如 eMMC),因为板载的
AP6212 一直连接,所以需要此属性,假如是 SDIO WIFI 模块则不需要配置
MYIR-MYD-YA15XC-V2-SW-AN-ZH-L5.4.31_V1.0
bus-width = <4>:数据总线位
vmmc-supply: 指向 regulator 设备树节点
mmc-pwrseq:指定电源上电顺序
keep-power-in-suspend:表示待机时不掉电
mmc 控制器存在子节点时,必须指定下面两个选项
#address-cells 值必须是 1
#size-cells 值必须是 0
其中 MMC 子节点属性 reg 该值必须是 0~7,其中 0 表示 SD 卡,1~7 表示 SDIO 设
备比如 SDIO 接口的 WIFI 芯片。
2)配置内核
在内核目录运行 make menuconfig(先确认对应的 ARCH 是否是 arm),检查对应的配
置选项
Networking support->Wireless->cfg80211 - wireless configuration API 配置为
bus-width = <4>:数据总线位
vmmc-supply: 指向 regulator 设备树节点
mmc-pwrseq:指定电源上电顺序
keep-power-in-suspend:表示待机时不掉电
mmc 控制器存在子节点时,必须指定下面两个选项
#address-cells 值必须是 1
#size-cells 值必须是 0
其中 MMC 子节点属性 reg 该值必须是 0~7,其中 0 表示 SD 卡,1~7 表示 SDIO 设
备比如 SDIO 接口的 WIFI 芯片。
2)配置内核
在内核目录运行 make menuconfig(先确认对应的 ARCH 是否是 arm),检查对应的配
置选项
Networking support->Wireless->cfg80211 - wireless configuration API 配置为
图 5-1.无线设备管理配置图 5-1.无线设备管理配置
Device Drivers->Network device support->Wireless LAN->
WLAN driver
图 5-2.无线网络硬件 MAC 配置
3)编译并更新
编译内核模块和设备树(详情请参考 DG 手册),然后更新到开发板上面,在终端中输
入命令检查 brcmfmac 驱动模块有没有加载。
root@myir:/# lsmod | grep brcm
brcmfmac
258048 0
cfg80211
585728 1 brcmfmac
brcmutil
16384 1 brcmfmac
4)驱动加载
当加载完成后,还需要加载固件,一般是驱动中断方式向系统文件申请固件,然后系
统文件把固件拷贝到内核 firmware buf,然后内核读取 wifi 固件并通过 SDIO 写入芯片内
部,这个固件路径一般是在内核定义好,也可以直接通过传入参数修改固件路径。默认固
件路径是/lib/firmware/brcm。
图 5-3.WIFI 固件路径
AP6212 模组 wifi 需要加载的固件为: brcmfmac43430-sdio.bin /brcmfmac43430-
sdio.myir,stm32mp157c-ya157c-v2.txt/brcmfmac43430-sdio.clm_blob
蓝牙需要加载的固件:BCM43430A1.hcd
5)wifi 测试过程
Wifi 测试详情请参考《MYD-YA15XC-T_Linux 软件评估指南》。
5.2.SDIO WIFI 移植和测试
SDIO WIFI 模块移植一般也是分两步,设备树配置硬件信息,因为这个 SDIO WIF 用
的 TF 卡接口,所以 SDMMC1 设备树不需要配置什么,默认就可以。然后拷贝 SDIO
WIFI 对应的固件到/lib/firmware/brcm。
1) 内核驱动配置
在内核目录运行 make menuconfig 确认对应的 SDIO WIFI 配置信息。
Networking support->Wireless->
enable powersave by default
图 5-4.无线网络管理
Device Drivers->Network device support ->Wireless LAN-> [*]
SDIO bus interface
support for FullMAC driver
图 5-5.SDIO bus 接口支持
2) 查看接口
编译内核模块和设备树,然后更新到开发板上面,
ifconfig -a 查看网络。
3) wifi 测试过程
root@myir:~# wpa_passphrase "TP-LINK_D87A" > wifi.conf
wangsuna123
root@myir:~# wpa_supplicant -B -c wifi.conf -i wlan1
Successfully initialized wpa_supplicant
root@myir:~# [ 241.197380] IPv6: ADDRCONF(NETDEV_CHANGE): wlan1: link bec
omes ready
root@myir:~#
root@myir:~# udhcpc -i wlan1
udhcpc: started, v1.29.3
udhcpc: sending discover
udhcpc: sending select for 192.168.0.102
udhcpc: lease of 192.168.0.102 obtained, lease time 7200
/etc/udhcpc.d/50default: Adding DNS 192.168.1.1
/etc/udhcpc.d/50default: Adding DNS 192.168.0.1
root@myir:~# echo "nameserver 114.114.114.114" > /etc/resolv.conf
root@myir:~# ping www.baidu.com
PING www.a.shifen.com (14.215.177.39) 56(84) bytes of data.
64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq=1 ttl=53 time=28.5 ms
64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq=2 ttl=53 time=36.6 ms
64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq=3 ttl=53 time=34.8 ms