Android的专用驱动

news/2024/10/30 9:32:31/

上一节,我们已经学习了Android对硬件支持的调用整体过程,这一节学习下在Android内核中Android的专用驱动。

 

Android的专用驱动放在内核中并不是为了驱动硬件,而是为了获得特殊的管理权限,比如去为Android Runtime Framework服务。这里列出三个最重要的专用驱动,LoggerBinderAshmem

 

Logger

与传统的日志相比,是记录在内核缓冲区当中的,直接内存操作,加快读写操作,对应的目录在/dev/log中。使用环形缓冲区,新日志覆盖旧日志,同时采用日志分类,不同类的日志写在不同的缓冲区。

 

日志记录除了记录java代码,还记录了c/c++,在框架层通过3个安卓的工具类或者c的工具接口api写入liblog.so,再写入内核中,需要注意的是log是写入内核缓冲区。最后再通过logcat工具读取日志。

 

分类:

Main/dev/log/main       --次要

System: /dev/log/system --重要

Radio/dev/log/radio --无线相关

Event/dev/log/events  --系统日志,二进制保存,二进制日志格式由/system/etc/event-log-tags文件描述,系统app的日志。

Ps:每个环形缓冲区对应大小256k

 

Java日志写入接口

android.util.Log

android.util.Slog

android.util.EventLog

C/C++日志写入接口

LOGVLOGDLOGILOGWLOGE

SLOGVSLOGDSLOGISLOGWSLOGE

LOG_EVENT_INTLOG_EVENT_LONGLOG_EVENT_STRIevent-log-tagsNG

最后,logcat工具的使用,估计已经非常熟练了,不再累述。

 

Binder驱动:

Binder是为了进程间通讯存在的,和传统的IPC通讯对比,传统的IPC要进行通讯需要执行两次数据拷贝:

 

内存共享机制虽然只需要执行一次数据拷贝,但是它需要结合其它IPC来做进程同步,效率同样不理想。

Binder特点:一次拷贝数据 | c/s模型 既可以进程间,也可以进程内

Binder通讯的四个组件,分别是client server service manager 以及 binder驱动,前三个运行在用户空间,binder驱动运行在内核空间。

运行过程是这样的,首先serviceservice manager注册,然后开启一个binder线程池,clientservice manager查询所需要的service,并返回来一个binder代理对象,通过该对象发送请求。

这里之后会单独拉取一篇出来,因为本阶段这玩意真的搞不太懂...

 

Ashmem共享内存驱动:

两个特点:

1.用一个文件描述符来标一块共享内存

2.能动态释放部分共享内存

event-log-tags

可以通过IO控制命令ASHMEM_PIN对部分共享内存进行锁定

可以通过IO控制命令ASHMEM_UNPIN对部分共享内存进行解锁

没有锁定的部分共享内存,在系统内存紧张时会被回收

 

总结:能说出常用的安卓专用驱动,了解Logger的种类和存储位置,了解binder原理,了解ashmem特点

 

Android内核当中的专用驱动(Logger Binder Ashmem Wakelock Low-Memery-Killer Alarm)有着特殊的作用,Logger把日志记录在内核缓冲区,纯内存操作意味着可以频繁读写,并且速度快,对应的文件位于/dev/log当中,其中又分为system main radio eventsradio是通讯相关的logevents是系统级别日志,系统的格式位于/etc/event-log-tags里面;日志最大256k,是一个环形缓冲区,liblog.soBinder进程间通讯机制也是安卓最重要的部分之一,最大的特点是高效,通讯数据只需要拷贝一次即可,其他特性比如c/s架构,除了进程间进程内也可以通讯。Ashmem是在binder传输大数据会用到的内存共享驱动,依赖于binder,和传统的共享内存相比,采用了文件描述符和分片内存管理,可以通过IO控制命令锁定/解锁内存区,以便系统可以回收这部分的内存。


http://www.ppmy.cn/news/381161.html

相关文章

Motorola USB Driver v5.9.0 for Windows

Moto官方纯驱动,更新其实已好久。 http://developer.motorola.com/tools/usb_drivers/ 下载:(32-bit)http://developer.motorola.com/tools/usb_drivers/handset_usb_driver/Motorola_End_User_Driver_Installation_5.9.0_32bit.msi/ 下载&#xff1a…

Android驱动入门系列(一)

Android驱动入门系列(一) —— Android驱动简介及编写第一个Android驱动 以下文章参考网上搜到的《Android驱动开发全过程(有图有真相)》一文,其中根据自己的实际编写情况作了部分修改,不用作商业用途 前言 意外在网上发现了这…

MOTODEV

有个android开发的学长,他比较喜欢用MotoDev,也推荐我用,但是我感觉和eclipse差不多,今天他用我的电脑调试程序,说还是motodev好用。我也就装了一个试试,其实真和eclipse差不多,不过刚进去就弹出…

Linux:初识

1 诞生 创始人:林纳斯 托瓦兹 时 间:1991年,上大学期间 2 Linux的组成 linux主要由内核、系统级应用程序组成 图2-1 Linux系统结构(图自黑马程序员课程) 内核:对硬件进行调度,比如调度CPU、内…

618有哪些数码好物值得入手?盘点几款618值得买的数码好物分享

距离618大促结束还有几天,还有谁没有入手几款数码好物的!眼下618还没有彻底结束,现在上车还来得及。下面来给大家盘点几款数码好物,话不多说,一起来看看吧。 1.南卡OE不入耳蓝牙耳机 南卡OE不入耳蓝牙耳机采用了不入耳…

用敏捷工具Leangoo领歌做敏捷需求管理

传统的瀑布工作模式使用详细的需求说明书来表达需求,需求人员负责做需求调研,根据调研情况编制详细的需求说明书,进行需求评审,评审之后签字确认交给研发团队设计开发。在这样的环境下,需求文档是信息传递的主体&#…

疫情中的日本东京it工作

最近疫情,一年多没有来CSDN了。 2020年全球疫情严重,日本也不例外。因为疫情,很多it项目都被取消或延迟启动,导致很多待机现象。 2020年中,有一部分it技术者从日本回到国内工作。 疫情开始后,日本的it行…

玩转东京

日庆长八年(1603年),德川家康受封征夷大将军,在江户(现东京)建立幕府政权,此后260多年,德川家统治全国。日明治二年(1868年),明治天皇迁都江户&am…