저는 x86 기반 마이크로컨트롤러인 Vortex86DX CPU 기반 보드를 가지고 있습니다. 5개의 16550A UART가 있고 그 중 4개(COM1-COM4)는 공통 io 포트 주소(0x3f8, 0x2f8, 0x3e8, 0x2e8)에 있지만 다섯 번째(COM9)는 0x010, irq 9에 있습니다.
처음 4개의 UART가 감지되었으며 아무런 문제가 없습니다. 문제는 다섯 번째 COM9(COM9)를 Linux에서 작동시킬 수 없다는 것입니다. COM9는 독립형 DOS 응용 프로그램에서 작동하지만 Linux에서는 이를 감지할 수도 없습니다.
지금까지 내가 한 일:
추가 UART를 다음에 추가하세요./드라이버/tty/직렬/8250/
DEBUG_AUTOCONF 활성화/drivers/tty/serial/8250/8250.c이렇게 하면 언제 어떤 주소가 탐색되는지 확인할 수 있습니다.
편집됨/arch/x86/kernel/setup.cio 포트 0x010이 dma1용으로 예약된 기존 영역과 겹치기 때문입니다.
결과: 커널은 주소 0x010에서 UART를 검색할 수 없습니다.
그래서 io 포트 0x010에서 직접 데이터를 읽는 io 포트 프로빙 유틸리티를 작성했지만 0x010~0x017 영역에서 16550A 레지스터를 감지할 수 없었습니다. 거기에는 아무것도 없는 것 같았습니다. 스크래치패드(오프셋 +7)에서 데이터를 쓰고 다시 읽으려고 했지만 주소 0x017에서는 아무것도 얻지 못했습니다.
CPU의 데이터시트에는 많은 내용이 나와 있지 않습니다. 이는 COM9에 대해 "무언가"를 수행하는 사우스브리지 레지스터에 제어 비트가 있음을 나타냅니다. 이 비트를 작성하기 위해 PCI 유틸리티를 작성했지만 io 포트 검색을 수행할 때 COM 포트를 활성화하거나 아무것도 변경하지 않는 것 같습니다.
이 시점에서 도움을 주시면 대단히 감사하겠습니다!
답변1
왜 비표준 직렬 I/O 포트와 IRQ에 대한 지원을 추가하기 위해 커널 소스 코드를 변경하는 수고를 했는지 이해할 수 없습니다. 프로그램 setserial(8)
이 이를 구성할 수 있어야 합니다. 이 같은:
# setserial ttyS4 address 0x10 irq 9
바라보다리눅스 시리즈 하우투자세한 내용은.
답변2
BIOS 또는 Linux가 Southbridge 레지스터의 COM9 포트를 비활성화한 것 같습니다.
등록하다:
- "내부 UART9 제어 레지스터"를 기본값: 0x00810010으로 재설정해야 합니다.
- COM9를 다시 활성화하려면 온칩 장치 제어 레지스터의 비트 9를 지워야 합니다.
왜 또는 어디서 이것이 비활성화되었는지 모르겠습니다.
장치 드라이버에서 COM9 UART를 일반 값으로 설정하면 감지할 수 있습니다.
Linux에는 Vortex86DX를 위한 새로운 x86 칩 유형이 필요합니다. 100% 호환되는 것은 아닙니다.