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 安装中编辑 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 文件仅控制启动加载器选择哪个启动分区。构建一个有韧性、可用于生产的 A/B 更新系统,还需要专门的分区布局(例如冗余的启动和根文件系统)以及更新工具。如需自动化方案,请参阅 A/B 启动更新 和 rpi-image-gen 工具。
autoboot.txt 文件支持 [all]、[none] 和 [tryboot] 条件筛选器。
另请参阅 TRYBOOT 启动流程。
boot_partition
指定用于启动的分区号,除非分区号已作为参数指定给 reboot 命令(例如 sudo reboot 2)。
分区号从 1 开始。指定分区 0 会指示启动加载器选择默认分区,该分区解析为第一个可启动的 FAT 分区(通常为分区 1)。
可启动分区必须格式化为 FAT12、FAT16 或 FAT32,并包含 start.elf 文件(或树莓派 5 上的 config.txt 文件),启动加载器才会将其归类为可启动分区。
与 cmdline.txt 及根文件系统选择的关系
启动加载器只读取 autoboot.txt 来定位目标启动分区。除了将其参数传递给操作系统内核之外,它不会解析或处理 cmdline.txt。
根分区的选择(root=...)由内核通过 cmdline.txt 处理。在双槽 A/B 系统中,每个启动分区通常包含自己独立的 cmdline.txt 文件,指向其对应的根分区。或者,如果每个启动分区使用相同的文件,您可以在 config.txt 中使用 [boot_partition=N] 条件筛选器来选择备用的 cmdline.txt:
[boot_partition=2]
cmdline=cmdline_rootfs_a.txt
[boot_partition=3]
cmdline=cmdline_rootfs_b.txt
tryboot_a_b
将此属性设为 1,可在设置 tryboot 标志时加载正常的 config.txt 和 boot.img 文件,而不是 tryboot.txt 和 tryboot.img。
这样就能在分区级而非文件级进行 tryboot 切换,而无需修改 A/B 分区中的配置文件。
A/B 启动的更新流程示例
考虑如下 A/B 分区布局:
- 分区 1(FAT): 包含
autoboot.txt的初始启动加载器分区。 - 分区 2(FAT): 槽位 A 启动分区(
boot_partition=2),包含固件、内核以及指向 Root A 的cmdline.txt。 - 分区 3(FAT): 槽位 B 启 动分区(
boot_partition=3),包含固件、内核以及指向 Root B 的cmdline.txt。 - 分区 4: 槽位 A 根文件系统分区(Root A)。
- 分区 5: 槽位 B 根文件系统分区(Root B)。
- 分区 6: 可选的持久数据分区。
初始 autoboot.txt:
[all]
tryboot_a_b=1
boot_partition=2
[tryboot]
boot_partition=3
安装更新
系统默认启动到分区 2。随后,一个假设的更新服务:
-
将下一版本的操作系统安装到分区 3(及其对应的根分区)。
-
通过执行 tryboot 重启来测试更新:
sudo reboot "0 tryboot"
提交或取消更新
系统会从分区 3 启动,因为 autoboot.txt 中的 [tryboot] 筛选器求值为 true。
如果 tryboot 处于活动状态(/proc/device-tree/chosen/bootloader/tryboot 等于 1),并且我们已从 tryboot 分区启动(/proc/device-tree/chosen/bootloader/partition 与 autoboot.txt 的 [tryboot] 部分中设置的 boot_partition 相匹配):
- 该假设的更新服务随后会验证系统健康状况。
- 如果成功: 更新
autoboot.txt,交换默认分区与 tryboot 分区,从而提交更新。 - 如果失败: 在不更改
autoboot.txt的情况下执行正常重启。tryboot标志会自动清除,使系统回退到从分区 2 启动。
- 如果成功: 更新
提交后更新过的 autoboot.txt:
[all]
tryboot_a_b=1
boot_partition=3
[tryboot]
boot_partition=2
位于 /proc/device-tree/chosen/bootloader/ 下的属性(例如 tryboot 和 partition)以原始 32 位大端二进制整数形式存储。使用 cat 等工具查看它们会产生不可打印字符或显示为空。要在 shell 脚本中读取这些整数值,请使用:
printf "%d\n" "0x$(od /proc/device-tree/chosen/bootloader/tryboot -v -An -t x1 | tr -d ' ')"
常用选项
常用显示选项
hdmi_enable_4kp60
此选项仅适用于 Raspberry Pi 4、Compute Module 4、Compute Module 4S 和 Pi 400。
默认情况下,当连接到 4K 显示器时,某些型号会选择 30Hz 刷新率。使用此选项可选择 60Hz 刷新率。受此设置影响的型号仅在 HDMI0 上支持 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 一样,较新的固件允许通过逗号分隔文件名来加载多个文件。
该选项使用的语法与其他选项不同,不应在此处使用 = 字符。