【读书笔记】Android的Ashmem机制学习
Ashmem是安卓在linux基礎(chǔ)上添加的驅(qū)動模塊,就是說安卓有l(wèi)inux沒有的功能。
Ashmem模塊在內(nèi)核層面上實(shí)現(xiàn),在運(yùn)行時(shí)庫和應(yīng)用程序框架層提供了訪問接口。在運(yùn)行時(shí)庫層提供的是C++接口,在應(yīng)用框架層提供的是java接口。
首先從驅(qū)動模塊開始分析起,驅(qū)動模塊加載之后首先進(jìn)行misc_register來注冊一個(gè)ashmem_misc設(shè)備。這個(gè)設(shè)備文件就是"/dev/ashmem"。這個(gè)設(shè)備對用戶層提供了四個(gè)操作open、mmap、release、ioctl。但是沒有read和write操作,這兩個(gè)操作靠mmap來實(shí)現(xiàn)。
-
- open(): 對應(yīng)于ashmem_open,實(shí)質(zhì)上是創(chuàng)建一個(gè)ashmem_area結(jié)構(gòu)體,返回到文件結(jié)構(gòu)中。這么做的目的是打開ashmem
- mmap(): 對應(yīng)于ashmem_mmap,功能是在tmpfs中創(chuàng)建臨時(shí)文件,并且設(shè)置文件映射
- ioctl(): ? ??? 對應(yīng)ashmem_mmap,通過swtich結(jié)構(gòu)提供不同的設(shè)置功能
這里有一個(gè)例子,就是打開匿名共享內(nèi)存文件的函數(shù)執(zhí)行流程。
應(yīng)用層類:MemoryFile的構(gòu)造函數(shù)——》JNI函數(shù):native_open——》運(yùn)行庫:ashmem_create_region——》Ashmem驅(qū)動的接口函數(shù):open、ioctl——》Ashmem驅(qū)動的函數(shù):ashmem_open、ashmem_ioctl
注意這里的驅(qū)動接口open是對應(yīng)驅(qū)動中的ashmem_open的,ioctl是對應(yīng)ashmem_ioctl的。這個(gè)我個(gè)人感覺有點(diǎn)像Windows驅(qū)動的IRP主功能碼對應(yīng)有分發(fā)函數(shù)一樣,不知道這樣理解對不對0.0,當(dāng)然了Windows應(yīng)用層是是用固定的函數(shù)(如WriteFile等,然后由I/O管理器進(jìn)行操作的),是不能自定義的。
轉(zhuǎn)載于:https://www.cnblogs.com/Ox9A82/p/5605549.html
總結(jié)
以上是生活随笔為你收集整理的【读书笔记】Android的Ashmem机制学习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【分享】WeX5的正确打开方式(1)
- 下一篇: javascript 面向对象(转)