允许 /dev/mem 的部分内存映射

允许 /dev/mem 的部分内存映射

我有一个 SoC-FPGA(DE0-nano-soc),其中在单个芯片上包含一个 ARM-Cortex-A9 cpu 和一个 Cyclone V FPGA。 CPU 可以访问 1GB DDR3 内存,但 FPGA 也可以访问该内存,以便它们可以共享数据。

现在我已经使用引导参数将 Linux 配置为仅看到 900M 的总 RAM mem=900M。这样我就有了一些 Linux 不接触的 RAM,我可以用它来与 FPGA 通信。我想使用 写入 RAM 的那部分/dev/mem。当我内存映射适当的地址时,我收到权限被拒绝错误,我猜测这是因为我的内核已CONFIG_STRICT_DEVMEM设置。

现在我真的不想取消这个设置,因为我真的只需要写入 linux 不使用的地址。有没有办法告诉Linux内核可以写入该特定部分,但正常内存仍然有限制?

答案1

我找到了这个:https://docs.pmem.io/getting-started-guide/creating-development-environments/linux-environments/linux-memmap

假设您有一个足够新的内核,添加memmap=124!900应该使所需的内存可以作为/dev/pmem0.

建议同时添加nokaslr,否则可能会出现随机系统错误。 KASLR 是一项安全功能,使内核更难被利用。

虽然这已被用于迷人的黑客,我无法为您推荐它。我不知道如何管理 CPU 缓存与 FPGA(又名 DMA)的更新。我们的建议其他问题不是这样做:-)。


还有另一种选择,尽管它没有回答所写的问题。我认为iomem=relaxed如果您想暂时禁用 STRICT_DEVMEM 而不编译整个新内核,您可以使用 启动。

相关内容