Skip to content

config.txt中的条件过滤器

当将一个 SD 卡(或卡映像)与一台 Pi 和一台显示器一起使用时,可以根据特定组合的需要轻松设置`config.txt'并保持该状态,仅在发生更改时对其进行修改。

但是,如果一个 Pi 在不同的显示器之间交换,或者 SD 卡(或卡映像)在多个 Pi 之间交换,则单套设置可能不再足够。条件过滤器允许您定义配置文件的某些部分,仅在特定情况下使用,从而允许单个" config.txt"在由不同硬件读取时创建不同的配置。

[all]过滤器

这是最基本的过滤器。它重置所有先前设置的过滤器,并允许将其下面列出的所有设置应用于所有硬件。

[所有]

通常最好在过滤设置组的末尾添加一个[all]过滤器,以避免无意间组合过滤器(请参阅下文)。

[pi1][pi2](等)模型过滤器

根据下表应用条件模型过滤器。

筛选器 适用型号
[pi1] 模型 A ,模型 B ,计算模块
[pi2] 模型 2B (基于 BCM2836 -或 BCM2837 )
[pi3] 模型 3B ,模型 3B +,模型 3A +,计算模块 3
[pi3 +] 3A +型,3B +型
[pi4] 型号 4B
[pi0] 零,零 W ,零 WH
[pi0w] 零 W ,零 WH

这些对于定义不同的"内核"," initramfs"和" cmdline"设置特别有用,因为 Pi 1和 Pi 2需要不同的内核。它们对于定义不同的超频设置也很有用,因为 Pi 1和 Pi 2具有不同的默认速度。例如,为每个定义单独的initramfs图像:

[pi1]
initramfs initrd.img-3.18.7 + followkernel
[pi2]
initramfs initrd.img-3.18.7-v7 + followkernel
[所有]

请记住在最后使用" [all]"过滤器,以便所有后续设置都不仅限于 Pi 2硬件。

重要的是要注意,树莓派 Zero W将看到[pi0w]和[pi0]的内容。同样,树莓派 3B Plus看到[pi3 +]和[pi3]。如果您想让设置仅适用于 Pi Zero或 Pi 3B,则需要遵循它(顺序很重要),并在[pi0w]或[pi3 +]部分中进行设置以将其还原。

[none]过滤器

" [无]"过滤器可防止将随后的任何设置应用到任何硬件。尽管没有[none]也无可避免,但它是一种有用的方法,可以将未使用的设置组保留在 config .txt中,而不必注释掉每一行。

[没有]

[EDID = *]过滤器

当在 Pi 中使用单个 SD 卡时在多台显示器之间切换时,如果空白配置不足以自动为每台显示器选择所需的分辨率,则可以根据显示器的 EDID 名称选择特定设置。

要查看连接的监视器的 EDID 名称,请运行以下命令:

电视服务-n

这将打印如下内容:

device_name = VSC-TD2220

然后,您可以指定仅适用于此监视器的设置:

[EDID = VSC-TD2220]
hdmi_group = 2
hdmi_mode = 82
[所有]

这将为指定的监视器强制使用 1920x1080 DVT模式,而不影响任何其他监视器。

请注意,这些设置仅在引导时适用,因此必须在引导时连接显示器,并且 Pi 必须能够读取其 EDID 信息以找到正确的名称。引导后将其他显示器热插入 Pi 中将不会选择其他设置。

在 Pi 4上,如果两个 HDMI 端口都在使用中,则将对照两个端口检查 EDID ,随后的配置仅应用于第一个匹配设备。您可以通过以下方法确定两个端口的 EDID 名称:首先在终端窗口中运行tvservice -l以列出所有连接的设备,然后在tvservice -v <id> -n中使用返回的数字 ID 查找以下端口的 EDID 名称:特定的显示 ID 。

序列号过滤器

有时,即使将 SD 卡交换到另一张 Pi ,也应仅将设置应用于单个特定的 Pi 。示例包括许可证密钥和超频设置(尽管许可证密钥已经以其他方式支持 SD 卡交换)。您也可以使用它来选择不同的显示设置,即使上面的 EDID 标识是不可能的,前提是您没有在 Pi 之间交换监视器。例如,如果您的监视器未提供可用的 EDID 名称,或者您正在使用复合输出(无法读取 EDID )。

要查看您的 Pi 的序列号,请运行以下命令:

猫/proc/cpuinfo

序列号将在底部显示为 16 位十六进制值。例如,如果您看到:

序列号:0000000012345678

那么您可以定义仅适用于该特定 Pi 的设置:

[0x12345678]
#这里的设置仅适用于具有该序列号的 Pi 
[所有]#这里的设置适用于所有硬件

GPIO过滤器

您还可以根据 GPIO 的状态进行过滤。例如

[gpio4 = 1]
#如果 GPIO  4为高电平,则在此处应用设置

[gpio2 = 0]
#如果 GPIO  2为低电平,则应用此处的设置

[所有]
#这里的设置适用于所有硬件

[HDMI:*]过滤器-仅 Pi 4

树莓派 4有两个 HDMI 端口,对于许多与 HDMI 相关的`config.txt'命令,有必要指定要引用哪个 HDMI 端口。 HDMI有条件地将后续的 HDMI 配置过滤到特定端口。

[HDMI:0]
  hdmi_group = 2
  hdmi_mode = 45
[HDMI:1]
  hdmi_group = 2
  hdmi_mode = 67

所有特定于端口的 HDMI 命令都可以使用" variable:index"语法。您可以使用以下内容,它与前面的示例相同:

hdmi_group:0 = 2
hdmi_mode:0 = 45
hdmi_group:1 = 2
hdmi_mode:1 = 67

组合条件过滤器

相同类型的过滤器会相互替换,因此[[pi2]]会覆盖[[pi1]],因为两者不可能一次为真。

可以简单地将一个过滤器一个接一个地列出来组合不同类型的过滤器,例如:

#这里的设置适用于所有硬件
[EDID = VSC-TD2220]
#仅在连接了显示器 VSC -TD2220的情况下应用此处的设置
[pi2]
#仅在连接监视器 VSC -TD2220和连接 Pi  2上时才应用此处的设置
[所有]
#这里的设置适用于所有硬件

使用[[all]]过滤器可重置所有先前的过滤器,并避免无意间组合不同的过滤器类型。

本文使用 eLinux Wiki页面RPiconfig中的内容,该页面在Creative Commons Attribution-ShareAlike 3.0 Unported license下共享/by-sa/3.0/)