uboot常用命令
一. 常用简单命令
1.1. help命令
a. 帮助查看其他命令的使用方法,类型linux下man
b. 示例: help help
x210 # help help help [command ...] - show help information (for 'command') 'help' prints online help for the monitor commands. Without arguments, it prints a short usage message for all commands. To get detailed help information for specific commands you can type 'help' with one or more command names as arguments. x210 #
1.2. printenv命令
a. printenv命令可以简化为print
b. print命令不用带参数,作用是打印出系统中所有的环境变量。
x210 # print baudrate=115200 ethaddr=00:40:5c:26:0a:5b gatewayip=192.168.1.1 ipaddr=192.168.1.20 netmask=255.255.255.0 serverip=192.168.1.141 bootdelay=3 bootcmd=movi read kernel 30008000; bootm 30008000 bootargs=console=ttySAC2,115200 root=/dev/mmcblk0p2 rw init=/linuxrc rootfstype=ext3 Environment size: 276/16380 bytes x210 #
1.3. setenv命令
1.3.1. setenv可以简化为set
1.3.2. 设置(添加/更改)环境变量
a. 新建一个环境变量,使用set var value
b. 更改一个环境变量,使用set var value
c. 删除一个环境变量,使用set var
PS:使用set设置时,uboot的有些命令带的参数非常长,为了告诉uboot这个非常长而且中间有好多个空格的东西是给他的一整个参数,所以用单引号将这个很长且中间有空格隔开的参数引起来
x210 # print baudrate=115200 ethaddr=00:40:5c:26:0a:5b gatewayip=192.168.1.1 ipaddr=192.168.1.20 netmask=255.255.255.0 serverip=192.168.1.141 bootdelay=3 bootcmd=movi read kernel 30008000; bootm 30008000 bootargs=console=ttySAC2,115200 root=/dev/mmcblk0p2 rw init=/linuxrc rootfstype=ext3 Environment size: 276/16380 bytes x210 # set mytest 0 x210 # print baudrate=115200 ethaddr=00:40:5c:26:0a:5b gatewayip=192.168.1.1 ipaddr=192.168.1.20 netmask=255.255.255.0 serverip=192.168.1.141 bootdelay=3 bootcmd=movi read kernel 30008000; bootm 30008000 bootargs=console=ttySAC2,115200 root=/dev/mmcblk0p2 rw init=/linuxrc rootfstype=ext3 mytest=0 Environment size: 285/16380 bytes x210 # set mytest 1 x210 # print baudrate=115200 ethaddr=00:40:5c:26:0a:5b gatewayip=192.168.1.1 ipaddr=192.168.1.20 netmask=255.255.255.0 serverip=192.168.1.141 bootdelay=3 bootcmd=movi read kernel 30008000; bootm 30008000 bootargs=console=ttySAC2,115200 root=/dev/mmcblk0p2 rw init=/linuxrc rootfstype=ext3 mytest=1 Environment size: 285/16380 bytes x210 # set mytest x210 # print baudrate=115200 ethaddr=00:40:5c:26:0a:5b gatewayip=192.168.1.1 ipaddr=192.168.1.20 netmask=255.255.255.0 serverip=192.168.1.141 bootdelay=3 bootcmd=movi read kernel 30008000; bootm 30008000 bootargs=console=ttySAC2,115200 root=/dev/mmcblk0p2 rw init=/linuxrc rootfstype=ext3 Environment size: 276/16380 bytes x210 #
1.4. saveenv命令
a. saveenv命令可以简化为save
b. saveenv/save命令不带参数,直接执行,作用是将内存中的环境变量的值同步保存到Flash中环境变量的分区
c. 彻底更改一个环境变量的值,需要2步:第一步set命令来更改内存中的环境变量,第二步用save命令将其同步到Flash中环境变量的分区
二. 与网络相关命令
2.1. ping命令
a. ping是测试开发板和主机之间的网络链接
b. 命令用法: ping ip地址
2.2. tftp命令
a. tftp 命令用于从服务器下载内容到客户端
b. 示例:tftp 0x30000000 zImage-qt :将服务器上名为zImage-qt的文件下载到开发板内存的0x30000000地址处
2.3. nfs命令
a. 这个命令在uboot开发中使用很少,如需要请自行百度。
三. SD卡/iNand操作指令movi簇
3.1. movi指令是一个命令集,有很多子命令,具体用法可以help movi查看。
3.2. help movi分析
x210 # help movi movi init - Initialize moviNAND and show card info movi read {u-boot | kernel} {addr} - Read data from sd/mmc movi write {fwbl1 | u-boot | kernel} {addr} - Write data to sd/mmc movi read rootfs {addr} [bytes(hex)] - Read rootfs data from sd/mmc by size movi write rootfs {addr} [bytes(hex)] - Write rootfs data to sd/mmc by size movi read {sector#} {bytes(hex)} {addr} - instead of this, you can use "mmc read" movi write {sector#} {bytes(hex)} {addr} - instead of this, you can use "mmc write" x210 #
3.2.1. movi write {fwbl1 | u-boot | kernel} {addr}这种通用型的描述说明:
a. movi 和 read外面没有任何标记说明每一次使用这个指令都是必选的
b. 一对大括号{}括起来的部分必选1个,大括号中的竖线表是多选一
c. 中括号[]表示可选参数(可以有也可以没有)
3.3. 示例: movi read u-boot 0x30000000 意思就是把iNand中的u-boot分区读出到DDR的0x30000000起始的位置处。
PS:uboot代码中将iNand分成了很多个分区,每个分区有地址范围和分区名,uboot程序操作中可以使用直接地址来操作iNand分区,也可以使用分区名来操作分区;注意这里的0x30000000也可以直接写作30000000,意思是一样的(uboot的命令行中所有数字都被默认当作十六进制处理,不管你加不加0x都一样
四. 内存操作指令
4.1. DDR内存中是没有分区的(只听说过对硬盘、Flash进行分区,没听说过对内存进行分区····),但是内存使用时要注意,千万不能越界
4.2. md(memory display)命令
4.2.1. 用来显示内存中的内容。
4.2.2. help md
x210 # help md
md [.b, .w, .l] address [# of objects]
- memory display
a. .b表示也字节形式查看;.w表示也半字形式查看;.l表示也字形式查看;# of object表示查看长度
b. 示例: md.b 0x30000000 10
x210 # md.b 0x30000000 10 30000000: ff ef ff ff 7f ff ff ff ff ee ff ff ff fd ff ff ................ x210 #
4.3. mw(memory write)命令
4.3.1. 将内容写到内存中
4.3.2. help mw
x210 # help mw mw [.b, .w, .l] address value [count] - write memory x210 #
4.4. mm(memory modify)
4.4.1. 修改内存中的某一块,说白了还是写内存(如果需要批量的逐个单元的修改内存,用mm最合适)
4.4.2. help mm
x210 # help mm mm [.b, .w, .l] address - memory modify, auto increment address x210 #
五. 启动内核命令
5.1. bootm命令
a. bootm启动内核同时给内核传参,bootm专门用于启动内核的
b. help bootm分析
x210 # help bootm bootm [addr [arg ...]] - boot application image stored in memory passing arguments 'arg ...'; when booting a Linux kernel, 'arg' can be the address of an initrd image x210 #
5.2. go命令
a. 此命令虽然可以启动内核但并不是专门用于启动内核
b. help go分析
x210 # help go go addr [arg ...] - start application at address 'addr' passing 'arg' as arguments x210 #
ps:go命令本来不是专为启动内核设计的,go命令内部其实就是一个函数指针指向一个内存地址然后直接调用那个函数,go命令的实质就是PC直接跳转到一个内存地址去运行而已。go命令可以用来在uboot中执行任何的裸机程序(有一种调试裸机程序的方法就是事先启动uboot,然后在uboot中去下载裸机程序,用go命令去执行裸机程序)
参考《朱老师.1.2ARM裸机课件》