gpt4 book ai didi

c - 在中断处理程序中将数据从内核缓冲区移动到用户空间缓冲区

转载 作者:可可西里 更新时间:2023-11-01 11:52:04 24 4
gpt4 key购买 nike

这里是 Linux 内核和驱动程序开发的新手。

我有数据以及来自 pcie 设备的中断。每次检测到中断时,我都希望驱动程序将数据从缓冲区(位于驱动程序中)复制到用户空间中的大缓冲区。用户应用程序不应“轮询”驱动程序以获取新数据。

目前我的中断处理程序试图将数据copy_to_user() 到用户空间。然而,这失败了。 copy_to_user() 总是返回 n,其中 n 是我希望复制的字节数。我的猜测是中断处理程序的调用导致上下文切换导致复制失败?

我应该如何着手完成这项工作?

谢谢!

最佳答案

copy_to_user() 必须在用户空间进程的上下文中运行,因为不同的进程有不同的地址空间。此外,如果内存恰好被换出,copy_to_user() 必须将其读回,这需要文件 I/O 和休眠,而这不能从中断处理程序内部完成。

通常,您在中断处理程序中使用的任何缓冲区都必须由驱动程序本身控制(即分配)。如果您想授予某些用户空间程序访问该缓冲区的权限,请实现 mmap()。

在实践中,将数据从 DMA 缓冲区复制到更大的缓冲区通常是应用程序的工作。

关于c - 在中断处理程序中将数据从内核缓冲区移动到用户空间缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41886232/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com