procfs 位于内存中,但是在哪里呢?是否可以获取其 DMA 地址?

procfs is located in memory, but where? Is it possible to obtain its address for DMA?

我正在 FPGA/SoC 上开发,需要通过 DMA 访问 procfs。我知道这是一个位于内存中的伪文件系统,我想知道是否有可能获得它的地址(类似于在 System.map 中访问系统调用 table 地址的方式)我想访问内存利用率和其他统计数据。

你已经从@Barmar 的评论中得到了答案。我只想添加一些有关 procfs 的更多信息。

其实 pesudo 是假装的东西。这意味着没有实际文件的伪文件系统,它具有文件系统可访问的虚拟条目。

Is it possible to obtain address of DMA?

答案是肯定的。

  1. DMA中涉及的地址有几种API,了解它们的区别很重要

  2. 内核通常使用虚拟地址。 kmalloc()、vmalloc() 和类似接口返回的任何地址都是虚拟地址,可以存储在 void *.

  3. 从设备的角度来看,DMA 使用总线地址 space,但它可能仅限于 space 的一个子集。例如,即使系统支持主内存和 PCI BAR 的 64 位地址,它也可能使用 IOMMU,因此设备只需要使用 32 位 DMA 地址。

阅读此内核文档以获取有关 DMA-API-HOWTO.txt

的更多信息