原文位置:http://blog.csdn.net/luoshengyang/article/details/6598703
综述: 这一篇的主要内容在于内核层的android日志驱动系统的运行方式,主要是日志驱动程序在android底层运行时的情况的描述,也就是相当于驱动程序作为服务端在底层的准备工作。
一、日志数据结构:
1、单条日志结构体:包含日志的长度,写入日志的进程的pid与tid,以及写入的时间。 2、日志缓冲区结构体:包含缓冲区的长度,开始地址,队列以及硬件信息以及互斥锁 3、日志读者结构体:包含读取日志的进程的起始地址偏移地址以及与关联读取者
二、日志程序初始化:
1、三个日志设备的初始化:音频日志设备、系统硬件日志设备、其他日志设备(main) 2、接下来创建三个日志文件:
创建/dev/log/radio、/dev/log/events和/dev/log/main三个设备文件
三、日志读取过程:
1、读取的过程是通过日志数据结构中的“日志缓冲区结构体”来读取的,日志缓冲区结构体是一个环形缓冲区。
2、日志的读进程会通过日志缓冲区结构体的等待列表来读取日志,直到将可读日志读取完毕为止。
3、读进程读取日志时通过自身的起始地址与偏移地址找到要读的环形缓冲区,然后获取读取长度
4、最后就开始进行真正的读取,通过起始地址与偏移地址将日志内容复制到用户的内存空间。
四、日志写入过程:
1、就是一个记录日志进程时间标签内容后写入环形缓冲区的过程。
2、写入时需要注意环形缓冲器的更新。
3、写入与读取动作是互斥的。
总结:
总的来说,日志缓冲区可以理解为一个硬件设备,也可以理解为一个文件,设备一直在等待,同时具有读取和写入的操作,主要是需要关心存储的方式,读取写入的线程安全,生产者-消费者模式的使用。