직렬 인터페이스 및 sysfs. 각 직렬 포트의 고유 식별자를 얻는 방법

직렬 인터페이스 및 sysfs. 각 직렬 포트의 고유 식별자를 얻는 방법

Linux 시스템의 직렬 포트를 열거하고 고유하고 안정적인(재부팅 시) 식별자를 얻고 싶습니다. 안정적이란 직렬 USB 장치(동일한 USB 포트)를 연결하고 꺼낼 때 동일한 식별자를 얻고 싶다는 의미입니다. 또한 시스템을 재부팅하면 동일한 직렬 포트가 동일한 식별자를 가져야 합니다. 이는 장치에 구애받지 않아야 하므로 연결하는 모든 장치에 대해 특정 udev 규칙을 설정할 필요가 없습니다. 일반적인 방식으로 작동해야 합니다.

처음에는 커널 devpath를 이런 용도로 사용할 수 있을 거라 생각했는데, 그게 쉽지 않네요(아래 참조)

사용할 수 있는 직렬 인터페이스의 devpath를 나열하려면

realpath /sys/class/tty/*/device

내 시스템에서는 이것이 생성됩니다.

/sys/devices/pnp0/00:02
/sys/devices/pnp0/00:03
/sys/devices/platform/serial8250
/sys/devices/platform/serial8250

(물론 "serial8250" 항목은사실이 아닐 수도 있다, 하지만 여기서는 그게 문제가 아닙니다)

중복된 항목이 있음을 알 수 있습니다. 이는 커널 devpath가 실제 직렬 포트에 대한 고유 식별자가 아님을 의미합니다.

그렇다면 문제는 직렬 포트에 대한 고유하고 안정적인(재부팅 시) 식별자를 얻는 방법입니다.

반면에 tty/"line" 항목을 포함하여 실제 포트 정보를 포함하는 것으로 보이는 항목 목록에서 항목을 찾습니다.

/sys/devices/pnp0/00:02/tty/ttyS0/line
/sys/devices/pnp0/00:03/tty/ttyS1/line
/sys/devices/platform/serial8250/tty/ttyS2/line
/sys/devices/platform/serial8250/tty/ttyS3/line

숫자가 포함되어 있습니다. (이 경우 0...4)

이것의 의미는 무엇입니까 /<devpath>/tty/<id>/line? 아무 숫자나? 문제는 USB 직렬 포트에 "라인" 항목이 없다는 것입니다.

또한 아래 항목은 /<devpath>/tty/서로 종속적인 것으로 보이므로 일부 전역 숫자가 관련됩니다. 그래서 여러 개의 직렬 USB 장치를 연결하면 어떻게 될지 잘 모르겠습니다. 삽입된 순서에 따라 다른 이름을 받게 됩니까 , 아니면 모두 <devpath1>/tty/ttyUSB0하나의 이름을 갖습니까 ? 전자의 경우에는 번호가 삽입된 순서에 따라 번호가 달라지므로(또는 재부팅 시 무작위로 지정되므로) 좋지 않습니다.<devpath2>/tty/ttyUSB1<devpath>/tty/ttyUSB0

관련 정보