earlycon解析

calltrace

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

说明

本文基于amba-pl011.c驱动进行分析

怎么使用

  • 很简单,使用宏OF_EARLYCON_DECLARE进行earlycon的定义就行了;OF_EARLYCON_DECLARE(pl011, “arm,pl011”, pl011_early_console_setup);
  • 在setup中定义打印函数,device->con->write = pl011_early_write;

源码解析

创建与初始化

  • earlycon设置的入口是param_setup_earlycon,该函数的原理细节是:使用early_param定义,该宏的关键是会把这个结构体放在(.init.setup),在内核启动的时候会遍历整个段,然后进行调用,代码如下:
	for (p = __setup_start; p < __setup_end; p++) {
		if ((p->early && parameq(param, p->str)) ||
		    (strcmp(param, "console") == 0 &&
		     strcmp(p->str, "earlycon") == 0)
		) {
			if (p->setup_func(val) != 0)
				pr_warn("Malformed early option '%s'\n", param);
		}
	}
  • 然后调用到OF_EARLYCON_DECLARE(pl011, “arm,pl011”, pl011_early_console_setup);定义的setup,该宏定义的回调被调用的原理和上面类似(内核常用的方法),定义在__section(__earlycon_table),然后遍历for (p_match = __earlycon_table; p_match < __earlycon_table_end;,直接使用name比较’if (strncmp(buf, match->name, len))’
  • pl011_early_console_setup主要是定义write回调函数write = pl011_early_write;,后续会调用到;

使用

直接使用write进行打印con->write(con, text, len);

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值