비정상적인 io 포트 주소에서 16550A UART를 초기화/감지할 수 없습니다

비정상적인 io 포트 주소에서 16550A UART를 초기화/감지할 수 없습니다

저는 x86 기반 마이크로컨트롤러인 Vortex86DX CPU 기반 보드를 가지고 있습니다. 5개의 16550A UARTS가 있으며 그 중 4개(COM1-COM4)는 일반적인 io 포트 주소(0x3f8, 0x2f8, 0x3e8, 0x2e8)에 있지만 다섯 번째(COM9)는 0x010, irq 9에 있습니다.

볼텍스86DX

처음 4개의 UART가 감지되었으나 아무런 문제가 없습니다. 문제는 다섯 번째 COM9(COM9)를 Linux에서 작동시킬 수 없다는 것입니다. COM9는 독립형 DOS 응용 프로그램에서 작동하지만 Linux에서는 이를 감지할 수도 없습니다.

지금까지 내가 한 일:

결과: 커널이 주소 0x010에서 UART를 검색하지 못했습니다.

그래서 io 포트 0x010에서 직접 읽기 위한 io 포트 검색 유틸리티를 작성했는데 0x010~0x017 영역에서 16550A 레지스터를 감지할 수 없었습니다. 거기에는 아무것도 없는 것 같습니다. 스크래치 레지스터(오프셋 +7)에서 데이터를 쓰고 다시 읽으려고 시도했지만 주소 0x017에서는 아무 것도 얻지 못했습니다.

CPU 데이터시트에는 많은 내용이 나와 있지 않습니다. 이는 COM9에 대해 "무언가"를 수행하는 Southbridge 레지스터에 제어 비트가 있음을 나타냅니다. 이 비트에 쓰는 PCI 유틸리티를 작성했지만 io 포트 검색을 수행할 때 COM 포트를 활성화하거나 아무것도 변경하지 않는 것 같습니다.

이 시점에서 어떤 도움이라도 주시면 감사하겠습니다!

답변1

이 비표준 직렬 I/O 포트 및 IRQ에 대한 지원을 추가하기 위해 커널 소스 코드를 변경하는 데 왜 모든 어려움을 겪었는지 모르겠습니다. 프로그램 setserial(8)이 이를 구성할 수 있어야 합니다. 이 같은:

# setserial ttyS4 address 0x10 irq 9

보다리눅스 시리얼 HOWTO상세 사항은.

답변2

BIOS나 Linux가 Southbridge 레지스터의 COM9 포트를 비활성화한 것으로 보입니다.

레지스터:

  • "내부 UART9 제어 레지스터"는 기본값인 0x00810010으로 재설정되어야 합니다.
  • COM9를 다시 활성화하려면 "온칩 장치 제어 레지스터"의 비트 9를 지워야 합니다.

왜 또는 어디서 이것이 비활성화되었는지 모르겠습니다.

내 장치 드라이버에서 올바른 값으로 설정했을 때 COM9 UART를 감지할 수 있었습니다.

Linux에는 Vortex86DX를 위한 새로운 x86 칩 유형이 필요합니다. 100% 호환되지는 않습니다.

관련 정보