前言
本文是对树莓派 Zero 2 W 在 Headless 的 RaspberryPi OS Lite (Bookworm 64Bit) 下的环境搭建,主要解决以下问题:
-
电脑使用无线WIFI与树莓派通过SSH通信
-
电脑使用USB与树莓派通过SSH通信
-
将电脑的以太网通过USB共享给树莓派
过程
主要参考这篇文章 通过usb接口访问树莓派zero w (RNDIS/Ethernet Gadget 和 Bookworm系统) – 知乎 和 DeepSeek
对其中一些内容进行提炼。解决我遇到的问题。
1、SD卡设置
-
在 RaspberryPi Imager 中选择 RaspberryPi OS Lite (Bookworm 64Bit) 镜像,使用自定义配置
-
设置主机名、用户名和密码
-
配置WiFi,WiFi必须是2.4GHz频段的

- 开启SSH服务

-
写入镜像
-
写入后,在SD卡的 bootfs 盘的根目录中,找到 config.txt,写入以下内容:
dtoverlay=dwc2
-
找到 commandline.txt,在 rootwait 和 quiet 之间添加以下内容:
-
modules-load=dwc2,g_ether -
这会让树莓派作为网卡被电脑识别
-
-
在SD卡根目录下面创建一个名为 “ssh” 的空文件
-
取出SD卡,插入树莓派
2、通过 WiFi 的 SSH 连接
-
将树莓派的 USB 接口接入电脑(PWR 接口可以不用接电源)
-
保证树莓派与电脑连入同一 WiFi 下
-
测试连通性:
ping 主机名.local- 可以使用
ping -4 主机名.local仅进行 ipv4 测试
- 可以使用
-
连接:
ssh 用户名@主机名.local- 可以使用
ssh -4 用户名@主机名.local仅进行基于 ipv4 的连接
- 可以使用
-
输入密码,密码是隐藏的,输完按回车
-
连接成功
3、通过 USB 的 SSH 连接
-
下载并解压 Windows 网卡驱动 Microsoft Update Catalog,Acer Incorporated. – Other hardware – USB Ethernet/RNDIS Gadget
-
在设备管理器中的“端口”中找到新的设备,右键更新其驱动程序为解压目录下的驱动程序
-
此时在 Windows 控制面板\网络和 Internet\网络连接 中,会出现“以太网2”,状态“未连接”
- 显示未连接是因为树莓派没有设置 usb 作为网卡
-
树莓派通过
ifconfig命令,可发现 usb 不在网卡列表中:pi@raspberrypi:~ $ ifconfig #查看当前网卡链接发现只有wlan0,lo可以不用管,它不是usb
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 12 bytes 1722 (1.6 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 12 bytes 1722 (1.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.87 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::7531:ee17:fcd3:80e4 prefixlen 64 scopeid 0x20<link>
ether b8:27:eb:f8:5b:af txqueuelen 1000 (Ethernet)
RX packets 1002 bytes 148568 (145.0 KiB)
RX errors 0 dropped 315 overruns 0 frame 0
TX packets 155 bytes 23727 (23.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 -
设置 usb 网卡,路由器 ip 指定为
192.168.137.2pi@raspberrypi:~ $ sudo ifconfig usb0 192.168.137.2 netmask 255.255.255.0
pi@raspberrypi:~ $ ifconfig
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 12 bytes 1722 (1.6 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 12 bytes 1722 (1.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
usb0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.137.2 netmask 255.255.255.0 broadcast 192.168.7.255
inet6 fe80::3096:7aff:fefb:9613 prefixlen 64 scopeid 0x20<link>
ether 32:96:7a:fb:96:13 txqueuelen 1000 (Ethernet)
RX packets 94 bytes 30157 (29.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 33 bytes 4390 (4.2 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.99 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::3331:ee17:fcd3:80e4 prefixlen 64 scopeid 0x20<link>
ether b8:27:ef:f8:5b:af txqueuelen 1000 (Ethernet)
RX packets 1372 bytes 198880 (194.2 KiB)
RX errors 0 dropped 437 overruns 0 frame 0
TX packets 237 bytes 35221 (34.3 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0pi@raspberrypi:~ $
-
之所以选
192.168.137.2这个地址,是因为后面设置共享网络时,Windows 会将树莓派“以太网2”分配为192.168.137.x网段,需要让 usb 也在这个网段下 -
此时电脑控制面板里“以太网2”的红叉叉消失,变化为“未识别的网络”
-
此时已经可以通过 USB 进行 SSH 通信,无需 WiFi。但这是暂时的,需要创建一个开机自启的服务来持久化
-
使用 nano 命令创建并编辑服务:
sudo nano /etc/systemd/system/set-usb0-ip.service -
添加以下内容:
[Unit]
Description=Set static IP for usb0
After=network.target[Service]
ExecStart=/sbin/ifconfig usb0 192.168.137.2 netmask 255.255.255.0[Install]
WantedBy=multi-user.target -
最后启用这个服务:
sudo systemctl daemon-reload
sudo systemctl enable set-usb0-ip.service
sudo systemctl start set-usb0-ip.service -
完成设置。
3、共享电脑以太网给树莓派
-
右击电脑连接的“以太网”-属性,点开“共享”,把第一个勾打上,下拉菜单选择“以太网2”也就是树莓派
- 这样就能把“以太网”共享给“以太网2”
-
此时树莓派仍不能建立连接,因为它不知道可以通过 USB 连接(Bookworm 系统使用 NetworkManager 管理网络,它不知道这条通路)
- 可以通过
nmcli connection show命令查看所有通路
- 可以通过
-
使用 NetworkManager 创建 USB 连接:
sudo nmcli connection add type ethernet ifname usb0 con-name usb0-static \ ip4 192.168.137.2/24 gw4 192.168.137.1 \ ipv4.dns "192.168.137.1,8.8.8.8" \ connection.autoconnect yes \ connection.autoconnect-priority 10 -
立即启用:
sudo nmcli connection up usb0-static -
此时树莓派已经可以联网
-
创建一个服务来在开机时启用 USB 网络通路:
sudo nano /etc/systemd/system/usb0-network.service
[Unit]
Description=Ensure USB0 Network Connection
After=NetworkManager.service
Requires=NetworkManager.service[Service]
Type=oneshot
ExecStart=/bin/sh -c ‘while ! nmcli connection up usb0-static; do sleep 2; done’
RemainAfterExit=yes
TimeoutStartSec=30[Install]
WantedBy=multi-user.target -
这样就能确保开机时就能联网
发表回复