uboot命令行

uboot命令行

在启动时倒计时前3秒可以进入uboot命令行(也有可能不是三秒根据uboot中的delay环境变量决定)。
命令行中输入boot启动内核。

uboot查看版本:version

uboot命令行的一些基本命令:

帮助命令:

help: 查看当前uboot所支持的所有命令

? 命令名: 查看该命令的帮助信息

环境变量:

printenv: 查看环境变量 (环境变量就是一些变量,只不过这些变量与环境有关,值是字符串)

setnev: 设置环境变量(该命令可用于修改(如修改字符串setenv 环境变量名 ‘要修改的值’)、新建(setenv 新建变量名 ‘值’)、删除环境变量(setenv 变量名 空(什么都没有)))

saveenv: 保存环境变量

内存相关:

md命令

md命令用于查看一段内存的数据。

md [.b, .w, .l] address [# of objects]

  • .b代表byte,以一个字节为单位;.w代表word,2个字节为单位;.l代表long,4个字节为单位。
  • address 是首地址。
  • #of objects 表示要查看的长度(uboot中都以16进制表示,单位是第一个参数)。

如图是显示从0x80000000开始的20个字节的数据,md和.b之间没有空格。
在这里插入图片描述

nm命令

nm命令用于修改一段内存的数据。

nm [.b, .w, .l] address

  • 第一个参数参考md。
  • address是起始地址。

如图从0x80000000开始的4个字节数据被修改为0x12345678,修改完成后输入q退出。
在这里插入图片描述

mm命令

mm [.b, .w, .l] address

mm命令也是修改一段内存,与nm不同的是mm修改完成后地址会自增

如图查看mm连续修改了两个4字节的内存中的内容。
在这里插入图片描述
对比发现nm没有修改第二个4字节的内容,所以mm有地址自增,nm没有。
在这里插入图片描述

mw命令

mw命令是指定长度,指定值的修改一段内存。

mw [.b, .w, .l] address value [count]

  • value是指定的值。
  • count是地址长度。

在这里插入图片描述

cp命令

cp命令是拷贝命令,用于将DRAM中一段内存的数据拷贝到另一段内存,或则把Nor Flash中的数据拷贝到DRAM中。

cp [.b, .w, .l] source target count

  • source是源地址。
  • target是目标地址。
  • count是要拷贝的长度。

cmp命令

cmp是比较一段内存中数据的命令。

cmp [.b, .w, .l] addr1 addr2 count

  • addr1 是地址1
  • addr2 是地址2
  • count是地址长度。

网络操作命令

ping命令

ping pingAddress

  • pingAddress 是IP地址

在ping之前要先设置ipaddr,这是一个环境变量(IP地址要在同一个网段)。
在这里插入图片描述
在这里插入图片描述

设置完ipaddr之后还要设置,mac地址(mac地址和ip都要唯一)。
setenv ethaddr ?

在ping一下
在这里插入图片描述
他说192.168.28.48 已存在那就是ping通了。

其他的一些环境变量设置
setenv ipaddr 192.168.2.10 // IP地址
setenv ethaddr 00:04:9f:04:d2:35 // mac地址
setenv gatewayip 192.168.2.1 //默认网关
setenv netmask 255.255.255.0 //子网掩码
setenv serverip 192.168.2.9 //服务器ip(可以设置我们自己的虚拟机地址,通过nfs等等挂载到虚拟机)
saveenv //保存环境变量

dhcp

让路由器给我们自动分配一个IP地址,还可以使用它启动一个Linux系统。

nfs

nfs是一个网络文件系统,可以让我们的板子和虚拟机之间文件共享(首先要开启nfs服务器)。
可以通过nfs直接下载文件到开发板内存中。

nfs [loadAddress] [[hostIPaddr:]bootfilename]
nfs 下载地址 服务器IP地址:路径(文件名)

tftp

tftp和nfs一样都是通过网络下载文件到DRAM中(ubuntu要先安装tftp服务器)。

mmc命令

uboot 支持 EMMC 和 SD 卡,因此也要提供 EMMC 和 SD 卡的操作命令。一般认为 EMMC和 SD 卡是同一个东西,所以没有特殊说明,本文统一使用 MMC 来代指 EMMC 和 SD 卡。uboot 中常用于操作 MMC 设备的命令为“mmc”。

在这里插入图片描述

在uboot中更新uboot

mmc wirte:向mmc设备写入数据。
例如写入一个uboot,先使用tftp从网络下载uboot.imx(uboot.bin前面加了一些头文件)文件到DRAM,再从DRAM写入到mmc。

tftp 80800000 u-boot.imx //下载uboot到dram
mmc dev 0 0 //切换到SD卡(SD卡的mmc设备号是0)的0分区(专门存放uboot的分区)

mmc write addr blk# cnt //将dram的addr地址的数据写入到第blk个块开始的地方,一共写cnt个块(块和扇区是一个意思,一个块512字节)
mmc write 80800000 2 346 //下载时发现文件大小是429056个字节,刚好838个块,16进制就是346
千万不要写 SD 卡或者 EMMC 的前两个块(扇区),里面保存着分区表!
下载uboot并写入SD卡查看uboot版本号
在这里插入图片描述

文件系统格式命令

FAT命令

有时候需要在 uboot 中对 SD 卡或者 EMMC 中存储的文件进行操作,这时候就要用到文件操作命令,跟文件操作相关的命令有:fatinfo、fatls、fstype、fatload 和 fatwrite,但是这些文件操作命令只支持 FAT 格式的文件系统!!

一个MMC设备通常有3个分区:
分区一:存放uboot(没有文件系统)
分区二:存放设备树和系统镜像(FAT格式文件系统)
分区三:存放根文件系统(ext4格式文件系统)

fatinfo: 用于查询指定 MMC 设置指定分区的文件系统信息。
usage: fatinfo [<dev[:part]>] 如:fatinfo mmc 1:1

fatls : 用于查询 FAT 格式设备的目录和文件信息
fatload: 用于将指定的文件读取到 DRAM 中
fatload [<dev[:part]> [ [ [bytes [pos]]]]]
pos 是要读的文件相对于文件首地址的偏移,如果为 0 或者省略的话表示从文件首地址开始读取。
我们将 EMMC 分区 1 中的 zImage 文件读取到 DRAM 中的0X80800000 地址 处,命令如下:
fatload mmc 1:1 80800000 zImage

fstype: 用于查看 MMC 设备某个分区的文件系统格式。(不是fat命令,可以用于所有文件系统)

fatwrite : 用于将 DRAM 中的数据写入到 MMC 设备中。
fatwrite <dev[:part]>
interface 为接口,比如 mmc,dev 是设备号,part 是分区,addr 是要写入的数据在 DRAM中的起始地址,filename 是写入的数据文件名字,bytes 表示要写入多少字节的数据。
我们可以通过 fatwrite 命令在 uboot 中更新 linux 镜像文件和设备树。

EXT命令

uboot 有 ext2 和 ext4 这两种格式的文件系统的操作命令,常用的就四个命令,分别为:
ext2load、ext2ls、ext4load、ext4ls 和 ext4write。这些命令的含义和使用与 fatload、fatls 和 fatwrit一样,只是 ext2 和 ext4 都是针对 ext 文件系统的。比如 ext4ls 命令,EMMC 的分区 2 就是 ext4格式的,使用 ext4ls 就可以查询 EMMC 的分区 2 中的文件和目录。与fat命令类似。

ls: ls命令可以用于指定搜索一个flash中的文件。

sysboot命令

从flash设备解析并读取文件到内存地址中。
flash文件系统格式可以是ext2 或fat 或任何。

? sysboot
sysboot - command to get and boot from syslinux files

Usage:
sysboot [-p] <interface> <dev[:part]> <ext2|fat|any> [addr] [filename]
    - load and parse syslinux menu file 'filename' from ext2, fat
      or any filesystem on 'dev' on 'interface' to address 'addr'

启动命令

bootz命令

bootz [addr [initrd[:size]] [fdt]]

命令 bootz 有三个参数,addr 是 Linux 镜像文件在 DRAM 中的位置,initrd 是 initrd 文件在DRAM 中的地址,如果不使用 initrd 的话使用‘-’代替即可,fdt 就是设备树文件在 DRAM 中的地址。

使用bootz命令启动Linux系统

使用tftp 网络下载zImage和dtb,并启动:

tftp 80800000 zImage							#下载zImage
tftp 83000000 imx6ull-alientek-emmc.dtb			#下载设备树
bootz 8080000083000000						#启动

从emmc读取zImage和dtb,并启动:

fatload mmc 1:1 80800000 zImage
fatload mmc 1:1 83000000 imx6ull-alientek-emmc.dtb
bootz 80800000 - 83000000

bootm 命令

bootm 和 bootz 功能类似,但是 bootm 用于启动 uImage 镜像文件。如果不使用设备树的话
启动 Linux 内核的命令如下:addr 是 uImage 镜像在 DRAM 中的首地址。

bootm addr		#不使用设备树

如果要使用设备树,那么 bootm 命令和 bootz 一样,命令格式如下:

bootm [addr [initrd[:size]] [fdt]]

其中 addr 是 uImage 在 DRAM 中的首地址,initrd 是 initrd 的地址,fdt 是设备树(.dtb)文件
在 DRAM 中的首地址,如果 initrd 为空的话,同样是用“-”来替代。

boot 命令

boot 命令也是用来启动 Linux 系统的,只是 boot 会读取环境变量 bootcmd 来启动 Linux 系统 ,其名字分为“boot”和“cmd”,也就是“引导”和“命令”,说明这个环境变量保存着引导命令,其实就是启动的命令集合 ,具体的引导命令内容是可以修改的。
比如我们要想使用 tftp 命令从网络启动 Linux 那么就可以设置 bootcmd 为:

#设置bootcmd环境变量:tftp网络下在镜像、设备树,并启动
setenv bootcmd 'tftp 80800000 zImage; tftp 83000000 imx6ull-alientek-emmc.dtb; bootz 80800000 - 83000000'
saveenv				#保存环境变量
boot				#启动,boot命令会执行bootcmd环境变量

mmc也是一样

setenv bootcmd 'fatload mmc 1:1 80800000 zImage; fatload mmc 1:1 83000000 imx6ullalientek_emmc.dtb; bootz 80800000 - 83000000'
savenev
boot

在启动 Linux 内核的时候可能会遇到如下错误:
“Kernel panic – not Syncing: VFS: Unable to mount root fs on unknown-block(0,0)”
这是因为没有根文件系统造成的。

其他常用命令

reset 命令

重启命令

go 命令

go 命令用于跳到指定的地址处执行应用 ,命令格式如下:

go addr [arg ...]

我们可以将裸机应用下载到DRAM中进行调试(方便,不用再拔插SD卡烧程序)。
这里要拷贝 printf.bin 文件,不需要在前面添加 IVT 信息,因为 uboot 已经初始化好了 DDR 了。(bin文件和imx文件的区别 )。
下载到开发板 DRAM 的 0X87800000 地址处,因为裸机例程的链接首地址就是 0X87800000,
最后使用 go 命令启动 printf.bin 这个应用,命令如下:

tftp 87800000 printf.bin
go 87800000

run 命令

run 命令用于运行环境变量中定义的命令,比如可以通过“run bootcmd”来运行 bootcmd 中的启动命令,但是 run 命令最大的作用在于运行我们自定义的环境变量。

创建一个自己环境变量,并让run执行这个变量的命令:

setenv mybootemmc 'fatload mmc 1:1 80800000 zImage; fatload mmc 1:1 83000000 imx6ullalientek-emmc.dtb;bootz 80800000 - 83000000'

saveenv

run mybootemmc

mtest 命令

mtest 命令是一个简单的内存读写测试命令,可以用来测试自己开发板上的 DDR。

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值