gpt4 book ai didi

linux-kernel - 实现 mmap() 的内核驱动程序是否必须创建字符设备?

转载 作者:行者123 更新时间:2023-12-04 04:41:40 25 4
gpt4 key购买 nike

我正在尝试编写一个内核驱动程序来管理一些物理上连续且可 DMA 内存的内存块(我正在使用 kmalloc(),因为这些只是 DMA 流)。要将某些功能拉入用户空间,此内存应为 mmap()使用自己的 mmap() 实现编辑.我一直在使用 Linux 设备驱动程序和 Google 中出现的不良示例作为我的主要信息来源。

我的 mmap() (现在称之为 my_mmap())需要向内核注册。使用 struct file_operations 似乎是唯一有效的方法。 ,但这需要为它创建一个字符设备和一个物理位置。我不想那样做。我只想为用户空间应用程序创建一个虚拟地址来访问内存缓冲区,而不是创建任何文件来映射内存缓冲区。这可能吗?

我确实发现帧缓冲区也有一个与 mmap() 等效的结构。实现,但这太过分了。这增加了更多的未知数。

据我了解,my_mmap()可以做繁重的工作和使用remap_pfn_range()只要我对失去的灵 active 感到满意。否则我将不得不实现本地 nopages()并使用 struct vm_operations_struct 进行注册.它是否正确?

最佳答案

mmap()操作是来自用户空间的请求,将某些源映射到其虚拟地址空间。用户空间程序识别它感兴趣的源的方式是提供一个文件描述符(它实际上只是内核已知资源的句柄)。

这意味着您必须使您的设备可表示为文件描述符,以便用户空间程序可以告诉内核它对它感兴趣(并且内核知道调用您的 mmap() 实现) - 注册字符设备是典型的方式要做到这一点。请注意,帧缓冲区设备也可以通过字符设备访问。

您不必实现其他字符设备操作,如 read()write()如果它对您的设备没有意义。字符设备只是用户空间程序打开设备的内核管理句柄的一种方式。

关于linux-kernel - 实现 mmap() 的内核驱动程序是否必须创建字符设备?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11197680/

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