在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