内核对设备树的处理__dtb的修改原理
admin
2024-01-30 00:08:41
0

例子1. 修改属性的值,
假设 老值: len
     新值: newlen (假设newlen > len)

a. 把原属性val所占空间从len字节扩展为newlen字节:
   把老值之后的所有内容向后移动(newlen - len)字节

b. 把新值写入val所占的newlen字节空间

c. 修改dtb头部信息中structure block的长度: size_dt_struct

d. 修改dtb头部信息中string block的偏移值: off_dt_strings

e. 修改dtb头部信息中的总长度: totalsize

例子2. 添加一个全新的属性
a. 如果在string block中没有这个属性的名字,
   就在string block尾部添加一个新字符串: 属性的名
   并且修改dtb头部信息中string block的长度: size_dt_strings
   修改dtb头部信息中的总长度: totalsize

b. 找到属性所在节点, 在节点尾部扩展一块空间, 内容及长度为: 
   TAG      // 4字节, 对应0x00000003
   len      // 4字节, 表示属性的val的长度
   nameoff  // 4字节, 表示属性名的offset
   val      // len字节, 用来存放val

c. 修改dtb头部信息中structure block的长度: size_dt_struct

d. 修改dtb头部信息中string block的偏移值: off_dt_strings

e. 修改dtb头部信息中的总长度: totalsize


可以从u-boot官网源码下载一个比较新的u-boot, 查看它的cmd/fdt.c
ftp://ftp.denx.de/pub/u-boot/

fdt命令调用过程:
    fdt set     [
    
a. 根据path找到节点
b. 根据val确定新值长度newlen, 并把val转换为字节流
c. fdt_setprop
        c.1 fdt_setprop_placeholder       // 为新值在DTB中腾出位置
                 fdt_get_property_w  // 得到老值的长度 oldlen
                 fdt_splice_struct_  // 腾空间
                        fdt_splice_  // 使用memmove移动DTB数据, 移动(newlen-oldlen)
                        fdt_set_size_dt_struct  // 修改DTB头部, size_dt_struct
                        fdt_set_off_dt_strings  // 修改DTB头部, off_dt_strings
                        
        c.2 memcpy(prop_data, val, len);  // 在DTB中存入新值

相关内容

热门资讯

专业师傅教你“天天电玩麻将到底... 自定义天天电玩麻将系统规律,只需要输入自己想要的开挂功能,一键便可以生成出微扑克专用辅助器,不管你是...
专业师傅教你“心悦麻将到底有挂... 您好:心悦麻将确实真的有挂,软件请加QQ群客服咨询:1075075785确实是有挂的,很多玩家在这款...
专业师傅教你“启航竞技到底有挂... 专业师傅教你“启航竞技到底有挂吗?其实是有挂(揭秘手机上必赢技巧)是一款可以让一直输的玩家,快速成为...
专业师傅教你“微乐浙江麻将到底... 您好:微乐浙江麻将确实真的有挂,软件请加QQ群客服咨询:1075075785确实是有挂的,很多玩家在...
专业师傅教你“好友圈到底有挂吗... 您好:好友圈确实真的有挂,软件请加QQ群客服咨询:1075075785确实是有挂的,很多玩家在这款游...
专业师傅教你“大亨互娱到底有挂... 你好大亨互娱这个游戏其实有挂的,确实是有挂的,需要了解【请加QQ群客服咨询:1075075785】,...
专业师傅教你“心悦众娱到底有挂... 您好:心悦众娱确实真的有挂,软件请加QQ群客服咨询:1075075785确实是有挂的,很多玩家在这款...
专业师傅教你“云圈丰城麻将到底... 专业师傅教你“云圈丰城麻将到底有挂吗?其实是有挂(揭秘手机上必赢技巧)1、让任何用户在无需AI插件第...
专业师傅教你“雀神麻将到底有挂... 你好雀神麻将这个游戏其实有挂的,确实是有挂的,需要了解【请加QQ群客服咨询:1075075785】,...
专业师傅教你“欢乐四喜到底有挂... 专业师傅教你“欢乐四喜到底有挂吗?其实是有挂(揭秘手机上必赢技巧)1、让任何用户在无需AI插件第三方...
专业师傅教你“欢聚茶室到底有挂... 欢聚茶室辅助是一款专注玩家量身打造的游戏记牌类型软件,在皮皮胡子辅助这款游戏中我们可以记录下每张牌的...
专业师傅教你“新百道到底有挂吗... 专业师傅教你“新百道到底有挂吗?其实是有挂(揭秘手机上必赢技巧)1、让任何用户在无需AI插件第三方神...
专业师傅教你“奕福麻将到底有挂... 现在人们打麻将谁不想赢?但是手机麻将是这么好赢的吗?在手机上打麻将想赢,不仅需要运气,也需要技巧。掌...
专业师傅教你“丁丁麻将到底有挂... 现在人们打麻将谁不想赢?但是手机麻将是这么好赢的吗?在手机上打麻将想赢,不仅需要运气,也需要技巧。掌...
专业师傅教你“乐易四川麻将到底... 专业师傅教你“乐易四川麻将到底有挂吗?其实是有挂(揭秘手机上必赢技巧)是一款可以让一直输的玩家,快速...
专业师傅教你“万盛竞技到底有挂... 自定义万盛竞技系统规律,只需要输入自己想要的开挂功能,一键便可以生成出微扑克专用辅助器,不管你是想分...
专业师傅教你“好友跑得快到底有... 自定义好友跑得快系统规律,只需要输入自己想要的开挂功能,一键便可以生成出微扑克专用辅助器,不管你是想...
专业师傅教你“波特互娱到底有挂... 自定义波特互娱系统规律,只需要输入自己想要的开挂功能,一键便可以生成出微扑克专用辅助器,不管你是想分...
专业师傅教你“喜乐川南棋牌到底... 喜乐川南棋牌辅助是一款专注玩家量身打造的游戏记牌类型软件,在皮皮胡子辅助这款游戏中我们可以记录下每张...
专业师傅教你“多乐山东麻将到底... 多乐山东麻将辅助是一款专注玩家量身打造的游戏记牌类型软件,在皮皮胡子辅助这款游戏中我们可以记录下每张...