如何在不覆盖父节点的情况下修改Device Tree节点的reg值?
设备树修改节点reg值并保持节点名匹配的正确方法
你遇到的问题核心是:直接通过节点标签&n100修改reg值后,节点名还是node@100,和新的reg值200不匹配,违反了设备树规范——节点名中@后的地址必须和reg属性的第一个值一致。
要在不覆盖父节点其他内容的前提下解决这个问题,正确做法是先删除原有节点,再在父节点上下文里重新定义带有新reg值和对应节点名的节点,并保留原标签,具体操作如下:
操作示例
- 引用父节点
&parent_name,确保只修改该父节点下的目标节点,不影响其他子节点; - 用
/delete-node/指令删除原有的node@100节点; - 重新定义节点,将节点名改为
node@200(对应新的reg值),同时保留原标签n100,并设置新的reg值。
完整代码如下:
&parent_name { // 删除原有的node@100节点 /delete-node/ node@100; // 重新定义节点,标签仍用n100,节点名和reg值对应 n100 : node@200 { reg = <200>; // 这里可以复制原node@100节点的其他属性,比如compatible、status等 }; };
为什么原方法不行?
原方法&n100 { reg = <200>; }是直接修改标签n100绑定的原有节点(node@100)的reg值,节点名不会自动跟着reg值改变,最终导致节点名和reg值不匹配,不符合设备树的命名规范。
注意事项
- 如果原节点有其他属性(比如
compatible、status、中断配置等),需要在新节点中保留这些属性,否则会丢失原有配置; - 必须在父节点的引用块内操作,这样只会修改目标节点,不会影响父节点下的其他子节点(比如示例中的
n10节点)。
内容的提问来源于stack exchange,提问作者hesham_EE
相关产品推荐
相关产品推荐

