【问题标题】:Getting memory map of every device in linux获取linux中每个设备的内存映射
【发布时间】:2012-05-07 06:07:27
【问题描述】:

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

【问题讨论】:

    标签: linux memory linux-kernel device


    【解决方案1】:

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

    根据我收集到的信息,每个设备都通过它是块设备还是字符设备以及主要:次要编号来唯一标识。

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

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

    所以如果你能得到一个设备的major:minor,你就可以将/dev 中的设备映射到/sys 中的设备。对于驱动器,您可以使用 lsblk 获取major:minor。

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        【解决方案3】:

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

        如果您想了解更多详细信息,您需要查看每个单独的驱动程序。

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

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

          • 是的..我也看过 lspci -vvv ,但所有设备都没有列出来..所以我也希望有别的东西
          猜你喜欢
          • 1970-01-01
          • 2017-11-02
          • 2013-09-02
          • 2014-02-15
          • 1970-01-01
          • 2013-03-31
          • 1970-01-01
          • 1970-01-01
          • 2016-03-27
          相关资源
          最近更新 更多