config.txt文件
什么是config.txt?
Raspberry Pi 设备使用名为 config.txt 的配置文件,而不是传统 PC 上的 BIOS。在 Arm CPU 和 Linux 初始化之前,GPU 会读取config.txt。Raspberry Pi OS 会在 boot 分区(位于 /boot/firmware/)中查找该文件。
在 Raspberry Pi OS Bookworm 之前,Raspberry Pi OS 将启动分区存储在 /boot/。
您可以直接从 Raspberry Pi OS 安装中编辑 config.txt。也可以移除存储设备,在另一台电脑上编辑启动分区中的文件,包括 config.txt。
对 config.txt 的更改仅在重启后生效。可以使用以下命令查看当前活动设置:
vcgencmd get_config <config>:显示特定配置值,例如 vcgencmd get_config arm_freq.
vcgencmd get_config int:列出所有非零整数配置选项(非零)
vcgencmd get_config str:列出所有非空字符串配置选项
并非所有配置设置都能使用 vcgencmd 获取。
某些旧版 config.txt 选项已不再获得官方支持。这些选项列于 旧版 config.txt 选项 中,本文未作涵盖。
文件格式
config.txt 文件由早期启动固件读取,因此使用非常简单的文件格式: 每行只有一条 property=value 语句,其中 value 既可以是整数,也可以是字符串。可以添加注释,也可以用 # 字符开头一行,注释掉并禁用现有的配置值。
条目的行长限制为 98 个字符。Raspberry Pi OS 会忽略超过此限制的任何字符。
下面是一个文件示例:
# 启用音频(加载 snd_bcm2835)
dtparam=audio=on
# 为检测到的摄像头自动加载覆盖层
camera_auto_detect=1
# 为检测到的 DSI 显示器自动加载覆盖层
display_auto_detect=1
# 启用 DRM VC4 V3D 驱动程序
dtoverlay=vc4-kms-v3d
高级功能
包括
将指定文件的内容插入当前文件。
例如,在 config.txt 中添加 include extraconfig.txt 这一行,就会在 config.txt 文件中包含 extraconfig.txt 文件的内容。
bootcode.bin 或 EEPROM 引导加载程序不支持 include 指令。
由bootloader处理的设置只有在 config.txt 文件(而不是任何其他包含文件)中指定后才会生效:
bootcode_delaygpu_mem、gpu_mem_256、gpu_mem_512、gpu_mem_1024total_memsdram_freqstart_x、start_debug、start_file、fixup_fileuart_2ndstage
条件筛选
条件筛选器在条件部分有所介绍。
autoboot.txt
autoboot.txt 是一个可选配置文件,可用于指定 boot_partition 编号。
它还可与 tryboot 功能结合使用,为操作系统升级实现 A/B 启动。
autoboot.txt 的长度限制为 512 字节,支持 [all]、[none] 和 [tryboot] 条件过滤器。
另请参阅 TRYBOOT 启动流程。
boot_partition
指定用于启动的分区号,除非分区号已作为参数指定给 reboot 命令(如 sudo reboot 2)。
分区号从 1 开始,MBR 分区为 1 至 4。 指定分区 0 意味着从默认分区(即第一个可启动的 FAT 分区)启动。
可启动分区必须格式化为 FAT12、FAT16 或 FAT32,并包 含 start.elf 文件(或树莓派5上的 config.txt 文件),才能被bootloader归类为可启动分区。
[tryboot]过滤器
如果系统启动时设置了 tryboot 标志,则此过滤器通过。
sudo reboot "0 tryboot"
tryboot_a_b
将此属性设为 1,可在设置 tryboot 标志时加载正常的 config.txt 和 boot.img 文件,而不是 tryboot.txt 和 tryboot.img。
这样就能在分区级而非文件级进行 tryboot 切换,而无需修改 A/B 分区中的配置文件。
A/B启动更新流程示例
下面的伪代码展示了假设的操作系统更新服务如何使用 tryboot + autoboot.txt 来执行故障安全操作系统升级。
初始 autoboot.txt
[all]
tryboot_a_b=1
boot_partition=2
[tryboot]
boot_partition=3
安装更新
- 系统开机,默认启动到分区 2
更新服务将下一版本的操作系统下载到分区 3- 通过重启至
tryboot模式reboot "0 tryboot"来测试更新,其中0表示默认分区
提交或取消更新
- 系统从分区 3 启动,因为在
tryboot模式下,[tryboot]过滤器的值为 true - 如果 tryboot 处于活动状态(
/proc/device-tree/chosen/bootloader/tryboot == 1)- 如果当前启动分区(
/proc/device-tree/chosen/bootloader/partition)与 autoboot.txt 中[tryboot]部分的boot_partition相匹配更新服务会验证系统是否更新成功- 如果更新成功
- 替换
autoboot.txt交换boot_partition配置 - 正常重启 - 分区 3 现在是默认启动分区
- 替换
- 否则
更新服务将更新标记为失败,例如删除更新文件。- 正常重启 - 分区 2 仍是默认引导分区,因为
tryboot标记已自动清除
- 结束如果
- 结束如果
- 如果当前启动分区(
- 结束如果
更新的 autoboot.txt
[all]
tryboot_a_b=1
boot_partition=3
[tryboot]
boot_partition=2
更新 autoboot.txt 后不一定要重新启动。不过,更新服务 必须小心避免覆盖当前分区,因为 autoboot.txt 已被修改以提交上次更新。有关详细信息,请参阅 设备树参数。
常用选项
常用显示选项
hdmi_enable_4kp60
此选项仅适用于 Raspberry Pi 4、Compute Module 4、Compute Module 4S 和 Pi 400。
默认情况下,当连接到 4K 显示器时,某些型号会选择 30Hz 刷新率。使用此选项可选择 60Hz 刷新率。受此设置影响的型号不支持同时在两个微型 HDMI 端口上输出 4Kp60。启用此设置会增加功耗和温度。
常见硬件配置选项
camera_auto_detect
默认情况下,Raspberry Pi OS 在 /boot/firmware/config.txt 中包含一行启用此设置的内容。
启用后,固件将自动为识别到的 CSI 摄像头加载覆盖图。
要禁用此功能,请将 camera_auto_detect 设置为 0(或删除 camera_auto_detect=1)。
display_auto_detect
默认情况下,Raspberry Pi 操作系统在 /boot/firmware/config.txt 文件中包含一行配置,用于启用此设置。
启用后,固件将自动为识别到的 DSI 显示器加载覆盖层。
要禁用此功能,请将 display_auto_detect 设置为 0(或删除 display_auto_detect=1)。
dtoverlay
dtoverlay 选项要求固件加载一个名为 "设备树"(Device Tree)的覆盖层,这是一个配置文件,可以启用内核对内置和外部硬件的支持。例如,dtoverlay=vc4-kms-v3d 会加载一个可启用内核图形驱动程序的覆盖层。
作为一种特殊情况,如果调用时没有任何值 - dtoverlay= - 则该选项标志着覆盖参数列表的结束。如果在任何其他 dtoverlay 或 dtparam 设置之前使用,则会阻止加载任何 HAT 叠加。
更多详情,请参阅 DTB、覆盖和 config.txt。
dtparam
Raspberry Pi 设备的设备树配置文件支持各种参数,例如启用 I2C 和 SPI 接口。许多 DT 叠加都可以通过使用参数进行配置。这两种类型的参数都可以使用 dtparam 设置来提供。此外,覆盖参数还可以附加到 dtoverlay 选项中,用逗号分隔,但要注意行长限制为 98 个字符。
更多详情,请参阅 DTB、覆盖和 config.txt。
arm_boost
此选项仅适用于包含两相供电的 Raspberry Pi 4B 后续版本以及 Pi 400 的所有版本。
默认情况下,Raspberry Pi OS 在 /boot/firmware/config.txt 中包含一行,在支持的设备上启用此设置。
某些 Raspberry Pi 设备为 SoC 电压轨配备了第二个开关模式电源。启用后,默认的 Turbo 模式时钟频率将从 1.5GHz 增至 1.8GHz。
要禁用,请设置 arm_boost=0。
power_force_3v3_pwm
该选项仅适用于 Raspberry Pi 5、500、500+ 和Compute Module 5。
强制对 GPIO 针座或 CSI 连接器的 3.3V 输出进行 PWM。
若要禁用,请设置 power_force_3v3_pwm=0。
板载模拟音频(3.5毫米插孔)
板载音频输出使用配置选项来更改模拟音频的驱动方式,以及是否启用某些固件功能。
audio_pwm_mode
audio_pwm_mode=1 从 3.5 毫米 AV 插孔选择传统的低质量模拟音频。
audio_pwm_mode=2(默认值)选择使用高级调制方案的高质量模拟音频。
该选项使用更多 GPU 计算资源,可能会干扰某些机型上的某些用例。
disable_audio_dither
默认情况下,如果音频流被路由到模拟音频输出,则会对其应用 1.0LSB 的抖动。在某些情况下,例如 ALSA 音量设置较低时,这可能会产生可听到的背景嘶嘶声。将 disable_audio_dither 设置为 1 可禁用抖动应用。
enable_audio_dither
当音频采样大于 16 位时,音频抖动(见上文 disable_audio_dither)通常会被禁用。将此选项设为 1 可强制在所有比特深度下使用抖动。
pwm_sample_bits
pwm_sample_bits 命令调整模拟音频输出的比 特深度。默认位深度为 11。选择低于 8 的位深度会导致音频无法正常工作,因为低于 8 的设置会导致 PLL 频率过低而无法支持。这通常只能作为比特深度如何影响量化噪声的演示。
HDMI 音频
默认情况下,所有带 HDMI 输出的 Raspberry Pi 型号都启用了 HDMI 音频输出。
要禁用 HDMI 音频输出,请在 /boot/firmware/config.txt 中的 dtoverlay=vc4-kms-v3d 行末尾添加,noaudio:
dtoverlay=vc4-kms-v3d,noaudio
启动选项
start_file, fixup_file
这些选项指定了启动前传输到 VideoCore GPU 的固件文件。
start_file 指定要使 用的 VideoCore 固件文件。fixup_file 指定用于修复 start_file 中使用的内存位置的文件,使其与 GPU 内存分割相匹配。
start_file 和 fixup_file 是一对匹配的文件,使用不匹配的文件将导致电路板无法启动。这是一个高级选项,因此我们建议您使用 start_x 和 start_debug,而不是此选项。
不能以这种方式选择降频固件(start*cd.elf 和 fixup*cd.dat),否则系统将无法启动。启用降频固件的唯一方法是指定 gpu_mem=16。降频固件删除了对编解码器、3D和调试日志 的支持,并将初始启动帧缓存限制为 1080p @16bpp - 尽管 KMS 可以在稍后阶段用最多 32bpp 的 4K 帧缓存替换它,就像使用任何固件一样。
Raspberry Pi 5、500、500+,和Compute Module 5 固件自带引导加载器 EEPROM。
cmdline
cmdline 是引导分区中读取内核命令行字符串的替代文件名;默认值为 cmdline.txt。
kernel
kernel 是引导分区中用于加载内核的替代文件名。Raspberry Pi 1、Zero 和 Zero W 以及 Raspberry Pi 计算模块 1 的默认值是 kernel.img。Raspberry Pi 2、3、3+ 和 Zero 2 W 以及 Raspberry Pi 计算模块 3 和 3+ 的默认值是 kernel7.img。Raspberry Pi 4 和 400 以及 Raspberry Pi 计算模块 4 的默认值是 kernel8.img,如果 arm_64bit 设置为 0,则默认值是 kernel7l.img。
Raspberry Pi 5、500、500+,和Compute Module 5 固件默认加载 kernel_2712.img,因为该映像包含这些型号特有的优化(例如 16K 页面大小)。如果没有该文件,则将加载普通 64 位内核 (kernel8.img)。
arm_64bit
如果设置为 1,内核将以 64 位模式启动。设置为 0 则选择 32 位模式。
在 64 位模式下,固件将选择适当的内核(如 kernel8.img),除非定义了明确的 kernel 选项,在这种情况下将使用该选项。
在 Raspberry Pi 4、400 和 CM 4、4S 平台上默认为 1。在所有其他平台上默认为 0。不过,如果在明确的 kernel 选项中给出的名称与已知内核之一相匹配,arm_64bit 也会相应设置。
64 位内核有以下几种形式:
- 未压缩的镜像文件
- 镜像的 gzip 压缩包
这两种形式都可以使用 img 文件扩展名;bootloader 使用文件开头的签名字节识别存档。
以下 Raspberry Pi 型号支持此标记:
- 2B rev 1.2
- 3B
- 3A+
- 3B+
- 4B
- 400
- 2 W
- CM 3
- CM 3+
- CM 4
- CM 4S
自 Raspberry Pi 5 起的旗舰机型、自 CM5 起的计算模块以及自 Pi 500 起的键盘机型 仅 支持 64 位内核。仅支持 64 位内核的型号会忽略此标记。
armstub
armstub 是引导分区中用于加载 Arm 启动程序的文件名。默认的 Arm 启动程序存储在固件中,并根据树莓派型号及各项设置自动选择。
该启动程序是一段在内核运行前的 Arm 代码片段,其职责是在将控制权移交内核前,完成中断控制器等底层硬件的初始化工作。
ramfsfile
ramfsfile 是要加载的 ramfs 引导分区上的可选文件名。
新固件支持加载多个 ramfs 文件。应使用逗号分隔多个文件名,注意不要超过 80 个字符的行长限制。所有加载的文件都会在内存中串联起来,并作为单个 ramfs blob 处理。更多信息请访问论坛。
ramfsaddr
ramfsaddr 是加载 ramfsfile 的内存地址。
initramfs
initramfs 命令同时指定 ramfs 文件名和加载文件的内存地址。它在一个参数中同时执行 ramfsfile 和 ramfsaddr 的操作。地址也可以是 followkernel(或 0),以便将其放在内核映像之后的内存中。示例值为:initramfs initramf.gz 0x00800000 或 initramfs init.gz followkernel。与 ramfsfile 一样,较新的固件允许通过逗号分隔文件名来加载多个文件。
该选项使用的语法与其他选项不同,不应在此处使用 = 字符。
auto_initramfs
如果 auto_initramfs 设置为 1,固件会查找与内核匹配的 initramfs 文件。该文件必须与内核映像位于同一位置,且文件名由内核名称衍生而来,即用 initramfs 替换 kernel 前缀,并去除任何扩展名(如 .img),例如 kernel8.img 对应的文件名为 initramfs8。您可以使用 auto_initramfs 配合自 定义内核名称,前提是这些名称分别以 kernel 和 initramfs 开头,且其余部分完全匹配(除 initramfs 文件缺少扩展名外)。否则,必须显式指定 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 删除 quite 行后,内核的启动信息也会出现在该行。另请参阅 uart_2ndstage。
force_eeprom_read
将该 选项设为 0,可防止固件在上电时尝试读取 I2C HAT EEPROM(连接到引脚 ID_SD 和 ID_SC)。另请参阅 disable_poe_fan。
os_prefix
os_prefix 是一个可选设置,允许在安装在同一块卡上的多个内核和设备树文件版本之间进行选择。os_prefix 中的任何值都会被添加到固件加载的操作系统文件名前,这里的 操作系统文件 是指 kernel、initramfs、cmdline.txt、.dtbs 和 overlays。前缀通常是目录名,但也可以是文件名的一部分,如 "test-"。因此,目录前缀必须包括尾部的/字符。
为了减少系统无法启动的几率,固件会首先测试提供的前缀值是否可行,除非能在新位置/名称中找到预期的内核和 .dtb,否则前缀将被忽略(设置为"")。这种可行性测试的一个特例是覆盖层,只能从 ${os_prefix}${overlay_prefix} 加载。(如果存在 ${os_prefix}${overlay_prefix}README,则只会从 ${os_prefix}${overlay_prefix} 加载覆盖层(其中 overlay_prefix 的默认值为 "overlay/"),否则将忽略 os_prefix,并将覆盖层视为共享。
(在检查前缀时,固件会检查关键文件而不是目录是否存在,原因有二:前缀可能不是目录,而且并非所有启动方法都支持测试目录是否存在)。
任何用户指定的操作系统文件都可以通过使用绝对路径(相对于引导分区)绕过所有前缀,只需在文件路径开头加上 /,例如 kernel=/my_common_kernel.img。
另请参阅 overlay_prefix 和 upstream_kernel。
otg_mode(仅限树莓派4)
USB On-The-Go(通常缩写为 OTG)是一项功能,允许使用适当 OTG 电缆的支持 USB 设备将自己配置为 USB 主机。在较早的树莓派上,USB 主机和设备模式均使用单个 USB 2 控制器。
自 Raspberry Pi 4B 开始的旗舰机型和自 Pi 400 开始的键盘机型添加了高性能 USB 3 控制器,通过 PCIe 连接,以驱动主 USB 端口。传统的 USB 2 控制器仍可在 USB-C 电源连接器上作为设备使用(otg_mode=0,默认值)。CM5 之前的计算模块不包括这种高性能 USB 3 控制器。
otg_mode=1 要求在 USB-C 连接器上使用功能更强的 XHCI USB 2 控制器作为替代主机控制器。
默认情况下,Raspberry Pi OS 在 /boot/firmware/config.txt中包含一行,用于在 CM4 上启用此设置。
overlay_prefix
指定加载覆盖层的子目录/前缀,默认为 overlays/(注意尾部的/)。如果与 os_prefix 结合使用,os_prefix 应位于 overlay_prefix 之前,例如 dtoverlay=disable-bt 将尝试加载 ${os_prefix}${overlay_prefix}disable-bt.dtbo。
除非存在 ${os_prefix}${overlay_prefix}README,否则覆盖层将与主操作系统共享(即忽略 os_prefix)。
属性配置
树莓派5 需要一个 config.txt 文件来表明分区是可启动的。
boot_ramdisk
如果该属性设置为 1,则bootloader将尝试加载一个名为 boot.img 的内存盘文件,其中包含引导文件系统。后续文件(如 start4.elf)将从内存盘读取,而不是从原始引导文件系统读取。
boot_ramdisk 的主要用途是支持安全启动,但未签名的 boot.img 文件对网络启动或 RPIBOOT 配置也很有用。
- ramdisk 文件的最大大小为 96MB。
boot.img文件是原始磁盘.img文件。建议使用无 MBR 的普通 FAT32 分区格式。- 内存盘文件系统的内存会在操作系统启动前释放。
- 如果选择 TRYBOOT,bootloader将搜索
tryboot.img,而不是boot.img。 - 另请参阅 autoboot.txt
有关安全启动和创建 boot.img 文件的更多信息,请参阅 USBBOOT。
默认值:0
boot_load_flags
自定义固件(裸机)的实验属性。
位 0 (0x1) 表示 .elf 文件是定制固件。这将禁用任何兼容性检查(例如是否支持 USB MSD 启动),并在启动可执行文件前重置 PCIe。
与树莓派5无关,因为没有 start.elf 文件。
默认值:0x0
enable_rp1_uart
仅适用于树莓派5。
当设置为 1 时,固件将 RP1 UART0 初始化为 115200bps,并在启动操作系统前不重置 RP1(可通过 pciex4_reset=1 单独配置)。
这使得在早期启动代码中(例如裸机调试期间)更容易获取 40 针接头上的 UART 输出。
默认值:0x0
pciex4_reset
仅限 Raspberry Pi 5。
默认情况下,RP1 使用的 PCIe x4 控制器会在启动操作系统前复位。如果将此参数设置为 0,则重置将被禁用,从而允许操作系统或裸机代码从引导加 载程序继承 PCIe 配置设置。
默认值:1
sha256
若设置为非零值,则启用对已加载文件(内核、初始化ramdisk、设备树 .dtb 文件及覆盖层)的SHA256哈希值记录功能,该哈希值由sha256sum工具生成。启用后日志输出将发送到UART,也可通过sudo vclog --msg查看。此选项在调试启动问题时可能有用,但会导致启动时间增加数秒。所有平台默认值为0。
uart_2ndstage
如果 uart_2ndstage 为 1,则启用 UART 的调试记录。该选项也会自动启用 start.elf 中的 UART 日志记录。启动选项页面对此也有说明。
BOOT_UART 属性也可启用引导加载器 UART 日志,但不会在 start.elf 中启用 UART 日志,除非同时设置了 uart_2ndstage=1。
默认值:0
erase_eeprom
如果 erase_eeprom 设置为 1,那么 recovery.bin 将擦除整个 SPI EEPROM,而不是闪烁引导程序映像。该属性在正常启动时没有影响。
默认值:0