把 ESP32 当树莓派的无线网卡用:esp-hosted 从接线到驱动的实操笔记

买笔记本时很难想象一台没有无线网口的机器是什么体验,但在 Linux 单板计算机(SBC)圈子里,出厂不带 WiFi 反而是常态。就算带,配套无线驱动也常常是”祖传闭源固件 + 临时糊上的 blob 驱动 + 永远修不完的怪问题”三件套,有的干脆整个驱动都没源码。如果板子上还有一个空闲的 SDIO 或 SPI 口,Espressif 的 esp-hosted 方案提供了一个相当独特的解法:用一颗 ESP32 芯片充当 Linux 主机的无线网卡。

一个名字,两个项目

先澄清一点:esp-hosted 名下其实有两个方向。

esp-hosted-mcu(旧名 esp-hosted-fg,”第一代”)里 ESP32 更像一颗独立 MCU:连接逻辑归 ESP32 自己管,Linux 侧只拿到一个有限但自洽的接口。好处是 ESP32 是个”有意识的独立个体”——主机重启甚至关机它都能自己连 WiFi,适合想让 ESP32 兼职当 EC(嵌入式控制器)的场合。

esp-hosted-linux(旧名 esp-hosted-ng,”新一代”,本文主角)把无线协议栈留在 Linux 侧,ESP32 退化成无线栈前面的一层”薄代理”,行为和正规 WiFi 网卡最接近。

跑这套方案需要两个角色:一台带空闲 SDIO/SPI 口的 Linux 机器,加一颗受支持的 ESP32 模块——目前 ESP32-S2、-S3、-C2、-C3、-C5、-C6/C61 都能上。作者选了 ESP32-C6——当时觉得它特性最全、只比别家贵一点点——但复盘时说这是个”错误”:ESP32-C5 其实更强,独有 5GHz 支持,下一代板子他会直接改押 C5。

接线:SDIO 优先,三个细节别省

推荐走 SDIO,比 SPI 快得多。这条总线是全双工并行总线:1 根命令线(CMD)、1 根时钟线(CLK)、4 根数据线(D0–D3,极简主义者可以只用 D0),信号速率不低,又都是单端线,布线必须讲究:地回路要连续、各信号线尽量等长(1 mm 内)、整条链路能多短就多短。

图:参考接线图——SDIO 四数据线 + 上拉/串阻配置(图源:Hackaday)

树莓派 40 针引出的 SDIO 有个特色:有的信号需要大量等长补偿、有的一根都不用,属正常现象。按 ESP-Hosted 文档要求,串阻和上拉电阻都要备齐。另外驱动需要一个能控制 ESP32 EN 引脚的 GPIO,让驱动能在通信前把芯片复位到已知状态;如果 GPIO 实在不够,也可以按 OLED 屏常用的 RC 电路处理 EN,然后在驱动初始化时传 resetpin=-1 自己接管。

BOOT 脚反而不用操心,但电源要留足:3.3 V 轨按 300–400 mA 准备。树莓派自身的 3.3V 轨够用,别的 SBC 可能要加一颗独立稳压。最后别忘了把 ESP32 的 USB 口引出来——烧录固件只需一次,但你得有过得去的路。

图:单面布局示例——上拉电阻与串阻同时布置(图源:Hackaday)

编译与加载:老派但直接

整体三步:解放 SBC 的 SDIO 接口 → 编译并烧录 ESP32 固件 → 编译并加载 Linux 驱动。树莓派上第一步只是改 config.txt 重映射引脚的事(其中”禁用蓝牙”这一项通常绕不开——原厂板载 WiFi 固件本来就靠 SDIO 加载,SDIO 被 esp-hosted 占用后原卡基本报废,蓝牙自然也活不了;这一步还顺带释放了 UART 调试口,bringup 阶段非常救命)。

两个实测过的坑:

  • 别在 SBC 上编译 ESP32 固件。树莓派 Zero 这种内存小的板子跑 cmake 基本必锁死,用桌面电脑编好再拷过去最省心;或者直接从 GitHub Releases 下载现成固件。
  • 驱动和固件必须来自同一 git 版本,用 git log 核对最后一次提交,否则驱动会警告拒载。
  • 小内存板子把 rpi_init.sh 里的 make -j8 改成 -j2 甚至 -j1,否则编译吃光 RAM 一样锁死。

驱动加载成功后 wlan 接口就会出现,出问题看 dmesg(作者习惯开个 dmesg -Hw 窗口挂着)。长期运行别依赖 rpi_init.sh(它每次跑都重新编译),把编好的 esp_sdio.ko 拷进 /lib/modules/$(uname -r)/kernel/drivers/ 执行 depmod -a,之后就能 modprobe esp_sdio,再把模块名写进 /etc/modules 开机自载。

图:实机现场——作者忘了带上拉电阻,现场飞线补救(图源:Hackaday)

能用,而且前景不小

现状:默认 SDIO 频率下吞吐大约 40–50 Mbps,硬件讲究一点还能继续压榨。作者特别点名的两个好处:这是他所知唯一能把蓝牙也穿透 SDIO 走掉的 WiFi 方案(不占用 UART,对 Pi Zero 形态尤其珍贵);并且在真实项目里硬件断电开关能正常工作——ESP32 断电瞬间内核模块不崩不炸,重新上电自动重连。短板是缺 dkms 集成,内核一升级就得重编译驱动。

更远一步的想象空间:ESP32 固件只有射频部分是 blob,其余大部分开源,社区已经有多个逆向项目在路上;SDIO 接完线后 ESP32 还剩大量空闲引脚(含高速 SPI),挂上 LoRa 模块跑 Meshtastic、把芯片原生支持的 Zigbee/Thread 透传给 Linux,都只是”填空题”。一颗 omnipresent 的 ESP32 模块,有望变成便宜、量大、基本全开源的 Linux 无线网卡。

小夏点评

  • 树莓派原厂 WiFi 依赖闭源固件、占用 SDIO 的痛点对开源社区是老问题了,esp-hosted 是目前最接近”全开源无线网卡”的落地方案,作者连隐私断电开关这种极端场景都验证过,工程可信度高。
  • 40–50 Mbps 的吞吐对传感器网关足够,对跑流量的主机仍偏小——选型前先想清楚用途,别为开源情怀牺牲带宽。
  • 对国内开发者的启示:ESP32 出货量巨大、方案成本几乎为零,”MCU 兼职主机网卡 + 剩余引脚跑 Zigbee/Thread/Mesh”的组合,正好贴着国内智能家居和物联网网关的产业化需求,值得盯一下 esp-hosted-linux 的 dkms 化进展。

参考链接

  • 原文:https://hackaday.com/2026/10/07/esp32-as-your-raspberry-pis-linux-wireless-co-processor/
  • esp-hosted 主仓库:https://github.com/espressif/esp-hosted/
  • esp-hosted-linux 移植指南:https://github.com/espressif/esp-hosted-linux/blob/master/docs/porting_guide.md

您可能还喜欢...

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注