Linux kernel 在将数据传输到外部设备之前,是否需要将数据从用户空间复制到内核?

Linux kernel 在将数据传输到外部设备之前,是否需要将数据从用户空间复制到内核?,linux-kernel,linux-device-driver,embedded-linux,Linux Kernel,Linux Device Driver,Embedded Linux,我有一个设备驱动程序,它提供了读、写和一些其他文件操作的实现。对于从主机到外部设备的传输,建议在将用户空间数据传输到设备之前将其复制到内核空间,因为包含用户空间数据的页面在传输过程中可能会被调出。然而,这似乎是一个主要的开销。是否有可能使用驱动程序直接将用户空间数据传输到设备,而无需将中间副本复制到内核指针?当然,这需要防止可能的交换出相应的页面。从设备到用户空间的传输也存在类似的问题。您需要将数据发送到设备驱动程序。源数据来自哪里?如果它来自文件,您可以从用户应用程序使用:它打开源数据文件(文

我有一个设备驱动程序,它提供了读、写和一些其他文件操作的实现。对于从主机到外部设备的传输,建议在将用户空间数据传输到设备之前将其复制到内核空间,因为包含用户空间数据的页面在传输过程中可能会被调出。然而,这似乎是一个主要的开销。是否有可能使用驱动程序直接将用户空间数据传输到设备,而无需将中间副本复制到内核指针?当然,这需要防止可能的交换出相应的页面。从设备到用户空间的传输也存在类似的问题。

您需要将数据发送到设备驱动程序。源数据来自哪里?如果它来自文件,您可以从用户应用程序使用:它打开源数据文件(文件描述符fd1),打开目标驱动程序(文件描述符fd2),并调用sendfile()将数据从fd1发送到fd2。以下是一个演示此系统调用的增强版工具。

您需要将数据发送到设备驱动程序。源数据来自哪里?如果它来自文件,您可以从用户应用程序使用:它打开源数据文件(文件描述符fd1),打开目标驱动程序(文件描述符fd2),并调用sendfile()将数据从fd1发送到fd2。下面是一个演示此系统调用的增强版工具。

您可以使用mmap,它允许您在用户空间中访问内核地址是的,但在我的情况下,我需要使用设备驱动程序将数据传输到设备。传输不应直接从用户空间进行。这是O_DIRECT标志在文件I/O中的作用。用户缓冲区必须正确对齐,内核将其锁定在内存中。您可以使用mmap,它允许您访问用户空间中的内核地址是的,但在我的情况下,我需要使用设备驱动程序将数据传输到设备。传输不应直接从用户空间进行。这是O_DIRECT标志在文件I/O中的作用。用户缓冲区必须正确对齐,内核将其锁定在内存中。设备驱动程序的数据来自用户空间应用程序。设备驱动程序的数据来自用户空间应用程序。它将以数组的形式出现。