上一节,我们已经学习了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要进行通讯需要执行两次数据拷贝:

Android的专用驱动_第1张图片

内存共享机制虽然只需要执行一次数据拷贝,但是它需要结合其它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常见的崩溃日志关键字分析 ( Android Crash Keyword)
  2. android查看每个app的内存占用情况
  3. Android 系统中WatchDog 日志分析
  4. Android有效解决加载大图片时内存溢出的问题
  5. 增加Android可用内存
  6. android 获取应用程序占用的内存大小
  7. Android五大布局、日志猫

随机推荐

  1. 活动的生命周期
  2. Android关于Activity的一些使用和全局管
  3. Android(安卓)NDK的C/C++代码中利用JNI回
  4. 在Android层实现触摸屏校验
  5. Android合理管理内存
  6. android 增删查完整例子
  7. Android将数据库保存到SD卡的实现
  8. Android通过多点触控的方式对图片进行缩
  9. 诺基亚的 Elop 称定制化将让 Android(安
  10. Android(安卓)NDK(八):JNI多线程