Tengo una placa basada en la CPU Vortex86DX, que es un microcontrolador basado en x86. Tiene cinco UARTS 16550A, cuatro (COM1-COM4) de los cuales están en las direcciones de puerto io habituales (0x3f8, 0x2f8, 0x3e8, 0x2e8), pero el quinto (COM9) está en 0x010, irq 9.
Se detectan los primeros cuatro UARTS, no tengo ningún problema con ellos. El problema es que no consigo que el quinto (COM9) funcione en Linux. COM9 funciona en una aplicación DOS independiente, pero ni siquiera puedo detectarlo desde Linux.
Lo que he hecho hasta ahora:
Agregué mi UART adicional a/drivers/tty/serial/8250/
habilitado DEBUG_AUTOCONF en/drivers/tty/serial/8250/8250.cpara poder ver cuándo y qué direcciones están siendo investigadas.
editado/arch/x86/kernel/setup.cporque el puerto io 0x010 se superpuso a una región existente reservada para dma1
Resultado: el kernel no pudo sondear el UART en la dirección 0x010
Así que escribí una utilidad de sondeo de puertos io para leer directamente desde el puerto io 0x010 y no pude detectar ningún registro 16550A en la región 0x010 a 0x017. Parece que no hay nada allí. He estado intentando escribir y leer datos del registro temporal (desplazamiento +7), pero no obtengo nada en la dirección 0x017.
La hoja de datos de la CPU no dice mucho. Indica que hay un bit de control en un registro de Southbridge que hace "algo" para COM9. Escribí una utilidad PCI que escribió en este bit, pero no pareció habilitar el puerto COM ni cambiar nada cuando probé el puerto io.
¡Cualquier ayuda sería apreciada en este momento!
Respuesta1
No veo por qué se ha tomado la molestia de cambiar el código fuente del kernel para agregar soporte para este puerto de E/S serie no estándar e IRQ. El setserial(8)
programa debería poder configurarlo por usted. Algo como esto:
# setserial ttyS4 address 0x10 irq 9
Verel COMO serial de Linuxpara más detalles.
Respuesta2
Parece que el BIOS o Linux desactivan el puerto COM9 en los registros de Southbridge.
Registros:
- El "Registro de control interno UART9" se debe restablecer a su valor predeterminado de: 0x00810010
- El "Registro de control de dispositivo en chip" debe tener el bit 9 borrado para volver a habilitar COM9.
No sé por qué ni dónde están deshabilitados.
Cuando los configuré a valores razonables en el controlador de mi dispositivo, pude detectar el UART COM9.
Linux requiere un nuevo tipo de chip x86 para el Vortex86DX. No es 100% compatible.