【驱动】uboot环境变量分析
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环境变量分析相关推荐
- uboot环境变量分析
项目情景 最近我在一个新平台的开发过程中遇到烧录问题. 具体的问题是使用原厂提供的烧录脚本烧录成功,但是固件却没有更新. 其中kernel和dtb烧录指令如下: adnl.exe Partition ...
- uboot环境变量实现分析
u-boot的环境变量用来存储一些经常使用的参数变量,uboot希望将环境变量存储在静态存储器中(如nand nor eeprom mmc). 其中有一些也是大家经常使用,有一些是使用人员自己定义的, ...
- xmake新增对WDK驱动编译环境支持
为什么80%的码农都做不了架构师?>>> xmake v2.2.1新版本现已支持WDK驱动编译环境,我们可以直接在系统原生cmd终端下,执行xmake进行驱动编译,甚至配合vs ...
- VS2012+WDK8.0搭建WDF驱动开发环境
根据目前资料,如果要调试ReactOS源码,有很多工作要做:安装RosBE,下载ReactOS源码,生成VS工程,由源码生成镜像文件,等步骤:然后VS还要搭建驱动开发环境:然后由虚拟机装载运行镜像,V ...
- (31)驱动开发环境配置(VS2010+WDK7600)
本文介绍如何在WIN10配置XP驱动开发环境. 注意,VS2010和WDK都是安装在物理机的. 一.安装VS2010 https://docs.microsoft.com/zh-cn/visualst ...
- 配置windows驱动开发环境
配置windows驱动开发环境 撰写:jiftle 时间:2011-09-09 14:30 windows驱动开发需要wd ...
- Windows编程—Windows驱动开发环境搭建
文章目录 前言 步骤 步骤一 步骤二 步骤三 连接测试 步骤四 步骤五 总结 前言 作为一个编写Windows程序的开发人员,对Windows驱动开发 并非必需要掌握,但是掌握 Windows驱动开发 ...
- VC6.0 +WDK 开发驱动的环境配置
在安装完VC6和WDK以后,就开始进行环境的配置了,可结果是弄了半个上午,还是搞不定.去网上找信息,关于WDK的,多是使用VS2005或VS2008的,有的要借助于DriverStudio之类的,按上 ...
- uboot环境变量及常用命令
U-Boot环境变量的解释说明 环 境 变 量 解 释 说 明 bootdelay 定义执行自动启动的等候秒数 baudrate 定义串口控制台的波特率 netmask 定义以太网接口的掩码 etha ...
最新文章
- 学习 TTreeView [15] - 连接数据库 (作为给 丁永其 和 DELPHI万岁 两位朋友的回复)...
- Java的三大结构理解
- Oracle DBVERIFY 工具介绍
- SAP CRM text determination调试
- 【MobX】390- MobX 入门教程(上)
- 卸载idea2020删除以前的配置_推荐一款只有5M大小的绿色良心的卸载工具!
- C# PDF控件 pdfium、moonpdflib、pdf xchange、福昕、devexpress、aspose、spire
- 【渝粤教育】电大中专跨境电子商务理论与实务 (8)作业 题库
- RetinaFace+ArcFace人脸识别测试
- CTF_ CRYPTO(Cryptography)_密码学/密码编码学
- 芝诺数解|「七」月是故乡明,月饼表浓情
- 网站漏洞修复 被上传webshell漏洞修补
- Cubieboard安装系统
- 路漫漫其修远兮,吾将上下而求索--2019OKR规划
- mpv 终极教程【安装、快捷键、 播放列表jonniek/mpv-playlistmanager】
- R语言学习笔记初级阶段
- 配电房轨道式智能巡视机器人_HT-TSX-600-配电房轨道机器人视频巡检系统
- 计算机专业课程学习顺序
- 全平台辅助答题(PHP版)
- 【Appium+Python】进行手机操作的方法+使用手机物理键
热门文章
- keras 的 example 文件 mnist_net2net.py 解析
- 现代计算机三大科学计算,计算机的三大特点是什么?
- 微擎url模式解读_微擎开发文档之微擎执行主流程介绍
- C++11之final关键字
- Learn OpenGL (十二):投光物
- 覆盖半透明黑色CSS,通常用于弹窗提示、弹窗显示大图等情况的背景图层
- 【抬杠】在某些时候不希望用户缩小浏览器的宽度,因为咳咳~会导致你的布局混乱,那么这个代码就是帮助你如何限制浏览器宽度的
- 新建eclipse的java项目报错处理
- DeprecationWarning: the md5 module is deprecated; use hashlib instead import md5
- 测试linux下磁盘的读写速率