직렬 포트에 일부 바이트를 쓰는 응용 프로그램이 있습니다. cat /dev/ttyS0
전송되는 내용을 살펴보니 데이터가 명령에 의해 손상되었다는 것을 알았 습니다 cat
. 직렬 포트에서 전송되는 내용을 확인할 수 있는 다른 방법이 있습니까?
cat
데이터가 왜 변경되는지 아는 사람이 있나요 ?
편집하다: 반대편에 다른 애플리케이션이 있고 데이터를 가로채서 내용을 검사하고 싶지만 애플리케이션이 계속 작동해야 합니다.
답변1
터미널(또는 cat이 표시하는 곳)에서 데이터가 손상되지 않았습니까? cat
데이터가 손상될 가능성이 적습니다.
(octaldump)를 사용하여 직렬 포트에서 데이터를 덤프하면 od
(인쇄 가능 여부에 의존하지 않고) 발생한 내용을 정확하게 확인할 수 있습니다. od -c
ASCII 데이터가 필요한 경우 사용합니다.
여전히 손상이 나타나면 직렬 포트가 잘못 구성되었을 수 있습니까? 더 잘 구성할 수 있는지 setserial
확인해 보세요 .stty
답변2
cat
데이터는 수정되지 않습니다. 널 바이트가 포함된 줄을 자르는 오래된 Unix 시스템이 있을 수 있지만 Linux는 그렇지 않으며 현대 Unix와 유사한 시스템은 없다고 생각합니다.
반면에 바이너리 데이터를 터미널에 직접 표시하려고 하면 터미널은 제어 문자를 디스플레이를 제어하는 명령으로 해석합니다. 이것이 바로 제어 문자의 목적입니다. 원시 데이터의 인쇄 가능한 표현을 보려면 다음과 같은 몇 가지 솔루션이 있습니다.
- Run
cat -A
은 읽을 수 있지만 제어 문자의 모호한 표현을 인쇄합니다(예:^A
바이트 0x01 또는 2바이트 시퀀스 0x5e 0x41). - 를 실행
hexdump -C
하거나od -t x1
다른 16진수 덤프 프로그램(또는 원하는 경우 8진수 덤프)을 실행하세요. - 실행
less /dev/ttyS0
하고 누르면F
일부 데이터를 읽고Ctrl+C
찾아볼 수 있습니다. Less 내에서 입력하면-r
제어 문자의 원래 표시와 인쇄 가능한 표시 간에 전환됩니다.
읽기에는 /dev/ttyS0
직렬 포트를 통해 전송된 내용이 아니라 직렬 포트에서 수신된 내용이 표시됩니다. 이를 수행하려면 예를 들어 strace
디버거를 사용하여 작성 중인 애플리케이션을 모니터링하십시오.
답변3
손상되지 않았습니다. 무슨 일이 일어나고 있는지는 cat
명령이 일부 바이트를 가져오고 응용 프로그램이 해당 바이트 중 일부를 가져오는 것입니다. 따라서 를 실행할 때 cat
애플리케이션은 읽은 바이트를 모두 놓치고 cat
애플리케이션과 애플리케이션 모두 스트림의 (다른) 부분이 손상된 것으로 나타납니다.