我们知道,在 Android 系统中,提供了一个轻量级的日志系统,这个日志系统
是以驱动程序的形式实现在内核空间的,而在用户空间分别提供了 Java 接口和
C/C++接口来使用这个日志系统,取决于你编写的是 Android 应用程序还是系统组
件。在前面的文章浅谈 Android 系统开发中 LOG 的使用中,已经简要地介绍了在
Android 应用程序开发中 Log 的使用方法,在这一篇文章中,我们将更进一步地分
析 Logger 驱动程序的源代码,使得我们对 Android 日志系统有一个深刻的认识。
既然 Android 日志系统是以驱动程序的形式实现在内核空间的,我们就需要获
取 Android 内核源代码来分析了,请参照前面在 Ubuntu 上下载、编译和安装 Android
最新源代码和在 Ubuntu 上下载、编译和安装 Android 最新内核源代码(Linux Kernel)
两篇文章,下载好 Android 源代码工程。Logger 驱动程序主要由两个文件构成,分
别是:
kernel/common/drivers/staging/android/logger.h
kernel/common/drivers/staging/android/logger.c
接下来,我们将分别介绍 Logger 驱动程序的相关数据结构,然后对 Logger 驱
动程序源代码进行情景分析,分别日志系统初始化情景、日志读取情景和日志写入
情景。
一. Logger 驱动程序的相关数据结构。
我们首先来看 logger.h 头文件的内容:
view plain
1. #ifndef _LINUX_LOGGER_H
2. #define _LINUX_LOGGER_H
3.
4. #include <linux/types.h>
5. #include <linux/ioctl.h>
6.
7. struct logger_entry {
8. __u16 len; /* length of the payload */
9. __u16 __pad; /* no matter what, we get 2 bytes of padding */
10. __s32 pid; /* generating process's pid */
11. __s32 tid; /* generating process's tid */
12. __s32 sec; /* seconds since Epoch */
13. __s32 nsec; /* nanoseconds */
14. char msg[0]; /* the entry's payload */