(最近在调试安桌系统,发现安桌系统层的调试信息不能在串口终端上看到,但可以在ADB端的LOGCAT中看到,同时内核层LINUX的调试信息可以在串口终端中看到。不知道其中原因,因此决定来分析LINUX内核中PRINTK原理,以及安桌系统的LOG是怎么实现的。在此把源码分析过程记录在此方便日后查询。

注:参考了很多网友博文,由于参照和学习文章太多,在此不一一列出,感谢众大神的无私分享。)

 

相关源码版本:

LINUX内核源码版本:linux-3.0.86

UBOOT版本:uboot-2010.12.

Android系统源码版本:Android-5.0.2】

 

串口调试信息如何输出这个话题太过宽泛,经过最近分析可以肢解为如下一些小知识点来理解串口调试信息的输出原理。分别是:

A:UBOOT向LINUX内核传递参数的原理(其中就指定了我们用那个串口来输出调试信息,一般CPU都有几路串口,LINUX内核中会按照CPU介绍手册中分配的顺序来列出串口序号,根据UBOOT传入参数来决定调用那几路)

B:LINUX解析UBOOT传入参数的原理(会把传入的参数存一个字符串中)

C:LINUX如何来使用传入的参数(由CONSOLE来使用的,既在CONSOLE注册时利用传进来的参数,这个是LINUX内核层的CONSOLE,注意与安桌层及文件系统层的PRINTK的区别。内核层只需要实现输出功能,但前者必须要实现输入输出,以及更复杂的功能)

D:LINUX内核层PRINTK实现原理(最终调用上面注册的CONSOLE来输出调试信息)

E:安桌层及文件系统层的PRINTK输出原理(/device/console操控台原理分析,通过调用此操控台来输出信息,同时这儿涉及到/device/console调用TTY,然后TTY调用低层串口的分析)