STM32MP157_uboot_命令使用

STM32MP157_uboot_命令使用

前言:
进入 uboot 的命令行模式以后输入“help”或者“?”,然后按下回车即可查看当前 uboot 所支持的命令,图 中只是 uboot 的一部分命令,具体的命令列表以实际为准。图中的命令并不是 uboot 所支持的所有命令,说过 uboot 是可配置的,需要什么命令就使能什么命令。所以图中的命令是正点原子提供的 uboot 中使能的命令,uboot 支持的命令还有很多,而且也可以在 uboot 中自定义命令

在这里插入图片描述
在这里插入图片描述
1、查询指令

bdinfo

在这里插入图片描述
2、输出环境变量信息

STM32MP1 系列的环境变量有很多,比如baudrate、board、board_name、boot_device、bootcmd、bootdelay 等等。uboot 中的环境变量都是字符串,既然叫做环境变量,那么它的作用就和“变量”一样。比如 bootdelay 这个环境变量就表示 uboot 启动延时时间,默认 bootdelay=1,也就默认延时 1 秒。前面说的 1 秒倒计时就是由 bootdelay 定义的,如果将 bootdelay 改为 5 的话就会倒计时 5s 了。uboot 中的环境变量是可以修改的,有专门的命令来修改环境变量的值

printenv

在这里插入图片描述
3、查看 uboot 的版本号

version

在这里插入图片描述
4、修改环境变量(uboot 启动倒计时变为了 5 秒)

环境变量的操作涉及到两个命令:setenv 和 saveenv,setenv 命令用于设置或者修改环境变量的值。命令 saveenv 用于保存修改后的环境变量,一般环境变量存放在外部 flash 中,uboot 启动的时候会将环境变量从 flash 读取到 DRAM 中。所以使用命令 setenv 修改的是 DRAM中的环境变量值,修改以后要使用 saveenv 命令将修改后的环境变量保存到 flash 中,否则uboot 下一次重启会继续使用以前的环境变量值

setenv bootdelay 5
saveenv

在这里插入图片描述
在这里插入图片描述
5、新建环境变量

设置 author 的值为“console=ttySTM0,11520 root=/dev/mmcblk2p2 rootwait rw”,其中“console=ttySTM0,115200”、“root=/dev/mmcblk2p2”、“rootwait”和“rw”相当于四组“值”,这四组“值”之间用空格隔开,所以需要使用单引号‘’将其括起来,表示这四组“值”都属于环境变量 author

setenv author 'console=ttySTM0,11520 root=/dev/mmcblk2p2 rootwait rw '
saveenv

6、删除环境变量

既然可以新建环境变量,那么就可以删除环境变量,删除环境变量也是使用命令 setenv,要删除一个环境变量只要给这个环境变量赋空值即可,比如我们删除掉上面新建的 author 环境变量

setenv author
saveenv

7、内存操作指令(uboot 命令中的数字都是十六进制的!不是十进制的!)

内存操作命令就是用于直接对 DRAM 进行读写操作的,常用的内存操作命令有 md、nm、mm、mw、cp 和 cmp。

//md 命令用于显示内存值
//查看 0XC0100000 开始的 20 个字节的内存值
//md[.b, .w, .l] address [# of objects]
//命令中的[.b .w .l]对应 byte、word 和 long,也就是分别以 1 个字节、2 个字节、4 个字节来显示内存值
md.b C0100000 14

在这里插入图片描述

//nm 命令用于修改指定地址的内存值
//现在以.l 格式修改 0XC0100000 地址的数据为 0x12345678
nm.l C0100000
//C0100000 表示现在要修改的内存地址,ea0000b8 表示地址 0xc0100000 现在的数据,‘?’后面就可以输入要修改后的数据 0x12345678,输入完成以后按下回车,然
后再输入‘q’即可退出

在这里插入图片描述

//mm 命令也是修改指定地址内存值的,使用 mm 修改内存值的时候地址会自增,而使用 nm 命令的话地址不会自增
//以.l 格式修改从地址 0XC0100000 开始的连续 3 个内存块(3*4=12个字节)的数据为 0X05050505

在这里插入图片描述

//mw 用于使用一个指定的数据填充一段内存
//使用.l 格式将以 0XC0100000 为起始地址的 0x10 个内存块(0x10 * 4=64 字节)填充为 0X0A0A0A0A
mw.l C0100000 0A0A0A0A 10

在这里插入图片描述

//cp 是数据拷贝命令,用于将 DRAM 中的数据从一段内存拷贝到另一段内存中,或者把NorFlash 中的数据拷贝到 DRAM 中
//使用.l 格式将 0xC0100000 处的地址拷贝到 0xC0100100 处,长度为 0x10 个内存块(0x10 * 4=64 个字节)
cp.l c0100000 c0100100 10

在这里插入图片描述

//cmp 是比较命令,用于比较两段内存的数据是否相等
//使用.l 格式来比较 0xC0100000 和 0xC0100100 这两个地址数据是否相等,比较长度为 0x10 个内存块(16 * 4=64 个字节)
cmp.l c0100000 c0100100 10

在这里插入图片描述
在这里插入图片描述
8、网络操作指令

uboot 是支持网络的,我们在移植 uboot 的时候一般都要调通网络功能,因为在移植 linuxkernel 的时候需要使用到 uboot 的网络功能做调试。uboot 支持大量的网络相关命令,比如 dhcp、ping、nfs 和 tftpboot

环境变量描述
ipaddr开发板 ip 地址,可以不设置,使用 dhcp 命令来从路由器获取 IP 地址
ethaddr开发板的 MAC 地址,一定要设置
gatewayip网关地址
netmask子网掩码
serverip服务器 IP 地址,也就是 Ubuntu 主机 IP 地址,用于调试代码
setenv ipaddr 192.168.0.222
setenv ethaddr b8:ae:1d:01:01:00
setenv gatewayip 192.168.0.1
setenv netmask 255.255.255.0
setenv serverip 192.168.0.124
saveenv
//ping 命令,开发板的网络能否使用,是否可以和服务器(Ubuntu 主机)进行通信
ping 192.168.0.124

在这里插入图片描述

//dhcp 用于从路由器获取 IP 地址
dhcp

在这里插入图片描述

//nfs 命令,通过 nfs 可以在计算机之间通过网络来分享资源
//比如我们将 linux 镜像和设备树文件放到 Ubuntu 中,然后在 uboot 中使用 nfs 命令将 Ubuntu 中的 linux 镜像和设备树下载到开发板的 DRAM 中
//使用 nfs 命令来将 uImage 下载到开发板 DRAM 的 0XC2000000 地址处
nfs C2000000 192.168.1.249:/home/zuozhongkai/linux/nfs/uImage

在这里插入图片描述

//tftp 命令,tftp 命令的作用和 nfs 命令一样,都是用于通过网络下载东西到 DRAM 中
//和 nfs 命令的区别在于,tftp 命令不需要输入文件在 Ubuntu 中的完整路径,只需要输入文件名即可
//比如我们现在将 tftpboot 文件夹里面的 uImage 文件下载到开发板 DRAM 的 0XC2000000 地址处
tftp C2000000 uImage

在这里插入图片描述
9、EMMC 和 SD 卡操作命令

uboot 支持 EMMC 和 SD 卡,因此也要提供 EMMC 和 SD 卡的操作命令。一般认为 EMMC和 SD 卡是同一个东西

命令描述
mmc info输出 MMC 设备信息
mmc read读取 MMC 中的数据。
mmc wirte向 MMC 设备写入数据。
mmc rescan扫描 MMC 设备。
mmc part列出 MMC 设备的分区。
mmc dev切换 MMC 设备。
mmc list列出当前有效的所有 MMC 设备。
mmc hwpartition设置 MMC 设备的分区。
mmc bootbus……设置指定 MMC 设备的 BOOT_BUS_WIDTH 域的值。
mmc bootpart……设置指定 MMC 设备的 boot 和 RPMB 分区的大小。
mmc partconf……设置指定 MMC 设备的 PARTITION_CONFG 域的值。
mmc rst复位 MMC 设备
mmc setdsr设置 DSR 寄存器的值
//mmc info 命令用于输出当前选中的 mmc info 设备的信息
mmc info

在这里插入图片描述

//mmc rescan 命令用于扫描当前开发板上所有的 MMC 设备
mmc rescan
//mmc list 命令用于来查看当前开发板一共有几个 MMC 设备
mmc list

在这里插入图片描述

//mmc dev 命令用于切换当前 MMC 设备
mmc dev 0 
//切换到 SD 卡,0 为 SD 卡,1 为 eMMC

在这里插入图片描述
在这里插入图片描述

//查看 EMMC 分区
mmc part

第一个分区为名字为“ssbl”,用来存放 uboot 镜像,范围为:扇区 0x400~0x13ff。第二个分区名字为“boot”,用来存放 linux 内核镜像,范围为:扇区 0x1400~0x213ff。第三个分区名字为“rootfs”,这个是根文件系统分区,占用了剩余的所有扇区,也就是扇区 0x21400~0xe8fbff

在这里插入图片描述

//将 EMMC 的分区 2 设置为当前 MMC 设置分区
mmc dev 1 2

在这里插入图片描述

//mmc read 命令用于读取 mmc 设备的数据
//从 EMMC 的第 1024(0x400)个块开始,读取 16(0x10)个块的数据到 DRAM 的0XC0000000 地址处
//切换到 EMMC
mmc dev 1
//读取数据
mmc read c0000000 400 10

在这里插入图片描述
10、EXT 格式文件系统操作命令

uboot 有 ext2 和 ext4 这两种格式的文件系统的操作命令,STM32MP1 的系统镜像都是 ext4格式的,所以我们重点讲解一下和 ext4 有关的三个命令:ext4ls、ext4load 和 ext4write。注意,由STM32MP1 嵌入式 Linux 驱动开发指南于只有 linux 内核、设备树和根文件系统是以 ext4 格式存放在 EMMC 中的

//ext4ls 命令用于查询 EXT4 格式设备的目录和文件信息
//查询 EMMC 分区 2 中的所有的目录和文件
//命令 mmc 设备号:分区号
ext4ls mmc 1:2

在这里插入图片描述

//extload 命令用于将指定的文件读取到 DRAM 中
//EMMC 分区 2 中的 uImage 文件读取到DRAM 中的 0XC2000000 地址处
//命令 mmc 设备号:分区号 DRAM地址 分区中文件名
ext4load mmc 1:2 C2000000 uImage

在这里插入图片描述

//ext4wirte 命令用于将 DRAM 中的数据写入到 MMC 设备中
//DRAM中的0XC2000000地址处的数据大小为7313888(0X6F99E0)个字节,读到EMMC分区2写入的文件命名为test_uImage
//命令 mmc 设备号:分区号 DRAM地址 分区中文件名 数据长度
ext4write mmc 1:2 c0000000 /test_uImage 0x6f99e0

在这里插入图片描述
11、BOOT 操作命令

uboot 的本质工作是引导 Linux,所以 uboot 肯定有相关的 boot(引导)命令来启动 Linux。常用的跟 boot 有关的命令有:bootm、bootz 和 boot

//使用 tftp命令将 uImage 下载到 DRAM 的 0XC2000000 地址处,然后将设备树 stm32mp157d-atk.dtb 下载到 DRAM 中的 0XC400000 地址处,最后使用命令 bootm 启动
tftp c2000000 uImage
tftp c4000000 stm32mp157d-atk.dtb
bootm c2000000 - c4000000

在这里插入图片描述

//使用命令 ext4load 将 uImage 和 stm32mp157d-atk.dtb 文件拷贝到 DRAM 中,地址分别为0XC2000000 和 0XC4000000,最后使用 bootm 启动
ext4load mmc 1:2 c2000000 uImage
ext4load mmc 1:2 c4000000 stm32mp157d-atk.dtb
bootm c2000000 - c4000000

在这里插入图片描述

//使用 tftp 命令从网络启动 Linux 那么就可以设置bootcmd 为“tftp c2000000 uImage;tftp c4000000 stm32mp157d-atk.dtb;bootm c2000000 - c4000000”,然后使用 saveenv 将 bootcmd 保存起来。然后直接输入 boot 命令即可从网络启动 Linux 系统
setenv bootcmd 'tftp c2000000 uImage;tftp c4000000 stm32mp157d-atk.dtb;bootm c2000000 -c4000000' 
saveenv
boot

在这里插入图片描述

//从 EMMC 启动系统,那就设置 bootcmd 环境变量为“ext4load mmc 1:2 c2000000 uImage;ext4load mmc 1:2 c4000000 stm32mp157d-atk.dtb;bootm c2000000 - c4000000”,然后使用boot 命令启动即可
setenv bootcmd 'ext4load mmc 1:2 c2000000 uImage;ext4load mmc 1:2 c4000000 stm32mp157datk.dtb;bootm c2000000 - c4000000' 
saveenv
boot

在这里插入图片描述
12、UMS 命令

在 uboot 下我们可以将开发板虚拟成一个 U 盘,我们可以选择使用哪个 Flash 作为这个 U盘的存储器,比如将正点原子 STM32MP157 开发板上的 EMMC 或者 SD 卡虚拟成 U 盘。当我们将 EMMC 虚拟成 U 盘以后就可以直接在电脑上向开发板拷贝文件了,比如我们在产品开发阶段,就可以直接在 uboot 下将某个文件拷贝到开发板的根文件系统中,这样就不需要进入系统或者通过网络来替换文件

//将开发板的EMMC 挂载到电脑上,首先使用USB Type-C线将开发板的USB_OTG口与电脑连接起来,然后用以下命令启动。
//ums usb 接口索引 mmc Devtype 是要挂载的设备
ums 0 mmc 1
//注意,在 Windows 下这三个 U 盘是无法操作的,因为这三个 U 盘是 ext4 格式的,而 Windows
是不支持 ext4 格式!所以大家在操作的时候发现 Windows 报出 U 盘识别有问题,让格式化的,
千万不要格式化!负责开发板整个 Linux 系统都会被格式化掉!
//我们可以将其挂载到 Ubuntu 下,这样就可以正常操作这三个 U 盘了。
如果要结束挂载,在终端下运行先按住 CTRL+C 键就能结束这个挂载

在这里插入图片描述
12、MII 命令使用说明

用于读取网络 PHY 芯片寄存器

13、其他常用命令

uboot 中还有其他一些常用的命令,比如 reset、go、run 和 mtest 等

//reset 命令顾名思义就是复位的,输入“reset”即可复位重启
reset

在这里插入图片描述

//go 命令用于跳到指定的地址处执行应用
go addr [arg ...]
//addr 是应用在 DRAM 中的首地址
//run 命令用于运行环境变量中定义的命令
//run 命令最大的作用在于运行我们自定义的环境变量。在后面调试 Linux 系统的时候常常要在网络启动和 EMMC 启动之间来回切换,而 bootcmd 只能保存一种启动方式,如果要换另外一种启动方式的话就得重写 bootcmd,会很麻烦。这里我们就可以通过自定义环境变量来实现不同的启动方式,比如定义环境变量 mybootemmc 表示从 emmc 启动,定义mybootnet 表示从网络启动。如果要切换启动方式的话只需要运行“run mybootxxx(xxx 为 emmc或 net)”即可
setenv mybootemmc 'ext4load mmc 1:2 c2000000 uImage;ext4load mmc 1:2 c4000000 stm32mp157d-atk.dtb;bootm c2000000 - c4000000'
setenv mybootnet 'tftp c2000000 uImage;tftp c4000000 stm32mp157d-atk.dtb;bootm c2000000 - c4000000'
saveenv
run mybootemmc 或者 run mybootnet
//mtest 命令是一个简单的内存读写测试命令
//我们测试0XC0000000~0XC0001000这段内存,输入“mtest C0000000 C0001000”
//结束测试就按下键盘上的“Ctrl+C”键

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值