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

Android的专用驱动放在内核中并不是为了驱动硬件,而是为了获得特殊的管理权限,比如去为AndroidRuntimeFramework服务。这里列出三个最重要的专用驱动,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通讯的四个组件,分别是clientserverservicemanager以及binder驱动,前三个运行在用户空间,binder驱动运行在内核空间。

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

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

Ashmem共享内存驱动:

两个特点:

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

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

event-log-tags

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

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

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

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

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

更多相关文章

  1. Android(安卓)读取硬件信息技巧
  2. Android面试官,面试时总喜欢挖基础坑,整理了26道面试题牢固你基础!
  3. Android常见的崩溃日志关键字分析 ( Android(安卓)Crash Keyword)
  4. android查看每个app的内存占用情况
  5. android:installLocation简析
  6. android:installLocation简析
  7. android:installLocation简析
  8. Arcgis android - Installation error: INSTALL_FAILED_INSUFFIC
  9. android:installLocation简析

随机推荐

  1. android aidl文件分析
  2. Android使用OKHttp访问网络获取Cookie和
  3. 本来想用“{{”秀一波,结果却导致了内存溢
  4. What do GC_FOR_MALLOC, GC_EXPLICIT, an
  5. Cobub Razor移动应用分析系统
  6. A​n​d​r​o​i​d​ ​B​l​u​e​t
  7. Android修改系统闹铃的持续时间
  8. android重力感应开发之微信摇一摇功能
  9. Android中写与Wifi相关程序的注意事项—
  10. 右下脚图标