【问题标题】:what does the flag VM_IOREMAP in vmalloc.c in mean?vmalloc.c 中的标志 VM_IOREMAP 是什么意思?
【发布时间】:2014-03-19 06:08:58
【问题描述】:

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

vmalloc.c 中有一堆vm_struct 的标志。我可以理解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

【问题讨论】:

    标签: android memory-management linux-kernel android-binder


    【解决方案1】:

    define VM_IOREMAP 0x00000001 /* ioremap() 和朋友 */

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

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

    【讨论】:

      猜你喜欢
      • 2014-06-04
      • 2014-02-27
      • 2020-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-16
      相关资源
      最近更新 更多