http://lxr.free-electrons.com/source/include/linux/vmalloc.h?v=3.4;a=arm#L11
vm_struct在vmalloc.c中有许多标志。我可以理解VM_ALLOC,这意味着vm_struct是由vmalloc()调用构造的。
但其他旗帜意味着什么呢?尤其是VM_IOREMAP。它被用于Android绑定驱动程序中。
http://lxr.free-electrons.com/source/drivers/staging/android/binder.c?v=3.4;a=arm#L2819
发布于 2014-02-21 09:53:49
定义VM_IOREMAP 0x00000001 /* ioremap()和朋友*/
VM_IOREMAP意味着这个虚拟内存区域由ioremap()、*通常*(但不限于*)创建,以便将硬件设备(如PCI设备)的I/O内存区域(其物理地址)映射到内核虚拟地址范围,因此我们可以通过简单的读/写访问I/O内存。
驱动程序细节不多,但在您提到的Android绑定驱动程序中,似乎驱动程序使用它来实现mmap()系统调用,即在驱动程序和用户空间代码之间共享一组RAM页面(而不是设备I/O内存区域)。因此,在用户空间代码mmap()驱动程序char设备文件之后,它可以直接从用户级别直接访问那些RAM页面,而无需进行内核-用户级别的转换。这种编码技巧的常见用法(就我所记得的其他驱动程序情况而言)是,驱动程序在内核级的RAM页面中生成数据内容,用户级代码直接从用户级别读取这些RAM页面的数据内容。
https://stackoverflow.com/questions/21871555
复制相似问题