硬件资源

WiFi

今天研究 WiFi,所以重点关注板子的下面两个部件:

部件 型号 描述
SOC BCM2837B0 4 核 Cortex-A53, 64位,ARMv8-A 指令集架构,1.4GHz
WiFi / 蓝牙 BCM/CYW43455 802.11 b/g/n/ac + Bluetooth 4.2 BLE

构建镜像

我们选择使用 buildroot 构建镜像,不使用官方镜像,不然就不需要费心考虑写这些底层细节了。

人生四大境界

为什么要费心自己去构建镜像呢?是因为麻烦和收获是成正比的,遇到的麻烦越多,才能思考得更深,从而收获得更多。俗话说:懂的越多,不懂的就越多。

人生四大境界:

  1. 不知道自己不知道
  2. 知道自己不知道
  3. 不知道自己知道
  4. 知道自己知道

很多时候停留在第一层。。。

努力让自己到达第二层,之后就好办了。

default 编译

buildroot 选择 raspberrypi3_defconfig 进行编译,烧录后是没有 WiFi 的,因为默认配置选项没有启用 WiFi。

启用 WiFi

make menuconfig 使能以下选项

  1. Target packages → Hardware handling → Firmware → rpi-wifi-firmware
  2. Target packages → Hardware handling → Firmware → rpi-firmware

安装驱动

/lib/modules/5.10.36-v7/kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac 目录下有 brcmfmac.ko,我们手动将它安装

# modprobe brcmfmac.ko

查看是否驱动成功

# ifconfig -a
eth0      Link encap:Ethernet  HWaddr B8:27:EB:8A:BC:F4
          inet addr:192.168.1.38  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::ba27:ebff:fe8a:bcf4/64 Scope:Link
          inet6 addr: 240e:3a1:1848:e1e0:ba27:ebff:fe8a:bcf4/64 Scope:Global
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3032 errors:0 dropped:96 overruns:0 frame:0
          TX packets:449 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:210412 (205.4 KiB)  TX bytes:61314 (59.8 KiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

wlan0     Link encap:Ethernet  HWaddr B8:27:EB:DF:E9:A1
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

看到已经有 wlan0 设备了,说明 WiFi 子卡驱动成功,接下来只要 ifconfig wlan0 up,然后配合 wpa_supplicant 和 hostapd 就可以开心地使用 WiFi 了。

细节

成功驱动 WiFi 之后,我们对前面的操作进行分析,使我们对底层细节更加了解。

  1. 选中 rpi-wifi-firmware 是为了让镜像包含以下三个文件

    brcmfmac43455-sdio.bin
    brcmfmac43455-sdio.clm_blob
    brcmfmac43455-sdio.txt
    

    其中 brcmfmac43455-sdio.bin 就是 BCM/CYW43455 子卡的固件

  2. 选中 rpi-firmware 是为了让镜像包含 brcmfmac.ko,这个文件就是 BCM/CYW43455 子卡的驱动

在安装驱动 brcmfmac.ko 时,会将 brcmfmac43455-sdio.bin 固件安装到子卡。这样,自卡能够正常运行了,驱动也能正常运行了,两者一对接,WiFi 功能就实现了,后面再启用应用层软件 wpa_supplicant 或 hostapd,就可以配置 WiFi 作为 STA 或 AP 进行工作了。

参考

一次树莓派wifi 调试的过程

树莓派3B+ WiFi/蓝牙 采用赛普拉斯CYW43455单芯片combo解决方案

Broadcom无线芯片组的逆向分析之旅 非常好的一篇文章,让我对 WiFi 芯片的工作原理又有了更深一步的了解。

Broadcom wireless (简体中文) 使用博通芯片组的用户有以下三种选择

赛普拉斯收购博通无线物联网业务 IoT是巨坑?

树莓派 Model 3B+ 相比Model 3B有什么变化

树莓派基金会:树莓派3B+发布

树莓派的硬件及配置

CYW43455蓝牙WiFi二合一方案

CYW43455 芯片数据手册

Broadcom brcmsmac(PCIe) and brcmfmac(SDIO/USB) drivers

CYW43455 Single-Chip 5G WiFi IEEE 802.11n/ac MAC/Baseband/ Radio with Integrated Bluetooth 4.1

CYW43455 (3B+, 4B, CM4) WiFi feedback thread

最新树莓派 3B+:你想要的功能我们都加上了

[N1盒子] 【成功驱动N1无线】N1 OpenWRT wifi 无线芯片CYW43455 有人驱动起来不?

2018款树莓派3b+ 登陆中国