官术网_书友最值得收藏!

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)用封裝。

主站蜘蛛池模板: 汾西县| 贵阳市| 曲阳县| 怀集县| 南康市| 鸡东县| 托克逊县| 察哈| 建阳市| 临夏市| 汝阳县| 宜君县| 建瓯市| 闽侯县| 万荣县| 灵宝市| 吴旗县| 大邑县| 三原县| 秦皇岛市| 天门市| 太白县| 温泉县| 北流市| 全南县| 庆城县| 岐山县| 庐江县| 沂水县| 榆社县| 新密市| 宝清县| 南充市| 突泉县| 原阳县| 郑州市| 阳东县| 隆昌县| 罗源县| 磐安县| 宝山区|