【问题标题】:Device tree phandle hex to reference node设备树 phandle hex 到参考节点
【发布时间】:2021-07-09 13:20:26
【问题描述】:

是否可以从 phandle 派生参考节点?

例如,我的 RPI 4 有这个:

mmcnr@7e300000 {
    compatible = "brcm,bcm2835-mmc\0brcm,bcm2835-sdhci";
    reg = <0x7e300000 0x100>;
    interrupts = <0x00 0x7e 0x04>;
    clocks = <0x07 0x1c>;
    dmas = <0x0b 0x0b>;
    dma-names = "rx-tx";
    brcm,overclock-50 = <0x00>;
    non-removable;
    status = "okay";
    pinctrl-names = "default";
    pinctrl-0 = <0x1f>;
    bus-width = <0x04>;
    phandle = <0x38>;
};

我怎么知道节点 0x38 是什么?

【问题讨论】:

  • 为了清楚起见,您不是试图从内核代码中找到实时设备树中的节点,而是试图在 dtb 文件(或 dtb 文件的反编译版本)中找到节点来自用户空间代码。对吗?
  • @IanAbbott 是的,我有一个 dtb 并将其反编译为 dts。现在我想知道 0x38 是哪个节点。
  • 您可能必须使用 libfdt 库编写自己的代码。将整个 dtb 放入缓冲区后,此特定问题的有用函数是 fdt_check_fullfdt_check_header 用于完整性检查,fdt_node_offset_by_phandle 用于获取具有指定 phandle 值的节点的偏移量,fdt_get_path 用于获取通向节点偏移的路径。

标签: linux-kernel raspberry-pi4 device-tree dts


【解决方案1】:

您可以使用 of_find_all_nodes() 遍历所有节点,首先将参数作为 NULL 传递给此函数。此函数返回 device_node .. 如果匹配,您可以将返回的 device_node->phandle 与 0x38 进行比较。那就是节点

【讨论】:

  • 不错的选择,但我需要在本地而不是在系统上解析它。你推荐软件(在 Linux 上运行)吗?否则我的周末将充满快乐的节目:D
  • 另外,在我的示例中,device_node-&gt;phandle 是指 phandle 中的 mmcnr 节点吗?所以我的mmcnr phandledevice_node struct 中的phandle 可以与struct property *properties; 中的phandle property 不同,后者将具有phandle=&lt;0x38&gt; 的表示?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 2010-11-22
  • 2020-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-16
相关资源
最近更新 更多