mmap常规的应用是将普通文件映射到用户进程空间,提高文件读写效率。linux的思想是“一切皆文件”,对于设备文件而言,同样可以实现mmap映射。一个设备,一般涉及到帧缓存会考虑实现映射接口,常见的LCD framebuffer设备的显存空间,经过映射后,用户进程可以直接操作进程内存空间将LCD显示数据写入,提高刷新效率,节省CPU拷贝内存开销。
1. 驱动mmap方法
进程调用mmap()
函数建立mmap映射,而mmap()
是在内核空间(驱动)实现的,如果驱动层未实现该函数,进程调用时,会返回-ENODEV
错误。mmap
是标准虚拟文件系统(VFS)struct file_operations
提供的接口之一,驱动实现时只需实现该函数指针实体,然后注册到驱动fops
中。
struct file_operations {
struct module *owner;
loff_t