【发布时间】:2011-06-22 18:31:23
【问题描述】:
为什么不遵循伪代码工作(O_DIRECT 导致 EFAULT)
in_fd = open("/dev/mem");
in_mmap = mmap(in_fd);
out_fd = open("/tmp/file", O_DIRECT);
write(out_fd, in_mmap, PAGE_SIZE);
虽然跟随(没有 O_DIRECT)
in_fd = open("/dev/mem");
in_mmap = mmap(in_fd);
out_fd = open("/tmp/file");
write(out_fd, in_mmap, PAGE_SIZE);
我猜这是虚拟内核页面到虚拟用户页面的东西,不能在 write 调用中翻译?
最好的问候,
弗里德里希
【问题讨论】:
-
O_DIRECT写入需要固定页面;也许这就是问题所在……你到底想做什么?如果这是一个内存映射的硬件设备,您最好在驱动程序中添加splice支持......另外,请提供一个更完整的示例(包括所有系统调用的所有标志)。理想情况下,任何人都可以编译并运行以重现。
标签: linux-kernel mmap