Skip to content

树莓派 4引导程序配置

编辑配置

在编辑引导加载程序配置之前,请更新系统以获取最新版本的rpi-eeprom软件包。

要查看当前的 EEPROM 配置: rpi-eeprom-config

对其进行编辑并将更新应用于最新的 EEPROM 版本: sudo -E rpi-eeprom-config --edit

有关 EEPROM 更新过程的更多信息,请参见boot EEPROM页面。

配置属性

本节介绍了引导加载程序中所有可用的配置项目。语法与config.txt相同,但是属性特定于引导加载程序。除 EDID 外,还支持条件过滤器

BOOT_UART

如果为 1 ,则在 GPIO 14和 15 上启用 UART 调试输出。将接收调试端子配置为 115200bps ,8位,无奇偶校验位,1个停止位。

默认值:0 版本:全部

WAKE_ON_GPIO

如果为" 1",那么" sudo halt"将以低功耗模式运行,直到 GPIO3 或 GLOBAL _EN短路接地。

默认值:1(引导加载程序 2019 -05-10的原始版本中为 0 ) 版本:全部

POWER_OFF_ON_HALT

如果" 1"和" WAKE_ON_GPIO = 0",那么" sudo halt"将关闭所有 PMIC 输出。这是可能的最低电源状态,但可能会导致某些 HAT 出现问题,因为 5V 仍会导通。 GLOBAL_EN必须短路接地才能启动。

默认值:0 版本:2019-07-15

引导顺序

BOOT_ORDER设置允许灵活配置不同引导模式的优先级。它表示为 32 位无符号整数,其中每个半字节代表一个引导模式。尝试以最低有效半字节到最高有效半字节顺序进行引导模式。

例如," 0xf41"表示要连续尝试 SD 卡,然后再尝试 USB 大容量存储。而" 0xf12"表示连续尝试网络引导,然后再引导 SD 卡。 切换到下一个引导模式时,重试计数器将重置。

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

|价值|模式|描述 | ------- | ----------- || ----------------------------- -------------------------------------------------- -------------------- | | 0x1 | SD卡| SD卡(或计算模块 4 上的 eMMC )| | 0x2 |网络|网络启动| | 0x3 | USB开发| USB设备引导-请参见usbboot(自 2020 -09-03开始)| | 0x4 | USB MSD | USB大容量存储启动(自 2020 -09-03起)| | 0xe |停止|停止并显示错误模式(自 2020 -09-03开始)。需要重启电源才能退出此状态。 | | 0xf |重新启动|从第一个引导顺序字段重新开始。 (自 2020 -09-03起)|

尝试每种非零引导模式后,引导程序将停止。但是,从 2020 -09-03开始,引导程序将监视 SD 卡检测引脚,如果插入了新的 SD 卡,则尝试 SD 引导。

默认值:0xf41(2020-09-03之前的版本为 0x1 ) 版本:2020-04-16

如果 SD 卡检测引脚指示已插入或更换卡,则引导方式 0x0 将重试 SD 引导。 默认引导顺序为" 0xf41",这意味着要连续尝试 SD ,然后再尝试 USB 大容量存储。 * USB设备引导旨在与计算模块 4 配合使用,以加载自定义调试映像(例如 Linux RAM磁盘),而不是常规引导。这应该是最后一个引导选项,因为它当前不支持超时或重试。

MAX_RESTARTS

如果遇到 RESTART (0xf)引导模式超过 MAX _RESTARTS次,则触发看门狗复位。不建议将其用于一般用途,但对于需要完全重置才能解决硬件或网络接口问题的测试或远程系统可能有用。

默认值:-1(无限) 版本:2020-09-03

SD_BOOT_MAX_RETRIES

SD引导失败后重试的次数,然后转移到 BOOT _ORDER定义的下一个引导模式。 - 1表示无限次重试。

默认值:0 版本:2020-04-16

NET_BOOT_MAX_RETRIES

失败后重试网络引导的次数,然后转移到 BOOT _ORDER定义的下一个引导模式。 - 1表示无限次重试。

默认值:0 版本:2020-04-16

DHCP_TIMEOUT

在当前迭代失败之前,整个 DHCP 序列的超时时间(以毫秒为单位)。

最低:`5000 默认值:45000 版本:2020-04-16

DHCP_REQ_TIMEOUT

重试 DHCP DISCOVER或 DHCP REQ之前的超时时间(以毫秒为单位)。

最低:500 默认值:4000版本:2020-04-16

TFTP_FILE_TIMEOUT

通过 TFTP 下载单个文件的超时时间(以毫秒为单位)。

最低:`5000 默认值:30000 版本:2020-04-16

TFTP_IP

TFTP服务器的可选点分十进制 IP 地址(例如 192 .168.1.99),它会覆盖 DHCP 请求中的服务器 IP 。 这在家庭网络上可能很有用,因为在宽带路由器为 DHCP 服务器的情况下,可以使用 tftpd -hpa代替 dnsmasq 。

默认值:"" 版本:2020-04-16

TFTP_PREFIX

为了支持每个 Pi 的唯一 TFTP 引导目录,引导加载程序会在文件名前面加上设备特定的目录。如果在前缀目录中都找不到 start4 .elf和 start .elf,则清除前缀。 在较早的型号上,序列号用作前缀,但是,在 Pi 4上,不再从序列号生成 MAC 地址,这使得很难通过检查 DHCPDISCOVER 数据包在服务器上自动创建 tftpboot 目录。为此,可以将 TFTP _PREFIX定制为 MAC 地址,固定值或序列号(默认)。

价值 描述
0 使用序列号,例如9ffefdef /
1 使用 TFTP _PREFIX_STR指定的字符串
2 使用 MAC 地址,例如dc-a6-32-01-36-c2 /

默认值:0 版本:2020-04-16

TFTP_PREFIX_STR

指定在将" TFTP_PREFIX"设置为 1 时使用的自定义目录前缀字符串。例如:-" TFTP_PREFIX_STR = tftp_test /"

默认值:"" 长度上限:32个字符 版本:2020-04-16

PXE_OPTION43

用其他字符串覆盖 PXE Option43匹配字符串。通常,将自定义项应用于 DHCP 服务器比更改客户端行为要好,但是在不可能的情况下提供此选项。

默认值:" 树莓派 Boot" 版本:2020-04-16

DHCP_OPTION97

在早期版本中,客户端 GUID (Option97)只是序列号重复了 4 次。默认情况下,新的 GUID 格式为 RPi4的 fourcc 的串联(0x34695052-小尾数),电路板修订版(例如 0x00c03111 )(4字节),mac地址的最低 4 字节和 4 字节序列号。 这不仅具有唯一性,还可以为 DHCP 服务器提供结构化信息,从而可以在不依赖以太网 MAC OUID的情况下识别树莓派 4 计算机。

指定 DHCP _OPTION97 = 0以恢复旧行为,或者指定非零十六进制值以指定自定义 4 字节前缀。

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

静态 IP 地址配置

如果设置了 TFTP _IP和以下选项,则将跳过 DHCP 并应用静态 IP 配置。如果 TFTP 服务器与客户端在同一子网中,则可以省略 GATEWAY 。

CLIENT_IP

客户端的 IP 地址,例如 192 .168.0.32

默认值:"" 版本:2020-04-16

子网

子网地址掩码例如 255 .255.255.0

默认值:"" 版本:2020-04-16

网关

如果 TFTP 服务器位于其他子网中,则使用的网关地址 192 .168.0.1

默认值:"" 版本:2020-04-16

MAC地址

用给定值覆盖以太网 MAC 地址。例如 dc :a6:32:01:36:c2`

默认值:"" 版本:2020-04-16

DISABLE_HDMI

如果" DISABLE_HDMI = 1",则禁用HDMI boot diagnostics显示。其他非零值保留供将来使用。

默认值:0 版本:2020-04-16

从 2020 -09-03版本开始,不再检查 config .txt中的 disable _splash属性,因为在读取 config .txt之前启动了 HDMI 诊断屏幕。

ENABLE_SELF_UPDATE

使引导加载程序能够从 TFTP 或 USB 大容量存储设备(MSD)引导文件系统更新自身。

如果启用了自我更新,则引导加载程序将在引导文件系统中查找更新文件(.sig/.upd)。如果更新映像与当前映像不同,则应用更新并重置系统。否则,如果 EEPROM 映像逐字节相同,则引导将继续正常进行。

笔记:- * SD引导中未启用自我更新; ROM已经可以从 SD 卡加载 recovery .bin。 必须先将引导加载程序更新为支持自我更新的版本,然后才能使用自我更新。推荐的方法是使用树莓派 Imager和备用 SD 卡更新到 pieeprom -2020-09-03,然后使用自我更新进行后续更新。 对于网络启动,请确保可以通过 NFS 挂载 TFTP 的 boot 目录,并且 rpi -eeprom-update可以写入该目录。

默认值:1(在 2020 -09-03之前的版本中为 0 ) 版本:2020-04-16

FREEZE_VERSION以前,此属性仅由rpi-eeprom-update脚本检查。但是,既然启用了自我更新,引导加载程序还将检查此属性。如果设置为 1 ,它将覆盖 ENABLE _SELF_UPDATE以停止自动更新。要禁用" FREEZE_VERSION",您将必须使用带有 recovery .bin的 SD 卡引导。

自定义 EEPROM 更新脚本还必须检查此标志。

默认值:0 版本:全部

NETCONSOLE-高级日志记录 NETCONSOLE将调试消息复制到网络接口。 IP地址和端口由" NETCONSOLE"字符串定义。

N.B. NETCONSOLE将阻塞,直到建立以太网链接或发生超时为止。超时值是" DHCP_TIMEOUT",尽管除非请求网络启动,否则不会尝试 DHCP 。

格式

参见 https ://wiki.archlinux.org/index.php/Netconsole

src_port @ src_ip/dev_name,dst_port @ dst_ip/dst_mac
例如。 6665 @ 169.254.1.1 /,6666 @ /

为了简化解析,引导加载程序要求每个字段分隔符都存在。必须指定源 IP 地址,但以下字段可以保留为空白并分配默认值。

  • src_port-6665
  • dev_name-""(始终忽略设备名称)
  • dst_port-6666
  • dst_ip-255.255.255.255
  • dst_mac-00:00:00:00:00

查看数据的一种方法是将测试 Pi 4连接到另一台运行 WireShark 的 Pi ,并选择" udp.srcport == 6665"作为过滤器,然后选择"分析->关注-> UDP流"以 ASCII 日志查看。

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

# 如果 GPIO  7被拉低则启用调试
[gpio7 = 0]
NETCONSOLE = 6665 @ 169.254.1.1 /,6666 @ /

默认值:""(未启用) 长度上限:32个字符 版本:2020-09-03

USB_MSD_EXCLUDE_VID_PID

最多 4 个 VID ​​/PID对的列表,指定引导加载程序应忽略的设备。如果与 HUB 匹配,则不会枚举 HUB ,从而排除所有下游设备。 这旨在允许在引导枚举期间忽略有问题的设备(例如,枚举非常慢)。这是特定于引导加载程序的,不会传递给操作系统。

格式是十六进制值的逗号分隔列表,其中 VID 为最高有效半字节。不允许使用空格。 例如。 034700a0,a4231234

默认值:"" 版本:2020-09-03

USB_MSD_DISCOVER_TIMEOUT

如果在此超时时间内未找到 USB 大容量存储设备,则 USB -MSD停止并选择下一个启动模式

默认值:20000(20秒) 版本:2020-09-03

USB_MSD_LUN_TIMEOUT

前进到下一个 LUN 之前要等待的毫秒数,例如多插槽 SD -CARD读取器。仍在进行调整,但如果连接了旧/慢速设备以及包含操作系统的快速 USB -MSD设备,则可能有助于加快启动速度。

默认值:2000(2秒) 版本:2020-09-03

USB_MSD_PWR_OFF_TIME

在 USB 大容量存储启动过程中,USB端口的电源会在短时间内关闭,以确保 USB 大容量存储设备的正确运行。大多数设备都使用默认设置正常工作:仅当从特定设备启动时遇到问题时才更改此设置。设置" USB_MSD_PWR_OFF_TIME = 0"将防止在 USB 大容量存储启动期间关闭 USB 端口的电源。

最低:250 上限:5000 默认值:1000`(1秒) 版本:2020-09-03

XHCI_DEBUG

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

价值 日志
0x1 USB描述符
0x2 大容量存储模式状态机
0x4 大容量存储模式状态机-详细
0x8 所有 USB 请求
0x10 设备和集线器状态机
0x20 所有 xHCI TRB(非常详细)
0x40 所有 xHCI 事件(VERY VERBOSE)

要合并值,请将它们加在一起。例如:

# 启用大容量存储和 USB 描述符记录
XHCI_DEBUG = 0x3

默认值:0x0(未启用 USB 调试消息) 版本:2020-09-03

config.txt-配置属性

boot_load_flags

自定义固件(裸机)的实验属性。

位 0 (0x1)表示.elf文件是自定义固件。这会禁用所有兼容性检查(例如是否支持 USB MSD引导)并在启动可执行文件之前重置 PCIe 。

默认值:0x0 版本:2020-09-03

uart_2ndstage

如果设置为 0x1 ,则启用调试日志记录到 UART 。在较新的固件版本(树莓派 OS 2020-08-20和更高版本)中,也会在 start .elf中自动启用 UART 日志记录。 启动选项页面上也对此进行了描述。 BOOT _UART属性还启用引导加载程序的 UART 日志记录,但除非同时设置了 uart _2ndstage = 1,否则也不会在 start .elf中启用 UART 登录。

默认值:0 版本:2020-09-03

eeprom_write_protect

控制是否将引导加载程序和 VLI EEPROM标记为写保护。

除非将 EEPROM /WP'引脚拉低(TP5),否则这无效。同样,/WP`低仅写保护 EEPROM 状态寄存器,因此,如果先前未定义 EEPROM 写保护,则 EEPROM 实际上将不受写保护

参见:Winbond W25x40cl数据表

价值 描述
1 配置写保护区域以覆盖整个 EEPROM 。
0 清除写保护区域。
-1 没做什么。

默认值:-1 版本:2020-09-03

bootloader_update

可以将此选项设置为 0 以阻止自我更新,而无需更新 EEPROM 配置。当通过网络启动更新多个 Pi 时,这有时很有用,因为可以通过树莓派来控制此选项(例如,通过 config .txt中的序列号过滤器)。

默认值:1(在 2020 -09-03之前的版本中为 0 ) 版本:2020-04-16

高级启动模式-网络/USB大容量存储启动。

对于网络或 USB 大容量存储启动,我们建议更新到 2020 -09-03版本的 Bootloader 和树莓派 OS 2020-08-20或更高版本。

更新引导程序

使用树莓派 Imager更新

使用支持 USB 引导的出厂默认配置更新引导加载程序的最简单方法是使用树莓派 Imager。 1.下载树莓派 Imager 1.下载最新的EEPROM恢复映像 1.选择"使用自定义"以格式化并刷新空白 SD卡,其中 EEPROM 更新启用了 USB MSD引导支持。

手动引导程序更新

*从树莓派 OS 2020-08-20或更高版本的 SD 卡中:

sudo apt update
sudo apt full-upgrade

运行 vcgencmd bootloader_config检查当前配置,并决定使用出厂默认配置还是迁移现有的启动设置。 更新引导程序

# 使用出厂默认配置(-d)安装。
 sudo  rpi -eeprom-update -a -d

更改启动模式

要更改默认的引导模式,请使用raspi-config中的Boot Options /Boot Order选项。或者,手动编辑 EEPROM 配置文件并根据所需的引导模式设置 BOOT _ORDER,然后使用 rpi -eeprom-update -d -f来更新引导加载程序。

USB大容量存储启动

这是一项新功能,我们建议您检查树莓派 一般讨论论坛,以获取查询或互操作性问题。

N.B.对于其他操作系统,请访问维护者的网站以获取 USB 启动支持。

检查 USB 大容量存储设备是否可在 Linux 下运行

在尝试从 USB 大容量存储设备启动之前,可以先验证该设备在 Linux 下是否可以正常工作。使用 SD 卡启动,然后插入 USB 大容量存储设备。它应显示为可移动驱动器。

旋转硬盘驱动器几乎总是需要有源 USB 集线器。即使看起来可行,但如果没有通电的 USB HUB,您也可能会遇到间歇性故障

这对于 USB SATA适配器尤其重要,它可以在大容量存储模式下由引导加载程序支持,但如果 Linux 选择USB Attached SCSI-UAS模式,则失败。

请参阅此论坛主题关于 UAS 以及如何添加usb-storage.quirks来解决此问题。

多个可启动驱动器

当搜索可引导分区时,引导加载程序会并行扫描所有 USB 大容量存储设备,并将选择第一个进行响应。如果引导分区不包含合适的 start .elf文件,则选择下一个可用设备。

与早期的树莓派型号一样,没有方法可以根据 USB 拓扑指定启动设备,因为这会减慢启动速度,并增加不必要且难以支持的配置复杂性。

N.B. config.txt 条件过滤器可用于在复杂设备配置中选择备用固件。

网络启动服务器配置

网络引导需要配置 TFTP 和 NFS 服务器。请参阅网络启动服务器教程附加说明:-* Pi 4上的 MAC 地址是在制造时编程的,而不是从序列号得出的。

# mac地址(ip地址)-应该以 DC :A6:32开头
ip地址| grep ether |头-n1 | awk'{print $ 2}'| tr [a-z] [A-Z]
# 序列号
vcgencmd otp_dump | grep 28:| sed s /.*://g