Android系统级深入开发
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

4.3.5 pmem驱动程序

pmem驱动程序是物理内存的驱动程序,可用于分配物理内存。pmem提供给用户空间的接口是主设备号为10的Misc字符设备,其次设备号是动态生成的。

pmem的内容在drivers/misc/目录中,Makefile中的内容如下所示:

    obj-$(CONFIG_ANDROID_PMEM) += pmem.o

pmem的头文件是include/linux目录中的android_pmem.handroid_pmem.h文件,在drivers/misc/目录中的pmem.c中实现功能。

pmem驱动程序提供了mmap和ioctl的接口,这些ioctl的命令如下所示:

    #define PMEM_IOCTL_MAGIC 'p'
    #define PMEM_GET_PHYS       _IOW(PMEM_IOCTL_MAGIC, 1, unsigned int)
    #define PMEM_MAP             _IOW(PMEM_IOCTL_MAGIC, 2, unsigned int)
    #define PMEM_GET_SIZE       _IOW(PMEM_IOCTL_MAGIC, 3, unsigned int)
    #define PMEM_UNMAP           _IOW(PMEM_IOCTL_MAGIC, 4, unsigned int)
    #define PMEM_ALLOCATE       _IOW(PMEM_IOCTL_MAGIC, 5, unsigned int)
    #define PMEM_CONNECT        _IOW(PMEM_IOCTL_MAGIC, 6, unsigned int)
    #define PMEM_GET_TOTAL_SIZE     _IOW(PMEM_IOCTL_MAGIC, 7, unsigned int)

这些ioctl命令包含了获得物理内存、映射和解除映射内存、获得内存尺寸、分配、连接和获得全部大小等功能。