You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何读取Device Tree节点的label?替代full_name返回的节点名

问题解答

你遇到的情况是因为struct device_node->full_name存储的是设备树节点的名字字段(即冒号:之后的pid@43c00000部分),而冒号前的pid_0是节点的标签(label)——这个标签是DTS中用来跨节点引用的符号,编译成DTB后,内核不会将其保留在device_node结构体里,所以直接通过full_name读不到。

读取标签的可行方法

  • 方法1:在设备树节点中添加自定义label属性
    这是最直接的解决方案,不需要修改节点名,只需在每个pid节点里添加一个自定义属性来存储你需要的标识,比如:

    pid_0: pid@43c00000 {
            label = "pid_0"; // 添加自定义label属性
            clock-names = "s00_axi_aclk";
            clocks = <&clkc 15>;
            compatible = "xlnx,pid-1.0";
            reg = <0x43c00000 0x10000>;
            // 其他原有属性...
    };
    

    然后在驱动代码中使用内核提供的函数读取这个属性:

    const char *label_str;
    if (!of_property_read_string(np, "label", &label_str)) {
        // 成功读取到label_str,值为"pid_0"
    }
    
  • 方法2:通过节点的reg属性或唯一标识区分
    如果不想修改设备树,可以通过节点的reg地址(比如0x43c00000对应pid_0,0x43c10000对应pid_1)做映射区分,但这种方式灵活性不如方法1。

关于修改节点名的疑问

不需要将节点名改成pid0@43c00000,这样只是把节点的名字字段改成了pid0,依然无法直接获取到pid_0这个标识,完全没必要做这种修改。

内容的提问来源于stack exchange,提问作者mjkpolo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 07:10:06