我想实现一个Linux内核设备驱动程序,其中包括mmap文件操作。我想编写一个用户空间程序(用C ++),该程序使用mmap系统调用来读取/写入设备的内存。
我读过this(以及本书的其他章节)。 mmap文件操作需要一个filep。用户空间程序需要一个可以访问的文件。我知道如何通过register_chrdev
在/ dev /中创建文件,但是我了解到here,这包括更高的延迟(这是我要避免的延迟)。
为文件操作mmap和mmap系统调用可访问的文件创建filep的正确方法是什么?
答案 0 :(得分:1)
基本上,您需要向用户空间公开一些可以映射的对象(文件),并且您想控制事物的内核方面。
最简单的方法是创建一个procfs
,sysfs
或debugfs
文件(它将在“ / proc”,“ / sys”下的某个位置或debugfs已安装在您的系统上)。所有这些文件系统都支持轻松(在内核方面)创建对用户空间可见的文件。
其他选项包括:
注册一个char或block设备(所有设备都是可映射的,但样板可能会扩展到自定义设备;尽管设备种类繁多,但我认为延迟不是什么特别重要的事情。
使用shmem_file_setup
和朋友-此处的一点困难是将新创建的shmem文件暴露给用户空间。
如果您只想玩点地图,procfs
感觉上似乎是最简单的方法(只需调用proc_create
即可)。