【讀書筆記】Android的Ashmem機制學習

Ox9A82發表於2016-06-22

  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管理器進行操作的),是不能自定義的。

  

相關文章