사용중인 직렬 포트를 찾는 방법은 무엇입니까?


33

질문:

직렬 포트 (일명 RS-232)를 통해 장치 (예 : GSM 모뎀)를 /dev/연결했으며이 장치와 연결된 파일 시스템의 파일과 통신 할 수 있는 파일을 확인해야 합니다. 불행히도 새로 작성된 파일이 /dev/없으며 dmesg출력 에서 아무것도 볼 수 없습니다 . 그래서 이것은 어려운 질문 인 것 같습니다.

배경:

나는 직렬 장치를 사용한 적이 없었으므로 어제 필요가있을 때 Google에 시도했지만 도움이되는 것을 찾을 수 없었습니다. 나는 찾기에 몇 시간을 보냈고, 누군가에게 도움이 될 수있는 답을 찾고 싶다.


1
나는 그 비트를 사용하여 장치를 감지하는 것을 좋아합니다. Tx / Rx 핀 만 사용하는 많은 장치가 있지만 CTS 라인을 높게 유지하기 위해 해킹 할 수 있습니다.
Danny Staple

답변:


34

불행히도 직렬 포트는 PlugNPlay가 아니므로 커널은 어떤 장치가 연결되어 있는지 알지 못합니다. HowTo 튜토리얼을 읽은 후 작업 아이디어를 얻었습니다.

/dev/OSes와 같은 유닉스 의 디렉토리에는 ttySn 이라는 이름의 파일이 있습니다 (n은 숫자 임) . 대부분 기존 장치와 일치하지 않습니다. 어떤 작업을 수행하려면 다음 명령을 실행하십시오.

$ dmesg | grep ttyS
[    0.872181] 00:06: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[    0.892626] 00:07: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A
[    0.915797] 0000:01:01.0: ttyS4 at I/O 0x9800 (irq = 19) is a ST16650V2
[    0.936942] 0000:01:01.1: ttyS5 at I/O 0x9c00 (irq = 18) is a ST16650V2

위는 내 PC의 출력 예입니다. 몇 개의 직렬 포트가 초기화 된 것을 볼 수 있습니다.

ttyS0, ttyS1, ttyS4, ttyS5.

그중 하나는 장치가 연결되면 양의 전압을 갖 습니다. 따라서 파일의 내용을 /proc/tty/driver/serial장치가 연결되거나 연결되지 않은 상태 로 비교 하면 장치 와 관련된 ttyS를 쉽게 찾을 수 있습니다 . 이제 다음을 수행하십시오.

$ sudo cat /proc/tty/driver/serial> /tmp/1

(연결 해제) 장치 연결

$ sudo cat /proc/tty/driver/serial> /tmp/2

다음으로 두 파일의 차이점을 확인하십시오. 아래는 내 PC의 출력입니다.

$ diff /tmp/1 /tmp/2
2c2
< 0: uart:16550A port:000003F8 irq:4 tx:6 rx:0
---
> 0: uart:16550A port:000003F8 irq:4 tx:6 rx:0 CTS|DSR

3 개의 숫자를 dmesg 출력과 비교하여 어느 것이 포트인지 확인할 수 있습니다.

[    0.872181] 00:06: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A

따라서 우리의 장치는 /dev/ttyS0임무 완수입니다!


1
dmesg 출력에 장치가 없으면 어떻게합니까?
user3019105

2
@ user3019105 죄송합니다. 그런 문제에 직면 한 적이 없습니다. 내가 이해 한 dmesg것으로 부터, 직렬 장치에 irq 를 할당하는 것에 관한 메시지가 있어야한다 . 그렇지 않은 경우 하드웨어 문제가 있다고 가정합니다. 그것은 가정에 불과하고 잘못되었을 수도 있지만 그러한 문제를 디버깅하면 직렬 포트가 초기화되어야한다는 생각을 가지고 연구를 시작합니다.
Hi-Angel

1
기계에서 기계로 옮기기 때문에이 기계의 직렬 포트를 표시하기 위해 별명을 정의했습니다. systemd를 사용하는 Ubuntu 제품군 시스템에서 작동합니다. alias ports = 'udevadm info --export-db | grep -i "^ n : ttyu"'
DDay
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.