Los parameters del kernel "console" y "earlycon" se refieren a hardware antiguo?

Primero encontré esto investigando parameters para earlycon pero encontré que las opciones para la console son casi idénticas. Ambos están presentes a continuación y fueron tomados de esta fuente:

De la documentation para console tenemos:

 console= [KNL] Output console device and options. tty<n> Use the virtual console device <n>. ttyS<n>[,options] ttyUSB0[,options] Use the specified serial port. The options are of the form "bbbbpnf", where "bbbb" is the baud rate, "p" is parity ("n", "o", or "e"), "n" is number of bits, and "f" is flow control ("r" for RTS or omit it). Default is "9600n8". See Documentation/serial-console.txt for more information. See Documentation/networking/netconsole.txt for an alternative. uart[8250],io,<addr>[,options] uart[8250],mmio,<addr>[,options] uart[8250],mmio16,<addr>[,options] uart[8250],mmio32,<addr>[,options] uart[8250],0x<addr>[,options] Start an early, polled-mode console on the 8250/16550 UART at the specified I/O port or MMIO address, switching to the matching ttyS device later. MMIO inter-register address stride is either 8-bit (mmio), 16-bit (mmio16), or 32-bit (mmio32). If none of [io|mmio|mmio16|mmio32], <addr> is assumed to be equivalent to 'mmio'. 'options' are specified in the same format described for ttyS above; if unspecified, the h/w is not re-initialized. hvc<n> Use the hypervisor console device <n>. This is for both Xen and PowerPC hypervisors. If the device connected to the port is not a TTY but a braille device, prepend "brl," before the device type, for instance console=brl,ttyS0 For now, only VisioBraille is supported. 

De la documentation para earlycon tenemos:

 earlycon= [KNL] Output early console device and options. When used with no options, the early console is determined by the stdout-path property in device tree's chosen node. cdns,<addr> Start an early, polled-mode console on a cadence serial port at the specified address. The cadence serial port must already be setup and configunetworking. Options are not yet supported. uart[8250],io,<addr>[,options] uart[8250],mmio,<addr>[,options] uart[8250],mmio32,<addr>[,options] uart[8250],mmio32be,<addr>[,options] uart[8250],0x<addr>[,options] Start an early, polled-mode console on the 8250/16550 UART at the specified I/O port or MMIO address. MMIO inter-register address stride is either 8-bit (mmio) or 32-bit (mmio32 or mmio32be). If none of [io|mmio|mmio32|mmio32be], <addr> is assumed to be equivalent to 'mmio'. 'options' are specified in the same format described for "console=ttyS<n>"; if unspecified, the h/w is not initialized. pl011,<addr> pl011,mmio32,<addr> Start an early, polled-mode console on a pl011 serial port at the specified address. The pl011 serial port must already be setup and configunetworking. Options are not yet supported. If 'mmio32' is specified, then only the driver will use only 32-bit accessors to read/write the device registers. meson,<addr> Start an early, polled-mode console on a meson serial port at the specified address. The serial port must already be setup and configunetworking. Options are not yet supported. msm_serial,<addr> Start an early, polled-mode console on an msm serial port at the specified address. The serial port must already be setup and configunetworking. Options are not yet supported. msm_serial_dm,<addr> Start an early, polled-mode console on an msm serial dm port at the specified address. The serial port must already be setup and configunetworking. Options are not yet supported. smh Use ARM semihosting calls for early console. s3c2410,<addr> s3c2412,<addr> s3c2440,<addr> s3c6400,<addr> s5pv210,<addr> exynos4210,<addr> Use early console provided by serial driver available on Samsung SoCs, requires selecting proper type and a correct base address of the selected UART port. The serial port must already be setup and configunetworking. Options are not yet supported. lpuart,<addr> lpuart32,<addr> Use early console provided by Freescale LP UART driver found on Freescale Vybrid and QorIQ LS1021A processors. A valid base address must be provided, and the serial port must already be setup and configunetworking. armada3700_uart,<addr> Start an early, polled-mode console on the Armada 3700 serial port at the specified address. The serial port must already be setup and configunetworking. Options are not yet supported. 

Un ejemplo del uso es:

earlycon=uart8250,0x21c0500

Mis preguntas son:

  • ¿Por qué hay una reference al hardware físico 8250/16550 ? ¿Esta vieja implementación se ha moldeado en una especificación de interfaz para layouts modernos? Es decir, ¿seguimos usando los controlleres para UART que eran compatibles cuando estos dispositivos de comunicación eran externos al SoC?

  • Si MMIO es IO de memory asignada , ¿a qué se refiere el IO "normal" en este context?

  • ¿Cuál es el parámetro <addr> ? ¿Es este el comienzo de los loggings de configuration de UART para el SoC específico en el que está ejecutando este kernel? ¿La mayoría de los loggings de configuration de UART se ajustan a un layout de logging específico de modo que un controller de UART genérico pueda configurar el hardware de manera adecuada?

Estoy seguro de que alguien todavía está haciendo esto, pero en los días previos a cosas como ILO / DRAC / etc. se convirtió en barato y ubiquitios la mejor manera de get acceso "fuera de banda" a la console en caso de emergencias o un ¡Ups fue sobre el serial port. Montarías un Servidor de Terminales en el estante y luego pondrás los cables en el serial port de tus serveres. Algunos BIOS admitían la networkingirección de la console al serial port (por ejemplo, los serveres VA Linux y SuperMicro en el período de time 1999+).

Los 8250/16550 UARTS fueron algunos de los chips de serial port más populares de la época, lo que significa que serían los mejores compatibles con Linux, y todos ellos usaron el controller kernel 8250 (había muchos más models en esa serie que todos usaban el mismo conductor).

Sospecho que una gran cantidad de layouts de SoC destinados a ser utilizados por Linux construyeron UART compatibles con 8250/16550 en ellos porque era el button fácil, bien documentado y un controller bien probado. Aunque con suerte construyeron las últimas versiones de buffer multibyte (por supuesto incluso los procesadores "lentos" según los estándares de hoy pueden atender una interrupción en serie mucho más a menudo que un serial port de 115k puede recibirlo. IIRC el Mac tenía un puerto serial usado para Local / Apple Talk (No recuerdo cuál era el protocolo y cuál era el hardware) que hizo 248k. Aún así, eso fue cuando las CPUs hicieron 60Mhz.

Esta es probablemente la mejor respuesta para la diferencia entre MMIO y Port I / O: https://en.wikipedia.org/wiki/Memory-mapped_I/O No entiendo ese nivel lo suficientemente bien como para networkingucirlo.

El enlace de arriba probablemente responda lo que es para estos propósitos, pero básicamente es una dirección de memory.