如何获取Linux可识别的所有物理设备的内存映射。我已经查找了/proc/iomem和/proc/ioports。但是,我找不到每个设备的内存映射。有关于如何实现这一点的想法吗?
发布于 2012-04-30 10:15:09
据我所知,唯一通用的方法是/proc/iomem。这向您展示了分配给谁的内存范围的核心视图。
如果你想了解更多细节,你需要查看每个单独的驱动程序。
您可能会从/proc/vmallocinfo获得更多信息,因为ioremap()使用vmalloc (尽管可能不是在所有架构上)。
发布于 2012-05-20 07:00:50
您的机器的外围设备寄存器位于何处?我相信之前的回答已经为您提供了有价值的输入。/proc/iomem和/proc/vmallocinfo的结合为您提供了大量信息。请注意,使用vmalloc时,您需要深入研究内核源代码,以便将函数名与设备驱动程序相关联。
但真正的问题是你到底想知道什么?您需要此信息的目的是什么?
在我看来,您似乎是在尝试直接访问设备的物理内存,您应该依靠ioctl、sysfs或驱动程序提供的现有服务来与设备“对话”。
不要忘记这一点:如果Linux没有显示您想要的信息,这可能是因为您没有寻找正确的信息,或者您试图绕过现有的服务。从用户空间的角度来看,即应用程序,你永远不应该关心物理内存的位置。
发布于 2012-04-26 21:42:37
当我记得我的内核编码时间正确时,iomem/ports的输出只列出了驱动程序在那里注册的内容。因此,它更多地是每个驱动程序的输出,而不是每个设备的输出。
因为现在大多数设备都是pci设备,所以lspci -v可能是你能得到的最好的,它可以显示已使用的内存和io端口。
https://stackoverflow.com/questions/10334596
复制相似问题