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

时间:2018-07-15 18:46:27

标签: c linux linux-kernel linux-device-driver mmap

目标:

我想实现一个Linux内核设备驱动程序,其中包括mmap文件操作。我想编写一个用户空间程序(用C ++),该程序使用mmap系统调用来读取/写入设备的内存。

我(相信)理解的东西:

我读过this(以及本书的其他章节)。 mmap文件操作需要一个filep。用户空间程序需要一个可以访问的文件。我知道如何通过register_chrdev在/ dev /中创建文件,但是我了解到here,这包括更高的延迟(这是我要避免的延迟)。

问题:

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

1 个答案:

答案 0 :(得分:1)

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

最简单的方法是创建一个procfssysfsdebugfs文件(它将在“ / proc”,“ / sys”下的某个位置或debugfs已安装在您的系统上)。所有这些文件系统都支持轻松(在内核方面)创建对用户空间可见的文件。

其他选项包括:

  1. 注册一个char或block设备(所有设备都是可映射的,但样板可能会扩展到自定义设备;尽管设备种类繁多,但我认为延迟不是什么特别重要的事情。

  2. 使用shmem_file_setup和朋友-此处的一点困难是将新创建的shmem文件暴露给用户空间。

如果您只想玩点地图,procfs感觉上似乎是最简单的方法(只需调用proc_create即可)。