加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux-kernel – 实现mmap()的内核驱动程序是否必须创建一个字符

发布时间:2020-12-14 00:52:17 所属栏目:Linux 来源:网络整理
导读:我正在尝试编写一个内核驱动程序来管理物理上连续和可DMA的内存的一些内存块(我使用的是kmalloc(),因为它们只是DMA流).为了将一些功能引入用户空间,这个内存将使用自己的mmap()实现进行mmap()编辑.我一直在使用 Linux设备驱动程序以及在Google中显示的不良示
我正在尝试编写一个内核驱动程序来管理物理上连续和可DMA的内存的一些内存块(我使用的是kmalloc(),因为它们只是DMA流).为了将一些功能引入用户空间,这个内存将使用自己的mmap()实现进行mmap()编辑.我一直在使用 Linux设备驱动程序以及在Google中显示的不良示例作为我的主要信息来源.

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

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

据我所知,my_mmap()可以完成繁重的工作并使用remap_pfn_range(),只要我对丢失的灵活性感到满意.否则,我将不得不实现本地nopages()并使用struct vm_operations_struct注册它.它是否正确?

解决方法

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读