직렬 포트 정보 폴링

직렬 포트 정보 폴링

우선 이런 질문을 하는 제가 바보 같다는 점을 말씀드리고 싶습니다. 이 정보는 온라인에 있어야 하는데 어디서도 찾을 수 없는 것 같습니다. 나는 열심히 보이는 것 같지만 아무것도 내가 원하는 것을 얻지 못하는 것 같습니다.

상황은 이렇습니다. 두 개의 Linux 미니 보드가 있습니다. 제조업체와 모든 것이 정확히 동일합니다. 보드에는 12개의 직렬 포트가 있습니다. 문제는 한 보드에서는 모든 직렬 포트가 제대로 작동하지만 다른 보드에서는 모두 엉망이라는 것입니다. 대부분은 /dev 디렉토리에 없어서 찾을 수 없습니다.

그래서 저는 워크보드에 있는 포트의 IO 주소(그리고 변경되지 않았다고 가정하면 IRQ도 있을 것입니다)를 찾은 다음 해당 정보를 얻고 /dev에 새 항목을 생성하여 문제를 해결할 수 있다고 생각했습니다. 제조업체는 보드의 핀이 매핑되는 주소를 변경하지 않습니다. 합리적인 것 같죠? 내가 예상하지 못한 것은 실제로 작동하는 시스템에서 이 정보를 얻는 데 문제가 있다는 것입니다.

그래서 실제 질문은 이것이다:/dev에 12개의 항목이 있고 모두 직렬 포트에 매핑되어 있으며 모두 작동하지만 해당 항목에서 정보를 얻는 도구는 작동하지 않습니다. 내가 시도한 것은 다음과 같습니다.


필터 dmesg:

root@linaro-ubuntu:/dev# dmesg | grep tty
Kernel command line: console=ttymxc0,115200 root=/dev/mmcblk0p1 rootwait video=mxcfb0:dev=hdmi,1920x1080M@60,if=RGB24 video=mxcfb1:off video=mxcfb2:off fbmem=28M vmalloc=400M
bootconsole [ttymxc0] enabled
imx-uart.0: ttymxc0 at MMIO 0x2020000 (irq = 58) is a IMX
console [ttymxc0] enabled, bootconsole disabled
imx-uart.1: ttymxc1 at MMIO 0x21e8000 (irq = 59) is a IMX
imx-uart.2: ttymxc2 at MMIO 0x21ec000 (irq = 60) is a IMX
imx-uart.3: ttymxc3 at MMIO 0x21f0000 (irq = 61) is a IMX
imx-uart.4: ttymxc4 at MMIO 0x21f4000 (irq = 62) is a IMX
init: tty1 main process (5754) killed by TERM signal

알겠습니다. 좋은 정보인 것 같습니다. ttymxc0이 터미널이라는 것을 알고 있습니다. 나머지는 직렬 포트를 사용하고 있습니다. IO 주소는 괜찮아 보이고 IRQ는 /proc/interrupts의 어떤 것과도 충돌하지 않습니다. 그런데 잠깐만요, 다른 직렬 포트는 어디에 있나요? 그들도 여기에 있어야 하지 않나요? 다른 곳에서 찾을 수 있는 한 그다지 신경쓰이지는 않습니다.


set직렬 명령:

다음 논리적 단계는 seterial을 엉망으로 만드는 것입니다.

root@linaro-ubuntu:/dev# setserial -g /dev/ttymxc1
/dev/ttymxc1, UART: undefined, Port: 0x0000, IRQ: 59
root@linaro-ubuntu:/dev# setserial -g /dev/ttymxc2
/dev/ttymxc2, UART: undefined, Port: 0x0000, IRQ: 60
root@linaro-ubuntu:/dev# setserial -g /dev/ttymxc3
/dev/ttymxc3, UART: undefined, Port: 0x0000, IRQ: 61
root@linaro-ubuntu:/dev# setserial -g /dev/ttymxc4
/dev/ttymxc4, UART: undefined, Port: 0x0000, IRQ: 62

역겹다, 이건 싫다. 내 말은, setserial이 하드웨어와 통신하지 않고 드라이버 정보만 읽는다는 것을 알고 있기 때문에 의미가 있지만 적어도 dmesg를 구문 분석할 때 표시되는 정보가 올바르게 표시되기를 바랍니다. 단지 우연일지라도 적어도 IRQ는 정확합니다. 하지만 다른 직렬 포트에서 이것을 시도하면 다음과 같습니다.

root@linaro-ubuntu:/dev# setserial -g /dev/ttyHBA1
/dev/ttyHBA1, UART: undefined, Port: 0x0000, IRQ: 0
root@linaro-ubuntu:/dev# setserial -g /dev/ttyHBA2
/dev/ttyHBA2, UART: undefined, Port: 0x0000, IRQ: 0

그것은 전반적으로 많은 것입니다. 주소가 없고 IRQ가 0으로 설정되어 있습니다(이것이 시스템이 전혀 모르는 장치의 기본값인지 아니면 실제로 IRQ 0으로 설정되어 있는지 확실하지 않습니다. 그렇다면 안 됩니다. 바꿔야 해.)

그래서 seterial은 나에게 아무것도 주지 않습니다. seterial이 하드웨어와 직접 통신하는 방법이 있다고 들었지만 온라인에서는 이에 대한 문서를 찾을 수 없습니다. 매뉴얼 페이지도 나에게 별로 도움이 되지 않았다. 여기 누구든지 나를 도와줄 수 있나요?


이제 나는 조금 압도당했습니다. stty가 내가 원하는 정보를 제공하지 않는 것 같아요.

/proc/tty/driver/serial및 와 같은 파일에서 읽는 방법을 찾았습니다 /proc/ioports. 첫 번째 파일이 내 시스템에 없고 두 번째 파일이 비어 있습니다. 온라인에서 다른 파일 제안을 찾았지만 다시는 아무것도 작동하지 않았습니다.

우분투의 "스캔포트"에 대한 언급도 봤어요? 하지만 저장소나 Google에서는 찾을 수 없습니다.

아아아. 어떻게 되어가나요? 사용 가능한 직렬 포트가 있고 이에 대한 정보를 얻고 싶습니다. 이게 리눅스인데 일반적으로 그런 시스템 정보는 옆으로, 뒤로, 거꾸로 찾아볼 수 있다. 왜 이런 문제가 발생합니까?

관련 정보