驱动常用调试方法

调试过程中log有着至关重要的地位,等同于医生的CT报告。能够熟悉启动各个阶段的log,如PBL阶段,sbl1阶段,kernel阶段,android阶段,对于分析定位问题有着重要的作用。
Android内核的Log输出
Android内核是基于Linxu kernel的,因此其log机制也是通用的,在Android内核中使用printk函数进行Log输出。与c语言的printf类似,printk提供格式化输入功能,同时,它也具有所有LOG机制的特点–提供日志级别过虑功能。printk提供了8种日志级别(详细的定义在include/linux/kern_levels.h中):
rintk的最简单的使用方法:
//KERN_WARNING 表示日志级别,后面要紧跟着要格式化的字符串。

printk的带格式化输出使用方法:

adb 连接的情况下输出kernel打印信息
Android系统中,printk输出的日志信息保存在/proc/kmsg中,要查看/proc/kmsg的内容,
内核中有个参数用来控制是否将printk打印的字符串输出到控制台(屏幕或者/sys/log/syslog日志文件)

cat /proc/sys/kernel/printk6 4 1 7

第一个6表示级别高于(小于)6的消息才会被输出到控制台,第二个4表示如果调用printk时没有指定消息级别(宏)则消息的级别为4,第三个1表示接受的最高(最小)级别是1,第四个7表示系统启动时第一个6原来的初值是7。

因此,如果你发现在控制台上看不到你程序中某些printk的输出,请使用echo 8 > /proc/sys/kernel/printk来解决。

#define MTS_NAME "microtek usb (rev " MTS_VERSION "): "
#define MTS_WARNING(x…)
printk( KERN_WARNING MTS_NAME x )

猜你喜欢

转载自blog.csdn.net/qq_42894864/article/details/104072923
今日推荐