内核对设备树的处理__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中存入新值

相关内容

热门资讯

海信电视有带安卓系统 亲爱的读者们,你是否在寻找一款既时尚又实用的电视呢?今天,我要给你介绍一款特别受欢迎的产品——海信电...
优学派安卓系统不能下载,优学派... 最近发现了一个让人头疼的小问题,那就是优学派安卓系统竟然不能下载应用了!这可真是让人摸不着头脑,毕竟...
安卓系统下载大疆软件,开启航拍... 你有没有想过,无人机飞行器已经不再是那些高科技电影里的专属了?现在,连咱们普通人也能轻松驾驭这些空中...
安卓系统的隐藏相册在哪,隐藏相... 你有没有发现,手机里的安卓系统有时候藏着一些小秘密呢?比如,那个神秘的隐藏相册,它就像一个隐藏的宝藏...
安卓手机分几个软件系统,多元生... 你有没有想过,你的安卓手机里竟然藏着那么多的秘密?没错,就是那些软件系统!今天,就让我带你一探究竟,...
安卓系统鼠标没反应,排查与解决... 亲爱的安卓用户们,你是否曾遇到过这样的烦恼:鼠标在电脑上动来动去,却怎么也控制不了安卓系统的界面?别...
摄像头支持安卓系统,开启智能生... 你有没有发现,现在的生活越来越离不开摄像头了?从家庭监控到手机拍照,从行车记录到无人机航拍,摄像头已...
安卓系统怎么查手机定位,安卓系... 你是不是也和我一样,有时候会突然好奇,想知道自己的手机在哪个角落里“闲逛”呢?别急,今天就来教你怎么...
学生登录系统和安卓手机 你有没有发现,现在的生活越来越离不开手机了?尤其是对于我们这些学生来说,手机简直就是我们的“小助手”...
安卓私密空间双系统,隐私无忧 你有没有想过,手机里的秘密,就像藏宝图一样,需要小心翼翼地守护呢?现在,我就要给你揭秘一个神奇的功能...
5.1系统安卓模拟器,功能解析... 你有没有想过,在电脑上也能玩安卓游戏呢?没错,这就是5.1系统安卓模拟器的神奇魅力。今天,就让我带你...
安卓哪种系统最好,安卓系统中的... 你有没有想过,手机里的安卓系统就像是个大超市,琳琅满目的商品让人挑花了眼?今天,咱们就来聊聊这个话题...
安卓系统app有hd版,极致视... 你有没有发现,手机上的安卓系统APP里,有些特别的地方呢?比如,有些APP竟然有HD版!这可不是普通...
安卓系统使用中突然死机 手机突然死机了,是不是你也遇到过这种情况?是不是瞬间感觉心情down到了谷底?别急,今天就来聊聊这个...
王者安卓系统能登苹果,王者体验... 你知道吗?最近在游戏圈里可是掀起了一股热潮呢!那就是——王者安卓系统能登苹果!是不是听起来有点不可思...
谷歌安卓系统怎么设置 你有没有发现,手机里的安卓系统就像一个神奇的魔法盒,里面藏着无数的小秘密等你去探索呢?今天,就让我带...
安卓系统热点在哪里,安卓系统热... 你是不是也和我一样,有时候手机里突然冒出一个“热点”功能,却不知道怎么用呢?别急,今天就来手把手教你...
天猫魔盒 系统 安卓 你有没有发现,家里的智能电视突然变得聪明多了?没错,这就是天猫魔盒的魔力所在!今天,就让我带你深入了...
安卓机包括什么系统,从底层架构... 你有没有想过,你的安卓手机里到底装了些什么系统呢?这可不是简单的“安卓系统”那么简单哦!今天,就让我...
福特的安卓系统怎么设置,福特汽... 你那福特车里的安卓系统是不是让你有点头疼?别急,今天就来手把手教你如何设置它,让你的福特车变得更加智...