어느 수준에서 문제가 있는지 잘 모르겠습니다.
시스템은 TI의 자체 SDK/LSP/BusyBox 커널을 실행하는 LeopardBoard DM368입니다. 핵심 Linux 커널은 2.6.x이므로 serial_core.c 드라이버 모델이 사용됩니다.
기본적으로 시스템에는 활성화된 UART인 UART0이 하나 있으며, 이는 마운트 후 /dev/ttyS0
bootargs를 통해 사용/호출할 수도 있습니다 console=ttyS0,115200n8 earlyprintk
.
UART1을 활성화하려고 하므로 /dev/ttyS1
핀먹스, 클럭 등을 설정하는 하위 수준 보드 초기화 코드가 완성되었습니다.
시작 시 낮은 수준의 init는 UART1이 활성화되었음을 보고하고(추가한 printk를 통해) 드라이버 코드도 행복을 보고합니다.
[ 0.547812] serial8250.0: ttyS0 at MMIO 0x1c20000 (irq = 40) is a 16550A
[ 0.569849] serial8250.0: ttyS1 at MMIO 0x1d06000 (irq = 41) is a 16550A
그러나 포트는 /dev/
(as /dev/ttyS1
)에 나타나지 않으며 상태(흐름 제어 비트)에 차이가 있어 포트가 중단되거나 전송되지 않는 것으로 의심됩니다.
cat /proc/tty/driver/serial
serinfo:1.0 driver revision:
0: uart:16550A mmio:0x01C20000 irq:40 tx:97998 rx:0 CTS|DSR
1: uart:16550A mmio:0x01D06000 irq:41 tx:0 rx:0 DSR
명령줄에서 구성하거나 수정하려고 하면 오류가 발생합니다.
>: stty -F /dev/ttyS1
stty: can't open '/dev/ttyS1': No such file or directory
이상하게도 bootargs를 포트로 변경하면 console=ttyS1,115200n8 earlyprintk
제대로 작동하고 ttyS0도 여전히 올바르게 초기화되고 작동합니다.
cat /proc/tty/driver/serial
serinfo:1.0 driver revision:
0: uart:16550A mmio:0x01C20000 irq:40 tx:0 rx:0 CTS|DSR
1: uart:16550A mmio:0x01D06000 irq:41 tx:11563 rx:0 RTS|DTR|DSR
이제 괜찮습니다. 하지만 우리의 부트로더는 UART0을 사용해야 하므로 모든 콘솔 항목을 ttyS0에 유지하고 보조 통신에는 ttyS1을 사용하는 것이 가장 좋습니다.
serial_core.c에 몇 개의 printk를 삽입했는데 uart_open()이 ttyS1에 대해 호출되지 않는 것 같습니다. Linux init/startup 시퀀스에서 수정해야 할 부분이 있는 것 같습니다.
편집됨: 나 자신을 속이고 만들고 만들고 echo >/dev/ttyS1
또 만들었 으니까문서라는 /dev/ttyS1
문제가 다소 모호해졌습니다. 이제 99% 확신 /dev/ttyS1
합니다안 돼요만들어진.
답변1
mknod /dev/ttyS1 c 4 65
( /dev
읽기 전용인 경우 옵션 없이 설치된 쓰기 가능한 디렉토리를 사용하십시오 nodev
.)
노드가 오류 없이 생성되면 패치가 노드를 읽고 쓰는지 확인하거나 터미널 에뮬레이터를 사용할 수 있습니다.
문제는 노드가 생성되지 않는다는 것입니다.
자동 매직 을 사용하여 파일 시스템을 동적으로 개발하는 devfs
경우udev
등록하다중간에 질문이 있습니다. 하지만 대부분의 코드가 ttyS0을 호출하는 것과 동일하기 때문에 직렬 포트를 추가하는 것은 일부 플랫폼 파일의 배열에 구성 라인을 추가하는 것과 같다고 생각합니다.
이와 같이 dev fs를 사용하지 않는 경우 MAKEDEV
빌드 트리에 새 장치를 정적으로 생성하기 위해 수동으로 줄을 추가할 수 있는 파일이 있을 수 있습니다. 또한 init 스크립트에 의해 개발 노드가 생성되는 시스템도 본 적이 있습니다.