Android 4.2日志系统驱动程序…

本文是自学所写,是在 老罗的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升级到了version 2,区别在于结构体中增加了euid成员euid用来记录用户ID。其他成员变量含义可参考老罗的文章或自行分析。







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

再来看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就是用来登记管理读写过程的东西。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值