2009-06-02 4 views
22

시리얼 장치와의 통신을 디버깅 중이므로 양방향으로 흐르는 모든 데이터를 볼 필요가 있습니다.Linux의 직렬 포트에있는 데이터를 어떻게 모니터합니까?

리눅스에서 직렬 포트가 파일로 표시되는 것처럼 쉬워야합니다. 거기에 일종의 "양방향 티"를 할 수있는 방법이 있습니까, 여기서 내 프로그램이 파일에 데이터를 복사하고 실제 직렬 포트 장치에서 /로 셔플하는 파이프에 연결하도록 알려줍니다.

은 내가 심지어 짐승을 작성하는 방법을 알고 있다고 생각하지만,

사람이 이미 그런 일을 구축하고 등, 특히 포트 구성을 통해 전달 된 ioctl의 모두를 얻을, 사소하지 않은 것 같다 ? 그것은 (시리얼 장치 드라이버를 디버깅하는 사람들에게) 이미 존재하지 않는 것처럼 보입니다.

+6

그래서 ... 정확히 어떻게이 일을 끝냈습니까? – detly

+1

그래도 strace를 사용하는 방법을 이해하지 못했기 때문에 나는 알고있을 것입니다. 건배! – mac

+1

이것은 주어진 답변에 어려움을 겪고있는 사람들에게 흥미로울 수 있습니다. http://unix.stackexchange.com/questions/12359/how-can-i-monitor-serial-port-traffic – geekboyUK

답변

18

strace은 매우 유용합니다. 해당 구조가 디코딩 된 모든 ioctl 호출을 시각화했습니다. 다음 옵션은 경우에 특히 유용 할 것 같습니다 :

읽어 -e는 =

가 지정된 세트에 나와 파일 설명에서 읽을 수있는 모든 데이터의 전체 16 진수 및 ASCII 덤프를 수행하여 설정합니다. 예를 들어 파일 설명자에 대해 입력 활동 전체를 보려면 3 이고 5는 -e read = 3,5를 사용합니다. 이 은 -e trace = read 옵션으로 제어되는 인 read (2) 시스템 호출의 일반 추적 과는 독립적입니다.

-e 쓰기 =

지정된 세트에 나와 설명을 파일에 기록 된 모든 데이터의 전체 16 진수 및 ASCII 덤프를 수행하여 설정합니다. 예를 들어, 파일 디스크립터 3과 5에 대한 모든 출력을 으로 보려면 -e write = 3,5를 사용하십시오. 이것은 의 trace (write) 옵션에 의해 제어되는 인 write (2) 시스템 호출의 정상 추적과는 별도로 입니다.

+0

완벽한, 고마워! 나는 이것을 할 수있는 간단한 방법이 있어야한다는 것을 알고있었습니다. 나는 항상 strace를 사용하지만, 이것을 고려하지도 않았다. – divegeek

+4

대단한데. 그러나 나는 궁금하다 : 어떻게 관련 파일 기술자 번호가 무엇인지 알아낼 수 있을까? –

3

저는 pyserial을 매우 유용하게 사용하고 있습니다. 파이썬에 들어가면 그렇게 쓰는 것이 어렵지 않을 것입니다.

2

간단한 방법은 을 열어서 테스트중인 PTT의 마스터 측과 테스트중인 응용 프로그램을 작성하는 것입니다. 그러면 은 tty 응용 프로그램을 pty의 슬레이브 측에 'tty 장치'로 전달합니다.

pty 마스터에서 pty 속성을 tcgetattr()으로 모니터링하고 속성이 변경된 경우 실제 tty에서 tcsetattr()을 호출해야합니다.

나머지는 fd가 양방향으로 데이터를 복사하고 로그에 복사하는 경우에 간단 select()입니다.

+0

'tcsetattr()'에 의한 변경 이벤트를 어떻게 감시 할 수 있습니까? 그들은'선택 '으로 듣는 것으로보고 될 것인가? – dolmen

+0

tty 드라이버 (및 os)는 입력 및 출력에 대한 select() 응답에만 계약을 맺습니다. 가장 쉬운 방법은 입/출력을 처리하기 전에 select 호출이 성공한 후 tcgetattr()을 호출하는 것입니다. – codeDr

1

많은 시리얼 스니퍼를 보았습니다. 이들 모두는 가상 직렬 포트를 만들고 해당 포트에서 데이터를 스니핑한다는 아이디어를 기반으로합니다. 그러나 어떤 보오/패리티/흐름 변경으로 인해 연결이 끊어집니다.

그래서 내 스니퍼를 썼습니다. :). 대부분의 직렬 포트는 USB- 직렬 변환기입니다. 내 스니퍼는 USB에서 디버그를 통해 데이터를 수집하고 분석하여 콘솔에 출력합니다. 또한 모든 전송 속도 변경, 흐름 제어, 회선 이벤트 및 직렬 오류도 기록됩니다. 프로젝트는 개발 초기 단계에 있으며 현재는 FTDI 만 지원됩니다.

http://code.google.com/p/uscmon/

+0

재미있는 표정입니다. 어떤 vid/pid를 사용하도록 업데이트 할 수 있다면 어디에서 변경해야할까요? – not2qubit

+0

은 메이크 파일이 있다면 좋을 것 같습니다. – nhed

+0

다른 위치는 여기에 있습니다. (https://github.com/after5cst/uscmon) 문제를 논의하는 데 도움이되지만 실제로 작업하지는 않습니다. @MBR 업데이트 된 버전이 있습니까? 또는 문서? – nhed

관련 문제