首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >procfs如何输出/proc/iomem?

procfs如何输出/proc/iomem?
EN

Stack Overflow用户
提问于 2019-09-17 00:39:49
回答 1查看 1.1K关注 0票数 1

我曾在这个网站上研究过类似的问题(最后列出),但仍然觉得自己遗漏了几个要点,希望有人能在这里提供帮助:

  1. 是否有连接proc文件系统的钩子将/proc/iomem inode连接到转储信息的函数?我找不到这个函数在proc中的位置。我在linux源代码树下为grep做了一个iomem,一无所获。所以也许这是一个procfs的问题.这个问题的答案可以帮助我找到下一个问题的答案。
  2. /proc/iomem有比我从dmesg/sys/firmware/memmap中提取的BIOS E820信息更多的条目(这两个条目实际上是一致的)。例如,/sys/firmware/memmap似乎没有pci内存映射区域。驱动程序的init代码调用request_mem_region()并向映射中添加更多信息,因此应该有一个全局变量(所有资源的根?)还记得这个图表吗?

关于堆栈溢出的问题,我已经研究过了:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-17 02:26:23

  1. struct resource iomem_resource是您要寻找的东西,它是在kernel/resource.c (通过proc_create_seq_data())中定义和初始化的。在同一个文件中,实例struct seq_operations resource_op定义了当您(例如,从userland ) cat文件时会发生什么。
  2. iomem_resource是一个全局导出的符号,在整个内核(包括驱动程序)中都使用它来请求资源。您可以发现分散在devm_/request_resource()内核上的实例,这些实例根据固定设置或配置采用iomem_resource或其同级ioport_resource。采用配置的方法的例子有:( a)在嵌入式设置中流行的设备树;( b) E820或UEFI,可以在x86上找到更多。

从问题中提出的b)开始,arch/x86/kernel/e820.c文件展示了如何通过insert_resource()将保留内存插入到/proc/iomem中的示例。这个优秀的链接提供了更多从BIOS请求内存映射细节的详细信息。

另一个用于设备驱动程序请求所需资源的替代序列(依赖于CONFIG_OF)是:

  1. 正在遍历设备树,并找到匹配的驱动程序。例如,通过一个struct of_device_id
  2. 驱动程序定义一个struct platform_device,它同时包含struct of_device_id和探测函数。因此,这个探测函数被调用。
  3. 在探测函数中,调用platform_get_resource(),从设备树读取reg属性。此属性定义特定设备的物理内存映射。
  4. 调用devm_request_mem_region() (这只是对request_region()的调用)来实际分配资源并将其添加到/proc/iomem中。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57965945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档