• 【读书笔记】Android的Ashmem机制学习


      Ashmem是安卓在linux基础上添加的驱动模块,就是说安卓有linux没有的功能。

      Ashmem模块在内核层面上实现,在运行时库和应用程序框架层提供了访问接口。在运行时库层提供的是C++接口,在应用框架层提供的是java接口。

      

      首先从驱动模块开始分析起,驱动模块加载之后首先进行misc_register来注册一个ashmem_misc设备。这个设备文件就是"/dev/ashmem"。这个设备对用户层提供了四个操作open、mmap、release、ioctl。但是没有read和write操作,这两个操作靠mmap来实现。

      • open():  对应于ashmem_open,实质上是创建一个ashmem_area结构体,返回到文件结构中。这么做的目的是打开ashmem
      • mmap():  对应于ashmem_mmap,功能是在tmpfs中创建临时文件,并且设置文件映射
      • ioctl():       对应ashmem_mmap,通过swtich结构提供不同的设置功能  

      这里有一个例子,就是打开匿名共享内存文件的函数执行流程。

      应用层类:MemoryFile的构造函数——》JNI函数:native_open——》运行库:ashmem_create_region——》Ashmem驱动的接口函数:open、ioctl——》Ashmem驱动的函数:ashmem_open、ashmem_ioctl

      注意这里的驱动接口open是对应驱动中的ashmem_open的,ioctl是对应ashmem_ioctl的。这个我个人感觉有点像Windows驱动的IRP主功能码对应有分发函数一样,不知道这样理解对不对0.0,当然了Windows应用层是是用固定的函数(如WriteFile等,然后由I/O管理器进行操作的),是不能自定义的。

      

  • 相关阅读:
    php模拟发送GET和POST请求
    php获取从百度搜索进入网站的关键词
    HDU 6218 (线段树+set)
    Wannafly挑战赛2_D Delete(拓扑序+最短路+线段树)
    BZOJ3926 (后缀自动机)
    Codeforces 848C (cdq分治)
    CERC 2014 (动态树+主席树)
    UOJ 58 (树上带修改的莫队)
    UVA12345 (带修改的莫队)
    BZOJ2038 (莫队)
  • 原文地址:https://www.cnblogs.com/Ox9A82/p/5605549.html
Copyright © 2020-2023  润新知