uboot 命令行使用 fdt 命令查看设备树信息,并得到完整的设备树的 dts 和 dtb 文件

本文详细介绍了如何在U-Boot环境中获取设备树的内存地址,使用fdt命令设置地址,以及通过fdtlist和fdtprint命令查看和打印设备树信息。此外,还提到如何将fdt信息转换为dts和dtb文件进行修改和编译。


1、获取设备树在内存中的地址

如果不知道 Uboot 设备树地址的话,可以通过 printenv 命令查看环境变量,一般环境变量中带有 fdt_addr 结尾的是设备树地址。

2、fdt 命令设置设备树地址

命令格式:

fdt addr 设备数地址

举例:

fdt addr 0x130000		// 0x130000是我的设备树在内存中的地址

3、打印设备树信息

3.1、查看根节点的设备树信息

使用 fdt list 命令,如下:

Uboot#fdt list
/ {
        aliases {
        };
        cpus {
        };
        soc {
        };
		..............
        memory@00 {
        };
        gpio-keys {
        };
};

3.2、查看指定节点的设备树信息

在在 fdt print 后面加路径可以打印指定信息,比如根节点下有 gpio-keys 节点,举例如下:

Uboot#fdt print /gpio-keys
gpio-keys {
        compatible = "gpio-keys";
        key-reset {
                label = "key-reset";
                gpios = <0x00000019 0x0000000b 0x00000000>;
                linux,code = <0x00000198>;
        };
};

3.3、使用 fdt print 命令可以查看全部的设备树信息,并得到完整的设备树的 dts 和 dtb 文件

如果你没有设备树文件,这个命令就很有用了。

在使用 fdt print 打印出全部的设备树信息后,可以将保存到 dts 文件中,然后修改其中某些节点信息,最后在 linux 下使用 dtc 命令编译为 dtb,再替换到设备对应的设备树地址上,完成修改。

比如保存为 uboot.dts 文件,编译成 uboot.dtb 文件。使用下面的命令:

dtc -I dtb -O dts -o uboot.dts uboot.dtb

-I 指定输入格式
-O 指定输出格式
-o 指定输出文件

扩展:
下面是 fdt 的相关命令:

fdt - flattened device tree utility commands

Usage:
fdt addr [-c]  <addr> [<length>]   - Set the [control] fdt location to <addr>
fdt boardsetup                      - Do board-specific set up
fdt move   <fdt> <newaddr> <length> - Copy the fdt to <addr> and make it active
fdt resize [<extrasize>]            - Resize fdt to size + padding to 4k addr + some optional <extrasize> if needed
fdt print  <path> [<prop>]          - Recursive print starting at <path>
fdt list   <path> [<prop>]          - Print one level starting at <path>
fdt get value <var> <path> <prop>   - Get <property> and store in <var>
fdt get name <var> <path> <index>   - Get name of node <index> and store in <var>
fdt get addr <var> <path> <prop>    - Get start address of <property> and store in <var>
fdt get size <var> <path> [<prop>]  - Get size of [<property>] or num nodes and store in <var>
fdt set    <path> <prop> [<val>]    - Set <property> [to <val>]
fdt mknode <path> <node>            - Create a new node after <path>
fdt rm     <path> [<prop>]          - Delete the node or <property>
fdt header [get <var> <member>]     - Display header info
                                      get - get header member <member> and store it in <var>
fdt bootcpu <id>                    - Set boot cpuid
fdt memory <addr> <size>            - Add/Update memory node
fdt rsvmem print                    - Show current mem reserves
fdt rsvmem add <addr> <size>        - Add a mem reserve
fdt rsvmem delete <index>           - Delete a mem reserves
fdt chosen [<start> <end>]          - Add/update the /chosen branch in the tree
                                        <start>/<end> - initrd start/end addr
NOTE: Dereference aliases by omitting the leading '/', e.g. fdt print ethernet0.

谢谢点赞关注哈!

评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小鹅编程笔记

你的鼓励将是我最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值