树莓派 Zero 2W RaspberryPi OS Lite 环境搭建

前言

本文是对树莓派 Zero 2 W 在 Headless 的 RaspberryPi OS Lite (Bookworm 64Bit) 下的环境搭建,主要解决以下问题:

  1. 电脑使用无线WIFI与树莓派通过SSH通信

  2. 电脑使用USB与树莓派通过SSH通信

  3. 将电脑的以太网通过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 0

    wlan0: 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.2

    pi@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 0

    wlan0: 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 0

    pi@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

  • 这样就能确保开机时就能联网

评论

发表回复

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

目录