【问题标题】:How to read child node property in a device tree如何读取设备树中的子节点属性
【发布时间】:2022-01-14 01:51:16
【问题描述】:
我一直在尝试读取设备树中的子节点属性。想不通,有大神帮忙看看吗?
我有一个 dts 文件
AA {
child 1: {
property 1 : XXX
property 2 : XXX
}
child 2: {
property 1 : XXX
property 2 : XXX
}
BB {
child 1: {
property 1 : XXX
property 2 : XXX
}
child 2: {
property 1 : XXX
property 2 : XXX
}
有没有什么方法可以读取给定 dts 的 AA 节点中子 2 的属性?
【问题讨论】:
标签:
linux-kernel
linux-device-driver
device-tree
【解决方案1】:
是的,你可以做到。写一个类似下面的函数,在AA中用BB的子节点的路径调用即可。
例如,如果您需要访问 BB/child_2 属性,则从 AA 将绝对路径传递给 of_find_node_by_path() 函数。
另外,检查内核中可能有用的_*系列函数。
static void access_dt(void)
{
/* device node path - check it from /proc/device-tree/ */
char *path = "/path/to/BB/child_2";
struct device_node *dt_node;
const u8 *prop = NULL;
int ret;
dt_node = of_find_node_by_path(path);
if (!dt_node) {
printk(KERN_ERR "Failed to find node by path: %s.\n");
} else {
printk(KERN_INFO "Found the node for %s.\n", path);
prop = of_get_property(dt_node, "property 2", &ret);
if(!prop) {
//You are still in trouble!
} else {
//You have got property 2 of BB!
}
}
}