Android 4.2日志系统驱动程序…

来源:互联网 发布:.science域名 搜索引擎 编辑:程序博客网 时间:2024/06/16 11:52
本文是自学所写,是在老罗的Android之旅的基础上写的,站在高人的肩膀上耍耍,主要是对比一下4.0与4.2的区别并总结一下。

Logger驱动程序主要由两个文件构成,分别是:
kernel\drivers\staging\android\logger.h
kernel\drivers\staging\android\logger.c
接下来,我们将分别介绍Logger驱动程序的相关数据结构,然后对Logger驱动程序源代码进行情景分析,分别日志系统初始化情景、日志读取情景和日志写入情景。

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

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



版本4.2在4.0的基础上,对logger_entry升级到了version2,区别在于结构体中增加了euid成员euid用来记录用户ID。其他成员变量含义可参考老罗的文章或自行分析。







考虑是否进行SMP排序,预定义了两套buffer大小。而每条日志记录的有效负载长度限制在4076字节,对比4.0,似乎忽略了euid和msg的占用空间,一条记录所占的空间是有可能大于4K的。由于logger_entry升级到了version2,提供了设置和获取版本的宏定义。

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



与4.0不一样的是,logger_reader多了三个成员变量:r_all表示当前读取日志的进程是否可以读取所有的入口,r_ver是ABI的版本号,missing_bytes是在读取时丢失的字节数。在老罗的基础上,重新整理一下思路:
日志的读取是首先要把日志保存在缓冲区,因此需要得申请个地方来作为缓冲区,并且还得有进程去读取这些日志,这样就涉及四个东西:日志、缓冲区、进程和登记管理读写过程的东西。
每条日志就是
struct logger_entry | priority | tag | msg
一条条的日志就保存在logger_log中的那个buffer所指向的地方,每一个读取日志的进程就是logger_reader,而logger_log就是用来登记管理读写过程的东西。

具体的读写等可以参考老罗的文章

0 0
原创粉丝点击