0、bootcmd

0.1 飞凌原设置
bootcmd=if mmc rescan; then if run loadbootscript; then run bootscript; else if test ${bootdev} = sd1; then echo update firmware.........;run update_from_sd;else echo mmc boot..........;if run loadimage; then run mmcboot; else run netboot; fi; fi; fi; else run netboot; fi;

0.1.1 bootcmd解析
if mmc rescan; then //mmc rescan:重新搜索mmc设备。如果有mmc设备
    if run loadbootscript; then //如果是uboot脚本启动,则执行脚本,参见0.1.2
        run bootscript;         //参见0.1.3
    else
        if test ${bootdev} = sd1; then //如果是从sd1启动,
            echo update firmware.........;    
            run update_from_sd;                //则执行更新固件的脚本,参见0.1.4
        else
            echo mmc boot..........;
            if run loadimage; then         //参见0.1.5
                run mmcboot;             //参见0.1.6
            else
                run netboot;
            fi;
        fi;
    fi;
else
    run netboot;
fi;

0.1.2 loadbootscript解析
loadbootscript=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${script};
a)fatload 该命令用于从 FAT 文件系统设备中读取指定文件放入指定内存中,用法介绍如下:
    usage: fatload <interface> <dev[:part]> <addr> <filename> [bytes]  
如介绍所述,当要读取文件时,需要设备已经完成初始化并注册到文件系统中,读取时用法如: fatload mmc 1 0x81000000 boot.img[size],其中 mmc 1 为文件 boot.img 保存的设备,0x81000000 为读取的内容存放的内存地址。
b)去变量后的命令
mmcdev=1
mmcpart=1
loadaddr=0x80800000
script=boot.scr
fatload mmc 1:1 0x80800000 boot.scr

0.1.3 bootscript解析
bootscript=echo Running bootscript from mmc ...; source    //source运行脚本boot.scr

0.1.4 update_from_sd
update_from_sd=run update_emmc;
update_emmc=mmc rescan;fatload mmc 0 ${loadaddr} /bin/${image}; fatload mmc 0 ${initrd_addr} /bin/ramdisk.img.u; fatload mmc 0 ${fdt_addr} /bin/${fdt_file}; set bootargs console=${console},${baudrate} cma=320M rdinit=/linuxrc; bootz ${loadaddr} ${initrd_addr} ${fdt_addr};

0.1.4.1 解析update_emmc
mmc rescan;
fatload mmc 0 ${loadaddr} /bin/${image};             ------>fatload mmc 0 0x80800000 /bin/zImage;
fatload mmc 0 ${initrd_addr} /bin/ramdisk.img.u;     ------>fatload mmc 0 0x83800000 /bin/ramdisk.img.u
fatload mmc 0 ${fdt_addr} /bin/${fdt_file};          ------>fatload mmc 0 0x83000000 /bin/imx6ul-14x14-evk.dtb
set bootargs console=${console},${baudrate} cma=320M rdinit=/linuxrc;      ------> set bootargs console=ttymxc0,115200 cma=320M rdinit=/linuxrc
bootz ${loadaddr} ${initrd_addr} ${fdt_addr};          ------>bootz 0x80800000 0x83800000 0x83000000

0.1.5 loadimage解析
loadimage=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}
--------> fatload mmc 1:1 0x80800000 zImage

0.1.6 mmc启动解析
0.1.6.1 mmcboot变量
mmcboot=echo Booting from mmc ...; run mmcargs; if test ${boot_fdt} = yes || test ${boot_fdt} = try; then if run loadfdt; then bootz ${loadaddr} - ${fdt_addr}; else if test ${boot_fdt} = try; then bootz; else echo WARN: Cannot load the DT; fi; fi; else bootz; fi;

0.6.1.2 mmcboot解析
echo Booting from mmc ...;
run mmcargs;
if test ${boot_fdt} = yes || test ${boot_fdt} = try; then
    if run loadfdt; then
        bootz ${loadaddr} - ${fdt_addr};
    else
        if test ${boot_fdt} = try; then
            bootz;
        else
            echo WARN: Cannot load the DT;
        fi;
    fi;
else
    bootz;
fi;

0.6.1.3 mmcargs设置bootargs参数
mmcargs=setenv bootargs console=${console},${baudrate} calibrate=${calibrate} cma=320M root=${mmcroot}
------->setenv bootargs console==ttymxc0,115200 calibrate=【空】  cma=320M root=/dev/mmcblk1p2 rootwait rw
//rw是声明启动权限,即以读写方式启动;rootwait是指等待设备/dev/mmcblk0p2设备就绪后才尝试挂载rootfs。如果没有此参数,linux内核启动时可能会在存储设备尚未就绪是就尝试挂载rootfs,此时肯定挂载失败,那么启动也就失败了。

0.2 试验设置
bootcmd=if 0; then if run loadbootscript; then run bootscript; else if test ${bootdev} = sd1; then echo update firmware.........;run update_from_sd;else echo mmc boot..........;if run loadimage; then run mmcboot; else run netboot; fi; fi; fi; else run netboot; fi;

设置命令 setenv bootcmd "if 0; then if run loadbootscript; then run bootscript; else if test ${bootdev} = sd1; then echo update firmware.........;run update_from_sd;else echo mmc boot..........;if run loadimage; then run mmcboot; else run netboot; fi; fi; fi; else run netboot; fi;"

1、netboot

1.1 飞凌原设置
netboot=echo Booting from net ...; run netargs; if test ${ip_dyn} = yes; then setenv get_cmd dhcp; else setenv get_cmd tftp; fi; ${get_cmd} ${image}; if test ${boot_fdt} = yes || test ${boot_fdt} = try; then if ${get_cmd} ${fdt_addr} ${fdt_file}; then bootz ${loadaddr} - ${fdt_addr}; else if test ${boot_fdt} = try; then bootz; else echo WARN: Cannot load the DT; fi; fi; else bootz; fi;

1.1.1 解析
echo Booting from net ...;
run netargs;
if test ${ip_dyn} = yes; then     //-------->ip_dyn=yes
    setenv get_cmd dhcp;
else
    setenv get_cmd tftp;
fi;
${get_cmd} ${image};                                         //-------->dhcp zImage ;是否需要改为tftp 0x80800000 zImage????即ip_dyn=no;${get_cmd} ${loadaddr} ${image};
if test ${boot_fdt} = yes || test ${boot_fdt} = try; then     //-------->boot_fdt=try
    if ${get_cmd} ${fdt_addr} ${fdt_file}; then             //-------->dhcp 0x83000000 imx6ul-14x14-evk.dtb
        bootz ${loadaddr} - ${fdt_addr};                     //-------->bootz  0x80800000 - 0x83000000
    else
        if test ${boot_fdt} = try; then
            bootz;
        else
            echo WARN: Cannot load the DT;
        fi;
    fi;
else
    bootz;
fi;

1.1.1.1 netargs
netargs=setenv bootargs console=${console},${baudrate} root=/dev/nfs ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp
----------->setenv bootargs console==ttymxc0,115200 root=/dev/nfs  ip=dhcp nfsroot=【空】:【空】,v3,tcp

1.1.1.2 需要设置${serverip}:${nfsroot}

二、设置命令
1、飞凌原设置
setenv bootcmd "if mmc rescan; then if run loadbootscript; then run bootscript; else if test ${bootdev} = sd1; then echo update firmware.........;run update_from_sd;else echo mmc boot..........;if run loadimage; then run mmcboot; else run netboot; fi; fi; fi; else run netboot; fi;"
setenv ip_dyn=yes
setenv serverip
setenv nfsroot

2、试验修改
setenv bootcmd "if 0; then if run loadbootscript; then run bootscript; else if test ${bootdev} = sd1; then echo update firmware.........;run update_from_sd;else echo mmc boot..........;if run loadimage; then run mmcboot; else run netboot; fi; fi; fi; else run netboot; fi;"
setenv ip_dyn no
setenv serverip 172.16.12.89
setenv nfsroot "/home/lisa/3-nfsrootfs/im6ul_rootfs"

【驱动】uboot环境变量分析相关推荐

  1. uboot环境变量分析

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

  2. uboot环境变量实现分析

    u-boot的环境变量用来存储一些经常使用的参数变量,uboot希望将环境变量存储在静态存储器中(如nand nor eeprom mmc). 其中有一些也是大家经常使用,有一些是使用人员自己定义的, ...

  3. xmake新增对WDK驱动编译环境支持

    为什么80%的码农都做不了架构师?>>>    xmake v2.2.1新版本现已支持WDK驱动编译环境,我们可以直接在系统原生cmd终端下,执行xmake进行驱动编译,甚至配合vs ...

  4. VS2012+WDK8.0搭建WDF驱动开发环境

    根据目前资料,如果要调试ReactOS源码,有很多工作要做:安装RosBE,下载ReactOS源码,生成VS工程,由源码生成镜像文件,等步骤:然后VS还要搭建驱动开发环境:然后由虚拟机装载运行镜像,V ...

  5. (31)驱动开发环境配置(VS2010+WDK7600)

    本文介绍如何在WIN10配置XP驱动开发环境. 注意,VS2010和WDK都是安装在物理机的. 一.安装VS2010 https://docs.microsoft.com/zh-cn/visualst ...

  6. 配置windows驱动开发环境

    配置windows驱动开发环境                    撰写:jiftle 时间:2011-09-09 14:30                     windows驱动开发需要wd ...

  7. Windows编程—Windows驱动开发环境搭建

    文章目录 前言 步骤 步骤一 步骤二 步骤三 连接测试 步骤四 步骤五 总结 前言 作为一个编写Windows程序的开发人员,对Windows驱动开发 并非必需要掌握,但是掌握 Windows驱动开发 ...

  8. VC6.0 +WDK 开发驱动的环境配置

    在安装完VC6和WDK以后,就开始进行环境的配置了,可结果是弄了半个上午,还是搞不定.去网上找信息,关于WDK的,多是使用VS2005或VS2008的,有的要借助于DriverStudio之类的,按上 ...

  9. uboot环境变量及常用命令

    U-Boot环境变量的解释说明 环 境 变 量 解 释 说 明 bootdelay 定义执行自动启动的等候秒数 baudrate 定义串口控制台的波特率 netmask 定义以太网接口的掩码 etha ...

最新文章

  1. 学习 TTreeView [15] - 连接数据库 (作为给 丁永其 和 DELPHI万岁 两位朋友的回复)...
  2. Java的三大结构理解
  3. Oracle DBVERIFY 工具介绍
  4. SAP CRM text determination调试
  5. 【MobX】390- MobX 入门教程(上)
  6. 卸载idea2020删除以前的配置_推荐一款只有5M大小的绿色良心的卸载工具!
  7. C# PDF控件 pdfium、moonpdflib、pdf xchange、福昕、devexpress、aspose、spire
  8. 【渝粤教育】电大中专跨境电子商务理论与实务 (8)作业 题库
  9. RetinaFace+ArcFace人脸识别测试
  10. CTF_ CRYPTO(Cryptography)_密码学/密码编码学
  11. 芝诺数解|「七」月是故乡明,月饼表浓情
  12. 网站漏洞修复 被上传webshell漏洞修补
  13. Cubieboard安装系统
  14. 路漫漫其修远兮,吾将上下而求索--2019OKR规划
  15. mpv 终极教程【安装、快捷键、 播放列表jonniek/mpv-playlistmanager】
  16. R语言学习笔记初级阶段
  17. 配电房轨道式智能巡视机器人_HT-TSX-600-配电房轨道机器人视频巡检系统
  18. 计算机专业课程学习顺序
  19. 全平台辅助答题(PHP版)
  20. 【Appium+Python】进行手机操作的方法+使用手机物理键

热门文章

  1. keras 的 example 文件 mnist_net2net.py 解析
  2. 现代计算机三大科学计算,计算机的三大特点是什么?
  3. 微擎url模式解读_微擎开发文档之微擎执行主流程介绍
  4. C++11之final关键字
  5. Learn OpenGL (十二):投光物
  6. 覆盖半透明黑色CSS,通常用于弹窗提示、弹窗显示大图等情况的背景图层
  7. 【抬杠】在某些时候不希望用户缩小浏览器的宽度,因为咳咳~会导致你的布局混乱,那么这个代码就是帮助你如何限制浏览器宽度的
  8. 新建eclipse的java项目报错处理
  9. DeprecationWarning: the md5 module is deprecated; use hashlib instead import md5
  10. 测试linux下磁盘的读写速率