内核空间日志打印
日志保存
在linux内核中使用printk来实现日志打印输出且保存到/proc/kmsg,通过cat /proc/kmsg 或dmesg查看。
具体的打印级别如下:
#linux/kernel.h
#define KERN_EMERG "<0>" /* system is unusable */
#define KERN_ALERT "<1>" /* action must be taken immediately */
#define KERN_CRIT "<2>" /* critical conditions */
#deinfe KERN_ERR "<3>" /* error conditions */
#deinfe KERN_WARNING "<4>" /* warning conditions */
#deinfe KERN_NOTICE "<5>" /* normal but significant condition */
#deinfe KERN_INFO "<6>" /* informational */
#deinfe KERN_DEBUG "<7>" /* debug-level messages */
控制日志打印
在/proc/sys/kernel/printk保存了4个数字,分别表示当前控制台日志级别、未明确指定日志级别的默认消息日志级别、最高允许设置的控制台日志级别、引导时默认的日志级别。
当printk的日志级别高于当前控制台日志级别时,信息就会在控制台上显示。我们可以通过echo 0 > /proc/sys/kernel/printk或者类似于echo 0 1 4 7 > /proc/sys/kernel/printk来关闭日志打印
用户空间日志打印
在Android用户空间中,提供了一个轻量级的日志系统,这个日志系统是以驱动程序的形式实现在内核空间的,在用户空间分别提供了Java接口和C/C++接口来使用这个日志系统。
8090047.jpg
内核层面定义日志文件
在kernel的Logger驱动程序模块中(android\vendor\mstar\kernel\linaro\drivers\android\logger.c),定义了log_main、log_events、log_system和log_radio日志缓冲区,分别对应设备文件/dev/log/main、/dev/log/events、/dev/log/ra