在uboot默认环境变量修改_雪狐JXH的博客-CSDN博客U-BOOT通过修改源码来修改环境变量https://blog.csdn.net/qq_39525606/article/details/124324297这篇文章中,讲了如何找到bootcmd命令在uboot源码中的位置,而这篇文章将详细的分析imx6ullevk开发板的bootcmd环境变量都做了什么。

首先,大家知道,uboot起来之后会自行调用boot命令,而boot命令则会调用“run bootcmd”命令,也就是运行bootcmd环境变量内的脚本。

bootcmd内容:

大体流程是这样的:

1 mmc dev ${mmcdev};
切换到mmc设备0,mmcdev环境变量的值为0:

2 if mmc rescan;

如果扫描失败,run netboot;

如果当前的mmc分区扫描无误,那么run loadbootscript;

如果run loadbootscript成功,那么run bootscript;
如果run loadbootscript失败,那么run loadimage;

如果run loadimage成功,那么run mmcboot;
如果run loadimage失败,那么run netboot;

根据这个流程,我们可以知道 run loadbootscript、run loadimage应该是判断脚本,用来判断当前设备状态从而确定启动方式;

run netboot、run bootscript、run mmcboot 这三个是最终的真正启动脚本。

接下来对这五个脚本内容进行详细分析。

run loadbootscript:

脚本内容如下

mmcpart=1
loadaddr=0x82000000  (loadaddr也是uboot内置的一个环境变量)
script=boot.scr

从mmc的设备0的分区1(这里的分区1就是第一个分区,而不是第二个)读取一个名称为boot.scr的文件到DDR的0x82000000地址

如果成功那说明boot.scr这个文件存在,就可以运行run bootscript
如果失败那就运行run loadimage

run bootscript:

接上面的run loadbootscript 运行成功。

脚本内容如下

可以看到打印了一句无关紧要的话之后就运行了source命令;
那么source命令的是做什么的呢?
source用来从loadaddr规定的地址拿出一个镜像脚本,对这个脚本进行执行。

什么意思呢?
我们就以这里的boot.scr作为例子。现在uboot内的命令、脚本都是写死的,直接编译进去的,而这个source就提供了一种非常灵活的方式,现在有了source,理论上你就可以把uboot中的所有操作步骤都写入到这个boot.scr放到SD卡中(mmc设备),uboot只需要读取到boot.scr,然后解析、执行boot.scr中的启动脚本就可以了。当然这个boot.scr可不是文本文件,boot.scr是二进制代码,它是经过mkimage工具对原始脚本进行编译后的结果,只有经过mkimage工具处理过才可以被uboot识别。

OK,这就是run bootscript脚本的启动方式。

run loadimage:

接上面的run loadbootscript 运行失败。也就是没有boot.scr这个脚本,那既然没有启动脚本,自然要想其他的办法启动:

脚本内容如下:

image=zImage

同上面基本相同,但现在是直接去读取zImage内核到DDR了,同样是读到地址0x82000000处。

这个脚本的作用就是将zImage读取到DDR中就完事了。

run mmcboot:

接上面的run loadimage运行成功。

脚本内容如下:

可以看到这里就非常简单了,先run mmcargs,这个脚本主要是设置了一些传递给kernel的参数,包括根文件系统位置、串口号、波特率;

然后判断boot_fdt环境变量的值;
如果是yes或者try的话,run loadfdt;将设备树加载到DDR中,如果加载成功运行bootz ${loadaddr} - ${fdt_addr}; 也就是启动内核的同时告知内核设备树的在DDR中的位置,如果加载失败的话直接运行bootz,因为设备树加载失败了,也就没必要传递设备树的地址了。
如果既不是yes也不是no的话,说明是老版本内核,根本就没有设备树这么个说法,自然也就不会存在设备树了,直接bootz引导内核即可。

run netboot:

接上面的mmc rescan扫描失败。说明没有mmc存储设备,那要启动内核只能尝试从网络启动看能不能拿到内核了。

脚本内容如下:

可以看到,跟mmcboot 脚本内容差不多,这里也就不多赘述了。

以上就是imx6ullEVK板子uboot启动内核的脚本全过程。OK我话讲完。有错还请指正。

uboot之bootcmd环境变量分析相关推荐

  1. [uboot]在uboot里面添加环境变量使用run来执行

    转自:http://blog.csdn.net/yangzheng_yz/article/details/41038259 在移植uboot的时候,可以在uboot里面添加定义一些自己的环境变量,这些 ...

  2. uboot命令集环境变量

    文章目录 前言 命令集 环境变量 uboot中对Flash和DDR的管理 前言 uboot的命令因为适配自己的硬件,基本都经过裁剪,所以自己的命令集和其用法可能会有缺失 uboot文章连载: 1.ub ...

  3. u-boot中filesize环境变量【转载】

    转载地址:https://blog.csdn.net/fzs333/article/details/48518559 U-Boot中的环境命令可以使用$(filesize)来确定刚下载(传输)得到的文 ...

  4. u-boot中filesize环境变量

    U-Boot中的环境命令可以使用$(filesize)来确定刚下载(传输)得到的文件大小. 因为使用类似tftp命令传输文件后,会自动更新filesize环境变量. 如:setenv updatero ...

  5. uboot的常用环境变量(bootdelay、ipaddr、serverip、gatewayip、netmask、ethaddr、bootcmd、bootargs)

    文章目录 Part1:环境变量如何参与程序运行 Part2:自动运行倒计时 Part3:网络设置 Part4:自动运行命令设置 Part5:uboot给kernel传参 Part6:新建.更改.删除一 ...

  6. uboot环境变量分析

    项目情景 最近我在一个新平台的开发过程中遇到烧录问题. 具体的问题是使用原厂提供的烧录脚本烧录成功,但是固件却没有更新. 其中kernel和dtb烧录指令如下: adnl.exe Partition ...

  7. 【驱动】uboot环境变量分析

    0.bootcmd 0.1 飞凌原设置 bootcmd=if mmc rescan; then if run loadbootscript; then run bootscript; else if ...

  8. uboot的环境变量分析(printenv)

    目录 平台说明: 1.printenv内容如下: 2.注意: 平台说明: zynq平台开发:petalinux下载的u-boot2017.1 1.printenv内容如下: autoload=no  ...

  9. 嵌入式系统学习笔记之五-- uboot常用命令 环境变量

    uboot 中环境变量的作用就是在不改变源码.不用重新编译的情况下,可以使我们通过设置环境变量的值来改变 uboot 的一些设置.uboot 开机时会一次性从存储介质(启动介质)中读取全部的环境变量到 ...

最新文章

  1. mysql 5.7 缺点_MySQL · 特性分析 · MySQL 5.7 外部XA Replication实现及缺陷分析
  2. technology and business combination point
  3. 改善开发进程 微软谈新Visual Studio(zz)
  4. 【python】 字符串转小写(含汉字等时仍work)
  5. 使用ant执行Java代码
  6. Docker化Spring Boot应用程序
  7. VLAN 路由实验图解
  8. Kubernetes-保障集群内节点和网络安全
  9. GitHub 疑被审查?著名“换脸”开源项目遭限制访问
  10. Shell 的变量(转)
  11. 贩卖个人信息非法获利300余万,平安惠普、拍拍贷都是买方
  12. 国际象棋测试软件只能支持8核,国际象棋测试超线程对性能的影响,多线程多开真的强大吗?(晒T恤)【硬件玩家】...
  13. Unity中的角色属性芒星比例图
  14. Linux使用7z压缩软件,解压到指定文件夹
  15. Redis教程(一) Redis入门教程
  16. 人物专访|大家好,我是橡树,研究车联网安全
  17. el-table滚动条被挡住的问题
  18. python之扑克牌小游戏
  19. 在苏联时期有没有计算机语言,俄罗斯留学时没有语言可以过去吗
  20. ubuntu11.10装机过程以及如何配置

热门文章

  1. ps美白磨皮处理第三方插件portraiture
  2. 发掘数据宝藏,引领市场营销数字化转型
  3. Android矢量图vector的制作
  4. Android 矢量图 vector 制作
  5. AI是通往元宇宙的关键变量
  6. 1024×768书签
  7. 恶搞之关不掉的窗口.vbs脚本
  8. 高质量的“以客户为中心”,听听Live800怎么说
  9. 原:亚洲交友联盟注册全攻略
  10. [2021.10.28]<呆头熊的开发日记>怪物AI(4)