树莓派超全系列教程文档--(33)树莓派启动选项
树莓派启动选项
- 启动选项
- `start_file` ,`fixup_file`
- `cmdline`
- `kernel`
- `arm_64bit`
- `ramfsfile`
- `ramfsaddr`
- `initramfs`
- `auto_initramfs`
- `disable_poe_fan`
- `disable_splash`
- `enable_uart`
- `force_eeprom_read`
- `os_prefix`
- `otg_mode` (仅限Raspberry Pi 4)
- `overlay_prefix`
- 配置属性
- `boot_ramdisk`
- `boot_load_flags`
- `enable_rp1_uart`
- `pciex4_reset`
- `uart_2ndstage`
- `erase_eeprom`
- `eeprom_write_protect`
- `os_check`
- `bootloader_update`
- 安全引导配置属性
- `program_pubkey`
- `revoke_devkey`
- `program_rpiboot_gpio`
- `program_jtag_lock`
文章来源: http://raspberry.dns8844.cn/documentation
原文网址
启动选项
start_file
,fixup_file
这些选项指定在引导步骤前传输到 VideoCore GPU 的固件文件。
start_file
指定要使用的 VideoCore 固件文件。
fixup_file
指定用于修改 start_file 中使用的内存位置以匹配GPU内存拆分的文件。
start_file
和 fixup_file
是匹配的一对,使用不匹配的文件导致板子无法启动。这是一个高级选项,因此我们建议您使用 start_x
和 start_debug
而不是此选项。
NOTE: 不能以这种方式选择裁剪固件( start*cd.elf
和 fixup*cd.dat
)- 系统将无法启动。启用裁剪固件的唯一方法是指定 gpu_mem=16
。裁剪固件删除了对编解码器、3D和调试日志记录的支持,并将初始早期启动帧缓冲区限制为1080p @16bpp - 尽管KMS可以在稍后阶段用32bpp 4K帧缓冲区替换它,就像任何固件一样。
NOTE: Raspberry Pi 5, Compute Module 5, 和Raspberry Pi 500固件独立存储在引导加载程序EEPROM中。
cmdline
cmdline
是引导分区上用于读取内核命令行字符串的替代文件名;默认值为 cmdline.txt
。
kernel
kernel
是引导分区上用于加载内核的替代文件名。Raspberry Pi 1、Zero 和 Zero W 以及Raspberry Pi Compute Module 1 的默认值为 kernel.img
。Raspberry Pi 2、3、3+ 和 Zero 2 W 以及 Raspberry Pi Compute Module 3 和 3+ 的默认值为 kernel7.img
。Raspberry Pi 4 和 400 以及 Raspberry Pi Compute Module 4的默认值为 kernel8.img
,如果设置 arm_64bit
为 0,则使用 kernel7l.img
。
Raspberry Pi 5, Compute Module 5, 和 Raspberry Pi 500 固件默认加载 kernel_2712.img
,因为此内核包含特定于 Raspberry Pi 5 的优化(例如16K页面大小)。如果此文件不存在,则将加载通用64位内核( kernel8.img
)。
arm_64bit
如果设置为1,内核将以64位模式启动。设置为0选择32位模式。
在64位模式下,固件将选择适当的内核(例如 kernel8.img
),除非定义了显式的 kernel
选项,在这种情况下使用该选项。
在Pi 4系列(Pi4B、Pi 400、CM4和CM4S)上默认为1,在所有其他平台上默认为0。但是,如果显式 kernel
选项中给出的名称与已知内核之一匹配,则将相应地设置 arm_64bit
。
64 位内核有以下几种形式:
- 未压缩的映像文件
- 映像的 gzip 压缩包
这两种形式都可以使用 img
文件扩展名;引导加载程序使用文件开头的签名字节识别存档。
以下 Raspberry Pi 型号支持此标记:
- 2B rev 1.2
- 3B
- 3A+
- 3B+
- 4B
- 400
- 2 W
- Compute Module 3
- Compute Module 3+
- Compute Module 4
- Compute Module 4S
从 Raspberry Pi 5, Compute Module 5, 和 Raspberry Pi 500 以后的型号 仅 支持 64 位内核。这些型号不支持此标记。
ramfsfile
ramfsfile
是要加载的 ramfs
的引导分区上的可选文件名。
NOTE: 较新的固件支持加载多个 ramfs
文件。您应该用逗号分隔多个文件名,注意不要超过80个字符的行长限制。所有加载的文件都在内存中连接起来,并被视为单个 ramfs
blob。更多信息在 论坛上。
ramfsaddr
ramfsaddr
是应该加载 ramfsfile
的内存地址。
initramfs
initramfs
命令同时指定了 ramfs 文件名 和 内存地址。它在一个参数中同时执行 ramfsfile
和 ramfsaddr
的操作。地址也可以是 followkernel
(或 0
),以便将其放在内核映像之后的内存中。示例值如下 initramfs initramf.gz 0x00800000
或 initramfs init.gz followkernel
。与 ramfsfile
一样,较新的固件允许通过逗号分隔多个文件名来加载多个文件。
NOTE: 此选项使用与所有其他选项不同的语法,您不应在此处使用 =
字符。
auto_initramfs
如果 auto_initramfs
设置为1,则使用与内核选择相同的规则查找initramfs文件。
disable_poe_fan
默认情况下,即使没有连接 PoE HAT,也会在启动时对 I2C 总线进行探测。将该选项设置为 1 将禁止通过 I2C(ID_SD 和 ID_SC)引脚控制 PoE HAT 风扇。如果不使用 PoE HAT,这将有助于缩短启动时间。
disable_splash
如果将 disable_splash
设置为 1
,则启动时不会显示彩虹闪屏。默认值为 0
。
enable_uart
enable_uart=1
(与 cmdline.txt
中的 console=serial0,115200
结合使用)要求内核创建一个串行控制台,可通过 GPIO 14 和 15(40 针接头的针脚 8 和 10)访问。编辑 cmdline.txt
,删除 quiet
行后,内核的启动信息也会出现在该行。另请参阅 uart_2ndstage
。
force_eeprom_read
将该选项设为 0
,可防止固件在上电时尝试读取 I2C HAT EEPROM(连接到引脚 ID_SD 和 ID_SC)。另请参阅 disable_poe_fan
。
os_prefix
os_prefix
是一个可选设置,允许在同一卡上安装的多个版本的内核和设备树文件之间进行选择。操作系统文件指的是内核、initramfs、cmdline.txt、.dtbs 和 overlays。前缀通常是目录名,但也可以是文件名的一部分,如 “test-”。因此,目录前缀必须包括尾部的 /
字符。
为了降低系统无法启动的可能性,固件首先测试提供的前缀值的可行性 — 除非在新位置/名称处可以找到指定的内核和.dtb,否则前缀将被忽略(设置为"")。这种可行性测试的一个特殊情况应用于覆盖,如果 +${os_prefix}${overlay_prefix}+
存在,它只会从 +${os_prefix}${overlay_prefix}README+
加载(其中overlay_prefix, overlay_prefix
的默认值是 overlay/
),否则它会忽略 os_prefix
并将覆盖视为共享。
(固件在检查前缀时检查密钥文件而不是目录的存在的原因有两个:前缀可能不是目录,并且并非所有引导方法都支持测试目录的存在。)
NOTE: 任何用户指定的操作系统文件都可以通过使用绝对路径(相对于引导分区)绕过所有前缀 - 只需使用 kernel=/my_common_kernel.img
另请参见 overlay_prefix, overlay_prefix
和 upstream_kernel
。
otg_mode
(仅限Raspberry Pi 4)
USB On-The-Go(通常缩写为OTG)是一项功能,允许支持带有适当OTG电缆的USB设备将自己配置为USB主机。在较旧的Raspberry Pi上,一个USB 2控制器用于USB主机和设备模式。
旗舰产品从Raspberry Pi 4B 和 键盘系列产品 从 Raspberry Pi 400(不是CM4或CM4IO)以后添加了一个高性能USB 3控制器,通过PCIe连接,以驱动主USB端口。传统的USB 2控制器仍然可以在USB-C电源连接器上用作设备( otg_mode=0
,默认值)。
otg_mode=1
请求将功能更强大的XHCI USB 2控制器用作该USB-C连接器上的可以替换的主机控制器。
NOTE: Raspberry Pi OS 在 /boot/firmware/config.txt
中的[CM4]配置中已经默认添加此设置。
overlay_prefix
指定加载overlays的子目录/前缀,默认为 overlays/
(注意尾部的 /
)。如果与 os_prefix,os_prefix
结合使用, os_prefix
将在 overlay_prefix
之前,例如, dtoverlay=disable-bt
将尝试加载 +${os_prefix}${overlay_prefix}disable-bt.dtbo+
。
NOTE: 除非存在 +${os_prefix}${overlay_prefix}README+
,否则overlays将与主操作系统共享(即忽略 os_prefix
)。
配置属性
Raspberry Pi 5 需要一个 config.txt
文件,以表明分区是可启动的。
boot_ramdisk
如果该属性设置为 1
,则引导加载程序将尝试加载一个名为 boot.img
的内存盘文件,其中包含 boot filesystem。随后的文件(如 start4.elf
)将从内存盘读取,而不是原始启动文件系统。
boot_ramdisk
的主要用途是支持 安全启动
,不过,未签名的 boot.img
文件对网络启动或 RPIBOOT
配置也很有用。
- ramdisk 文件的最大大小为 96MB。
boot.img
文件是原始磁盘.img
文件。建议使用无 MBR 的普通 FAT32 分区格式。- 在操作系统启动之前,ramdisk 文件系统的内存会被释放。
- 如果选择 TRYBOOT,引导加载程序将搜索
tryboot.img
而不是boot.img
。 - 另请参阅 autoboot.txt。
有关 secure-boot
和创建 boot.img
文件的更多信息,请参阅 USBBOOT.
Default: 0
boot_load_flags
自定义固件(裸机)的实验属性。
位 0 (0x1) 表示 .elf 文件是定制固件。这将禁用任何兼容性检查(例如,是否支持 USB MSD 启动),并在启动可执行文件前重置 PCIe。
与 Raspberry Pi 5 无关,因为它没有 start.elf
文件。
Default: 0x0
enable_rp1_uart
设置为 1
时,固件会将 RP1 UART0 初始化为 115200bps,并且在启动操作系统前不会复位 RP1(可使用 pciex4_reset=1
单独配置)。
这使得在早期启动代码(例如在裸机调试期间)中更容易在 40 针上获得 UART 输出。
Default: 0x0
pciex4_reset
仅限 Raspberry Pi 5。
默认情况下,RP1
使用的 PCIe x4 控制器会在启动操作系统前复位。如果将该参数设置为 0
,则重置将被禁用,操作系统或裸机代码可从引导加载程序继承 PCIe 配置设置。
Default: 1
uart_2ndstage
如果 uart_2ndstage
为 1
,则启用 UART 的调试记录。该选项也会在 start.elf
中自动启用 UART 日志记录。Boot options 页面对此也有说明。
BOOT_UART "属性也会启用引导加载器 UART 日志,但除非同时设置了 uart_2ndstage=1
,否则不会在 start.elf
中启用 UART 日志。
Default: 0
erase_eeprom
如果 erase_eeprom
设置为 1
,那么 recovery.bin
将擦除整个 SPI EEPROM,而不是烧录引导程序映像。此属性对正常启动没有影响。
Default: 0
eeprom_write_protect
配置 EEPROM 写入状态寄存器
。可将其设置为将整个 EEPROM 标记为写保护,或清除写保护。
该选项必须与控制 EEPROM 写状态寄存器
更新的 EEPROM /WP
引脚结合使用。 除非同时配置了 写入状态寄存器
,否则将 /WP
拉低(CM4 的 EEPROM_nWP
或 Raspberry Pi 4 的 TP5
)不会对 EEPROM 进行写保护。
详情请参见 Winbond W25x40cl 或 Winbond W25Q16JV 数据手册。
recovery.bin
的 config.txt
中的 eeprom_write_protect
设置。
NOTE: flashrom
不支持清除写保护区域,如果定义了写保护区域,将无法更新 EEPROM。
在 Raspberry Pi 5 上,/WP
默认为低电平,因此一旦配置了 写状态寄存器
,就会启用写保护。要清除写保护,可通过连接 TP14
和 TP1
将 /WP
拉高。
Default: -1
os_check
在 Raspberry Pi 5 上,固件会自动检查兼容的设备树文件,然后再尝试从当前分区启动。否则,不兼容的旧内核将被加载,然后挂起。
要禁用此检查(例如用于裸机开发),请在 config.txt 中设置 os_check=0
。
Default: 1
bootloader_update
该选项可设置为 0,以阻止自更新,而无需更新 EEPROM 配置。在通过网络启动更新多个 Raspberry Pi 时,该选项有时非常有用,因为可以对每个 Raspberry Pi 进行控制(例如,通过 config.txt
中的序列号过滤器)。
Default: 1
安全引导配置属性
如何使用 Raspberry Pi 安全启动
本白皮书介绍如何在基于 Raspberry Pi 4 的设备上实现安全启动。有关我们实现安全启动实施方法的概述,请参阅 Raspberry Pi 4 安全启动 白皮书。安全启动系统适用于基于 buildroot
的操作系统镜像;不建议或不支持将其用于 Raspberry Pi OS。
下面的 config.txt
属性用于对 secure-boot
OTP 设置进行编程。这些更改是不可逆的,只能在刷新引导加载程序 EEPROM 映像时通过 RPIBOOT
进行编程。这可确保 “安全启动” 无法通过远程或意外插入过期 SD 卡映像进行设置。
有关启用 secure-boot
的更多信息,请参阅 USBBOOT 库中的 安全启动须知 和 安全启动指引。
program_pubkey
如果该属性设置为 1
,那么 recovery.bin
将把 EEPROM 映像中公钥的哈希值写入 OTP。 设置后,引导加载程序将拒绝使用不同 RSA 密钥签名的 EEPROM 映像或未签名的映像。
Default: 0
revoke_devkey
如果该属性设置为 1
,recovery.bin
将向 OTP 写入一个值,防止 ROM 加载不支持 安全启动
的旧版本第二阶段引导加载程序。这可以防止通过恢复到旧版本的引导加载程序来关闭 secure-boot
。
Default: 0
program_rpiboot_gpio
Compute Module有一个专用的 nRPIBOOT
跳线,用于选择 RPIBOOT
模式。带有 EEPROM 的旗舰版和键盘版 Raspberry Pi 设备没有专用的 nRPIBOOT
跳线。要在旗舰版和键盘版设备上选择 RPIBOOT
模式,请将下列 GPIO 引脚之一拉低:
2
4
5
6
7
8
该属性不依赖于secure-boot
,但要确认该 GPIO 配置不会与任何可能在启动期间将 GPIO 拉低的 HAT 冲突。
为了安全起见,只能通过 RPIBOOT
对该属性进行编程,因此必须首先使用 erase_eeprom
清除引导加载程序 EEPROM。这将导致 BCM2711 ROM 故障切换到 RPIBOOT
模式,从而允许设置该选项。
在 BCM2712 上,您也可以通过按住电源按钮并同时连接 USB-C 电源来强制启动 RPIBOOT
模式。
Default: {nbsp}
program_jtag_lock
如果该属性设置为 1
,则 recovery.bin
将编程一个 OTP 值,阻止使用 VideoCore JTAG。该选项要求同时设置 program_pubkey
和 revoke_devkey
。该选项可能会阻止故障分析,只有在设备经过全面测试后才可设置。
Default: 0
上一篇 – 树莓派超全系列教程文档–(32)config.txt常用音频配置
下一篇 – 树莓派超全系列教程文档–(34)树莓派配置GPIO