在 u-boot 中, u-boot 对 console 进行了管理,并通过u-boot的环境变量 stdout 进行控制
在 linux-5.11 中, linux也对 console 进行了管理,并通过 u-boot的bootargs(或dts) 中的 一些字段 进行管理,下面写下bootargs 中的这些字段
1. console=xxx
2. earlyprintk=xxx
3. earlycon=xxx
4. boot_delay=xxx
5. no_console_suspend
这些字段 在 linux boot 的 不同阶段 被 解读
linux console 管理涉及到的 硬件模块 和 软件模块
硬件 : lcd uart
软件 : lcd uart console printk earlycon early_printk
linux-5.11 ok6410a 中的 console 实例
Kernel command line: root=/dev/nfs rw nfsroot=10.10.11.59:/home/suws/ok6410/system-new/buildroot/output/images/rootfs console=tty0 console=ttySAC0,115200 init=/linuxrc ip=10.10.11.120
Console: colour dummy device 80x30
printk: console [tty0] enabled
------------- do_initcalls begin
Console: switching to colour frame buffer device 60x34
fb0: s3cfb frame buffer device
s3c6400-uart.0: ttySAC0 at MMIO 0x7f005000 (irq = 69, base_baud = 0) is a S3C6400/10
printk: console [ttySAC0] enabled
s3c6400-uart.1: ttySAC1 at MMIO 0x7f005400 (irq = 70, base_baud = 0) is a S3C6400/10
s3c6400-uart.2: ttySAC2 at MMIO 0x7f005800 (irq = 71, base_baud = 0) is a S3C6400/10
s3c6400-uart.3: ttySAC3 at MMIO 0x7f005c00 (irq = 72, base_baud = 0) is a S3C6400/10
------------- do_initcalls end
start_kernel
console_init
con_init
pr_info("Console: %s %s %dx%d\n", vc->vc_can_do_color ? "colour" : "mono", display_desc, vc->vc_cols, vc->vc_rows);
Console: colour dummy device 80x30
register_console(&vt_console_driver);
printk: console [tty0] enabled
s3c24xx_serial_console_init
if (port->mapbase == 0x0) return -ENODEV;
do_initcalls
module_platform_driver(s3cfb_driver);
...
s3cfb_probe
register_framebuffer
Console: switching to colour frame buffer device 60x34
printk(KERN_INFO "fb%d: %s frame buffer device\n", s3cfb_info[index].fb.node, s3cfb_info[index].fb.fix.id);
console_initcall(s3c24xx_serial_console_init);
...
register_console(&s3c24xx_serial_console);
...
s3c6400-uart.0: ttySAC0 at MMIO 0x7f005000 (irq = 69, base_baud = 0) is a S3C6400/10
s3c24xx_serial_console_setup
printk: console [ttySAC0] enabled
printk 执行流程
printk
参数
console
早期 console
串口初始化完成,并注册 console
大概在哪个函数调用???
1. early_printk
2. earlycon
A : linux 配置 CONFIG_EARLY_PRINTK
B : u-boot 配置 earlyprintk=ttySAC0,115200
无AB ,console_init 之后 会打出来,在 console_init 之前死循环,打印不出来
有AB ,在 console_init 之前死循环,打印能出来
加入内核时间:Wed Dec 9 10:02:18 2009
问题 : 在 ok6410A linux-5.11 上 如此配置会卡死,无任何启动信息打印
A : linux 配置 CONFIG_SERIAL_EARLYCON
B : u-boot 配置 earlycon=s3c6400,mmio32,0x7F005000,115200
加入内核时间 : Fri Apr 18 17:19:55 2014
问题 : 如此配置 启动信息会通过 earlycon 打印出来,但是 打印到 paging_init-> early_fixmap_shutdown earlycon就不再打印了.且会卡死
earlycon 利用了 fixmap
https://www.cnblogs.com/alantu2018/p/8447570.html