【学习日记】U-Boot 环境变量与 U-Boot 命令概述

本文记录了在学习 i.MX6ULL 的 U-Boot 代码时关于环境变量和 U-Boot 命令的一些关键点。

1 环境变量的定义

在这里插入图片描述
在 U-Boot 中,使用 #define 和反斜杠 \ 来定义多行字符串。

  1. 反斜杠 \

    • 反斜杠用于指示宏定义在下一行继续。这意味着所有的行将被视为一个连续的字符串。
  2. 字符串字面量

    • 每一行都是一个字符串字面量,\0 表示字符串的结束符。这样可以确保每个键值对都是独立的。
  3. 最终效果

    • 这个宏定义最终会被展开为一个长字符串,其中包含多个键值对,每个键值对之间用 \0 分隔。

这种方式通常用于定义配置或环境设置,便于在程序中管理和使用。

2 带有 U-Boot 命令的环境变量

#define CONFIG_EXTRA_ENV_SETTINGS \
    "findfdt=" \
    "if test $fdt_file = undefined; then " \
    "if test $board_name = EVK && test $board_rev = 9X9; then " \
    "setenv fdt_file imx6ull-9x9-evk.dtb; fi; " \
    "if test $board_name = EVK && test $board_rev = 14X14; then " \
    "setenv fdt_file imx6ull-14x14-evk.dtb; fi; " \
    "if test $fdt_file = undefined; then " \
    "echo WARNING: Could not determine dtb to use; fi; " \
    "fi;\0"

如上面的代码,也是使用 #define 和反斜杠 \ 来定义多行字符串,效果就是多行的字符串被连接在一起了。

2.1 U-Boot 命令解析方式

U-Boot 是一个引导加载程序,它有自己的命令解释器,可以执行这些命令。

3 FDT

上文的代码用于查找开发板对应的设备树文件。
FDT是"Flattened Device Tree"(扁平化设备树)的缩写。它是一种用于描述硬件配置的数据结构,在Linux内核中被广泛使用。

扁平化设备树的主要特点包括:

  1. 它是一种树形结构,有一个名为"/"的根节点,每个节点可以有子节点和属性。

  2. FDT用于描述处理器、内存大小和银行、中断配置以及外设等硬件信息。

  3. 它最初是为PowerPC架构引入的,目的是标准化固件接口。现在,FDT已成为PowerPC、Micro Blaze和SPARC架构中使用的配置方法。

  4. 使用FDT可以将板级硬件信息从Linux内核中分离出来,使得同一个SoC可以支持多种不同的板子,提高了系统的灵活性。

  5. 设备树源文件通常使用.dts扩展名,可以通过设备树编译器(DTC)编译成二进制的.dtb文件(设备树blob)。

在嵌入式系统开发中,特别是在使用ARM架构的处理器(如i.MX6ULL)时,理解和使用FDT是非常重要的,因为它已经成为Linux驱动开发中的一个关键概念。

3.1 findfdt 环境变量中的命令解释

findfdt 做的事情就是判断 fdt_file 是否为 undefined。如果 fdt_file 为 undefined,那么就需要根据板子信息得出所需的 .dtb 文件名。

此时 fdt_file 为 undefined,因此根据 board_nameboard_rev 来判断实际所需的 .dtb 文件:

  • 如果 board_name 为 EVK 并且 board_rev 为 9x9,则 fdt_fileimx6ull-9x9-evk.dtb
  • 如果 board_name 为 EVK 并且 board_rev 为 14x14,则 fdt_file 设置为 imx6ull-14x14-evk.dtb

因此,IMX6ULL EVK 板子的设备树文件就是 imx6ull-14x14-evk.dtb。最终,运行 findfdt 的结果就是将 fdt_file 设置为 imx6ull-14x14-evk.dtb

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

__Witheart__

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值