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

news2024/9/23 8:20:38

本文记录了在学习 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1964365.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mqtt协议详解(0)初步认识mqtt

文章目录 1. 介绍2. 主要特性3. 架构1. 介绍 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议)是一种构建在TCP/IP协议之上的轻量级、基于发布-订阅模式的消息传输协议,适用于资源受限的设备和低带宽、高延迟或不稳定的网络环境,例如IOT。 MQTT 协议于 1…

JVM:栈上的数据存储

文章目录 一、Java虚拟机中的基本数据类型 一、Java虚拟机中的基本数据类型 在Java中有8大基本数据类型: 这里的内存占用,指的是堆上或者数组中内存分配的空间大小,栈上的实现更加复杂。 Java中的8大数据类型在虚拟机中的实现:…

【error】ModuleNotFoundError: No module named ‘mmcv.cnn.weight_init‘

from: oduleNotFoundError: No module named ‘mmcv.cnn.weight_init‘_modulenotfounderror: no module named mmcv.cnn-CSDN博客https://blog.csdn.net/qq_36679208/article/details/107815137?spm1001.2101.3001.6650.1&utm_mediumdistribute.pc_relevant.…

java基础 之 集合与栈的使用(二)

文章目录 List 和 Set的比较Set接口对于set的无序该怎么理解?(一)实现类:HashSet(二)实现类:LinkedHashSet【代码部分】HashSet 和 LinkedHashSet浅谈HashSet 和 LinkedHashSet的打印结果 &…

MYSQL-初级-事务篇

目录 概述为什么有事务? 事务操作事务的四大特性(AICD)原子性(Atomicity)一致性(Consistency)隔离性(Isolation)持久性(Durability) 并发事务问题…

为虚幻引擎C++项目设置VS开发环境

为虚幻引擎C项目设置VS开发环境 虚幻引擎(简称UE) 能与 Visual Studio(简称VS) 完美结合,使你能够快速、简单地改写项目代码,并能即刻查看编译结果。设置Visual Studio以使用虚幻引擎能提高开发者对虚幻引…

rust 桌面 sip 软电话(基于tauri 、pjsip库)

本文尝试下rust 的tauri 桌面运用 原因在于体积小 1、pjsip 提供了rust 接口官方的 rust demo 没编译出来 在git找了个sip-phone-rs-master https://github.com/Charles-Schleich/sip-phone-rs 可以自己编译下pjsip lib库替换该项目的lib 2、创建一个tauri demo 引用 [depe…

操作系统(4)——文件系统

目录 小程一言文件系统管理基础概念&功能基本概念文件的结构和属性文件的操作文件的安全性和权限控制文件系统的实现和分配方式 问题&解答1、文件系统在操作系统中起到什么作用?2、文件的逻辑结构和物理结构有何区别?3、如何理解文件权限控制在操…

时间序列异常值检验替换——基于Hampel滤波器

Hampel滤波器作为一种强大的时间序列异常值处理工具,在数据清洗和分析中发挥着重要作用。本文将深入研究Hampel滤波器的原理和数学推导,并通过实际代码演示其在异常值处理中的应用 1. Hampel滤波器简介 1.1 什么是Hampel滤波器? Hampel滤波…

【达梦数据库】通过线程pid定位会话SQL

【达梦数据库】通过线程pid定位会话SQL 1、查找数据库进程 ps -ef|grep dmserver2、通过进程pid去找对应的线程 top -H -p $pid -------------------- top命令经常用来监控linux的系统状况,是常用的性能分析工具,能够实时显示系统中各个进程的资源占用…

Signac包-1.Analyzing PBMC scATAC-seq

–https://stuartlab.org/signac/articles/pbmc_vignette 好的,开始学习scATAC-seq的数据是怎么玩的了,先跑完Signac的教程,边跑边思考怎么跟自己的课题相结合。 留意更多内容,欢迎关注微信公众号:组学之心 数据和R…

Qt安卓开发的一些概念

目录 1、Android 版本和 API 的对应关系? 2、ABI是什么 2.1、x86_64 2.2、x86 2.3、arm64-v8a 2.4、armeabi-v7a 3、不同架构的特点 3.1、32位 ARM 架构 (ARMv7) 3.2、64位 ARM 架构 (ARMv8-A) 3.3、32位 Intel 架构 (x86) 3.4、64位 Intel 架构 (x86-64…

vue+element-ui的列表查询条件/筛选条件太多以下拉选择方式动态添加条件(支持全选、反选、清空)

1、此功能已集成到TQueryCondition组件中 2、最终效果 3、具体源码(新增moreChoose.vue) <template><el-popoverpopper-class"t_query_condition_more":bind"popoverAttrsBind"ref"popover"v-if"allcheckList.length>0"…

本地VSCode连接远程linux环境服务器的docker

目录 1、安装远程SSH 2、连接远程主机 3、远程中安装docker 4、查看容器 &#xff08;1&#xff09;直接查看容器和镜像 &#xff08;2&#xff09;使用命令查看 最近在新服务器中执行程序&#xff0c;要用到远程的docker。但是命令行环境下查看代码非常不方便&#xff0…

upload-labs 1-19关 攻略 附带项目下载地址 小白也能看会

本文章提供的工具、教程、学习路线等均为原创或互联网收集&#xff0c;旨在提高网络安全技术水平为目的&#xff0c;只做技术研究&#xff0c;谨遵守国家相关法律法规&#xff0c;请勿用于违法用途&#xff0c;如有侵权请联系小编处理。 环境准备&#xff1a; 1.靶场搭建 下…

Nsight System and Nsight Compute 性能分析工具

Nsight System 系统级别去分析性能&#xff0c;也就是宏观方向。 Achieved Accupacy低&#xff1a;在Nsight System pipline可以直接看出来 kernel launch 延迟&#xff1a;cpu发起gpu执行kernel过程中&#xff0c;有个kernel launch环节&#xff0c;grid block。优化方法&a…

ScrollView(滚动条)

1.滚动到底部&#xff1a; 我们可以直接利用ScrollView给我们提供的:fullScroll()方法&#xff1a; scrollView.fullScroll(ScrollView.FOCUS_DOWN);滚动到底部 scrollView.fullScroll(ScrollView.FOCUS_UP);滚动到顶部 另外用这玩意的时候要小心异步的玩意&#xff0c;就是a…

iOS 18:照片应用添加“恢复”相册,可恢复数据库损坏所丢失照片!

小伙伴们可能在使用 iPhone 拍摄时遇到“明明拍下了&#xff0c;但是相册中却根本没有相关照片”的问题&#xff0c;而在 iOS 18 / macOS 15 中&#xff0c;苹果公司悄悄为“照片”应用引入了一项“恢复”功能以解决相关 Bug。 按照苹果的描述&#xff0c;照片、视频丢失可能是…

XXE漏洞复现

XML外部实体注入(XML Extenrnal Entity Injection)&#xff0c;简称XXE漏洞。引发XXE漏洞的主要原因是XML解析依赖库libxml默认开启了对外部实体的引用&#xff0c;导致服务端在解析用户提交的XML信息时未作处理直接进行解析&#xff0c;导致加载恶意的外部文件和代码&#xff…

一文剖析高可用向量数据库的本质

面对因电力故障、网络问题或人为操作失误等导致的服务中断&#xff0c;数据库系统高可用能够保证系统在这些情况下仍然不间断地提供服务。如果数据库系统不具备高可用性&#xff0c;那么系统就需要承担停机和数据丢失等重大风险&#xff0c;而这些风险极有可能造成用户流失&…