[console] early printk实现流程

本文介绍了Linux内核启动早期的打印机制——early printk,包括其功能、启用方式、使用方法和代码流程。早期console是通过early_printk实现在设备初始化前的log输出,依赖于bootloader预先初始化的串口设备。文章详细阐述了从解析cmdline参数到通过printch函数实现串口数据写入的过程,并对比了early_printk与其他打印函数的差异。
摘要由CSDN通过智能技术生成

本文以ARM为例

一、功能说明

printk的log输出是由console实现(会在其他文章中说明)。由于在kernel刚启动的过程中,还没有为串口等设备等注册console(在device probe阶段实现),此时无法通过正常的console来输出log。
为此,linux提供了early console机制,用于实现为设备注册console之前的早期log的输出,对应console也称为boot console,简称bcon。这个console在kernel启动的早期阶段就会被注册,主要通过输出设备(比如串口设备)的简单的write方法直接进行数据打印。而这个write方法也就是平台实现。
注意,这时候作为输出的串口设备是基于bootloader中已经初始化完成的。
early console机制有两种实现方式,早期的early_printk实现和后面的earlycon实现。在这里主要说明early_printk的实现方式.
early_printk与earlycon相比较为落后,其差异可以参考《earlycon实现流程》文章,建议使用earlycon的实现方式来做early console功能

二、需要打开的宏,如何使能

1、需要打开的宏

CONFIG_DEBUG_LL

ENTRY(printch)定义在arch/arm/debug.S中,需要用这个宏来打开。

CONFIG_EARLY_PRINTK

setup_early_printk的定义。解析cmdline中的early_printk参数并安装boot console。
early_printk输出函数的定义。

2、如何使能

在cmdline中添加“earlyprintk”字符串,如下:

"console=ttySAC0,115200n8 root=/dev/mmcblk0p1 rw rootwait ignore_loglevel earlyprintk"

三、如何使用

1、printascii、printk、early_print、early_printk的区别。

2、在setup.c中加对应例子并打印

比如:

printascii("early_printk success")
early_printk("early_printk success");
printk("printk success")
early_print("early_print success")

(1)printascii(不建议使用)
(2)early_printk
(3)pr

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值