Linux:创建mmap()能力的虚拟文件(例如SPI内存)

时间:2011-07-08 17:41:40

标签: linux linux-device-driver mmap

我有一个char设备可以访问外部SPI内存,我想mmap()外部内存,这样我就可以从程序中访问它,就好像它是普通的内存一样。

如果我在char设备文件上使用通常的mmap()页面重映射实现,它只能让我看到一个设备内存区域,而不是它的虚拟char文件......

是否允许我这样做?

TIA

2 个答案:

答案 0 :(得分:2)

如果角色设备驱动程序提供了mmap实现,那么它将起作用。可能有一个很好的理由:

内存访问指令在总线上创建内存事务。 SPI存储器不能以这种方式寻址(尽管SPI控制器可能使用存储器映射的I / O,这是用于其自己的寄存器级接口,而不是存储器内容)。我想你可以构建一个带内存总线接口的SPI内存控制器,但是你将失去SPI标准的设备独立性。

可以模拟内存区域(获取内存页面,将其标记为无法访问,并处理访问冲突(SIGBUS和SIGSEGV),但这样效率非常低。有时您发现虚拟机正在执行此操作,但是表现非常糟糕。

答案 1 :(得分:1)

听起来你需要某种驱动程序来转换对通过面向字符的接口发送的命令的内存区域访问。这可能是一个非常简单的块设备驱动程序。