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
文件由早期启动固件读取,因此使用非常简单的文件格式: 每行只有一条 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.tx
t 文件中包含 extraconfig.txt
文件的内容。
bootcode.bin
或 EEPROM 引导加载程序不支持 include
指令。
由bootloader处理的设置只有在 config.txt
文件(而不是任何其他包含文件)中指定后才会生效:
bootcode_delay
gpu_mem
、gpu_mem_256
、gpu_mem_512
、gpu_mem_1024
total_mem
sdram_freq
start_x
、start_debug
、start_file
、fixup_file
uart_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(仅限树莓派4)
默认情况下,当连接到 4K 显示器时,树莓派4B、400 和 CM4 将选择 30Hz 刷新率。使用此选项可选择 60Hz 刷新率。
常见硬件配置选项
camera_auto_detect
启用此设置(树莓派OS默认启用)后,固件将自动为其识别的 CSI 摄像头加载覆盖层。设置 camera_auto_detect=0
可禁用该设置。
display_auto_detect
启用此设置(树莓派OS默认启用)后,固件将自动为其识别的 DSI 显示器加载覆盖层。设置 display_auto_detect=0
可禁用该设置。
dtoverlay
dtoverlay
选项要求固件加载一个名为 "设备树"(Device Tree)的覆盖层,这是一个配置文件,可以启用内核对内置和外部硬件的支持。例如,dtoverlay=vc4-kms-v3d
会加载一个可启用内核图形驱动程序的覆盖层。
作为一种特殊情况,如果调用时没有任何值 - dtoverlay=
- 则该选项标志着覆盖参数列表的结束。如果在任何其他 dtoverlay
或 dtparam
设置之前使用,则会阻止加载任何 HAT 叠加。
更多详情,请参阅 DTB、覆盖和 config.txt。
dtparam
Raspberry Pis 的设备树配置文件支持大量参数,例如启用 I2C 和 SPI 接口。许多 DT 叠加都可以通过使用参数进行配置。这两种类型的参数都可以使用 dtparam
设置来提供。此外,覆盖参数还可以附加到 dtoverlay
选项中,用逗号分隔,但要注意行长限制为 98 个字符。
更多详情,请参阅 DTB、覆盖和 config.txt。
arm_boost(仅限树莓派4)
所有树莓派400和更新版本的树莓派4B都为 SoC 电压轨配备了第二个开关模式电源,这使得默认的超频模式时钟频率从 1.5GHz 提高到 1.8GHz。树莓派OS 默认启用这 一更改。设置 arm_boost=0
可禁用。
power_force_3v3_pwm(仅限树莓派5)
使用 3V3 电源时强制 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 帧缓存替换它,就像使用任何固件一样。
树莓派5固件自包含在bootloader 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 固件默认加载kernel_2712.img
,因为该映像包含 Raspberry Pi 5 特有的优化(例如 16K 页面大小)。如果没有该文件,则将加载普通 64 位内核 (kernel8.img
)。
arm_64bit
如果设置为 1,内核将以 64 位模式启动。设置为 0 则选择 32 位模式。
在 64 位模式下,固件将选择适当的内核(如 kernel8.img
),除非定义了明确的 kernel
选项,在这种情况下将使用该选项。
在 Pi 4(Pi 4B、Pi 400、CM4 和 CM4S)上默认为 1,在所有其他平台上默认为 0。不过,如果显式 kernel
选项中给出的名称与已知内核之一相匹配,那么 arm_64bit
也会相应设置。
64 位内核可以是未压缩的镜像文件或镜像的 gzip 压缩包(仍可称为 kernel8.img;bootloader将从开头的签名字节识别压缩包)。64 位内核仅适用于 树莓派3、3+、4、400、Zero 2 W 和 2B rev 1.2,以及 树莓派CM3、3+ 和 4。树莓派5 仅支持 64 位内核,因此该设备已移除此参数。
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
文件。
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
结合使用)要求内核创建一个串行控制台,可通过 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 控制器。
树莓派4B和树莓派400(非 CM4 或 CM4IO)增加了一个高性能 USB 3 控制器,通过 PCIe 连接,用于驱动主 USB 端口。USB-C 电源连接器上的传统 USB 2 控制器仍可作为设备使用(otg_mode=0
,默认值)。
otg_mode=1
则要求将功能更强的 XHCI USB 2 控制器用作该 USB-C 接口上的另一个主机控制器。
由于 CM4 和 CM4IO 不包含外部 USB3 控制器,因此树莓派OS 映像会在 CM4 上设置 otg_mode=1
,以获得更好的性能。
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
)。