树莓派超全系列教程文档--(36)树莓派条件过滤器设置
树莓派条件过滤器设置
- 条件过滤器
- `[all]` 过滤器
- 型号过滤器
- `[none]` 过滤器
- `[tryboot]` 过滤器
- `[EDID=*]` 过滤器
- 序列号过滤器
- GPIO过滤器
- 组合条件过滤器
文章来源: http://raspberry.dns8844.cn/documentation
原文网址
条件过滤器
当将单个 SD 卡(或卡图像)与一个 Raspberry Pi 和一个显示器一起使用时,很容易根据特定组合的要求来设置 config.txt
并保持这种状态,仅在发生变化时进行修改。
但是,如果在不同的显示器之间交换一个 Raspberry Pi,或者在多个板之间交换 SD 卡(或卡图像),则一组设置可能不再足够。条件过滤器允许您定义配置文件的某些部分仅在特定情况下使用,从而允许单个 config.txt
在由不同硬件读取时创建不同的配置。
[all]
过滤器
[all]
过滤器是最基本的过滤器。它会重置所有先前设置的过滤器,并允许将其下方列出的任何设置应用于所有硬件。通常,在过滤设置组的末尾添加一个 [all]
过滤器是个好主意,以避免无意中组合过滤器(见下文)。
型号过滤器
条件型号过滤器根据下表应用。
这些对于定义不同的 kernel
、 initramfs
和 cmdline
设置特别有用,因为 Raspberry Pi 1 和 Raspberry Pi 2 需要不同的内核。它们还可用于定义不同的超频设置,因为 Raspberry Pi 1 和 Raspberry Pi 2 具有不同的默认速度。例如,为每个设置定义单独的 initramfs
映像:
[pi1]
initramfs initrd.img-3.18.7+ followkernel
[pi2]
initramfs initrd.img-3.18.7-v7+ followkernel
[all]
请记住在最后使用 [all]
过滤器,以便任何后续设置不仅限于 Raspberry Pi 2 硬件。
某些型号的 Raspberry Pi(包括 Zero、计算模块和键盘型号)可从多个过滤器读取设置。要将设置只应用于一种型号,可采用以下方法
- 将设置应用于基本型号(例如
[pi4]
),然后将设置还原到读取基本型号过滤器的所有型号(例如[pi400]
、[cm4]
、[cm4s]
)。 - 使用带有修订代码的
board-type
过滤器来针对单个型号(例如[board-type=0x11]
)。
[none]
过滤器
[none]
过滤器可防止任何后续设置应用于任何硬件。虽然没有 [none]
什么都做不了,但它是一种有用的方法,可以将未使用的设置组保留在 config.txt 中,而不必注释掉每一行。
[tryboot]
过滤器
如果设置了 tryboot
重新启动标志,此过滤器将成功。
它旨在用于 xref:config_txt.adoc#autoboot-txt[autoboot.txt] 中,以在 tryboot
模式下选择不同的 boot_partition
进行故障安全操作系统更新。
[EDID=*]
过滤器
当在 Raspberry Pi 中使用单个 SD 卡在多个显示器之间切换时,如果空白配置不足以自动为每个显示器选择所需的分辨率,则允许根据显示器的 EDID 名称选择特定设置。
要查看所连接显示器的 EDID 名称,您需要按照几个步骤操作。运行以下命令查看 Raspberry Pi 上有哪些输出设备:
$ ls -1 /sys/class/drm/card?-HDMI-A-?/edid
在 Raspberry Pi 4 上,这将打印类似以下内容:
[source]
/sys/class/drm/card1-HDMI-A-1/edid
/sys/class/drm/card1-HDMI-A-2/edid
然后,您需要针对每个文件名运行 edid-decode
,例如:
$ edid-decode /sys/class/drm/card1-HDMI-A-1/edid
如果没有显示器连接到特定的输出设备,它就会告诉你 EDID 是空的;否则,它就会为你提供有关显示器功能的信息。您需要查找指定 制造商
和 显示器产品名称
的行。“EDID 名称” 为 <制造商>-<显示器产品名称>
,字符串中的空格用下划线代替。例如,如果您的 edid-decode
输出包括:
....Vendor & Product Identification:Manufacturer: DEL
....Display Product Name: 'DELL U2422H'
....
此监视器的EDID名称为 DEL-DELL_U2422H
。
然后,您可以将其用作条件过滤器来指定仅在连接此特定监视器时使用的设置:
[EDID=DEL-DELL_U2422H]
cmdline=cmdline_U2422H.txt
[all]
这些设置仅在启动时适用。显示器必须在启动时连接,Raspberry Pi必须能够读取其EDID信息以找到正确的名称。启动后将不同的显示器热插到Raspberry Pi不会选择不同的设置。
在Raspberry Pi 4上,如果两个HDMI端口都在使用中,则将针对它们两个检查EDID过滤器,并应用所有匹配条件过滤器的配置。
NOTE: 此设置在Raspberry Pi 5上不可用。
序列号过滤器
有时设置应该只应用于单个特定的Raspberry Pi,即使您将SD卡交换到不同的SD卡。示例包括许可证密钥和超频设置(尽管许可证密钥已经以不同的方式支持SD卡交换)。您还可以使用它来选择不同的显示设置,即使上面的EDID标识是不可能的,只要您不在Raspberry Pi之间交换显示器。例如,如果您的显示器不提供可用的EDID名称,或者如果您使用复合输出(无法从中读取EDID)。
要查看Raspberry Pi的序列号,请运行以下命令:
cat /proc/cpuinfo
一个16位十六进制值将显示在输出底部附近。您的Raspberry Pi序列号是最后八位十六进制数字。例如,如果您看到:
[source]
Serial : 0000000012345678
序列号是 12345678
。
NOTE: 在某些Raspberry Pi型号上,前8个十六进制数字包含 0
以外的值。即使在这种情况下,也只使用最后八个十六进制数字作为序列号。
您可以定义仅应用于此特定Raspberry Pi的设置:
[0x12345678]
# 此处的设置仅适用于使用此串行接口的 Raspberry Pi
[all]
# 这里的设置适用于所有硬件
GPIO过滤器
您还可以根据GPIO的状态进行过滤。例如:
[gpio4=1]
#如果GPIO 4为高,则应用此处的设置[gpio2=0]
#如果GPIO 2低,则应用此处的设置[all]
#这里的设置适用于所有硬件
组合条件过滤器
相同类型的过滤器会相互替换,因此 [pi2]
会覆盖 [pi1]
,因为两者不可能同时为真。
不同类型的过滤器可以通过一个接一个地列出来组合,例如:
# 这里的设置适用于所有硬件
[EDID=VSC-TD2220]
# 仅当连接了监视器VSC-TD2220时才应用此处的设置
[pi2]
# 仅当监视器VSC-TD2220连接*和*在Raspberry Pi 2上时才应用此处的设置[all]
# 这里的设置适用于所有硬件
使用 [all]
过滤器重置所有以前的过滤器并避免无意中组合不同的过滤器类型。