Android日志系统驱动程序Logger源代码分析

2014-11-24 09:17:35 · 作者: · 浏览: 0

kernel/common/drivers/staging/android/logger.h


kernel/common/drivers/staging/android/logger.c


接下来,我们将分别介绍Logger驱动程序的相关数据结构,然后对Logger驱动程序源代码进行情景分析,分别日志系统初始化情景、日志读取情景和日志写入情景。


一. Logger驱动程序的相关数据结构。


我们首先来看logger.h头文件的内容:



接着定义两个宏:


#define LOGGER_ENTRY_MAX_LEN (4*1024)


#define LOGGER_ENTRY_MAX_PAYLOAD \


(LOGGER_ENTRY_MAX_LEN - sizeof(struct logger_entry))


从这两个宏可以看出,每条日志记录的有效负载长度加上结构体logger_entry的长度不能超过4K个字节。


logger.h文件中还定义了其它宏,读者可以自己分析,在下面的分析中,碰到时,我们也会详细解释。


再来看logger.c文件中,其它相关数据结构的定义:



结构体struct logger_reader用来表示一个读取日志的进程,log成员变量指向要读取的日志缓冲区。list成员变量用来连接其它读者进程。r_off成员变量表示当前要读取的日志在缓冲区中的位置。


struct logger_log结构体中用于保存日志信息的内存缓冲区buffer是一个循环使用的环形缓冲区,缓冲区中保存的内容是以struct logger_entry为单位的,每个单位的组成为:


struct logger_entry | priority | tag | msg


由于是内存缓冲区buffer是一个循环使用的环形缓冲区,给定一个偏移值,它在buffer中的位置由下logger_offset来确定:


#define logger_offset(n) ((n) & (log->size - 1))