early printk 解决什么问题那?本质也是打印调试信息,但是不同于printk,printk属于打印的一个框架,既然是框架必然需要一些必备条件,框架的初始化等,在内核启动初期这些框架都没来得及初始化,所以这些函数肯定不能用,eary pritnk实现就比较直接简单,就是直接调用对应芯片的串口寄存器,把数据写到串口控制器寄存器里面,只要你芯片启动了就能输出。各个架构下都实现了earlyprintk
Kernel hacking --->
arm Debugging --->
Kernel low-level debugging functions
Early printk
Character devices --->
Serial drivers --->
static struct uart_driver amba_reg;
static struct console amba_console = {
.name = "ttyAMA",
.write = pl011_console_write,
.device = uart_console_device,
.setup = pl011_console_setup,
.match = pl011_console_match,
.flags = CON_PRINTBUFFER | CON_ANYTIME,
.index = -1,
.data = &amba_reg,
};
驱动代码
amba-pl011.c - drivers/tty/serial/amba-pl011.c - Linux source code (v5.12.12) - Bootlin