当前位置:首页>Linux>从树莓派看Linux的无线网络配置

从树莓派看Linux的无线网络配置

  • 2026-10-11 07:41:07
从树莓派看Linux的无线网络配置

很多人在 Linux 或树莓派上配置 Wi-Fi 时,都曾被这些名字搞糊涂:

  • rfkill

  • wpa_supplicant

  • NetworkManager

  • dhcpcd

尤其在 Raspberry Pi OS Bookworm 之后,不少旧教程突然失效:

为什么改 wpa_supplicant.conf 不生效了?

为什么 dhcpcd.conf 没用了?

NetworkManager 到底和 wpa_supplicant 是什么关系?

rfkill 又是什么?

本文从架构、职责划分、历史演进三个角度,把 Linux 的 Wi-Fi 网络栈讲清楚。

一、Linux Wi-Fi 网络栈:谁负责什么?

先看全景图。

┌────────────────────────────────────┐│ Linux Kernel Driver                ││ brcmfmac / iwlwifi / mt76 …        │└──────────────┬─────────────────────┘               │               ▼┌────────────────────────────────────┐│ rfkill                             ││ 无线硬件/软件开关控制                  │└──────────────┬─────────────────────┘               │               ▼┌────────────────────────────────────┐│ wpa_supplicant                     ││ Wi-Fi扫描 / WPA认证 / AP关联         │└──────────────┬─────────────────────┘               │               ▼┌────────────────────────────────────┐│ NetworkManager                     ││ 网络统一管理 / DHCP / DNS / VPN      │└────────────────────────────────────┘
层次
主要职责
Driver
驱动无线硬件
rfkill
控制无线是否允许工作
wpa_supplicant
负责 Wi-Fi 认证与连接
NetworkManager
统一管理整个网络系统

理解这一层次关系之后,很多 Linux 网络问题会突然变得清晰。

二、Driver:真正驱动 Wi-Fi 硬件的东西

最底层永远是Linux Kernel Driver。Linux 本身不会直接“认识”无线芯片,真正让系统能发现 Wi-Fi 硬件的,是对应驱动。

不同芯片对应不同 driver,例如:

硬件
Driver
Raspberry Pi BCM43455
brcmfmac
Intel AX200
iwlwifi
MediaTek MT7921
mt76

以 Raspberry Pi 为例,系统中常见:

brcmfmacbrcmutilcfg80211

当这些模块正常工作时,系统才会出现:

wlan0

此时意味着:

  • 硬件被发现

  • 驱动已加载

  • firmware 正常

如果这一层出问题,后面所有工具都会失效,因为根本没有 Wi-Fi 设备可供管理。

三、rfkill:Linux 的无线“总闸门”

很多 Linux 教程会跳过rfkill,实际上它是 Linux 无线系统里非常关键的一层。

rfkill 是什么?

Linux Kernel 官方定义:

RF-kill is a generic interface for disabling any radio transmitter in the system.

翻译成人话:Linux 的无线总开关框架,

它负责统一控制:

  • Wi-Fi

  • Bluetooth

  • WWAN(Wireless Wide Area Network, 比如手机4G/5G网络)

  • NFC

  • UWB(Ultra-Wideband,超宽带近距离定位与通信)

本质上,它位于 driver 与用户空间之间。

Soft Block 与 Hard Block

rfkill 有两个概念。

1)Soft Block

软件层禁用,即系统主动禁止无线发射,通常来自:

  • 系统配置

  • NetworkManager

  • 飞行模式

  • 用户操作

2)Hard Block

硬件层禁用,通常来自:

  • 物理无线开关

  • BIOS 设置

  • EC 固件

  • Laptop Fn 快捷键

这一状态不能通过软件强制解除。

为什么 rfkill 很容易被忽略

因为它处于一个很“尴尬”的位置。很多时候,driver 正常,wlan0 存在,但无线被 rfkill 阻断,于是会出现各种奇怪现象:

  • No devices found

  • Network unavailable

  • 无法扫描SSID

  • 无法连接AP

问题并不在 NetworkManager,真正的问题是无线发射器根本没被允许工作。

NetworkManager 与 rfkill 的关系

现代 Linux 中:

nmcli radio wifi on

本质上就是请求 NetworkManager 打开 Wi-Fi Radio,其底层通常对应 rfkill software state。

因此:

NetworkManager ↓ rfkill ↓ driver

是一条真实存在的调用链。

四、wpa_supplicant:真正负责“连接 Wi-Fi”的组件

很多人以为NetworkManager 负责连接 Wi-Fi,实际上这并不准确。在绝大多数 Linux 系统里,真正完成 Wi-Fi 认证工作的,是wpa_supplicant。

什么是 Supplicant

在 IEEE 802.1X / WPA 标准中:

Authenticator → 路由器/AP

Supplicant → 客户端

因此 wpa_supplicant 字面意思就是WPA 客户端认证程序。官方描述:

WPA/WPA2/WPA3 supplicant for Linux.

它负责什么

核心职责:

  • 扫描 Wi-Fi 网络

  • 选择 SSID

  • 执行 WPA/WPA2/WPA3 握手

  • 802.1X/EAP 认证

  • 关联到 Access Point

  • 漫游

换句话说,它真正负责:“把 wlan0 连到某个路由器上”。

一个容易混淆的事实

很多人认为连接Wi-Fi等于可以上网,其实不是。Wi-Fi 认证成功之后,通常只是关联到了 AP,并不等于:

  • 获得IP

  • 配置DNS

  • 建立默认路由

这些属于更高层网络管理职责。

NetworkManager 与 wpa_supplicant 的关系

这里有一个非常重要但容易误解的事实,在现代 Linux 中:

NetworkManager      ≠wpa_supplicant

更准确的关系是:

NetworkManager    ↓ 调用wpa_supplicant    ↓ 控制  wlan0

也就是说:NetworkManager 很多时候是通过 wpa_supplicant 完成 Wi-Fi 管理。它们不是替代关系,而是管理层和执行层的关系。

五、历史上的 dhcpcd

dhcpcd来自 Linux 网络栈的历史演进。

早期 Linux 网络管理模式

在早期 Linux 世界里,并不存在统一网络管理框架。网络通常采用多个专用组件组合模式,典型架构是:

driver ↓wpa_supplicant ↓DHCP client

其中 DHCP Client 负责:

  • IP地址获取

  • DNS配置

  • 默认网关

  • DHCP续租

dhcpcd扮演的是DHCP Client角色。这也符合Unix的一贯设计哲学,简单就是美。

传统 Raspberry Pi 模式

长期以来,Raspberry Pi OS 使用 wpa_supplicant + dhcpcd 组合,其特点是轻量、简单、适合嵌入式、适合无桌面环境。

在那个年代,这是一套非常合理的设计。

为什么后来被弱化

随着 Linux 系统复杂度增加,用户开始需要:

  • 多网卡

  • VPN

  • 热点

  • 自动漫游

  • 动态路由

  • 连接Profile

  • 桌面GUI管理

传统组合模式逐渐暴露问题,因为网络职责被拆散在多个组件里,维护复杂度越来越高。于是统一管理框架开始成为趋势,这就是 NetworkManager 崛起的背景。

Bookworm 的变化

从Raspberry Pi OS Bookworm 开始,默认网络方案转向NetworkManager。

这是为什么大量旧教程突然“不灵了”的原因。

很多历史配置方法建立在wpa_supplicant + dhcpcd时代,现代 Raspberry Pi 网络栈已经进入NetworkManager 主导阶段。

六、NetworkManager:现代 Linux 的网络总管

可以把 NetworkManager 理解为Linux 网络控制中心,它统一管理:

  • Wi-Fi

  • Ethernet

  • DHCP

  • DNS

  • VPN

  • Routing

  • 热点

  • 静态IP

  • Connection Profile

它的目标是:自动发现、自动配置、统一管理网络连接。

它为什么流行

因为它解决了传统 Linux 网络管理碎片化问题,过去可能需要:

  • wpa_supplicant

  • dhcpcd

  • resolv.conf

  • route

  • VPN工具

  • 多个配置文件

现在统一收敛到NetworkManager之下。

Connection Profile的思想

NetworkManager 引入了一个现代网络系统非常重要的概念:Connection Profile,即网络连接配置对象。

它不仅记录:

  • SSID

  • 密码

  • 认证方式

还可以包含:

  • 静态IP

  • DNS

  • VPN

  • 路由策略

  • 自动连接规则

这也是现代 Linux 网络管理更像“配置管理系统”的原因。

七、命令快速参考

# 查看系统版本,本文是 Debian 13(trixie)cat /etc/os-release# 查看网络接口ip link# 查看无线设备iw dev# 查看已加载驱动模块lsmod# 查看无线驱动相关日志dmesg | grep -i brcm# 查看无线网卡的节能状态 iw dev wlan0 get power_save# 如果因为节能无法连接可把它关闭sudo iw dev wlan0 set power_save off ######################################################### rfkill:无线总开关######################################################### 查看 rfkill 状态rfkill list# 软解锁 Wi-Fisudo rfkill unblock wifi# 软锁定 Wi-Fisudo rfkill block wifi######################################################### wpa_supplicant:Wi-Fi 配置与认证# 用 NetworkManager 可以忽视本部分 ######################################################### 查看配置文件cat /etc/wpa_supplicant/wpa_supplicant.conf# 查看连接状态wpa_cli status# 扫描 Wi-Fisudo iw dev wlan0 scan# 手动启动 wpa_supplicantsudo wpa_supplicant \    -i wlan0 \    -c /etc/wpa_supplicant/wpa_supplicant.conf######################################################### NetworkManager:现代 Linux 网络管理######################################################### 查看设备状态nmcli device status# 查看 Wi-Fi Radio 状态nmcli radio# 开启 Wi-Fi Radiosudo nmcli radio wifi on# 关闭 Wi-Fi Radiosudo nmcli radio wifi off# 显示 Wi-Finmcli device wifi list# 连接 Wi-Fisudo nmcli device wifi connect \    "SSID" password "PASSWORD"# 查看已保存连接nmcli connection show# 查看 NAME 为 HomeWifi 的profilenmcli connection show "HomeWifi"# 关闭节能模式,0:缺省 1:忽略 2:关闭 3:开启 sudo nmcli connection modify "HomeWifi" 802-11-wireless.powersave 2# 重启连接 sudo nmcli connection down "HomeWifi"sudo nmcli connection up "HomeWifi"# 删除连接 profilesudo nmcli connection delete "HomeWifi"######################################################### NetworkManager 配置文件######################################################### 查看保存的 connection profilesls /etc/NetworkManager/system-connections/# 查看 profile 内容sudo cat \/etc/NetworkManager/system-connections/*.nmconnection######################################################### systemd 服务层######################################################### 查看 NetworkManager 服务systemctl status NetworkManager# 查看 wpa_supplicant 服务systemctl status wpa_supplicant# 启用 NetworkManagersudo systemctl enable NetworkManager# 重启 NetworkManagersudo systemctl restart NetworkManager######################################################### IP / Route / DNS######################################################### 查看 IP 地址ip addr# 查看路由表ip route# 查看 DNSnmcli dev show | grep DNS# 老系统可查看cat /etc/resolv.conf

参考资料

Linux Kernel rfkill Documentation

https://docs.kernel.org/driver-api/rfkill.html

HostAP / wpa_supplicant Official

https://w1.fi/wpa_supplicant/

Linux Wireless Documentation — wpa_supplicant

https://wireless.docs.kernel.org/en/latest/en/users/documentation/wpa_supplicant.html

NetworkManager Official Documentation

https://networkmanager.dev/docs/

Raspberry Pi Forum — NetworkManager on Bookworm

https://forums.raspberrypi.com/viewtopic.php?t=357739

Raspberry Pi StackExchange — Networking on Raspberry Pi OS Bookworm

https://raspberrypi.stackexchange.com/questions/145593/how-do-i-set-up-networking-on-raspberry-pi-os-bookworm-or-later

Jeff Geerling — Static IP on Raspberry Pi OS Bookworm

https://www.jeffgeerling.com/blog/2024/set-static-ip-address-nmtui-on-raspberry-pi-os-12-bookworm/

最新文章

随机文章