嵌入式|buildroot 树莓派3B+ WiFi
硬件资源
文章图片
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 |
关于 WiFi 芯片的名称 BCM/CYW43455,这里我想说一下。芯片丝印上是 CYW43455,但是驱动名称又是 brcmfmac.ko,包括芯片的固件名称是 brcmfmac43455-sdio.bin。CYW 和 Broadcom 明明是两家公司呀,一家是赛普拉斯,一家是博通,这颗芯片到底和这两家是什么关系呀?构建镜像 我们选择使用 buildroot 构建镜像,不使用官方镜像,不然就不需要费心考虑这些底层细节了。
后来了解到,原来赛普拉斯收购了博通的 Wi-Fi,蓝牙和 ZigBee 物联网产品线和相关知识产权。这样一切都解释的通了,应该是 CYW43455 = BCM43455 = BCM/CYW43455。收购关系产生的不同叫法而已。
人生四大境界 为什么要费心自己去构建镜像呢?是因为麻烦和收获是成正比的,遇到的麻烦越多,才能思考得更深,从而收获得更多。这就是为什么,懂的越多,不懂的就越多。
人生四大境界:
- 不知道自己不知道
- 知道自己不知道
- 不知道自己知道
- 知道自己知道
文章图片
努力让自己到达第二层,之后就好办了。
default 编译 buildroot 选择 raspberrypi3_defconfig 进行编译,烧录后是没有 WiFi 的,因为默认配置选项没有启用 WiFi。
启用 WiFi make menuconfig 使能以下选项
Target packages → Hardware handling → Firmware → rpi-wifi-firmware
Target packages → Hardware handling → Firmware → rpi-firmware
sdcard.img
烧录到 SD 卡,启动系统。在
/lib/modules/5.10.36-v7/kernel/drivers/net/wireless/broadcom/brcm80211/brcmfmac
目录下有 brcmfmac.ko
,我们手动将它安装# modprobe brcmfmac.ko
查看 WiFi 是否驱动成功
# ifconfig -a
eth0Link encap:EthernetHWaddr B8:27:EB:8A:BC:F4
inet addr:192.168.1.38Bcast:192.168.1.255Mask: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 MULTICASTMTU:1500Metric: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)loLink encap:Local Loopback
inet addr:127.0.0.1Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNINGMTU:65536Metric: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)wlan0Link encap:EthernetHWaddr B8:27:EB:DF:E9:A1
BROADCAST MULTICASTMTU:1500Metric: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 之后,我们对前面的操作进行分析,使我们对底层细节更加了解。
- 选中
rpi-wifi-firmware
是为了让镜像包含以下三个文件
brcmfmac43455-sdio.bin brcmfmac43455-sdio.clm_blob brcmfmac43455-sdio.txt
其中brcmfmac43455-sdio.bin
就是 BCM/CYW43455 子卡的固件。
- 选中
rpi-firmware
是为了让镜像包含brcmfmac.ko
,这个文件就是 BCM/CYW43455 子卡的驱动。
brcmfmac.ko
时,驱动会将 brcmfmac43455-sdio.bin
固件安装到子卡。这样,子卡能够正常运行,驱动也能正常运行,两者一对接,WiFi 功能就实现了,后面再启用应用层软件 wpa_supplicant 或 hostapd,就可以配置 WiFi 作为 STA 或 AP 进行工作了。技术统览
文章图片
推荐阅读
- 嵌入式(编译内核、根文件系统等)
- Python+树莓派制作IoT(物联网)门控设备
- 单片机|Arduino、arm、树莓派、单片机四者有什么不同()
- 嵌入式-外设|DDR3基础详解
- SpringBoot中的嵌入式ActiveMQ
- 树莓派|树莓派 | 04 安装基于python3.5的tensorflow,解决python版本不匹配问题
- 嵌入式电脑|Paddle Inference——基于python API在Jetson上部署PaddleSeg模型
- 嵌入式系统文件系统开发缓存的应用
- 原来,嵌入式BI方案的核心差异全在这,教你如何评估!
- Linux 分支 OpenWrt (嵌入式Linux系统)的自启动服务详解