phandle处理:
查找最大的phandle: fdt_find_max_phandle
生成新的可用的phandle: fdt_generate_phandle
获取指定节点的phandle: fdt_get_phandle
通过phandle查找节点偏移: fdt_node_offset_by_phandle
创建新的phandle:
使用 fdt_generate_phandle()生成新的phandle, 调用fdt_setprop()设置phandle
获取节点属性
//fdt 输入参数,fdt在内存中的物理地址
//nodeoffset 输入参数,节点偏移,可通过fdt_path_offset()接口获取
//name 输入参数 要获取的属性名称
//lenp 输出参数 返回的数据占用内存大小
const void *fdt_getprop(const void *fdt, int nodeoffset, const char *name, int *lenp)
//示例
const fdt32_t *php;
int len;
php = fdt_getprop(fdt, nodeoffset, "phandle", &len);
if (!php || (len != sizeof(*php))) {
//失败
}
else {
// 成功
}
设置节点属性,添加新的属性
//fdt 输入参数,fdt在内存中的物理地址
//nodeoffset 输入参数,节点偏移,可通过fdt_path_offset()接口获取
//name 输入参数 要设置的属性名称
//val 输入参数 要设置的属性值
//len 输入参数 要设置的属性值占用的内存大小
int fdt_setprop(void *fdt, int nodeoffset, const char *name,
const void *val, int len)
//示例 向节点中添加status = "okay";属性,或者将status的值更改为“okay”
ret = fdt_setprop((void*)fdtaddr, nodeoffset, "status", "okay", strlen("okay") + 1);
if (ret != 0) {
dbg("path[%s] enable failed\n", path);
return -1;
}
大小端转换
fdt32_t out cpu_to_fdt32(u32 in) 用于将cpu数据转换为fdt数据,以便写入设备树中
u32 out fdt32_to_cpu(fdt32_t in) 用于将fdt数据转换为cpu数据,以便cpu应用设备树参数
待续