android内核驱动 杂项,有关第十五章_Android内核驱动——杂项.pdf

资料来自网络,请保护知识产权,请您下载后勿作商用,只可学习交流使用。驱动——杂项

第十五章 Android 内核驱动——杂项

15.1 日志系统

基本原理

Android 的logger 是一种轻量级的日志系统。在内核中实现为一种misc 设备驱动,它与用户

态的logcat 工具配合实现了方便的调试工具,开发应用程序的时候可以利用logger 查看日志,

进行跟踪调试。

logger 的实现

logger 的源代码在 drivers/staging/android/logger.c 中,它用三个结构体 logger_log ,

logger_reader 和logger_entry 来维护logger 设备的信息。其中logger_log 代表一个log 设备,

logger_reader 代表一个读日志的reader,logger_entry 代表writer 写入的一条日志。

logger 在模块初始化时注册三个misc 设备:log_main,log_events 和log_radio。其中log_main

记录主要的日志信息,log_events 记录与事件有关的信息,log_radio 记录与通信有关的信息,

实现了以下的file operation :

 logger_open

标准的open 接口,如果以读模式打开,则分配一个logger_reader,初始化其成员变量,并

把这个logger_reader 保存在file->private_data 中。如果是write 模式打开,则直接把对应logger

设备的 logger_log 保存在 file->private_data 。此后在读或者写的时候就可以通过 file->

private_data 找到对应的logger_reader 或logger_log。

 logger_read

首先当前进程 (读log 的进程)加到logger_log->wq 等待队列上,判断当前日志buffer 是否

为空,如果空则调度别的进程运行,自己挂起(如果指定了非阻塞模式,则直接返回-EAGAIN),

重复上述过程直buffer 中有日志可读,此时,读出一条日志,拷贝到用户空间,返回。

 logger_aio_write

写操作支持同步、异步以及 scatter 方式的写操作。写操作几乎总是成功的,当buffer 满的

时候,新写入的日志会覆盖最初的日志。总之,buffer 是环形的,如果没有及时被读出,数

据会丢失。

 logger_ioctl

支持以下命令:

 LOGGER_GET_LOG_BUF_SIZE :得到logger device 环形缓冲区的大小

Linux公社(LinuxIDC.com) 是包括Ubuntu,Fedora,SUSE技术,最新IT资讯等Linux专业类网站。

 LOGGER_GET_LOG_LEN :得到当前日志 buffer 中未被读出的日志长度

LOGGER_GET_NEXT_ENTRY_LEN:得到下一条日志长度(即紧接着上次读出的日志后

面一条)

 LOGGER_FLUSH_LOG:清空日志

 logger_poll

查询当前进程是否可以对logger device 操作。POLLOUT 总是成立的,即进程总是可以写入日

志。但只有以 FMODE_READ 模式打开 logger 设备的进程,并且当前日志非空,才可以读到

日志。

用户接口

logger 日志系统是标准的misc 设备,提供标准的file operation ,应用程序可以通过标准的C

库文件函数操作日志系统。

在Android 应用开发中,比较有用的是 logcat 命令,通过该命令可以查看系统的日志输出,

在调试的时候,应用程序插入日志,在logcat 中就可以看到,这样就实现了方便的插桩跟踪

调试。

logcat 使用方法如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值