【发布时间】:2020-12-29 17:27:50
【问题描述】:
我有一个设备驱动程序,它为 read、write 和其他一些文件操作提供了实现。对于从主机到外部设备的传输,建议在将用户空间数据传输到设备之前将其复制到内核空间,因为包含用户空间数据的页面可能会在传输过程中被换出。然而,这似乎是一个主要的开销。是否有可能使用驱动程序直接将用户空间数据传输到设备,而无需将中间副本复制到内核指针?当然,这需要防止可能的换出相应页面。类似的问题也适用于从设备到用户空间的传输。
【问题讨论】:
-
你可以使用mmap来访问用户空间的内核地址
-
是的,但在我的情况下,我需要使用设备驱动程序将数据传输到设备。不应直接从用户空间进行传输。
-
这就是 O_DIRECT 标志在文件 I/O 中的作用。用户缓冲区必须正确对齐,内核将其锁定在内存中。
标签: linux-kernel linux-device-driver embedded-linux