어떤 직렬 포트가 사용 중인지 어떻게 알 수 있나요?

어떤 직렬 포트가 사용 중인지 어떻게 알 수 있나요?

질문:

/dev/직렬 포트(RS-232라고도 함)를 통해 연결된 장치(예: GSM 모뎀)가 있고 통신할 수 있으려면 장치가 바인딩된 파일 시스템의 파일을 확인해야 합니다 . 아쉽게도 새로 생성된 파일이 없어 출력 결과에 아무 것도 /dev/표시되지 않습니다 . dmesg그래서 어려운 질문인 것 같습니다.

배경:

저는 직렬 장치를 사용해 본 적이 없어서 어제 필요할 때 인터넷 검색을 시도했지만 유용한 것을 찾을 수 없었습니다. 나는 몇 시간 동안 검색을 했고 누군가에게 도움이 될 수 있을 것 같아 내가 찾은 답변을 공유하고 싶었습니다.

답변1

불행히도 직렬 포트는 PlugNPlay가 아니므로 커널은 어떤 장치가 연결되어 있는지 알 수 없습니다. 독서어떻게튜토리얼 이미 실행 가능한 아이디어가 있습니다.

UNIX와 유사한 운영 체제의 디렉토리에는 /dev/다음과 같은 파일이 포함됩니다.티스 (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

위는 내 컴퓨터의 샘플 출력입니다. 여러 직렬 포트의 초기화를 볼 수 있습니다.

ttyS0, ttyS1, ttyS4, ttyS5.

그 중 하나는양의 전압이 있을 것입니다./proc/tty/driver/serial그래서 장치가 연결되어 있을 때와 연결되지 않았을 때의 파일 내용을 비교함으로써 우리는 쉽게 찾을 수 있습니다.단말기우리 장비와 관련이 있습니다. 이제 다음을 수행하십시오.

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

(플러그를 뽑습니다) 장치를 연결합니다

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

다음으로 두 파일의 차이점을 확인하십시오. 내 컴퓨터의 출력은 다음과 같습니다.

$ 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

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

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

이로써 우리 장치의 /dev/ttyS0임무가 완수되었습니다!

답변2

setserial또한 이를 사용하여 직렬 포트 정보를 가져오고 설정할 수도 있습니다 dmesg.

Ubuntu 18.04에서 테스트되었습니다.

setserial

# install it
sudo apt update
sudo apt install setserial

# Display (and sort) serial information for all /dev/ttyS* devices
setserial -g /dev/ttyS* | sort -V
# Display (and sort) serial information for all /dev/ttyUSB* devices
setserial -g /dev/ttyUSB* | sort -V

# To see extra info. such as the baud rate too, add `-G`:
setserial -g -G /dev/ttyS* | sort -V
setserial -g -G /dev/ttyUSB* | sort -V

실행 및 출력 예시. 이는 /dev/ttyS4"알 수 없음"(의미가 무엇이든)이 아닌 활성 상태로 나타나는 유일한 포트입니다. (이 /dev/ttyS4장치는 Arduino IDE에도 나타나지만 Arduino가 아니고 그것이 무엇인지는 모릅니다.):

$ setserial -g -G /dev/ttyS* | sort -V
/dev/ttyS0 uart unknown port 0x03f8 irq 4 baud_base 115200 spd_normal skip_test
/dev/ttyS1 uart unknown port 0x02f8 irq 3 baud_base 115200 spd_normal skip_test
/dev/ttyS2 uart unknown port 0x03e8 irq 4 baud_base 115200 spd_normal skip_test
/dev/ttyS3 uart unknown port 0x02e8 irq 3 baud_base 115200 spd_normal
/dev/ttyS4 uart 16550A port 0x3060 irq 19 baud_base 115200 spd_normal skip_test
/dev/ttyS5 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS6 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS7 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS8 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS9 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS10 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS11 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS12 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS13 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS14 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS15 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS16 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS17 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS18 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS19 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS20 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS21 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS22 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS23 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS24 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS25 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS26 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS27 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS28 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS29 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS30 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal
/dev/ttyS31 uart unknown port 0x0000 irq 0 baud_base 0 spd_normal

dmesg

다음을 사용하여 dmesg이 정보 중 일부를 볼 수도 있습니다 .

# Show UART information, incl. baudrate, for /dev/ttyS* devices.
dmesg | grep ttyS

# Show UART information, incl. baudrate, for /dev/ttyUSB* devices.
dmesg | grep ttyUSB

실행 및 출력 예시:

$ dmesg | grep ttyS
[    1.624447] 0000:00:16.3: ttyS4 at I/O 0x3060 (irq = 19, base_baud = 115200) is a 16550A

심지어 더 좋은 건,dmesg커널 링 버퍼 출력 관찰살다옵션 포함 -w:

dmesg -wH

이제 식별하려는 USB 장치를 분리했다가 다시 연결하여 출력에 표시된 메시지를 기반으로 어떤 장치인지 확인하십시오 dmesg.살다.

관련 정보