Kernel Log & Android Log

相化
2023-12-01

HAL(hardware abstraction layer)硬件抽象层

用于链接driver和Camera Service

Kernel(内核):image sensor  driver的实作。

Kernel Log

Printk流程

  1. 将所有的log输出到内核的Log Buffer,该log buffer是一个循环缓冲区。其地址可以在内核中用log_buff变量访问。
  2. 根据设定的log级别决定是否将log输出到Console。

打印的log会走向两个位置:

  1. Log Buffer,该Buffer的内容可以在user space通过/proc/kmsg来访问。
  2. Console,UART Console和RAM Console。

Log优先级

<0>紧急信息,此信息会引起系统崩溃   KERN_EMERG

<1>提示要马上采取某些行动   ALERT

<2>关键信息,通常有严重的软件或硬件问题发生了   CRIT

<3>报告错误   ERR

<4>警告错误,用于警告那些并不会造成严重的系统异常的问题   WARNING

<5>正常但值得注意的情况   NOTICE

<6>信息   INFO

<7>用于调试的打印   DEBUG

从上往下依次降低

eg:printk(KERN_ERR “This is an error message!!”);

Logging tools

  1. ksmg   adb连接
  2. dmesg   adb连接
  3. UART log   UART Cable连接
  4. last_kmsg
  5. MTKLogger   SD卡   
  6. logcat   adb连接
  7. DDMs   adb连接

Android Log

  1. 在Kernel层,设计了4个logger设备及相应的驱动程序,这4个logger设备分别采用了一块内存区域作为缓冲区,用于存放main/system/event/radio.log
  2. 在Native层封装了对kernel log buffer的写入操作,并且在写入前根据传入的TAG决定是否将log写入到Radio Log Buffer。作为Library向上层提供API。
  3. 为了方便Native应用程序以及共享库的开发,提供了macro定义的Log wrapper,Native层可以直接使用LOGV/LOGD/LOGI/LOGW/LOGE以及相关的API打印log到log buffer。
  4. 为了给java层提供接口,在Native层实现了JN接口,为了Java层服务。
  5. 在Java层对JNI接口进行了封装,分别实现了android.util.log和android.util.EventLog类,用于给Java Application以及Java library提供Log接口。

API与优先级

V(Verbose)仅在eng版本中打印,在user和userdebug版本中都不会打印

D(Debug) Debug信息

I(Information) 打印通知信息的log

W(Warning)打印警告信息

E(Error) 打印一般的错误信息

F(Fatal) 会引起致命性错误

S(Silent) 用于logcat过滤log,s级一般都不会输出

从上往下依次升高

Logging tools

  1. USRT Log   UART Cable连接
  2. MTKLogger   SD卡存储

 类似资料:

相关阅读

相关文章

相关问答