【读书笔记】Android的Ashmem机制学习
Ashmem是安卓在linux基礎(chǔ)上添加的驅(qū)動模塊,就是說安卓有l(wèi)inux沒有的功能。
Ashmem模塊在內(nèi)核層面上實現(xiàn),在運行時庫和應(yīng)用程序框架層提供了訪問接口。在運行時庫層提供的是C++接口,在應(yīng)用框架層提供的是java接口。
首先從驅(qū)動模塊開始分析起,驅(qū)動模塊加載之后首先進(jìn)行misc_register來注冊一個ashmem_misc設(shè)備。這個設(shè)備文件就是"/dev/ashmem"。這個設(shè)備對用戶層提供了四個操作open、mmap、release、ioctl。但是沒有read和write操作,這兩個操作靠mmap來實現(xiàn)。
-
- open(): 對應(yīng)于ashmem_open,實質(zhì)上是創(chuàng)建一個ashmem_area結(jié)構(gòu)體,返回到文件結(jié)構(gòu)中。這么做的目的是打開ashmem
- mmap(): 對應(yīng)于ashmem_mmap,功能是在tmpfs中創(chuàng)建臨時文件,并且設(shè)置文件映射
- ioctl(): ? ??? 對應(yīng)ashmem_mmap,通過swtich結(jié)構(gòu)提供不同的設(shè)置功能
這里有一個例子,就是打開匿名共享內(nèi)存文件的函數(shù)執(zhí)行流程。
應(yīng)用層類:MemoryFile的構(gòu)造函數(shù)——》JNI函數(shù):native_open——》運行庫: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的。這個我個人感覺有點像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)
- 下一篇: Android引入library失败的可