gpt4 book ai didi

c - procfs 如何输出/proc/iomem?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:31:23 28 4
gpt4 key购买 nike

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

  1. proc 有钩子(Hook)吗?连接 /proc/iomem 的文件系统inode转储信息的功能?我找不到这个函数在 proc fs 中的位置。我做了一个grep在 linux 源代码树下 fs/proc对于 iomem ,一无所获。所以也许它更像是一个procfs问题...这个问题的答案可能会帮助我挖掘下一个问题的答案..

  2. /proc/iomem条目数比我从 dmesg 中提取的 BIOS E820 信息多或 /sys/firmware/memmap (这两个实际上是相互一致的)。例如,/sys/firmware/memmap似乎没有 pci 内存映射区域。驱动程序的初始化代码调用 request_mem_region()并向 map 添加更多信息,所以某处应该有一个记住这张图的全局变量(所有资源的根?)?

我查过的关于stackoverflow的问题:

最佳答案

  1. struct resource iomem_resource就是你要找的,它在 kernel/resource.c 中定义和初始化(通过 proc_create_seq_data() )。在同一文件中,实例 struct seq_operations resource_op定义当你发生什么,例如 cat来自用户空间的文件。
  2. iomem_resource是一个全局导出的符号,在整个内核中使用,包括驱动程序,以请求资源。您可以找到分散在 devm_/request_resource() 内核中的实例取iomem_resource或其兄弟ioport_resource基于固定设置或基于配置。采用配置的方法示例是 a) 嵌入式设置中普遍使用的设备树,以及 b) E820 或 UEFI,它们在 x86 上的应用更多。

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

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

  1. Open Firmware API 正在遍历设备树,并找到匹配的驱动程序。例如通过 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 .

关于c - procfs 如何输出/proc/iomem?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57965945/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com