在linux启动过程打印调试信息

本文探讨了在Linux内核启动过程中如何添加调试信息,特别是针对ARM架构。通过分析`head.S`中的`stext`,尝试添加`printascii`函数导致内核启动失败的问题,揭示了早期调试输出的实现原理。ARM使用内置的调试功能,而i386平台的`early_printk`直接操作底层地址。串口驱动中的控制台初始化在`console_initcall`中完成,使串口控制台在适当时候生效。
摘要由CSDN通过智能技术生成

 在linux内核启动入口打印调试信息

上网查到linux内核启动入口在head.S,例如我现在用的是arm,就是arch/arm/kernel/head.S。head.S里有一个过程stext。

我在stext开始加了一个bl printascii,想看这时候能不能打出log,按说这时候串口驱动神马的都是浮云。

模仿其它文件中的方法,定义一个字符串,先把字符串地址放到r0,然后调用printascii。启动时,字符串倒是打出来了,但是内核启动失败了,__lookup_processor_type报的错。我估计是把字符串地址放到r0传给printascii之类的操作,破坏了接下来调用__lookup_processor_type的参数。删除掉我加的printascii相关的代码就恢复正常。

我用的是ARM开发板。 


printascii在ARM上

printascii打印字符串,也是通过串口,操作串口的代码在哪里,是谁写的呢?看起来有点像所有的arm板都一样的代码。查了一下资料,这是ARM提供的debug功能,所以几行ARM汇编就实现了,而不是想像中的去操作核心板的串口。实际上是由核心板的uart0输出的,所以它们之间可能是连通的或怎样的。

注:
在ARM官方的一个网站上,有全部的文档,并提供文档内容的搜索,很方便。
http://infocenter

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值