我需要使用从 SC16IS752 适配器获得的串行端口。我已经从 /boot/config.txt 设置了它们,它们在 /dev 中显示为 ttySC0、ttySC1、ttySC2 和 ttySC3,它们可以工作。
问题是,每当我启动 Raspberry 时,端口的命名缺乏一致性:有时设备连接到 ttySC0,有时连接到 ttySC2。
我试图四处寻找帮助,但我找到了仅适用于 USB-UART 适配器的解决方案:它是为每个物理设备创建符号链接。我试图遵循的解决方案是这个:
我试图应用相同的点,但我注意到参数有几个不同,所以我被卡住了。
那么...如何为从 SPI-UART 适配器提供的串行端口创建符号链接?
先感谢您。
所以......我自己找到了解决方案。
太糟糕了,解决方案不能一概而论,因为它是“了解 udev 和 rules.d 的工作原理”。
要点是使用命令了解有关设备的所有可能细节(正如我在我的问题中提到的文章中所建议的那样):
然后查找可以使用哪些参数来唯一地查找该设备的硬件描述,并在/etc/udev/rules.d中的一个文件中创建有关它的规则。
我个人使用本指南来学习我所知道的关于 udev 和 rules.d 的一切:
编写 udev 规则
总而言之,您必须使用参数来查找硬件,然后使用 NAME 或 SYMLINK 给它一个新名称或只是一个化名。
查找正确硬件的最常用关键字是:
ACTION=="<add/remove>" - “此规则适用于此设备已插入/已拔出”
KERNEL=="<value>" - "在 KERNEL 字段中查找具有 <value> 的设备"
SUBSYSTEM=="<value>" - "在 SUBSYSTEM 字段中查找具有 <value> 的设备"
DRIVER=="<value>" - "在 DRIVER 字段中查找具有 <value> 的设备"
ATTR{<attribute>}=="<value>" - "查找具有属性 <attribute> 和值 <value> 的设备"
如果您想检查与设备或其所有父设备的匹配,您还可以对除 ACTION (KERNELS, SUBSYSTEMS, DRIVERS, ATTRS) 之外的所有这些关键字使用复数。
显然,每个规则可以使用多个参数,只需将它们用逗号和空格分隔即可。
正确找到您的设备后,规则的最后一部分应该是命名/符号链接:
NAME="<value>" - "给找到的设备起这个新名称(破坏之前的设备)"
SYMLINK+="<value>" - "给找到的设备一个替代名称(保留前一个)
例如,我将使用我必须创建的规则:
用人类的话来说,他们说:
“如果 tty 设备使用 spi0.0 端口并且它被命名为 0 或 2(这意味着它是 ttySC0 或 ttySC2),它现在也称为 plSerial”
“如果 tty 设备使用 spi0.0 端口并且它被命名为 1 或 3(这意味着它是 ttySC1 或 ttySC3),它现在也称为 mdSerial”
这意味着 ttySC0/ttySC2 将始终称为 plSerial,而 ttySC1/ttySC3 将始终称为 mdSerial。
编写规则后,使用
udevadm trigger
或重新启动系统,您的规则将被应用。新设备将在/dev/<your_device_name>中找到。