欢迎来到天天文库
浏览记录
ID:41062449
大小:53.95 KB
页数:20页
时间:2019-08-15
《Android日志系统驱动程序Logger源代码分析》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、我们知道,在Android系统中,提供了一个轻量级的日志系统,这个日志系统是以驱动程序的形式实现在内核空间的,而在用户空间分别提供了Java接口和C/C++接口来使用这个日志系统,取决于你编写的是Android应用程序还是系统组件。在前面的文章浅谈Android系统开发中LOG的使用中,已经简要地介绍了在Android应用程序开发中Log的使用方法,在这一篇文章中,我们将更进一步地分析Logger驱动程序的源代码,使得我们对Android日志系统有一个深刻的认识。 既然Android日志系统是以驱动程序的
2、形式实现在内核空间的,我们就需要获取Android内核源代码来分析了,请参照前面在Ubuntu上下载、编译和安装Android最新源代码和在Ubuntu上下载、编译和安装Android最新内核源代码(LinuxKernel)两篇文章,下载好Android源代码工程。Logger驱动程序主要由两个文件构成,分别是: kernel/common/drivers/staging/android/logger.h kernel/common/drivers/staging/android/logger.c
3、 接下来,我们将分别介绍Logger驱动程序的相关数据结构,然后对Logger驱动程序源代码进行情景分析,分别日志系统初始化情景、日志读取情景和日志写入情景。 一. Logger驱动程序的相关数据结构。 我们首先来看logger.h头文件的内容:viewplain1.#ifndef _LINUX_LOGGER_H 2.#define _LINUX_LOGGER_H 3. 4.#include 5.#include 6. 7.
4、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 proces
5、s's tid */ 12. __s32 sec; /* seconds since Epoch */ 13. __s32 nsec; /* nanoseconds */ 14. char msg[0]; /* the entry's payload */ 1.}; 2. 3.#define LOGGER_LOG_RADIO "log_radio" /* radio-related messages */ 4.#define L
6、OGGER_LOG_EVENTS "log_events" /* system/hardware events */ 5.#define LOGGER_LOG_MAIN "log_main" /* everything else */ 6. 7.#define LOGGER_ENTRY_MAX_LEN (4*1024) 8.#define LOGGER_ENTRY_MAX_PAYLOAD 9. (LOGGER_ENTRY_MAX_LEN - sizeof
7、(struct logger_entry)) 10. 11.#define __LOGGERIO 0xAE 12. 13.#define LOGGER_GET_LOG_BUF_SIZE _IO(__LOGGERIO, 1) /* size of log */ 14.#define LOGGER_GET_LOG_LEN _IO(__LOGGERIO, 2) /* used log len */ 15.#define LOGGER_GET_NEXT_ENTRY_LEN _IO(__
8、LOGGERIO, 3) /* next entry len */ 16.#define LOGGER_FLUSH_LOG _IO(__LOGGERIO, 4) /* flush log */ 17. 18.#endif /* _LINUX_LOGGER_H */ structlogger_entry是一个用于描述一条Log记录的结构体。l
此文档下载收益归作者所有