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

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


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.

谢谢点赞关注哈!

<think>好的,我需要回答用户关于IMX6ULL使用EMMC启动时设备树文件位置的问题。首先,用户提到了正点原子的开发板,所以我要参考他们提供的资料。根据引用[1],正点原子的设备树文件位于内核源码中的`arch/arm/boot/dts/`目录下,具体是`imx6ull-14x14-evk.dts``imx6ull-alientek-emmc.dts`。用户可能需要检查这两个文件,特别是原子的定制文件。 接下来,用户可能需要知道如何修改设备树以防止LED占用,如引用[1]中提到的。这里需要指导用户找到对应的节点,比如在`imx6ull-alientek-emmc.dts`中查找LED相关的配置,注释或删除相关部分。然后编译内核设备树使用`make dtbs`命令生成新的dtb文件,路径在`arch/arm/boot/dts/`下。 另外,引用[2]提到EMMC启动需要配置eFUSE或GPIO,这部分信息在芯片手册中,但用户的问题是关于设备树的位置,所以可能不需要深入讨论启动配置,但可以提及设备树与硬件启动方式的关联。 引用[3]指出使用出厂工具烧录系统时的问题,如果用户遇到设备树找不到的错误,可能需要检查设备树文件是否正确编译放在了指定的NFS或烧录路径下。确保生成的dtb文件在启动时被正确加载。 总结步骤:定位设备树文件路径→修改设备树→编译生成dtb→部署到正确位置。需要提醒用户注意备份原文件,避免编译错误,确认启动参数是否正确指向新的设备树文件。</think>根据正点原子IMX6ULL开发板的系统架构,EMMC启动时的设备树文件路径及配置流程如下: 1. **设备树文件位置** - 内核源码目录:`linux-imx/arch/arm/boot/dts/` - 关键设备树文件: * 基础定义文件:`imx6ull-14x14-evk.dts` * 正点原子定制文件:`imx6ull-alientek-emmc.dts`[^1] - 最终生成的设备树二进制文件为`imx6ull-alientek-emmc.dtb`,存放于编译后的`arch/arm/boot/dts/`目录 2. **设备树修改流程** ```bash # 进入内核源码目录 cd ~/linux/imx6ull/linux-imx # 修改设备树文件 vim arch/arm/boot/dts/imx6ull-alientek-emmc.dts # 编译设备树 make dtbs ``` 修改LED配置时需定位到`led`节点: ```dts leds { compatible = "gpio-leds"; led0: led@0 { // 注释或删除以下status属性 // status = "okay"; }; }; ``` 3. **部署验证** - 编译生成的`.dtb`文件需拷贝到TF卡或NFS服务器目录: ```bash cp arch/arm/boot/dts/imx6ull-alientek-emmc.dtb /nfs_root/ ``` - 通过uboot设置加载路径: ```bash setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.1.100:/nfs_root/rootfs' setenv fdt_file imx6ull-alientek-emmc.dtb saveenv ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小菜狗编程笔记

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

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

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

打赏作者

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

抵扣说明:

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

余额充值