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?
答案是肯定的。
DMA中涉及的地址有几种API,了解它们的区别很重要
内核通常使用虚拟地址。 kmalloc()、vmalloc() 和类似接口返回的任何地址都是虚拟地址,可以存储在 void *.
中
从设备的角度来看,DMA 使用总线地址 space,但它可能仅限于 space 的一个子集。例如,即使系统支持主内存和 PCI BAR 的 64 位地址,它也可能使用 IOMMU,因此设备只需要使用 32 位 DMA 地址。
阅读此内核文档以获取有关 DMA-API-HOWTO.txt
的更多信息
我正在 FPGA/SoC 上开发,需要通过 DMA 访问 procfs。我知道这是一个位于内存中的伪文件系统,我想知道是否有可能获得它的地址(类似于在 System.map 中访问系统调用 table 地址的方式)我想访问内存利用率和其他统计数据。
你已经从@Barmar 的评论中得到了答案。我只想添加一些有关 procfs 的更多信息。
其实 pesudo 是假装的东西。这意味着没有实际文件的伪文件系统,它具有文件系统可访问的虚拟条目。
Is it possible to obtain address of DMA?
答案是肯定的。
DMA中涉及的地址有几种API,了解它们的区别很重要
内核通常使用虚拟地址。 kmalloc()、vmalloc() 和类似接口返回的任何地址都是虚拟地址,可以存储在 void *.
中
从设备的角度来看,DMA 使用总线地址 space,但它可能仅限于 space 的一个子集。例如,即使系统支持主内存和 PCI BAR 的 64 位地址,它也可能使用 IOMMU,因此设备只需要使用 32 位 DMA 地址。
阅读此内核文档以获取有关 DMA-API-HOWTO.txt
的更多信息