如何为 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 一些可映射的对象(文件),并且您想控制内核方面的事情。
实现此目的的最简单方法是创建一个 procfs
、sysfs
或 debugfs
文件(它可以在“/proc”、“/sys”或debugfs 安装在系统上的任何位置)。所有这些文件系统都支持轻松(在内核端)创建用户立即可见的文件space。
其他选项包括:
注册一个字符或块设备(所有设备都是可映射的,但样板文件对于自定义设备可能会很长;我认为延迟不是什么特别的问题,尽管设备种类繁多)。
使用 shmem_file_setup
和朋友 - 这里的小困难是向用户公开新创建的 shmem 文件 space.
如果您只是想尝试一下 mmap,procfs
感觉是总体上最简单的方法(只需调用 proc_create
即可)。
目标:
我想实现一个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 一些可映射的对象(文件),并且您想控制内核方面的事情。
实现此目的的最简单方法是创建一个 procfs
、sysfs
或 debugfs
文件(它可以在“/proc”、“/sys”或debugfs 安装在系统上的任何位置)。所有这些文件系统都支持轻松(在内核端)创建用户立即可见的文件space。
其他选项包括:
注册一个字符或块设备(所有设备都是可映射的,但样板文件对于自定义设备可能会很长;我认为延迟不是什么特别的问题,尽管设备种类繁多)。
使用
shmem_file_setup
和朋友 - 这里的小困难是向用户公开新创建的 shmem 文件 space.
如果您只是想尝试一下 mmap,procfs
感觉是总体上最简单的方法(只需调用 proc_create
即可)。