HAL(hardware abstraction layer)硬件抽象层
用于链接driver和Camera Service
Kernel(内核):image sensor driver的实作。
Kernel Log
Printk流程
- 将所有的log输出到内核的Log Buffer,该log buffer是一个循环缓冲区。其地址可以在内核中用log_buff变量访问。
- 根据设定的log级别决定是否将log输出到Console。
打印的log会走向两个位置:
- Log Buffer,该Buffer的内容可以在user space通过/proc/kmsg来访问。
- 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
- ksmg adb连接
- dmesg adb连接
- UART log UART Cable连接
- last_kmsg
- MTKLogger SD卡
- logcat adb连接
- DDMs adb连接
Android Log
- 在Kernel层,设计了4个logger设备及相应的驱动程序,这4个logger设备分别采用了一块内存区域作为缓冲区,用于存放main/system/event/radio.log
- 在Native层封装了对kernel log buffer的写入操作,并且在写入前根据传入的TAG决定是否将log写入到Radio Log Buffer。作为Library向上层提供API。
- 为了方便Native应用程序以及共享库的开发,提供了macro定义的Log wrapper,Native层可以直接使用LOGV/LOGD/LOGI/LOGW/LOGE以及相关的API打印log到log buffer。
- 为了给java层提供接口,在Native层实现了JN接口,为了Java层服务。
- 在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
- USRT Log UART Cable连接
- MTKLogger SD卡存储