当前位置: 首页 > news >正文

树莓派超全系列教程文档--(58)通过网络启动树莓派

通过网络启动树莓派

    • 网络启动您的 Raspberry Pi
      • 配置网络启动客户端
        • Raspberry Pi 3 Model B
        • Raspberry Pi 4 Model B
      • 以太网 MAC 地址
      • 配置网络启动服务器
        • 设置 NFS 根目录

文章来源: http://raspberry.dns8844.cn/documentation

原文网址

网络启动您的 Raspberry Pi

您可以设置一个 DHCP/TFTP 服务器,以便从网络启动 Raspberry Pi 3 或 4。

说明假设您有一个现有的家庭网络,并且您想使用 Raspberry Pi 作为 服务器。您还需要一个额外的 Raspberry Pi 3 或 4 作为要启动的 客户端。只需要一个 SD 卡,因为客户端将在初始客户端配置后从服务器启动。

NOTE: 由于可用的网络设备和路由器种类繁多,我们无法保证网络启动适用于任何设备。我们收到报告称,如果您无法使网络启动正常工作,禁用网络上的 STP 帧可能会有所帮助。

配置网络启动客户端

Raspberry Pi 3 Model B

NOTE: 本节仅适用于 Raspberry Pi 3 Model B,因为 Raspberry Pi 3 Model B+ 在出厂时已启用网络启动。

在 Raspberry Pi 3 Model B 进行网络启动之前,需要从 SD 卡启动,并使用配置选项启用 USB 启动模式。这将在 Raspberry Pi SoC 中的 OTP(一次性可编程)内存中设置一个位,以启用网络启动。完成此操作后,如果无法从 SD 卡启动,Raspberry Pi 3B 将尝试从 USB 启动,并从网络启动。

以通常的方式在 SD 卡上安装 Raspberry Pi OS Lite 或带桌面的 Raspberry Pi OS。接下来,使用以下命令启用 USB 启动模式:

$ echo program_usb_boot_mode=1 | sudo tee -a /boot/firmware/config.txt

这会将 program_usb_boot_mode=1 添加到 /boot/firmware/config.txt 的末尾。使用 sudo reboot 重新启动 Raspberry Pi。客户端 Raspberry Pi 重新启动后,使用以下命令检查 OTP 是否已编程:

$ vcgencmd otp_dump | grep 17:
17:3020000a

确保输出 0x3020000a 正确。

客户端配置几乎完成。最后一步,禁用 USB 启动。运行以下命令:

$ sudo nano /boot/firmware/config.txt

删除包含文本 program_usb_boot_mode=1 的行。最后,使用 sudo poweroff 关闭客户端 Raspberry Pi。

Raspberry Pi 4 Model B

可以使用 raspi-config 工具在 Raspberry Pi 4 上启用网络启动。首先,按如下方式运行 raspi-config

$ sudo raspi-config

raspi-config 中,选择 Advanced Options ,然后选择 Boot Order ,再选择 Network Boot 。然后,您必须重新启动设备,以便将启动顺序的更改编程到引导加载程序 EEPROM 中。Raspberry Pi 重新启动后,请检查启动顺序现在是否为 0xf21

$ vcgencmd bootloader_config

有关配置 Raspberry Pi 4 引导加载程序的更多详细信息,请参阅 Raspberry Pi 引导加载程序配置。

以太网 MAC 地址

在配置网络启动之前,请记下序列号和 MAC 地址,以便 TFTP/DHCP 服务器可以识别该板。

在 Raspberry Pi 4 和以后的旗舰产品上,MAC 地址是在制造时编程的,MAC 地址和序列号之间没有任何联系。MAC 地址和序列号都显示在引导加载程序 HDMI 诊断 屏幕上。

要查找以太网 MAC 地址,运行下面命令:

$ ethtool -P eth0

要查找序列号,运行下面命令:

$ grep Serial /proc/cpuinfo | cut -d ' ' -f 2 | cut -c 9-16

配置网络启动服务器

将 SD 卡插入服务器 Raspberry Pi,然后启动服务器。客户端 Raspberry Pi 需要一个根文件系统来启动:我们将使用服务器根文件系统的副本并将其放在 /nfs/client1 中:

$ sudo mkdir -p /nfs/client1
$ sudo apt install rsync
$ sudo rsync -xa --progress --exclude /nfs / /nfs/client1

通过 chrooting 到客户端文件系统中重新生成 SSH 主机密钥:

$ cd /nfs/client1
$ sudo mount --bind /dev dev
$ sudo mount --bind /sys sys
$ sudo mount --bind /proc proc
$ sudo chroot .
$ rm /etc/ssh/ssh_host_*
$ dpkg-reconfigure openssh-server
$ exit
$ sudo umount dev sys proc

查找本地网络的设置。您需要找到路由器(或网关)的地址,可以使用以下命令完成:

$ ip route | awk '/default/ {print $3}'

然后运行:

$ ip -4 addr show dev eth0 | grep inet

您应该看到类似下面的输出:

inet 10.42.0.211/24 brd 10.42.0.255 scope global eth0

第一个地址是您的服务器 Raspberry Pi 在网络上的 IP 地址,斜线后的部分是网络大小。您的 IP 地址很可能是 /24 。还请注意网络的 brd (广播)地址。记下上一个命令的输出,其中将包含 Raspberry Pi 的 IP 地址和网络的广播地址。

最后,记下您的 DNS 服务器的地址,该地址与您的网关相同。您可以使用以下命令找到它:

$ cat /etc/resolv.conf

通过 systemd 网络在您的服务器 Raspberry Pi 上配置静态网络地址,它充当网络处理程序和 DHCP 服务器。

为此,您需要创建一个 10-eth0.netdev 和一个 11-eth0.network ,如下所示:

$ sudo nano /etc/systemd/network/10-eth0.netdev

添加以下行:

[Match]
Name=eth0[Network]
DHCP=no

然后创建一个网络文件:

$ sudo nano /etc/systemd/network/11-eth0.network

添加以下内容:

[Match]
Name=eth0[Network]
Address=10.42.0.211/24
DNS=10.42.0.1[Route]
Gateway=10.42.0.1

此时,您还没有可用的 DNS,因此您需要将之前记下的服务器添加到 systemd/resolved.conf 。在此示例中,网关地址为 10.42.0.1。

$ sudo nano /etc/systemd/resolved.conf

取消注释 DNS 行并在那里添加 DNS IP 地址。此外,如果您有后备 DNS 服务器,也请在那里添加。

[Resolve]
DNS=10.42.0.1
#FallbackDNS=

启用 systemd-networkd ,然后重新启动以使更改生效:

$ sudo systemctl enable systemd-networkd
$ sudo reboot

现在启动 tcpdump ,以便您可以从客户端 Raspberry Pi 搜索 DHCP 数据包:

$ sudo apt install tcpdump dnsmasq
$ sudo systemctl enable dnsmasq
$ sudo tcpdump -i eth0 port bootpc

将客户端 Raspberry Pi 连接到您的网络并打开电源。检查客户端上的 LED 是否在大约 10 秒后亮起,然后您应该从客户端获得一个数据包’DHCP/BOOTP,请求来自…’

IP 0.0.0.0.bootpc > 255.255.255.255.bootps:BOOTP/DHCP,请求来自 b8:27:eb...

现在您需要修改 dnsmasq 配置以启用 DHCP 回复设备。按 CTRL + C 退出 tcpdump 程序,然后输入以下内容:

$ echo | sudo tee /etc/dnsmasq.conf
$ sudo nano /etc/dnsmasq.conf

然后将 dnsmasq.conf 的内容替换为:

# NOTE: 如果您希望网络上的系统使用 DNS 服务,请注释掉端口。
port=0
dhcp-range=10.42.0.255,proxy
log-dhcp
enable-tftp
tftp-root=/tftpboot
pxe-service=0,"Raspberry Pi Boot"

dhcp-range 行的第一个地址,使用您之前记下的广播地址。

现在创建一个 /tftpboot 目录:

$ sudo mkdir /tftpboot
$ sudo chmod 777 /tftpboot
$ sudo systemctl enable dnsmasq.service
$ sudo systemctl restart dnsmasq.service

现在监控 dnsmasq 日志:

$ journalctl -f

您应该看到类似以下内容:

raspberrypi dnsmasq-tftp[1903]: file /tftpboot/bootcode.bin not found

接下来,您需要将 boot 文件夹的内容复制到 /tftpboot 目录中。

首先,按 CTRL + C 退出监控状态。然后输入以下内容:

$ cp -r /boot/firmware/* /tftpboot

由于 tftp 位置已更改,请重新启动 dnsmasq

$ sudo systemctl restart dnsmasq
设置 NFS 根目录

这现在应该允许您的 Raspberry Pi 客户端尝试启动,直到它尝试加载根文件系统(它没有)。

此时,导出先前创建的 /nfs/client1 文件系统和 TFTP 启动文件夹。

$ sudo apt install nfs-kernel-server
$ echo "/nfs/client1 *(rw,sync,no_subtree_check,no_root_squash)" | sudo tee -a /etc/exports
$ echo "/tftpboot *(rw,sync,no_subtree_check,no_root_squash)" | sudo tee -a /etc/exports

重新启动 RPC-Bind 和 NFS 服务器,以便让它们检测新文件。

$ sudo systemctl enable rpcbind
$ sudo systemctl restart rpcbind
$ sudo systemctl enable nfs-kernel-server
$ sudo systemctl restart nfs-kernel-server

编辑 /tftpboot/cmdline.txt ,从 root= 开始,并将其替换为:

root=/dev/nfs nfsroot=10.42.0.211:/nfs/client1,vers=3 rw ip=dhcp rootwait

您应该将此处的IP地址替换为您记下的IP地址。还要删除以 init= 开头的命令行的任何部分。

最后,编辑 /nfs/client1/etc/fstab 并删除 /dev/mmcblk0p1p2 行(应该只留下 proc )。然后,将引导分区添加回:

$ echo "10.42.0.211:/tftpboot /boot/firmware/ nfs defaults,vers=3 0 0" | sudo tee -a /nfs/client1/etc/fstab

如果第一次尝试时没有启动,请继续尝试。树莓派可能需要一分钟左右的时间才能启动,所以要有耐心。

上一篇 – 树莓派超全系列教程文档–(57)如何设置 Apache web 服务器
下一篇 –

相关文章:

  • 【LeetCode 热题100】网格路径类 DP 系列题:不同路径 最小路径和(力扣62 / 64 )(Go语言版)
  • 第6章:Neo4j数据导入与导出
  • 自定义连接线程池
  • 408第一季 - 数据结构 - 图
  • mybatis执行insert如何返回id
  • 星耀8上市品鉴暨北京中和吉晟吉利银河用户中心开业媒体见面会
  • 基于多维视角的大模型提升认知医疗过程层次激励编程分析
  • 关于IE浏览器被绑定安装,还卸载不掉
  • RabbitMQ work模型
  • 云原生监控体系建设:Prometheus+Grafana的企业级实践
  • 【11408学习记录】考研写作双核引擎:感谢信+建议信复合结构高分模板(附16年真题精讲)
  • LeetCode - 148. 排序链表
  • 自动驾驶科普(百度Apollo)学习笔记
  • vue.js not detected解决方法
  • LinuxSamba服务器配置篇
  • 三级流水线是什么?
  • 12-OPENCV ROCKX项目 人脸拍照
  • 抖音怎么下载没有水印的视频?
  • 【计算机网络】三报文握手建立TCP连接
  • 【iOS】JSONModel源码学习
  • 网站设计教程文档/100种找客户的方法
  • 深圳网站建设外包公司/百度明星搜索量排行榜
  • 82端口做网站/个人网上卖货的平台
  • 甘肃 政府 网站建设/电商网站建设
  • 网站开发说明书/建设网站费用
  • 只做PC版网站/网站软文推广网站