uboot常用命令(printenv、setenv、movi、saveenv、ping、tftp、nand、mm、mw、md、bootm、go...)
文章目录
- Part1:类似Linux终端的行缓冲命令
- Part2:有些命令有简化的别名
- Part3:有些命令会带参数
- Part4:命令中的特殊符号
- Part5:有些命令是一个命令族
- Part6:第一个命令
- Part7:设置环境变量
- Part8:保存环境变量的更改
- Part9:网络测试指令
- Part10:tftp下载指令
- Part11:SD卡 / iNand 操作指令
- Part12:NandFlash操作指令
- Part13:内存操作指令
- Part14:启动内核指令
Part1:类似Linux终端的行缓冲命令
Linux
终端设计有三种缓冲机制:无缓冲、行缓冲、全缓冲
行缓冲:
当我们向终端命令行输入命令的时候
这些命令没有立即被系统识别
而是被缓冲到一个缓存区(也就是系统认为我们还没有输入完)
当我们按下回车键(换行)后系统就认为我们输入完了
然后将缓冲区中所有刚才输入的作为命令拿去分析处理
Part2:有些命令有简化的别名
printenv
可以简化为print
setenv
可以简化为set
Part3:有些命令会带参数
uboot
中的每个命令都有事先规定好的各种格式
Tips:格式是固定的
有命令就是不带参数的
譬如
printenv
/print
命令有些命令带可选的参数
可以带也可以不带
当然带不带参数的执行结果是不同的有些命令带必须的参数
譬如
setenv
/set
命令
Part4:命令中的特殊符号
uboot
的有些命令带的参数非常长
为了告诉uboot
这个非常长而且中间有好多个空格的东西是给它的一个参数
使用单引号''
将这个很长且中间由空格隔开的参数引起来
别的符号也许也有,而且有特定的意义
当碰到uboot
的命令行有特殊符号时要注意
不是弄错了,而是可能有特别的意义
Part5:有些命令是一个命令族
命令族:
好多个命令开头都是同一个命令关键字,但是后面的参数不一样
这些命令的功能和作用也不同
同一个命令族中所有的命令都有极大的关联:
譬如
movi
开头的命令族都和moviNand
(EMMC
、iNand
)操作有关
Part6:第一个命令
printenv
/ print
命令是不带参命令,作用是打印出系统中所有的环境变量
环境变量就好像程序的全局变量一样
程序中任何地方都可以根据需要去调用或者更改环境变量(一般都是调用)
环境变量和全局变量不同之处在于:
全局变量的生命周期是在程序的一次运行当中
开始运行时诞生,程序结束时死亡
下一次运行程序时从头开始
环境变量被存储在
Flash
的另一块专门区域(Flash
上有一个环境变量分区)
一旦我们在程序中保存了该环境变量
那么下次开机时该环境变量的值将维持上一次更改保存后的值
Part7:设置环境变量
用法: setenv/set
[name]
[value]
Part8:保存环境变量的更改
saveenv
/ save
命令是不带参命令
作用:
将内存中的环境变量的值同步保存到
Flash
中对应的环境变量的分区
Tips: 环境变量的保存是整体的覆盖保存
也就是说内存中所有的环境变量都会整体的将
Flash
中环境变量分区中原来的内容覆盖
总结: 彻底的更改一个环境变量的值,需要2
步
第一步
setenv / set
命令来更改内存中的环境变量
第二步用saveenv / save
命令将其同步到Flash
中环境变量的分区
有时候我们只是想测试下这个环境变量,不希望影响到下一次开机
那就只setenv / set
不saveenv / save
这样set
后当前本次运行的uboot
已经起效果了
只不过没save
下一次开机还是会恢复到原来的状况
Part9:网络测试指令
命令用法: ping
[ip地址]
Tips: ping
是测试开发板和主机之间的网络链接,注意以下步骤:
- 首先要插上网线。
- 先试图
ping
通主机Windows
注意Windows
中有线网卡的地址设置(设置本地连接)
设置主机Windows
的本地连接IPv4
地址为192.168.1.10
- 第三步确认开发板中
uboot
里几个网络相关的环境变量的值对不对
最重要的是ipaddr
(这个环境变量表示当前开发板的IP地址)
这个地址必须和主机Windows
的IP地址在同一个网段。
网段的概念:
一个
IP地址
分为两部分,一部分是网段的地址
另一部分是网段内的主机地址(由子网掩码来区分哪一部分是网段地址
,哪一部分是IP地址
)
在子网掩码是
255.255.255.0
的情况下
192.168.1.10
这个IP地址
的前三部分(192.168.1.
)属于网段地址
第四部分(10
)属于主机地址
Part10:tftp下载指令
uboot
本身主要目标是启动内核,为了完成启动内核必须要能够部署内核
uboot
为了部署内核就需要将内核镜像从主机中下载过来然后烧录到本地Flash
中
uboot
如何从主机(Windows
或虚拟机ubuntu
)下载镜像到开发板上?
有很多种方式,主流方式是:
fastboot
和tftp
fastboot
的方式是通过USB线
进行数据传输
tftp
的方式是通过有线网络
进行数据传输
典型的方式就是通过网络,fastboot
是近些年才新发展的
tftp
方式下载时,实际上uboot
扮演的是tftp客户端程序
角色主机(
Windows
或虚拟机ubuntu
)中必须有一个tftp
服务器
然后将要下载的镜像文件放在服务器的下载目录中
然后开发板中使用uboot
的tftp
命令去下载即可有些人习惯在
Linux
下搭建tftp服务器
具体步骤我会单开一篇文章整理,到时会在此处添加备注,也可以自己上网搜索一下
有些人习惯在
Windows
中搭建tftp服务器
,一般是用一些软件来搭建譬如
tftpd32
,使用起来比较简单检查开发板
uboot
的环境变量,注意serverip
必须设置为虚拟机ubuntu的IP地址
serverip
这个环境变量的意义就是主机tftp服务器的IP地址
在开发板的
uboot
下先ping通虚拟机ubuntu
然后再尝试下载:
tftp 0x30000000 zImage-qt
意思是将服务器上名为
zImage-qt
的文件下载到开发板内存的0x30000000
地址处镜像下载到开发板的
DDR
中后,uboot
就可以用movi
指令进行镜像的烧写了
Tips:
如果你是用的
Windows
下的tftp
服务器那
uboot
的serverip
就要设置为和Windwos
下tftp
服务器的IP地址
一样Windows
下的tftp
服务器软件设置的时候就有个步骤是让你设置服务器的IP地址
这个IP地址
和主机Windows
必须在一个网段整个过程中间环节比较多,实际做的时候可能最后会下载不下来
这时候可能的问题非常多,根据上文的思路自行排查
譬如:
第一步应该先保证uboot
和ubuntu
可以ping
通
第二步再保证ubuntu
中tftp
服务器搭建没错
第三步再实现tftp
下载
Part11:SD卡 / iNand 操作指令
开发板如果用
SD卡
/EMMC
/iNand
等作为Flash
则在
uboot
中操作Flash
的指令为movi
(或mmc
)movi
指令是一个命令集,有很多子命令,具体用法可以help movi
查看movi
的指令都是movi read
和movi write
一组的movi read
用来读取iNand
到DDR
上,movi write
用来将DDR
中的内容写入iNand
中
理解这些指令时一定要注意涉及到的两个个硬件:iNand
和DDR
内存movi read {u-boot | kernel} {addr}
这个命令使用了一种通用型的描述方法来描述:
movi
和read
外面没有任何标记说明每一次使用这个指令都是必选的
一对大括号{}
括起来的部分必选1
个,大括号中的竖线表是多选一
中括号[]
表示可选参数(可以有也可以没有)指令有多种用法
譬如
movi read u-boot 0x30000000
意思就是把
iNand
中的uboot
分区读出到DDR
的0x30000000
起始的位置处uboot
代码中将iNand
分成了很多个分区,每个分区有地址范围和分区名
uboot
程序操作中可以使用直接地址来操作iNand
分区,也可以使用分区名来操作分区注意这里的
0x30000000
也可以直接写作30000000
,意思是一样的
(uboot的命令行中所有数字都被默认当作十六进制处理,不管你加不加0x
都一样)
Part12:NandFlash操作指令
nand
指令的理解方法和操作方法完全类似于movi
指令
Part13:内存操作指令
mm
mw
md
DDR
中是没有分区的
只听说过对硬盘、Flash进行分区,没听说过对内存进行分区……
但是内存使用时要注意,千万不能越界踩到别人了
因为
uboot
是一个裸机程序
不像操作系统会由系统整体管理所有内存
系统负责分配和管理,系统会保证内存不会随便越界。
然而裸机程序中
uboot
并不管理所有内存,内存是散的随便用的
所以如果程序员(使用uboot
的人)自己不注意就可能出现自己把自己的数据给覆盖了
(所以思考下我们为什么把uboot
放在23E00000
地址处)
md
就是memory display
,用来显示内存中的内容
mw
就是memory write
,将内容写到内存中
mm
就是memory modify
,修改内存中的某一块,说白了还是写内存
如果需要批量的逐个单元的修改内存,用
mm
最合适
Part14:启动内核指令
bootm
go
uboot
的终极目标就是启动内核
启动内核在uboot
中表现为一个指令
uboot
命令行中调用这个指令就会启动内核
不管成功与否,所以这个指令是一条死路
差别:
bootm
启动内核同时给内核传参,而go
命令启动内核不传参bootm
其实才是正宗的启动内核的命令,一般情况下都用这个go
命令本来不是专为启动内核设计的
go
命令内部其实就是一个函数指针指向一个内存地址然后直接调用那个函数
go
命令的实质就是PC
直接跳转到一个内存地址去运行而已
go
命令可以用来在uboot
中执行任何的裸机程序有一种调试裸机程序的方法就是事先启动
uboot
然后在uboot
中去下载裸机程序,用go
命令去执行裸机程序
uboot常用命令(printenv、setenv、movi、saveenv、ping、tftp、nand、mm、mw、md、bootm、go...)相关推荐
- uboot和系统移植2(uboot常用命令)
1.5.uboot的常用命令1 1.5.1.类似linux终端的行缓冲命令行 (1)行缓冲的意思就是:当我们向终端命令行输入命令的时候,这些命令没有立即被系统识别,而是被缓冲到一个缓存区(也就是系统认 ...
- UBoot常用命令手册
UBoot常用命令手册 U-Boot还提供了更加详细的命令帮助,可以通过"?"显示支持的命令列表,通过help [CommandName]命令还可以查看每个命令的参数说明. 1.b ...
- 史上最全的Uboot常用命令汇总(超全面!超详细!)收藏这一篇就够了
Linux 系统要启动就必须需要一个 bootloader 程序,也就说芯片上电以后先运行一段bootloader程序.这段bootloader程序会先初始化DDR等外设,然后将Linux内核从fla ...
- 【Tiny4412】Uboot常用命令
00. 目录 文章目录 00. 目录 01. Uboot帮助命令 02. md命令 03. mm命令 04. printenv命令 05. setenv命令 06. saveenv命令 07. res ...
- uboot常用命令详解 2
U-boot发展到现在,他的命令行模式已经非常接近Linux下的shell了,在我编译的U-boot-2009.11中的命令行模式模式下支持"Tab"键的命令补全和命令的历史记录功 ...
- uboot常用命令汇总
目录 前言 1.信息查询命令(bdinfo.printenv.versionn) 2.环境变量操作命令(setenv.saveenv) 3.内存操作指令(md.nm.mm.mw.cp.cmp) 4.网 ...
- u-boot常用命令详解(全)(MINI2440)
U-boot发展到现在,他的命令行模式已经非常接近Linux下的shell了,命令行模式模式下支持"Tab"键的命令补全和命令的历史记录功能.而且如果你输入的命令的前几个字符和别的 ...
- linux驱动之系统移植-----uboot常用命令汇总
信息查询类指令 查询所有支持的命令 : help 查询命令的用法 help <其他命令> 查询板子信息 bdinfo 查看所有环境变量 printenv 查看uboot版本 version ...
- linux如何使用uboot的命令,Uboot常用命令使用
1.前言 Uboot启动后,会进入到一个倒计时,在倒计时结束之前,如果此时我们按下键盘的回车键,将进入到uboot的命令行模式,有点类似Linux系统终端模式,如果没有按下回车键的话,将直接启动Lin ...
最新文章
- java api 框架_java常用对象API之集合框架
- python使用matplotlib可视化线图(line plot)、并自定义线条的粗细(线条的宽度、 line width in Matplotlib)
- 神器 jupyter,终于来了!
- python --time()函数
- 恒为linux笔试题,硬件工程师面试试题及答案(转)
- C#接口中为什么不能像java那样使用static?
- VS2010常用快捷键自定义
- Java高并发编程详解系列-ThreadGroup介绍
- 和县机电工程学校工业机器人_成都机电工程学校专业有哪些
- 【javajni】jni入门篇
- php爬虫伪造请求头,Nodejs 伪造IP 爬取图片
- Matlab中凸优化工具包CVX的安装、注册与使用
- java下载excel模板文件
- matlab插值函数 外插,02-函数插值--Matlab插值函数
- 秋日登洪府滕王阁饯别序
- swing-基础Graphics画布
- linux lightdm自动登录,设置了XFCE/lightDM启用自动登录,还是需要'点击'登录两字才能进入桌面...
- oracle rman备份时间,Oracle RMAN备份还原方案
- MBA联考-20101215
- C-CF29A Spit Problem