Linux integrado comprueba si la consola serie está funcionando
1. ¿Cuál es la relación jerárquica entre TTY, CONSOLA y puerto serie en LINUX? ¿Cuál es la interfaz de función específica? ¿Cómo se llama el puerto serie?
2. La función printk envía información a la consola, ¿verdad? ¿Cómo dejar que PRINTK envíe información a través del puerto serie? ¿O dónde decide el sistema si envía información al display o al puerto serie?
3. La función printk (parece ser printk (linux_banner o algo así)) se usa en start_kernel. En este momento, todo el kernel no ha comenzado a ejecutarse. Entonces, ¿cómo se llama a printk? ¿Esta vez en nuestro sistema, el inicio del sistema utiliza el programa BOOTLOADER de Hyundai Company? Más tarde, parece saltar a head-armv.s en LINUX y luego saltar a start_kernel. El puerto serie ya está disponible en el gestor de arranque. después de ingresar al kernel, ¿necesito restablecerlo?
La pregunta anterior puede resultar confusa, porque mi mente también está confusa, principalmente acerca de la relación entre tty, consola y serie, especialmente cómo es el puerto serie. llamado. No entiendo este aspecto y hay relativamente poca información (hablé de ello un poco en el análisis del escenario. Espero que los expertos puedan darme algún consejo.
También he estado trabajando en este aspecto recientemente y también estoy escribiendo sobre ello. He estado trabajando en un controlador para un dispositivo de puerto serie durante casi un mes. Busqué información en Internet y miré el código fuente. e hice todo lo demás.
Pero todavía estoy confundido y algunos problemas aún no están claros, lo entiendo y espero discutirlo juntos
En /proc/device (lo recuerdo. correctamente debería ser este archivo)
Hay un controlador llamado serial, y su número de dispositivo principal es 4, y su número secundario es 4. El número de dispositivo es 64-12X (recuerdo correctamente que debería ser en este rango)
Como todos sabemos, el número de dispositivo menor del puerto serie comienza en 64, y el puerto serie 1 /dev/ttyS0 corresponde al número de dispositivo menor 64. El puerto serie 2 corresponde a 65.
El problema es que solo hay dos puertos serie en mi máquina. ¿Qué hace al registrar el número de dispositivo tantas veces?
Para un dispositivo conectado al puerto serie. 1, ¿cuál es su propósito? Al registrar el controlador, ¿debo buscar yo mismo un número de dispositivo principal? ¿O debería simplemente usar el número de dispositivo principal 4 y elegir? ¿El número de dispositivo menor después de 12X?
¿O simplemente usar el número de dispositivo principal 4 y el número de dispositivo menor 64?
Creo que hay una capa tty en el kernel de Linux. los controladores de puerto comienzan desde aquí
Por ejemplo, llamar a tty_register_driver() para registrar el controlador
Al igual que llamar a pci_register_driver() en el subsistema pci
Luego, usar este mecanismo para registrar el controlador,
p>¿Es una operación directa en el puerto serie (por ejemplo, usando inb(), outb()... etc.)
¿O es alguna interfaz de controlador de nivel inferior? /p>
Estos problemas me han estado molestando durante mucho tiempo sin resolverlos, y finalmente tuve que rendirme
Ahora recurro al usuario. aplicaciones espaciales para ver si hay formas más eficientes de implementarlas
(Esto solo se puede lograr con open("/dev/ttyS0", O_RDWR) en el espacio de usuario)
Además, el sistema ya ha implementado el controlador del puerto serie para nosotros
Así que podemos abrir directamente ("/dev/ttyS0") en el programa de espacio de usuario
Pero lo que necesitamos Para escribir ahora, ¿es el controlador para el dispositivo conectado al puerto serie?
¿Es posible incluir un archivo de encabezado en el módulo del kernel y luego usar directamente la interfaz en el controlador del puerto serie?
Después de ver tu pregunta, sentí que era muy típica, así que dediqué un tiempo a mirarla y publiqué algunas de mis ideas aquí. Las discusiones y correcciones son bienvenidas:
1. ¿Cuál es la relación jerárquica entre TTY, CONSOLA y puerto serie en LINUX? ¿Cuál es la interfaz de función específica? ¿Cómo se llama el puerto serie?
Los conceptos de tty y consola son principalmente conceptos de dispositivos virtuales, mientras que el puerto serie se refiere más a un controlador de dispositivo real. Tty es en realidad una abstracción de un tipo de dispositivo de E/S de terminal. more es un concepto de administración que se combina con tty_ldisc (disciplina de línea) y tty_driver (controlador de dispositivo real) para proporcionar una interfaz unificada para el VFS superior que se puede configurar a través de tty_ioctl en la estructura file_operatives.
Verifique tty_driver, obtendrá n resultados, todos los cuales son en realidad controladores de chips relacionados. Por lo tanto, la conclusión que se puede sacar es (la situación real es mucho más complicada que esta): cada tty_struct que describe un dispositivo tty debe colgarse durante. inicialización Puede haber muchos controladores de dispositivos de caracteres para chips específicos (no necesariamente controladores de dispositivos de caracteres), incluidas tarjetas gráficas o chips de puerto serie. No sé qué ARM Soc tiene, pero dependiendo de la situación, debe usar chips comunes. Estos controladores son en realidad la consola es un concepto de búfer y su propósito es similar al de tty. De hecho, la consola no solo está conectada a tty, sino también al framebuffer. Por motivos específicos, consulte el proceso de procesamiento de interrupciones del teclado de Tty. Los subconjuntos necesitan usar la consola (normalmente, el número de dispositivo principal es 4, el número de dispositivo menor es 1-64), pero debe tenerse en cuenta que existe un tty sin consola
El puerto serie hace referencia. a tty_driver, por ejemplo Ejemplo típico:
Analice el proceso de procesamiento de interrupciones del teclado:
keyboard_interrupt―>handle_kbd_event―>handle_keyboard_event―>handle_scancode
void handle_scancode(unsigned código de escaneo de caracteres, int abajo)
{
……..
tty = ttytab[fg_console]: NULL; if (tty && (!tty->driver_data)) {
………………
tty = NULL
}
<; p>…… …….schedule_console_callback();
}
Dos lugares en este código son dignos de mención, es decir, además de obtener el tty (a través de los registros tty de medición global) y también realiza el eco de la consola. ¡La relación entre Schedule_console_callbackTty y la consola ya está clara aquí! ! !
2. La función printk envía información a la consola, ¿verdad? ¿Cómo dejar que PRINTK envíe información a través del puerto serie? ¿O dónde decide el sistema si envía información al display o al puerto serie?
Si observa la implementación de la función printk en detalle, sabrá que printk no necesariamente envía información a la consola. Configurar los parámetros de inicio del kernel puede tener el efecto de enviar información al kernel. mostrar.