IMX6ULL学习笔记 (二) —— uboot 命令

IMX6ULL 学习笔记


version : v1.0 「2023.4.27」

author: Y.Z.T.


简介: 随记 , 记录 uboot 命令




⭐️ 目录





2️⃣ Uboot

2.1 Uboot命令

Uboot提供了丰富的命令集 , 可以通过help指令查看当前支持的命令 , 支持tab 键进行命令补全 , 和命令历史记录功能



2.1.1 查询命令
2.1.1.1 help

作用

  • 列出所有命令
  • 查询某个命令功能 :
help ls


2.1.1.2 bdinfo

作用

  • 查看当前板子信息

image-20230507204948882

打印出 DRAM 的起始地址和大小、启动参数保存起始地址、波特率、 sp(堆栈指针)起始地址等信息



2.1.1.3 printenv

作用

打印环境信息,显示一些环境参数的配置信息,这些参数也是可以修改的

image-20230507205228650



2.1.1.4 version

作用

查看uboot版本,uboot 编译时间和编译器

image-20230507205337421



2.1.2 环境变量修改命令

修改环境变量的操作涉及到两个命令:setenvsaveenv

setenv:设置或者修改环境变量的值

saveenv:保存修改后的环境变量;一般环境变量是存放在外部 flash 中的, uboot 启动的时候会将环境变量从 flash 读取到 DRAM 中,所以使用命令 setenv 将修改的环境变量值保存到 flash 中

: 修改bootdelay 变量的值为 10

setenv bootdelay 10
saveenv

新增变量

使用setenv 命令可以新建环境变量

setenv <新变量> <新值>
saveenv

删除变量

删除变量的话,我们直接使用 setenv 设置变量的值为空就行

sentenv <待删除变量>


2.1.3 内存操作命令

内存操作命令就是用于直接对 DRAM 进行读写操作,常用的内存操作命令有 mdnmmmmwcpcmp


2.1.3.1 md命令

作用

md 命令用于显示内存值

md[.b, .w, .l] address [# of objects]
  • [.b .w .l] :对应 bytewordlong,也就是分别以 1 个字节、2 个字节、4 个字节来显示内存值
  • address :就是要查看的内存起始地址
  • [# of objects] :表示要查看的数据长度(数字是以十六进制表示 , 如 10 表示十进制的16)

image-20230507210257898



2.1.3.2 nm命令

作用

nm 命令用于修改指定地址的内存值

nm[.b, .w, .l] address
  • 在待输入地址后面的 ? 中输入修改后的数据

  • 输入完成以后按下回车,然后再输入q即可退出


image-20230507210541930



2.1.3.3 mm命令

作用

  • mm 命令也是修改指定地址内存值的,使用 mm 修改内存值的时候地址会自增
  • 而使用命 令 nm 的话地址不会自增,使用 mm 修改完一个值后会修改下一个值
mm[.b, .w, .l] address

image-20230507211232613

image-20230507211217219



2.1.3.4 mw命令

作用

mw 用于使用一个指定的数据填充一段内存 ( mw命令令同样以.b.w.l 来指定操作格式)

mw[.b, .w, .l] address value [count]
  • address 表示要填充的内存起始地址
  • value为要填充的数据
  • count 是填充的长度

使用.l 格式将以 0X80000000 为起始地址的 0x10 个内存块 填充为 0X0A0A0A0A

image-20230507211647494



2.1.3.5 cp命令

作用

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

cp[.b, .w, .l] source target count
  • source 为源地址
  • target 为目的地址
  • count为拷贝的长度

0x80000000 处的地址拷贝到 0X80000100

image-20230507212159984



2.1.3.6 cmp命令

cmp 是比较命令,用于比较两段内存的数据是否相等

cmp [.b, .w, .l] addr1 addr2 count
  • addr1 为第一段内存首地址
  • addr2 为第二段内存首地址

image-20230507212508129



2.1.4 网络操作命令
  • ARM 板的调试经常用到网络功能,uboot 提供了许多用于网络调试的指令 如 dhcppingnfstftpboot
  • 将开发板和电脑连接在同一个交换机或者路由器下,方便进行网络调试

关于网络的环境变量

image-20230507213322878


配置环境变量

setenv ipaddr 192.168.1.50
setenv ethaddr b8:ae:1d:01:00:00
setenv gatewayip 192.168.1.1
setenv netmask 255.255.255.0
setenv serverip 192.168.1.225
saveenv


2.1.4.1 ping 命令

作用

通过 ping 命令可以验证网络能否使用

image-20230508171218341

[注]

网络连接情况:

  • 网线连接开发板和电脑网口
  • pc主机 通过wifi连接外网
  • Ubuntu虚拟机 使用两个网络驱动器 , 一个用于连接主机 , 一个用于连接开发板

image-20230508222603201

  • uboot ping不通Ubuntu主机的情况 , 可以参考这篇文章 👇

( 开发板 ping 虚拟机 )



2.1.4.2 bhcp命令

dhcp 可以用于从路由器获取 IP 地址,前提得开发连接到路由器(交换机自动分配IP)上



2.1.4.3 nfs命令

nfs (Network File System) 网络文件系统,通过 nfs 可以在计算机之间通过网络来分享资源

可以通过网络将编译好的 linux 镜像和设备树文件下载 到 DRAM 中,然后直接运行

nfs [loadAddress] [[hostIPaddr:]bootfilename]
  • loadAddress是要保存的 DRAM地址
  • [[hostIPaddr:]bootfilename]是要下载的文件地址。

uboot中输入以下内容

nfs 80800000 192.168.1.226:/home/yzt/samba_share/zdyz_example/nfs/zImage

2e369a0616a1b80a9b58211b990cd2b

运行结果:

可以看到已经烧录的 80800000 地址的内容 和 zImage 源文件的内容一致

image-20230508221759491


[注]

出现nfs挂载不成功的

image-20230508222136083

可以参考这篇文章 嵌入式Linux开发——解决uboot无法使用nfs服务从ubuntu中下载文件



2.1.4.4 tftp命令

作用

tftp命令的作用和 nfs命令一样,都是用于通过网络下载东西到 DRAM中,只是 tftp命令使用的 TFTP协议, Ubuntu主机作为 TFTP服务器。

tftpboot [loadAddress] [[hostIPaddr:]bootfilename]

配置xinetd服务器

修改/etc/xinetd.d/tftp

server tftp
{
     socket_type = dgram
     protocol    = udp
     wait        = yes
     user        = root
     server      = /usr/sbin/in.tftpd
     server_args = -s /home/yzt/samba_share/zdyz_example/tftpboot/
     disable     = yes
     per_source  = 11
     cps         = 100 2
     flags       = IPv4

}

改变传输目录

修改 /etc/default/tftpd-hpa 文件传输信息

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/home/yzt/samba_share/zdyz_example/tftpboot"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="-l -c -s"

开始传输

uboot中 使用命令tftp 80800000 zImage 进行传输

image-20230509183347644



2.1.5 EMMC和SD卡命令

uboot 支持 EMMCSD 卡,提供 EMMCSD 卡的操作命令 , 即mmc命令


mmc 命令

image-20230509201544211


注意 不能 写 SD 卡或者 EMMC前两个块(扇区),里面保存着分区表



2.1.6 FAT 格式文件系统操作命令
  • 有时候需要在 uboot中对 SD卡或者 EMMC中存储的文件进行操作,这时候就要用到文件操作命令
  • 如: fatinfofatlsfstypefatloadfatwrite,这些命令只支持FAT格式的文件系统


2.1.6.1 fatinfo 命令

作用

用于查询指定 MMC 设置指定分区的文件系统信息

fatinfo <interface> [<dev[:part]>]
  • nterface表示接口,比如 mmc
  • dev是查询的设备号
  • part是要查询的分区。

查询emmc 分区1 的文件系统信息

image-20230509211802949



2.1.6.2 fatls 命令

作用

查询 FAT 格式设备的目录和文件信息

fatls <interface> [<dev[:part]>] [directory]
  • nterface表示接口,比如 mmc
  • dev是查询的设备号
  • part是要查询的分区
  • directory 是要查询的目录

查询分区1的文件

image-20230509213222687

  • 可以看见 , emmc 的分区1中存放着8个文件


2.1.6.3 fstype 命令

作用

查看 MMC 设备某个分区的文件系统格式

fstype <interface> <dev>:<part>

查询emmc三个分区的文件系统

image-20230509213616078

  • 从上图可以看出,分区 0格式未知,因为分区 0存放的 uboot,并且分区 0没有格式化
  • 以文件系统格式未知。分区 1的格式为 fat , 分区 1用于存放 linux镜像和设备树
  • 分区2的格式为儿ext4 , 用于存放linux 的根文件系统 (roofs)


2.1.6.4 fatload 命令

作用

将指定的文件读取到 DRAM

fatload <interface> [<dev[:part]> [<addr> [<filename> [bytes [pos]]]]]
  • interface为接口,如 mmc
  • dev是设备号
  • part 是分区
  • addr 是保存在 DRAM中的起始地址
  • filename是要读取的文件名字
  • bytes表示读取多少字节的数据

EMMC分区 1中的zImage文件读取到 DRAM中的 0X80800000地址处

fatload mmc 1:1 80800000 zImage


2.1.6.5 fatwrite 命令

作用

DRAM 中的数据写入到 MMC 设备中(使用前需要修改板子配置头文件,使能写文件系统,使能如下)

#define CONFIG_FAT_WRITE  /* 使能 fatwrite命令 */

fatwirte命令用于将 DRAM中的数据写入到 MMC设备中,命令格式如下:

fatwrite <interface> <dev[:part]> <addr> <filename> <bytes>
  • interface为接口,如 mmc
  • dev是设备号
  • part 是分区
  • addr 是保存在 DRAM中的起始地址


2.1.7 EXT 格式文件系统操作命令

ubootext2ext4 这两种格式的文件系统的操作命令,常用的就五个命令,分别为: ext2loadext2lsext4loadext4lsext4write


命令功能
ext2load从 ext2 文件系统中读文件数据
ext2ls以查询文件和目录
ext4load从 ext4 文件系统中读文件数据
ext4ls以查询文件和目录
ext4write写文件数据


2.1.8 BOOT 操作命令

uboot 有相关的 boot (引导)命令来启动 Linux,常用的跟 boot 有关的命令有:bootzbootmboot



2.1.8.1 bootz命令

作用

Linux 镜像和设备树文件存到 DRAM 中就行,然后使用 bootz 命令来启动

bootz [addr [initrd[:size]] [fdt]]
  • addrLinux镜像文件在 DRAM中的位置
  • initrdinitrd文件在DRAM中的地址


2.1.8.2 boot 命令
  • boot 命令也是用来启动 Linux 系统的,只是 boot 会读取环境变量 bootcmd 来启动 Linux 系统
  • bootcmd 是一个很重要的环境变量,这个环境变量保存着引导命令,就是启动的命令集合


2.1.9 其他命令
2.1.9.1 reset 命令
  • reset命令顾名思义就是复位的,输入reset 即可复位重启

image-20230509222238895



2.1.9.2 go命令

go 命令用于跳到指定的地址处执行应用

go addr [arg ...]
  • addr是应用在 DRAM中的首地址


2.1.9.3 run命令

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

run 环境变量


2.1.9.4 mset 命令

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

mtest [start [end [pattern [iterations]]]]
  • start是要测试的DRAM 开始地址
  • end 是结束地址

mtest 80000000 80001000

image-20230509223201643



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值