如何为 mmap 文件操作创建一个 filep(Linux 内核驱动程序)?

How to create a filep for mmap file operation (Linux kernel driver)?

目标:

我想实现一个Linux内核设备驱动,其中包括mmap文件操作。我想编写一个用户 space 程序(在 C++ 中),它使用对 read/write 的 mmap 系统调用到设备内存。

我(相信)理解的:

我读到 this (and other chapters of this book). The mmap file operation needs a filep. The user space program needs a file, which it can access. I know how to create a file in /dev/ by register_chrdev, but I learned ,这包括更高的延迟(这是我试图避免的)。

问题:

为文件操作 mmap 创建 filep 以及可通过 mmap 系统调用访问的文件的正确方法是什么?

基本上,您需要向用户公开 space 一些可映射的对象(文件),并且您想控制内核方面的事情。

实现此目的的最简单方法是创建一个 procfssysfsdebugfs 文件(它可以在“/proc”、“/sys”或debugfs 安装在系统上的任何位置)。所有这些文件系统都支持轻松(在内核端)创建用户立即可见的文件space。

其他选项包括:

  1. 注册一个字符或块设备(所有设备都是可映射的,但样板文件对于自定义设备可能会很长;我认为延迟不是什么特别的问题,尽管设备种类繁多)。

  2. 使用 shmem_file_setup 和朋友 - 这里的小困难是向用户公开新创建的 shmem 文件 space.

如果您只是想尝试一下 mmap,procfs 感觉是总体上最简单的方法(只需调用 proc_create 即可)。