질문:
/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
.살다.