代码之家  ›  专栏  ›  技术社区  ›  kiigass

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

  •  0
  • kiigass  · 技术社区  · 6 年前

    目标:

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

    我(相信)理解的是:

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

    问题:

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

    1 回复  |  直到 6 年前
        1
  •  1
  •   oakad    6 年前

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

    最简单的方法是创建一个 procfs , sysfs debugfs 文件(它将在“/proc”、“/sys”下或系统上安装调试程序的任何位置提供)。所有这些文件系统都支持轻松(在内核方面)创建用户空间立即可见的文件。

    其他选项包括:

    1. 注册一个char或block设备(所有设备都可以使用,但是样板文件对于一个定制的设备来说可能会变得更广泛;我不认为延迟有什么特别的问题,尽管设备种类繁多)。

    2. 使用 shmem_file_setup 还有朋友们——这里的小困难是将新创建的shmem文件暴露给用户空间。

    如果你只想玩一点MMAP, PROFS 总的来说,感觉是最简单的方法(一次呼叫 proc_create 会的)。