Buildroot 零功耗无线

Buildroot 零功耗无线

有没有人在 buildroot 中为 Raspberry Pi Zero W 提供 WiFi 工作?我找不到任何在线笔记或演练。

树莓派0_defconfig工作得相当好,但不包括无线功能。

我正在使用 buildroot 的最新版本,2017-08。我已经添加了 rpi-wifi-固件。连接到 WiFi 网络至少需要哪些软件包?

答案1

我还尝试使用 buildroot 为 RPi Zero W 找到“最低限度的无线”,因此此问答在搜索结果中排名很高。尽管最初的答案有些帮助,但它绝对不是最好的答案,所以我认为值得分享我自己的发现:

使用buildroot 2018.02.2

make raspberrypi0_defconfig

清理你的配置。然后 (制作菜单配置和)选择以下内容目标包

Hardware Handling -> Firmware -> rpi-wifi-firmware
Networking applications -> wpa_supplicant
Networking applications -> wpa_supplicant - Enable 80211 support

其他所有必要的东西都应该已经被预先选择。

然后在/etc/网络/接口

auto wlan0
iface wlan0 inet dhcp
  pre-up wpa_supplicant -D nl80211 -i wlan0 -c /etc/wpa_supplicant.conf -B
  post-down killall -q wpa_supplicant

并在/etc/wpa_supplicant.conf

ctrl_interface=/var/run/wpa_supplicant
ap_scan=1

network={
   ssid="My WLAN"
   psk="my_wlan_password"
}

现在我们仍然缺少秘密成分:必须在网络初始化脚本启动之前加载 wifi 驱动程序。可以 启用 WCHAR 支持(在工具链-菜单)为了有尤德夫作为/开发管理(在系统配置-菜单)它将自动处理驱动程序加载。实际上,如果您要将 UBS 设备连接到 RPi,我建议您这样做......

...但如果没有,请编辑/etc/inittabmodprobe brcmfmac在 rc 脚本运行之前你自己:

...
# Load Wifi driver
::sysinit:/sbin/modprobe brcmfmac 

# now run any rc scripts
::sysinit:/etc/init.d/rcS
...

就是这样。


更新 21.03.2022。使用最新的buildrootgit://git.buildroot.net/buildroot似乎有一些变化:

  1. rpi-wifi-firmware已重命名为,可以在硬件处理brcmfmac-sdio-firmware-rpi-wifi下找到。brcmfmac_sdio-firmware-rpi
  2. ctrl_interface=/var/run/wpa_supplicantatwpa_supplicant.conf似乎不再有效也不再必要(如果曾经有效的话)

我还发现,如果需要通过 SSH 访问 wifi,OpenSSH则应将其配对haveged以实现更快的随机生成器初始化。如果没有它,启动时间可能会长达几分钟!

为了充分准备板子以进行直接无头访问并考虑到上述所有内容,我使用 rpi-wifi 包制作了一个外部 buildroot 库,它处理从 wifi 设置到 SSH 配置的所有必要配置:

rpi-wifi 在我的 buildroot-externals 仓库

答案2

事实证明,错误的 /etc/network/interfaces 和/或 /etc/wpa_supplicant 是罪魁祸首。在构建之间,我一直在添加额外的软件包,所以我不能 100% 确定是否需要这些软件包,但无论如何,这些是我包含的:

硬件处理 Hardware Handling -> Firmware -> linux-firmware -> Broadcom BRCM bcm43xxx Hardware Handling -> Firmware -> rpi-firmware (extended 'x' firmware) Hardware Handling -> Firmware -> Install DTB overlays Hardware Handling -> Firmware -> rpi-wifi-firmware Hardware Handling -> dbus Hardware Handling -> dbus-glib

网络应用 Networking applications -> dhcpd Networking applications -> ifupdown scripts Networking applications -> iproute2 Networking applications -> iptables Networking applications -> wireless-tools (+install shared lib) Networking applications -> wpa_supplicant Networking applications -> wpa_supplicant - Enable 80211 support Networking applications -> wpa_supplicant - Enable EAP Networking applications -> wpa_supplicant - Install wpa_cli binary Networking applications -> wpa_supplicant - Install wpa_client shared library Networking applications -> wpa_supplicant - Install wpa_passphrase binary

我不认为任何其他类别与 WiFi 网络相关。

/etc/网络/接口 auto lo iface lo inet loopback allow-hotplug wlan0 iface wlan0 inet manual wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

/etc/wpa_supplicant.conf ctrl_interface=/var/run/wpa_supplicant update_config=1 network={ ssid="OpenWrt" psk=<your psk key here> }

启动后我运行: wpa_supplicant -B -i wlan0 -W -D nl80211, wext -c /etc/wpa_supplicant.conf wpa_cli -B -i wlan0 -p /var/run/wpa_supplicant -a /sbin/wpa_action dhcpcd -q -w

我希望网络在启动后能够正常启动,因为它是嵌入式 Linux,并且需要首先启动一些更重要的东西。因此,我会将其添加到某个启动后脚本的某个位置。如果您希望在启动时启动界面,请将它们添加到启动过程中的某个位置。我会认为这超出了这个问题的范围。

所以,这很有效,虽然并不完美,但对于那些像我一样陷入困境的人来说,这将是一个很好的起点。我很确定并非所有提到的软件包都是最低限度的,/sbin/wpa_action 也不存在,但是当忽略它时,您将进入交互模式。一旦我更好地掌握了这个答案,我就会对其进行完善。欢迎提出建议!

相关内容