获取linux中每个设备的内存映射

时间:2012-04-26 13:36:03

标签: linux memory linux-kernel device

如何获取Linux识别的所有物理设备的内存映射。我已经查看了/ proc / iomem和/ proc / ioports。但是,我无法找到每个设备的内存映射。关于如何实现这个的任何想法?

4 个答案:

答案 0 :(得分:8)

据我所知,唯一的通用方式是/proc/iomem。这向您展示了为谁分配了哪些内存范围的视图内核。

如果您想了解更多细节,您需要查看每个驱动程序。

您可能会从/proc/vmallocinfo获得更多信息,因为ioremap()使用vmalloc(尽管可能不在所有架构上)。

答案 1 :(得分:4)

机器的外设寄存器位于何处?我相信以前的答案已经给了你宝贵的意见。 /proc/iomem/proc/vmallocinfo的组合为您提供了大量信息。请注意,对于vmalloc,您需要深入了解内核源代码,以将函数名称与设备的驱动程序相关联。

但真正的问题是你想要确切知道什么?你想要这个信息的目的是什么?

在我看来,您正在尝试直接访问设备的物理内存,您应该依赖ioctl,sysfs或驱动程序提供的现有服务来与设备“对话”。

不要忘记这一点:如果Linux没有向您显示您想要的信息,可能是因为您正在寻找正确的信息,或者您试图绕过现有的服务。从用户空间的角度来看,即应用程序,你永远不应该关心物理内存的位置。

答案 2 :(得分:2)

当我记得我的内核编码时间正确时,iomem / ports的输出只列出了驱动程序在那里注册的内容。所以它更像是每个驱动程序而不是每个设备的输出。

由于大多数设备都是今天的pci设备,lspci -v可能是你能得到的最好的,它显示了用过的内存和io端口。

答案 3 :(得分:0)

这个问题已经过时了,但在尝试安装Linux(仍然是新手)时,我已经在这个问题上挣扎了几天。

根据我收集的内容,每个设备都可以通过块或字符设备以及主要:次要编号进行唯一标识。

在/ sys / dev文件夹中,每个块/字符设备都有符号链接,位于各自的文件夹中。这些是指向/ sys文件夹中物理设备信息的链接。

/ dev文件夹中有并行的块/ char文件夹,每个文件夹都有相应的符号链接。这些符号链接指向/ dev文件夹中的实际设备文件。

因此,如果您可以获得设备的主要版本:您可以将/ dev中的设备映射到/ sys中的设备。对于驱动器,您可以使用lsblk获得主要:minor。