0

http://lxr.free-electrons.com/source/include/linux/vmalloc.h?v=3.4;a=arm#L11

vm_structin有一堆标志vmalloc.c。我可以理解VM_ALLOC,这意味着vm_struct是由vmalloc()调用构造的。

但是其他标志是什么意思?特别是VM_IOREMAP. 它用于Android binder 驱动程序。

http://lxr.free-electrons.com/source/drivers/staging/android/binder.c?v=3.4;a=arm#L2819

4

1 回答 1

3

定义 VM_IOREMAP 0x00000001 /* ioremap() 和朋友 */

VM_IOREMAP 表示这个虚拟内存区域是由 ioremap() 创建的,*通常*(但*不限于*)将硬件设备(如 PCI 设备)的 I/O 内存区域(由其物理地址表征)映射到内核虚拟地址范围,所以我们可以通过简单的读/写来访问 I/O 内存。

没有过多介绍驱动程序细节,但是在您提到的Android binder驱动程序中,驱动程序似乎正在使用它来实现 mmap() 系统调用,即在驱动程序之间共享一组RAM页面(不是设备I / O内存区域)和用户空间代码。因此,在用户空间代码 mmap() 驱动程序字符设备文件之后,它可以直接从用户级直接访问这些 RAM 页,而无需进行内核-用户级转换。这种编码技巧的常见用法(据我所记得的其他驱动程序案例)是,驱动程序将数据内容生成到内核级的那些 RAM 页面中,用户级代码直接从用户级读取这些 RAM 页面的数据内容。

于 2014-02-21T09:53:49.817 回答