树莓派4 PI 4引导加载器配置

in 学习笔记 with 0 comment

原文链接:https://www.raspberrypi.org/documentation/hardware/raspberrypi/bcm2711_bootloader_config.md

您可以使用以下方法显示当前活动的配置:

vcgencmd bootloader_config
要更改这些引导加载器配置项,您需要提取配置段,进行更改,重新插入它,然后用新的引导加载程序重新编程EEPROM。Raspberry PI将需要重新启动以使更改生效。

Copy the EEPROM image of interest from /lib/firmware/raspberrypi/bootloader/ to pieeprom.bin

rpi-eeprom-config pieeprom.bin > bootconf.txt

Edit the configuration using a text editor e.g. nano bootconf.txt

Example change. If you have a UART cable then setting BOOT_UART=1 will help debug boot issues

BOOT_UART=1

Save the new configuration and exit editor

Apply the configuration change to the EEPROM image file

rpi-eeprom-config --out pieeprom-new.bin --config bootconf.txt pieeprom.bin
若要用已编辑的引导加载程序更新引导加载程序EEPROM,请执行以下操作:

Flash the bootloader EEPROM

Run 'rpi-eeprom-update -h' for more information

sudo rpi-eeprom-update -d -f ./pieeprom-new.bin
sudo reboot
后续引导加载程序更新
如果通过APT更新引导加载程序,那么使用这里描述的过程所做的任何配置更改都将迁移到更新的引导加载程序。

配置特性
本节描述引导加载程序中可用的所有配置项。语法与config.txt但是这些属性是特定于引导加载程序的。条件滤波器除了EDID之外,还支持。

引导UART
如果1然后在GPIO 14和15上启用UART调试输出。将接收的调试终端配置为115 200 bps,8位,无奇偶校验位,1停止位。缺省值:0
版本:全部

唤醒GPIO
如果1,那么‘sudo Hit’将在低功耗模式下运行,直到GPIO 3或Global_en被短路。

默认值:0在原始版本的引导加载程序(2019-05-10)。较新的引导程序将此设置为1。
版本:全部

断电停止
如果1和Wake_ON_GPIO=0,则关闭所有PMIC输出。这是最低可能的暂停功率状态,但可能会导致一些HATS的问题,因为5V将仍然开着。必须将全局_en缩短到地面才能启动。

缺省值:0
版本:2019-07-15

冻结版本
如果1,则rpi-eeprom-update将跳过此板上的自动更新。该参数不被EEPROM引导或恢复处理,因为在软件中无法完全写入保护EEPROM。自定义EEPROM更新脚本还必须检查此标志。

缺省值:0
版本:全部

启动顺序
boot_order设置允许灵活配置不同引导模式的优先级。它表示为32位无符号整数,其中每个nible表示一个引导模式。这些引导模式是在最低有效咬入到最高有效咬取顺序下尝试的。

例如,0x21意味着先尝试sd,然后是网络引导,然后停止。而0x2意味着尝试网络引导,然后停止而不尝试从SD卡启动。

当切换到下一个引导模式时,重试计数器将被重置。

引导顺序字段
boot_order属性定义了不同引导模式的顺序。从右到左读取,最多可定义8位数字。

0x0-无(用错误模式停止)
0x1-SD卡
0x2-网络
0x3-usb设备启动usbboot-仅限于计算模块。
0x4-usb大容量存储引导
0Xf-重新启动(循环)-使用第一个引导顺序字段再次启动。
缺省值:0x1
版本:pieeprom-2020-04-16.bin

如果sd卡检测针指示卡已插入或替换,引导模式0x0将重新尝试sd引导。
默认的引导模式现在是0xf41,这意味着继续尝试SD,然后是USB大容量存储。
最大启动
如果遇到的重启(0Xf)模式超过MAX_RESTART次数,则触发看门狗重置。这不建议用于一般用途,但对于需要完全重置以解决硬件或网络接口问题的测试或远程系统可能有用。

默认值:-1(无限)
版本:pieeprom-2020-06-15

SD引导最大重试
所定义的下一个引导模式之前,sd引导在失败后将重新尝试的次数。BOOT_ORDER.
-1意味着无限重试。
缺省值:0
版本:pieeprom-2020-04-16.bin

NET引导最大重试
失败后重新尝试网络引导的次数,然后再转到由BOOT_ORDER.
-1意味着无限重试。
缺省值:0
版本:pieeprom-2020-04-16.bin

DHCP超时
整个DHCP序列在当前迭代失败前的超时(毫秒)。
违约:45000
最低限度:5000
版本:pieeprom-2020-04-16.bin

DHCP_REQ超时
重试DHCP发现或DHCP REQ之前的超时(毫秒)。
违约:4000
最低限度:500
版本:pieeprom-2020-04-16.bin

TFTP文件超时
通过TFTP下载单个文件的超时时间(毫秒)。
违约:30000
最低限度:5000
版本:pieeprom-2020-04-16.bin

TFTP_IP
可选点小数IP地址(例如,“192.168.1.99”)用于TFTP服务器,该服务器覆盖来自DHCP请求的服务器-IP。
这在家庭网络中可能很有用,因为tftpd-hpa可以代替dnsmasq,在这里宽带路由器是DHCP服务器。

违约:“”
版本:pieeprom-2020-04-16.bin

TFTP前缀
为了支持每个PI的唯一TFTP引导目录,引导加载程序以设备特定目录作为文件名的前缀。如果在前缀目录中既没有start4.Self,也没有start.Self,那么前缀就会被清除。在早期的模型中,序列号用作前缀,但是在PI 4上,不再从序列号生成MAC地址,因此很难通过检查DHCPDISCOVER数据包在服务器上自动创建tftpboot目录。为了支持这一点,可以自定义TFTP_前缀为MAC地址、固定值或序列号(默认值)。

0-使用序列号,例如“9 ffefdef/”
1-使用TFTP_前缀_STR指定的字符串
2-使用MAC地址。“DC-A6-32-01-36-C2/”
缺省值:0
版本:pieeprom-2020-04-16.bin

TFTP前缀STR
指定当TFTP_前缀设置为1时使用的自定义目录前缀字符串。例如:-TFTP_PREX_STR=TFTP_TEST/DEFAULT:“”
版本:pieeprom-2020-04-16.bin

PXE_OPTION 43
用不同的字符串重写PXEOption43匹配字符串。通常,将自定义应用于DHCP服务器比更改客户端行为更好,但在不可能的情况下提供了此选项。默认情况:“Raspberry PI Boot”
版本:pieeprom-2020-04-16.bin

DHCP_OPTION 97
在早期版本中,客户机GUID(Option97)只是重复了4次的序列号。默认情况下,新的GUID格式是RPI 4(0x34695052-小Endian)、板修订(例如0x00c03111)(4-字节)、Mac地址中最不重要的4字节和4字节序列号的四cc的级联。这将是唯一的,但也向DHCP服务器提供结构化信息,从而可以在不依赖以太网MAC OUID的情况下识别Raspberry pi4计算机。

指定DHCP_OPTION 97=0来恢复旧的行为,或者指定一个非零的十六进制值来指定自定义的4字节前缀。

默认值:0x34695052
版本:pieeprom-2020-04-16.bin

静态IP地址配置
如果设置了TFTP_IP和以下选项,则跳过DHCP并应用静态IP配置。如果TFTP服务器与客户端位于同一子网上,则可以省略网关。

客户端IP
客户端的IP地址,例如“192.168.0.32”
违约:“”
版本:pieeprom-2020-04-16.bin

子网
子网地址掩码,例如“255.255.255.0”
违约:“”
版本:pieeprom-2020-04-16.bin

网关
如果TFTP服务器位于不同的子网上要使用的网关地址,例如“192.168.0.1”默认值:“”
版本:pieeprom-2020-04-16.bin

mac地址
用给定的值重写以太网MAC地址。例如DC:A6:32:01:36:C2
违约:“”
版本:pieeprom-2020-04-16.bin

禁用HDMI
这个HDMI引导诊断如果disd_hdmi=1,则禁用显示。其他非零值将保留给以后使用。

缺省值:0
版本:pieeprom-2020-04-16.bin

Version: pieeprom-2020-06-15.bin - STABLE这个disable_splash属性不再选中,因为HDMI诊断屏幕是在读取config.txt之前启动的。

启用自更新
允许引导加载程序更新自身,而不需要Recepy.bin。这是为了使通过网络引导更新引导加载程序固件变得更容易。启用SETENABLE_SELF_UPDATE=1加上bootloader_update=1在config.txt中。注:在固件更新期间发生电源故障时,没有自动回滚。在不太可能发生这种情况的情况下,您必须使用PI Imager来应用救援图像。

如果启用了自更新,那么引导加载程序将在引导分区(或TFTP根)上查找(pieeprom.upd+pieeprom.sig)和/或(vl805.bin+vl805.sig)。如果更新文件与当前映像不同,则应用更新并重置系统。否则,如果映像相同,那么引导将继续正常进行。

由于更新文件的格式与RPI-EEPROM-UPDATE生成的格式相同,所以您可以使用RPI-EEPROM-UPDATE将文件安装到/boot,只要/boot挂载批准引导设备/TFTP-root(通过NFS)。

引导加载程序只从EEPROM中的bootcon.txt读取配置,而不读取更新文件中的配置。因此,为了使ENABLE_SELF_UPDATE您必须首先通过SD卡或FLASHROM更新引导加载程序。

缺省值:0
版本:pieeprom-2020-04-16.bin

Version: pieeprom-2020-06-15.bin - STABLE这个ENABLE_SELF_UPDATEEEPROM属性和bootloader_update现在默认启用config.txt属性,以便rpi-eeprom-update可以在不需要额外定制的情况下使用。将这些参数中的任何一个设置为零将防止自更新。

冻结版本
以前,此属性仅由RPI-EEPROM-UPDATE脚本检查。但是,现在启用了自更新,引导加载程序也将检查此属性.如果设置,则重写ENABLE_SELF_UPDATE停止自动更新。禁用FREEZE_VERSION您将不得不使用带有Recovery.bin的SD卡引导。

缺省值:0
版本:pieeprom-2020-06-15

引导负载标志
定制固件(裸金属)的实验性能。

位0(0x1)表示.elf文件是自定义固件。这将禁用任何兼容性检查(例如,是否支持USBMSD引导),并在启动可执行文件之前重置PCIE。

NETCONSOLE-高级测井
NETCONSOLE将调试消息复制到网络接口。ip地址和端口由NETCONSOLE绳子。

注:NETCONSOLE阻塞,直到以太网链路建立或发生超时。超时值为DHCP_TIMEOUT尽管不尝试DHCP,除非请求网络引导。

格式
看见https://wiki.archlinux.org/index.php/Netconsole

src_port@src_ip/dev_name,dst_port@tgt_ip/tgt_mac
E.g. 6665@169.254.1.1/eth0,6666@/
为了简化解析,引导加载程序要求每个字段分隔符都存在。在示例中,为目标IP地址(255.255.255)和目标Mac地址(00:00:00:00:00)分配默认值。

查看数据的一种方法是将测试PI 4连接到运行Wireshark的另一个PI,并选择“udp.srcport==6665”作为筛选器并选择Analyze -> Follow -> UDP stream若要将其视为ASCII日志,请执行以下操作。

NETCONSOLE默认情况下不应启用,因为它可能会导致网络问题。它可以通过GPIO过滤器按需启用。

Enable debug if GPIO 7 is pulled low

[gpio7=0]
BOOT_UART=1
NETCONSOLE=6665@169.254.1.1/eth0,6666@/
版本:pieeprom-2020-06-15

网络启动
服务器配置
网络引导需要配置TFTP和NFS服务器。看见网络引导服务器教程

补充说明:-

PI 4上的MAC地址是在制造时编程的,不是从序列号导出的。

mac address (ip addr) - it should start with DC:A6:32

ip addr | grep ether | head -n1 | awk '{print $2}' | tr [a-z] [A-Z]

serial number

vcgencmd otp_dump | grep 28: | sed s/.*://g
安装-固件更新
网络引导可以在最新的生产引导程序(pieeprom-2020-04-16.bin)中获得。以前支持网络引导的beta/稳定版本仍然可用,但不推荐使用。

Update the rpi-eeprom package

sudo apt update
sudo apt upgrade

Check the current version

sudo rpi-eeprom-update

Update to latest

sudo rpi-eeprom-update -a
启用网络引导
默认情况下,在引导加载程序中不启用网络引导。要启用它,必须编辑引导加载程序配置文件。

Extract the configuration file

cp /lib/firmware/raspberrypi/bootloader/critical/pieeprom-2020-04-16.bin pieeprom.bin
rpi-eeprom-config pieeprom.bin > bootconf.txt
变化BOOT_ORDER成为0x21而不是0x1。这告诉引导加载程序首先尝试sd卡引导,然后尝试网络引导。你通常应该包括SD卡(0x1)在网络故障的情况下引导序列。

将配置更改应用于EEPROM映像文件
rpi-eeprom-config --out pieeprom-netboot.bin --config bootconf.txt pieeprom.bin
安装新的EEPROM映像
sudo rpi-eeprom-update -d -f ./pieeprom-netboot.bin
sudo reboot
USB大容量存储引导
目前正在进行测试,还需要通过APT更新或更新更新GPU(start.亲自)固件。RPI-更新。如果您还不熟悉如何为根文件系统使用USB驱动器,那么您可能希望等到这个特性出现在默认的Raspberry PI OS映像中。

不支持将SD卡映像迁移到USB驱动器。这是可能的,但是这个过程可能会非常复杂,并且根据您最初的设置而有所不同。请看这个论坛帖子想了解更多信息。

注:现在有一个stable发布的引导加载程序,它支持USBMSD,并将只更新与主要的错误修复。由于GPU固件也必须升级,USB-MSD引导作为一个功能仍然被视为测试版软件。

usb-msd固件安装说明
这些说明假设您熟悉手动固件和引导加载程序的更新,并了解如果要还原更改,如何恢复到以前的版本。如果没有,请等待,直到功能在一个完整的Raspberry PI OS发布图像。

这些指令是针对Raspberry PI OS的。其他发行版(包括noobs)可能需要额外的步骤才能启用usb引导。

检查usb大容量存储设备是否在linux下工作。
在尝试从USB大容量存储设备启动之前,必须验证该设备在Linux下是否正确工作。使用SD卡启动并插入USB大容量存储设备。这应该显示为可移动驱动器。

这对于usb sta适配器尤其重要,在大规模存储模式下引导加载程序可能支持这些适配器,但如果linux选择,则失败。USB连接SCSI-UAS模式。

看这个论坛线关于UAS和如何添加usb-storage.quirks解决这个问题。

多个可引导驱动器
在搜索可引导分区时,引导加载程序并行扫描所有USB海量存储设备,并将选择第一个响应。如果引导分区不包含合适的start.亲自文件,则选择下一个可用设备。

与早期的Raspberry PI模型一样,没有根据USB拓扑指定引导设备的方法,因为这会减慢引导速度,增加不可缺少的和难以支持配置复杂性。

注:config.txt条件滤波器可用于选择复杂设备配置中的备用固件。

更新引导加载程序
从标准的Raspberry PI OS SD卡启动:

sudo apt update
sudo apt full-upgrade
作为根,编辑/etc/default/rpi-eeprom-update并选择stable释放。

安装stable版本的引导加载程序,并替换当前的配置设置,以启用USB引导。看见BOOT_ORDER属性(如果希望手动迁移配置)。

sudo rpi-eeprom-update -d -f /lib/firmware/raspberrypi/bootloader/stable/pieeprom-2020-06-15.bin
或者,使用Raspberry PI成像仪从释放一页。

重新启动并检查引导加载程序版本和配置:
vcgencmd bootloader_version
vcgencmd bootloader_config
创建一个可引导的usb驱动器
使用树莓PI成像仪将Raspberry PI OS闪存到USB大容量存储设备。其他发行版还没有经过测试,可能需要更新(例如,u引导)。拥有一个公共测试版的原因之一是为了帮助USBMSD引导支持进入其他发行版。
通过APT更新GPU固件sudo apt update然后sudo apt full-upgrade
下载更新的固件文件.elf .dat从master支部覆盆子PI固件GitHub回购。
交替使用sudo rpi-update若要更新Raspberry PI OS SD卡上的固件,请从那里复制文件。
将这些更新复制到USB设备上的引导分区。而今而后sudo rpi-update可用于在Raspberry PI操作系统上的USB引导设备。
不需要Linux内核更新。Raspberry PI OS已经使用4.19和5.4(32和64位)内核进行了测试。
USB设备兼容性
没有明确的一组受支持的设备。最初,我们建议使用USBPEN驱动器或SSD。硬盘驱动器可能需要一个电源集线器,在任何情况下,您都应该使用SD卡引导验证设备在Raspberry PI OS中是否正确工作。

请张贴互操作性报告(正面或负面)这条线在树莓PI论坛上。

USB_MSD_排除_vid_PID
多达4个vid/PID对的列表,指定引导加载程序应该忽略的设备。如果这与集线器匹配,则不会枚举集线器,从而将所有下游设备排除在外。这是为了允许在引导枚举期间忽略有问题的设备(例如,枚举非常慢)。这是特定于引导加载程序的,而不是传递给操作系统的。

该格式是一个以逗号分隔的十六进制值列表,其中VID是最重要的咬字。空间是不允许的。例如:034700a0,a4231234

违约:“”
版本:pieeprom-2020-06-15

USBMSD发现超时
如果在此超时内没有找到usb大容量存储设备,则usb-msd将停止,并选择下一个引导模式。

默认值:20000(20秒)
版本:pieeprom-2020-06-15

USB_MSD_LUN超时
在前进到下一个LUN之前等待多长时间(毫秒),例如一个多插槽SD卡读卡器。这仍然是调整,但可能有助于加快启动,如果旧的/慢的设备连接,以及一个快速的USB-MSD设备,包括操作系统。

默认值:2000(2秒)
版本:pieeprom-2020-06-15

XHCI_DEBUG
此属性是一个位字段,用于控制海量存储引导模式下USB跟踪消息的详细程度。启用所有这些消息会生成大量日志数据,这将减慢启动速度,甚至可能导致启动失败。对于冗长的日志,最好使用NETCONSOLE

位0-USB描述符
位1-大容量存储模式状态机
位2-大容量存储模式状态机-详细
位3-所有USB请求
位4-日志设备和轮毂状态机
BIT 5-记录所有xHCI TRBs(非常详细)
BIT 6-记录所有xHCI事件(非常详细)
默认情况下,不启用额外的调试消息。

Example: Enable mass storage and USB descriptor logging

XHCI_DEBUG=0x3
默认值:0x0
版本:pieeprom-2020-06-15

Responses