请教一下各位大佬一个有关设备树的问题

模范胡萝卜 2021-10-29 10:08:40

在设备树中,有没有节点的名称带‘/’字符的,如果没有,以下内核源代码的623行是在判断什么?为什么要在这个加这个判断?

 609 int __init of_scan_flat_dt(int (*it)(unsigned long node,
 610                                      const char *uname, int depth,
 611                                      void *data),
 612                            void *data)
 613 {
 614         const void *blob = initial_boot_params;
 615         const char *pathp;
 616         int offset, rc = 0, depth = -1;
 617
 618         for (offset = fdt_next_node(blob, -1, &depth);
 619              offset >= 0 && depth >= 0 && !rc;
 620              offset = fdt_next_node(blob, offset, &depth)) {
 621
 622                 pathp = fdt_get_name(blob, offset, NULL);
 623                 if (*pathp == '/')
 624                         pathp = kbasename(pathp);
 625                 rc = it(offset, pathp, depth, data); //early_init_dt_scan_chosen() // data = boot_command_line
 626         }
 627         return rc;
 628 }

...全文
556 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
hs_guanqi 2021-11-15
  • 打赏
  • 举报
回复

device tree里的名字,跟文件系统中的路径是一个道理。
比如
/soc {
controllerA {
device1:device@1 {
prop x;
};
};
};
/soc/controllerA/device@1 {
prop y;
};

是说,从设备树根/开始,有个soc节点,该节点下又有一个controllerA节点,controllerA下又有一个device@1节点。
实际上,最终,device@1的真实名字是/soc/controllerA/device@1。
只是在controllerA这个节点中书写时,device1名字里不带/ ,表示相对路径,相对于controllerA的。
之后,在其它地方再想修改device@1的属性,需用到它的匿名(软链接),即device1,然后用 &device1 的方式表示这个device!@1。
但是,如果没有起匿名呢?
也可以用绝对路径,如上述代码中,直接使用/soc/controllerA/device@1,跟 &device1 是一回事。

模范胡萝卜 2021-11-17
  • 举报
回复 1
@hs_guanqi 你看过源码没有?

4,468

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧