uboot中fdt命令的使用

本文介绍了如何在U-Boot中添加对Device Tree的支持,并详细解释了fdt命令的使用方法。通过简单的配置即可启用Device Tree支持,并通过一系列实用的fdt命令来操作和查看Device Tree Blob。

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

转载:https://blog.youkuaiyun.com/voice_shen/article/details/7441894

依linux community的要求,从linux-3.5后,新提交的code必须对device tree进行支持。下面介绍如何使u-boot支持device tree,以及fdt命令的使用。

1. u-boot对fdt(flattened device tree)的支持。

实现:只要加入

#define CONFIG_OF_LIBFDT               /* Device Tree support */

重新编译u-boot,就可以实现对device tree的支持。

 

2. u-boot下的fdt命令使用
2.1 首先查看fdt的帮助信息。
U-Boot> fdt
fdt - flattened device tree utility commands

Usage:
fdt addr <addr> [<length>] - Set the fdt location to <addr>
fdt move <fdt> <newaddr> <length> - Copy the fdt to <addr> and make it active
fdt resize - Resize fdt to size + padding to 4k addr
fdt print <path> [<prop>] - Recursive print starting at <path>
fdt list <path> [<prop>] - Print one level starting at <path>
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 - Display header info
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 omiting the leading '/', e.g. fdt print ethernet0.
U-Boot>

2.2 使用fdt命令

把device tree blob (dtb)文件下载到内存里。

U-Boot> tftpboot 0x71000000 bshen/test-ek.dtb

设置fdt的地址

U-Boot> fdt addr 0x71000000

然后就可以使用其余的命令参数了

U-Boot> fdt header
magic: 0xd00dfeed
totalsize: 0x1887 (6279)
off_dt_struct: 0x38
off_dt_strings: 0x1648
off_mem_rsvmap: 0x28
version: 17
last_comp_version: 16
boot_cpuid_phys: 0x0
size_dt_strings: 0x23f
size_dt_struct: 0x1610
number mem_rsv: 0x0

fdt print 不跟参数时,打印出整颗树

fdt print加path参数,则打path内容,如下(其中/memory是path):
U-Boot> fdt print /memory
memory {
device_type = "memory";
reg = <0x70000000 0x4000000>;
};

 

转载于:https://www.cnblogs.com/Caden-liu8888/p/9379320.html

### U-Boot FDT 的用途与实现 #### 什么是 Flattened Device Tree (FDT)? Flattened Device Tree 是一种描述硬件结构的数据格式,通常用于嵌入式 Linux 系统。它通过设备树源文件(Device Tree Source, DTS)定义硬件配置,并编译成二进制形式的设备树 Blob (Device Tree Blob, DTB)[^2]。 在 U-Boot FDT 被用来传递硬件信息给操作系统内核。这种机制允许内核动态适配不同的硬件平台而无需重新编译内核代码。 --- #### U-Boot FDT 的主要功能 1. **硬件抽象**: 设备树提供了一种标准化的方式描述硬件资源,如内存映射、断控制器、GPIO 和串口等。 2. **灵活性**: 使用 FDT 可以减少对特定板级支持包 (Board Support Package, BSP) 的依赖,使得单个内核镜像可以运行在多个平台上。 3. **动态修改**: 在启动过程,U-Boot 可以加载并修改设备树 blob 文件的内容,以便适应实际硬件环境的需求[^1]。 --- #### 如何构建和使用设备树? 以下是创建和使用设备树的一般流程: 1. 编写 `.dts` 文件:这是设备树的源码表示形式,包含了关于目标硬件的所有必要信息。 ```c / { model = "My Custom Board"; compatible = "mycompany,custom-board"; memory@80000000 { device_type = "memory"; reg = <0x80000000 0x4000000>; }; }; ``` 2. 将 `.dts` 文件转换为 `.dtb` 文件: ```bash dtc -I dts -O dtb -o myboard.dtb myboard.dts ``` 3. 加载设备树到 RAM 并将其地址传送给内核: ```python load mmc 0:1 ${fdt_addr_r} myboard.dtb bootz ${loadaddr} - ${fdt_addr_r} ``` 4. 修改设备树节点(如果需要): ```bash fdt addr ${fdt_addr_r} fdt set /chosen stdout-path "/serial@7e800000" ``` 上述命令展示了如何设置标准输出路径指向某个 UART 控制器实例。 --- #### 工具 `mkimage` 的作用 工具 `mkimage` 主要用于打包引导镜像文件,例如将内核和设备树组合在一起形成单一的可引导镜像文件。具体操作如下所示: ```bash tools/mkimage -f kernel.its kernel.itb ``` 此命令会依据指定的 Image Configuration Script (`kernel.its`) 创建一个名为 `kernel.itb` 的多合一镜像文件,其可能包含内核、初始化 ramdisk 和设备树等内容。 --- #### 常见问题解决方法 当遇到与 FDT 相关的问题时,可以从以下几个方面入手排查: 1. 验证设备树语法是否正确——利用 `dtc` 进行验证; 2. 检查是否有遗漏的关键属性或节点; 3. 确认 U-Boot 版本兼容性以及相关补丁应用情况。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值