Linux/Raspberry Pi OS에서 SPI-UART 어댑터에 대한 tty 장치 할당을 수정했습니다.

Linux/Raspberry Pi OS에서 SPI-UART 어댑터에 대한 tty 장치 할당을 수정했습니다.

SC16IS752 어댑터에서 얻은 직렬 포트를 사용해야 합니다. /boot/config.txt에서 설정했으며 /dev에 ttySC0, ttySC1, ttySC2 및 ttySC3으로 표시되고 작동합니다.

문제는 Raspberry를 부팅할 때마다 포트 이름 지정에 일관성이 부족하다는 것입니다. 때로는 장치가 ttySC0에 연결되고 때로는 ttySC2에 연결됩니다.

도움을 구하려고 노력했지만 USB-UART 어댑터에만 작동하는 솔루션을 찾았습니다. 각 물리적 장치에 대한 심볼릭 링크를 생성하는 것입니다. 내가 따르려고 한 해결책은 다음과 같습니다.

정적 이름으로 USB 장치를 바인딩하는 방법은 무엇입니까?

동일한 점을 적용해 보았지만 매개 변수에 약간의 차이가 있어서 멈췄습니다.

그렇다면 SPI-UART 어댑터가 제공하는 직렬 포트에 대한 심볼릭 링크를 어떻게 생성합니까?

미리 감사드립니다.

답변1

그래서... 제가 직접 해결책을 찾았습니다.

불행하게도 이 솔루션은 "udev 및 rule.d 작동 방식 이해"이므로 일반화할 수 없습니다.

요점은 다음 명령을 사용하여 장치에 대해 가능한 모든 세부 정보를 아는 것입니다(질문에서 언급한 기사에서 제안한 대로).

udevadm info -a -p  $(udevadm info -q path -n /dev/ttySC0)

그런 다음 해당 장치에 대한 하드웨어 설명을 고유하게 찾는 데 사용할 수 있는 매개변수를 찾고 다음 파일 중 하나에서 이에 대한 규칙을 생성합니다./etc/udev/rules.d.

저는 개인적으로 이 가이드를 사용하여 udev 및 Rules.d에 대해 제가 아는 모든 것을 배웠습니다.

udev 규칙 작성

요약하면 매개변수를 사용하여 하드웨어를 찾은 다음 NAME 또는 SYMLINK를 사용하여 새 이름이나 가명을 지정해야 합니다.

올바른 하드웨어를 찾는 가장 일반적인 키워드는 다음과 같습니다.

ACTION=="<추가/제거>"- "장치가 연결/분리되면 이 규칙이 적용됩니다."

커널 == "<값>"- "커널 필드에서 <값>이 있는 장치 찾기"

하위 시스템 == "<값>"- "하위 시스템 필드에서 <값>이 있는 장치 찾기"

드라이버=="<값>"- "드라이버 필드에서 <값>이 있는 장치 찾기"

ATTR{<속성>}=="<값>"- "속성이 <속성>이고 값이 <값>인 장치 찾기"

장치 또는 모든 상위 장치에서 일치하는 항목을 확인하려는 경우 ACTION(KERNELS, SUBSYSTEMS, DRIVERS, ATTRS)을 제외한 모든 키워드에 대해 복수형을 사용할 수도 있습니다.

분명히 규칙당 여러 매개변수를 사용할 수 있으며 쉼표와 공백으로 구분하면 됩니다.

장치가 올바르게 발견되면 규칙의 마지막 부분은 명명된/기호 링크가 되어야 합니다.

이름="<값>"- "발견된 장치에 새 이름을 지정합니다(이전 이름은 삭제합니다)"

SYMLINK+="<값>"- "발견된 장치의 대체 이름을 지정하십시오(이전 이름 ​​유지).

예를 들어 내가 만들어야 했던 규칙을 사용하겠습니다.

KERNELS=="spi0.0", SUBSYSTEM=="tty", ATTR{line}=="0", DRIVERS=="sc16is7xx", ACTION=="add", SYMLINK+="plSerial"
KERNELS=="spi0.0", SUBSYSTEM=="tty", ATTR{line}=="2", DRIVERS=="sc16is7xx", ACTION=="add", SYMLINK+="plSerial"
KERNELS=="spi0.0", SUBSYSTEM=="tty", ATTR{line}=="1", DRIVERS=="sc16is7xx", ACTION=="add", SYMLINK+="mdSerial"
KERNELS=="spi0.0", SUBSYSTEM=="tty", ATTR{line}=="3", DRIVERS=="sc16is7xx", ACTION=="add", SYMLINK+="mdSerial"

그들은 인간의 관점에서 이렇게 말합니다.

"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/<기기 이름>.

관련 정보