(am335x, kernel 4.19-ti) Note: earlyprintk parameter ignores argument earlycon optionally takes argument, the flow below assumes no argument ========== earlyprintk ========================================================= CONFIG_DEBUG_KERNEL=y CONFIG_DEBUG_LL=y CONFIG_DEBUG_AM33XXUART1=y "Kernel low-level debugging messages via AM33XX UART1" (note that this is in fact uart0, not uart1 as it claims) kernel parameter: earlyprintk (config): arch/arm/Kconfig.debug config DEBUG_LL_INCLUDE arch/arm/Kconfig.debug default "debug/8250.S" if DEBUG_LL_UART_8250 || DEBUG_UART_8250 (init): arch/arm/kernel/early_printk.c [match] early_param("earlyprintk", setup_early_printk); arch/arm/kernel/early_printk.c setup_early_printk() (write): arch/arm/kernel/early_printk.c early_console_write() arch/arm/kernel/early_printk.c early_write() arch/arm/kernel/debug.S ENTRY(printascii) arch/arm/include/debug/8250.S .macro addruart ========== earlycon (no argument) ============================================== CONFIG_SERIAL_EARLYCON=y kernel parameter: earlycon (init): drivers/tty/serial/earlycon.c [match] early_param("earlycon", param_setup_earlycon); drivers/tty/serial/earlycon.c param_setup_earlycon() drivers/of/fdt.c: early_init_dt_scan_chosen_stdout() drivers/tty/serial/8250/8250_early.c [match] OF_EARLYCON_DECLARE(omap8250, "ti,omap3-uart", early_omap8250_setup); drivers/tty/serial/earlycon.c of_setup_earlycon() drivers/tty/serial/earlycon.c earlycon_init() drivers/tty/serial/8250/8250_early.c early_omap8250_setup() (write): drivers/tty/serial/8250/8250_early.c early_serial8250_write drivers/tty/serial/serial_core.c uart_console_write drivers/tty/serial/8250/8250_early.c serial_putc