树莓派网路启动配置方法:

该文档适用于Pi 3 和 Pi 4,需要两台树莓派,一台作为server 另一台作为client只需要一张SD卡,因为client使用网络启动

如果无法成功网络启动,请 关闭网络中的 STP Frames,这样也许有帮助。

Client configuration(For Pi 4):

使用 raspi-config 可以启动Pi 4 的网络启动功能

首先:

sudo raspi-config

​       选择 Advanced Options 之后选择 Boot Order 再之后选择 Network Boot.

​       重启设备,设备会优先使用 bootloader EEPROM 启动。

​       重启后,请确认boot order 是 0xf21

​       使用命令:

vcgencmd bootloader_config

Ethernet Mac address

使用网络启动之前请记录 serial number 和 mac address 这样树莓派才可以被 TFTP/DHCP sever识别

获取Ethernet MAC addres

ethtool -P etho

获取 serial number 

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

Server configuration

将SD卡插入server 树莓派然后重启,client 需要一个根文件系统用于启动,本次我们使用 server的根文件系统的复制品,放置于/nfs/client1

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

​       注: mkdir "-p"代表却表目录名称存在,不存在就创建一个

​       重新生成client 树莓派的SSH host keys,通过 chrooting 连接 client树莓派

cd /nfs/client1sudo mount --bind /dev devsudo mount --bind /sys syssudo mount --bing /proc procsudo chroot .rm /etc/ssh/ssh_host_*dpkg-reconfigure openssh-serverexitsudo umount dev sys proc

​       找到本地网络的配置参数,你需要照登你的路由器的地址或者(dateway),如下操作。

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

​       第一个地址是你的server树莓派在网络中的IP,"/24"代表网络大小, “brd (boardcast)”  地址也要记录下来。

​       最后记下你的DNS server的地址,改地址与你的gateway地址相同。通过一下命令获取

cat /etc/resolv.conf

​       将server树莓派设置为静态地址,通过 systemd networking,server树莓派将会作为network handler 和 DHCP server工作。

​       为此,你需要创建 10-eth0.netdev

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/24DNS = 10.42.0.1[Route]Gateway = 10.42.0.1

​       目前,你还没有得到一个可以工作的DNS,因此你需要把你之前记录下来的server地址添加到 systemd/resolved.conf 。在本例子中,gateway address 是 10.42.0.1

 sudo nano /etc/systemd/resolved.conf

​       解除DNS那一行的注释,添加 DNS IP Address在该处。

​       另外,如果你有一个fallback DNS server ,那么把它也添加在这里,该处内容类似:

 [Resolve]DNS = 10.42.0.1# FallbackDNS =

​       接下来,Enable systemctl-networkd 然后重启设备使得我们之前的改变生效

sudo systemctl enable systemd-networkdsudo reboot

​       现在启动 tcpdump 这样,你就可以从client树莓派搜索DHCP packets了。

sudo apt install tcpdump dnsmasqsudo systemctl enable dnsmasqsudo tcpdump -i eth0 port bootpc

​       将client树莓派连接到你的网络中,启动。在10s左右侯检查LED指示灯,这时你应该可以从client树莓派得到一个packet,类似”DHCP/BOOTP,Request from...“

IP 0.0.0.0.bootpc > 255.255.255.255.bootps : BOOTP/DHCP, Request from b8:27:eb...                 

​       现在你需要去设置dnsmasq configuration 用以enable DHCP来回应设备, 按下 CTRL + C 离开 tcpdump 程序,输入如下内容:

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

​       然后,将dnsmsq.conf中的内容替换为

# Note: comment out port if you want DNS services for systems on teh networkport = 0dhcp-range = 10.42.0.255,proxylog-dhcpenable-tftptftp-root = /tftpbootpxe-service=0,"Raspberry Pi Boot"

​       其中 dhcp-range 那一行表示使用你之前记下的 boardcast address

​       现在,创建 /tftpboot 目录

sudo mkdir /tftpbootsudo chmod 777 /tftpbootsudo systemctl enable dnsmasq.servicesudo systemctl restart dnsmasq.service

​       现在,监视 dnsmsq日志(log)

tail -F /var/log/daemon.log

​       你会看到类似这样的内容:

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

​       接下来你需要把boot folder中的内容拷贝到 /tftpboot 目录中去

​       首先 摁下 CTRL + C 离开监视状态 ,输入如下内容

cp -r /boot/* /tftpboot

​       目前tftp位置已经改变,重启dnsmasq

sudo systemctl restart dnsmasq

Set up NFS root

​       这样做将会允许你的client树莓派尝试启动,当它加载到了服务器端放置的根文件系统(root file system)之后。

​       现在,导出我们之前建立的文件系统 /nfs/client1 和TFTP boot 文件夹

sudo apt install nfs-kernel-serverecho "/nfs/client1 *(rw,sync,no_subtree_check,on_root_squash)"  | sudo tee -a /etc/exportsecho "/tftpboot *(rw,sync,no_subtree_check,no_root_squash)" | sudo tee -a /etc/exports

​       重启 RPC-Bing 和 NFS server 使它们识别新文件

sudo systemctl enable rpcbingsudo systemctl restart rpcbingsudo systemctl enable nfs-kernel-serversudo systemctl restart nfs-kernel-server

​       编辑 /tftpboot/cmdline.txt 然后 从 root= 向前(from root= onwards),将它替换为:

root = /dev/nfs nfsroot=10.42.0.211:/nfs/client1,vers=4.1,proto=tcp rw ip=dhcp rootwait elevator=deadline

​       你需要使用你之前记下的IP地址替换这里的IP地址,同时删除所有以“init=”开头的命令。

​       最后,编辑 /nfs/client1/ect/fstab 同时移除 /dev/mmcblk0p1 和 p2 (只留下 proc).

​       最后,Then, add the boot partition back in:

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

​       结束了,祝你好运,如果第一次没有成功启动,多试几次,这可能需要花几分钟,耐心一点。

树莓派pxe网络启动官方文档(译文)相关推荐

  1. 树莓派pxe网络启动遇到的问题与解决方法

    前言 本次开源社区的工作是将compass-CI部署到树莓派. 本文主要内容为:测试机pxe启动过程中的注意事项. pxe启动参考文档 参考的内容主要是树莓派关于网络启动的官方文档. 地址: http ...

  2. reactor官方文档译文(2)Reactor-core模块

    You should never do your asynchronous work alone. - Jon Brisbin 完成Reactor 1后写到 You should never do y ...

  3. reactor官方文档译文(1)Reactor简介

    原文地址:http://projectreactor.io/docs/reference/ Reactor简介 Reactor是一个基础库,用在构建实时数据流应用.要求有容错和低延迟至毫秒.纳秒.皮秒 ...

  4. 瑞波Ripple概念解析-共识网络(官方文档不完全翻译)

    修订 修订系统提供了一种去中心化的XRP账本网络引入新功能而不会导致中断的方法.修订体系通过利用网络的核心共识流程,通过在变更生效之前显示持续的支持来批准任何变更.修正案通常需要两周内获得80%的支持 ...

  5. Pixi官方文档译文(2)

    通过纹理集创建Sprite(Make a sprite from a tileset sub-image) 如果你开发的游戏很复杂,庞大,那么使用纹理集的方式去创建sprite是非常高效的一种行为.一 ...

  6. k8s多master建议用几个_Kubernetes 教程之跟着官方文档从零搭建 K8S

    前言 本文将带领读者一起, 参照者 Kubernetes 官方文档, 对其安装部署进行讲解. Kubernetes 更新迭代很快, 书上.网上等教程可能并不能适用于新版本, 但官方文档能. 阅读这篇文 ...

  7. Kubernetes教程之跟着官方文档从零搭建K8S

    本文将带领读者一起, 参照着 Kubernetes 官方文档,对其安装部署进行讲解.Kubernetes更新迭代很快,书上.网上等教程可能并不能适用于新版本,但官方文可以. Kubernetes 教程 ...

  8. Android HIDL 官方文档(七,END)—— 网络堆栈配置工具(Network Stack Configuration Tools)

    网络工具封装 网络工具封装过滤器 1 供应商接口与链 2 允许使用的命令 21 ip 22 iptables ip6tables 23 ndc 24 tc 对应的官方文档地址:HIDL(General ...

  9. 雷电网络REST API官方文档【中文版】

    雷电网络(Raiden Network)是以太坊区块链的链下扩容方案,Raiden节点的Restful API官方文档中文版由汇智网提供,访问地址:http://cw.hubwiz.com/card/ ...

最新文章

  1. 以前的的华为手机可不可以用鸿蒙系统_鸿蒙系统面世之后,以前的华为手机可以用鸿蒙系统吗?不好意思!...
  2. IOS开发之sqlite封装
  3. [AGC001 D]Arrays and Palindrome
  4. 布局—column(属性)
  5. win定时关机_如何让电脑定时自动关机
  6. 从零开始学前端:购物车和鲜花价格排序 --- 今天你学习了吗?(JS:Day12)
  7. DLog-M什么意思
  8. 在线编辑器FreeTextBox的使用
  9. Sandbox简介和路径获取
  10. ​​​​​​​​CloudMounter:挂载云存储作为在 Mac 的本地磁盘
  11. Google开源项目风格指南-Python(C++)风格指南
  12. java电话本怎么做_Java写的电话号码本自动化生成器,程序片段
  13. 红外遥控器-VS1838B/HS0038红外接收方案(包含原理图+PCB+BOM表+程序)
  14. 贯入用计算机怎样换算,标准贯入试验应用及其杆径换算研究
  15. SEO采集系统-SEO采集工具自动采集伪原创发布
  16. AR学习笔记(四):相关文献查阅
  17. CM添加kafka服务
  18. 【自定义View】洋葱数学同款阴影布局-ShadowLayout
  19. 计算机网络如何新建vlan和划分vlan,[单选] 划分VLAN后,不同VLAN的计算机之间不能实现二层通信。如果在VLAN间通信,需要建立()...
  20. 送书 | 教你下载B站指定视频

热门文章

  1. uniapp 小程序获取微信收货地址
  2. Who is the lion(谁是狮子)!
  3. Problem C: 点在圆内吗?
  4. C++常成员函数与普通成员函数访问比较
  5. Linux预处理功能,ZABBIX4.2预处理新功能---数据节流THROTTLING
  6. Sched: RT throttling activated
  7. java对接支付宝当面付支付和查询
  8. RK3288开发板PopMetal上的GPIO驱动实例
  9. 使用VScode阅读Linux源码
  10. 解决微信企业号和公众号无法调用摄像头拍视频的问题