- Android系統(tǒng)級深入開發(fā)
- 韓超 梁泉
- 345字
- 2018-12-29 13:39:32
4.3.3 Ashmem驅(qū)動程序
Ashmem的含義是匿名共享內(nèi)存(Anonymous Shared Memory),通過這種內(nèi)核的機(jī)制,可以為用戶空間程序提供分配內(nèi)存的機(jī)制。Ashmem提供給用戶空間的接口是主設(shè)備號為10的Misc字符設(shè)備,其次設(shè)備號是動態(tài)生成的。在用戶空間中,Ashmem的設(shè)備節(jié)點為/dev/ashmem。
Ashmem驅(qū)動程序的配置選項文件是init/目錄中的Kconfig。
Ashmem的源代碼在內(nèi)存管理的mm目錄中,在include/linux/中的ashmem.h文件是Ashmem系統(tǒng)的頭文件。Makefile的內(nèi)容如下所示:
mm/Makefile:obj-$(CONFIG_ASHMEM) += ashmem.o
ashmem.c中也實現(xiàn)了一個misc設(shè)備,提供了mmap和ioctl接口。ioctl的命令在ashmem.h中定義,內(nèi)容如下所示:
#define ASHMEM_SET_NAME _IOW(__ASHMEMIOC, 1, char[ASHMEM_NAME_LEN]) #define ASHMEM_GET_NAME _IOR(__ASHMEMIOC, 2, char[ASHMEM_NAME_LEN]) #define ASHMEM_SET_SIZE _IOW(__ASHMEMIOC, 3, size_t) #define ASHMEM_GET_SIZE _IO(__ASHMEMIOC, 4) #define ASHMEM_SET_PROT_MASK _IOW(__ASHMEMIOC, 5, unsigned long) #define ASHMEM_GET_PROT_MASK _IO(__ASHMEMIOC, 6) #define ASHMEM_PIN _IOW(__ASHMEMIOC, 7, struct ashmem_pin) #define ASHMEM_UNPIN _IOW(__ASHMEMIOC, 8, struct ashmem_pin) #define ASHMEM_GET_PIN_STATUS _IO(__ASHMEMIOC, 9) #define ASHMEM_PURGE_ALL_CACHES _IO(__ASHMEMIOC, 10)
Ashmem為Android系統(tǒng)提供了內(nèi)存分配功能,實現(xiàn)類似malloc的功能,更類似POSIX的共享內(nèi)存。
在Android用戶空間C工具庫libcutils庫對Ashmem進(jìn)行封裝并提供接口, system/core/include/cutils/ashmem.h是簡單封裝頭文件;system/core/libcutils/ashmem-dev.c提供了匿名共享內(nèi)存在用戶空間的調(diào)用封裝。
推薦閱讀
- 軟件項目管理(第2版)
- Android和PHP開發(fā)最佳實踐(第2版)
- 少年輕松趣編程:用Scratch創(chuàng)作自己的小游戲
- Android NDK Beginner’s Guide
- Java設(shè)計模式及實踐
- PySide GUI Application Development(Second Edition)
- Linux:Embedded Development
- 軟件品質(zhì)之完美管理:實戰(zhàn)經(jīng)典
- 時空數(shù)據(jù)建模及其應(yīng)用
- PHP與MySQL權(quán)威指南
- jQuery技術(shù)內(nèi)幕:深入解析jQuery架構(gòu)設(shè)計與實現(xiàn)原理
- Qt 4開發(fā)實踐
- Apache Solr for Indexing Data
- 虛擬現(xiàn)實:引領(lǐng)未來的人機(jī)交互革命
- Mastering PostgreSQL 11(Second Edition)