Linux:创建mmap()able虚拟文件(如SPI内存)



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

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

有什么技巧可以让我这样做吗?

TIA

如果字符设备驱动程序提供了mmap实现,它将工作。它不这样做可能有一个很好的理由:

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

模拟一个内存区域是可能的(抓取一页内存,将其标记为不可访问,并处理访问冲突(SIGBUS和SIGSEGV),但这将是非常低效的。有时候你会发现虚拟机也这样做,但是性能很差。

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

最新更新