STM32MP157_uboot_命令使用

news2024/11/16 1:19:08

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”键

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2095843.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot2:IOC容器的相关操作以及常用注解说明

一、查看容器中的Bean实例 查看springboot中的容器实例,首先,我们要获取到IOC容器。 //1、返回我们的IOC容器ConfigurableApplicationContext run SpringApplication.run(MainApplication.class, args);//2、查看容器里面的组件String[] names run.ge…

线性代数基础(2)——特征值和特征向量

第一节博客已经整理了求导的公式,一些常用的概念。链接如下:高等数学基础(1)-CSDN博客。 第二节博客整理了微积分的公式及其相关概念。链接如下:高等数学基础(2)——微积分-CSDN博客 第三节博客…

JavaWeb JavaScript ⑩ 日程管理 第一期

自我消耗,敏感是我, 明媚是我, 我横跳在不同的情绪中 —— 24.8.31 一、登录页及校验 1.校验账号格式 // 校验账号格式function checkUsername(){// 定义正则表达式表示字符串规则var usernameReg /^[a-zA-Z0-9]{5,10}$/;// 获取用户名输入…

96.WEB渗透测试-信息收集-Google语法(10)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:95.WEB渗透测试-信息收集-Google语法(9) • site : x…

【硬件操作入门】3--同步与异步、半双工传输、UART硬件介绍、bps速率计算

【硬件操作入门】3–同步与异步、半双工传输、UART硬件介绍、bps速率计算 文章目录 【硬件操作入门】3--同步与异步、半双工传输、UART硬件介绍、bps速率计算一、同步与异步1.1. 概念1.2 同步信号1.3 异步信号1.4 举个例子:红外遥控器解码器(异步&#x…

一分钟学会系列-1电烙铁(焊台)

目录: ‌1、概述 2、电烙铁的种类 3、焊接步骤 4、电烙铁的保养 ‌1、概述 电烙铁‌是一种电子制作和电器维修中常用的工具,主要用于焊接元件及导线。使用电烙铁时,需要注意安全,并采取适当的预防措施,如使用风扇…

最新ssl证书在线申请源码+网站ICP备案查询源码

最新ssl证书在线申请源码网站ICP备案查询源码 经过精心调试和修复,我们对源码进行了优化,确保了证书价格的准确显示。现在,您可以放心使用我们的在线生成网站源码,完整地展示证书价格,并在生成证书时提供准确的价格计…

SQL-函数

1、字符串函数 # 字符函数 select concat(hello , mysql!); select lower(HELLO); select upper(hello); select lpad(01,5,-);# 左填充 select rpad(01,5,-);# 右填充 select trim( hello mysql ! );# 去除前后空格 select substring(hello mysql!,1,7);# 截取一部分字符前7…

【教学类-35-21】20240901 中2班描字帖(学号+姓名、虚拟姓名、杨任东竹石体 Regular)

背景需求: 8月底通知我成为中2班的班主任,为了快速识别幼儿的脸、姓名、学号,再次制作描字帖,并拍照。 最近做的一份字帖是中4班描字帖 【教学类-35-20】20240328 中4班描字帖(学号姓名 A4竖版2份 横面)…

--- 数据结构 链表 --- java

与顺序表相比,链表的最大优点就是不会存在空间的浪费 链表是通过将一个一个储存数据的节点(对象)连起来(通过记录下他们的地址),这些数据在逻辑上就是线性的,但在物理上不是,因为地…

[Leetcode 216][Medium]组合总和 III--回溯(组合问题)

目录 一、题目描述 二、整体思路 三、代码 一、题目描述 原题地址 二、整体思路 对于组合问题,首先要想到回溯法。那么可以根据回溯法模版进行设计。 void backtrace(元素){if(满足题目要求的条件){保存目前路径/状态/结果;return;}for循环,往目前状态相邻的所…

9-8 束搜索

贪心搜索 穷举搜索 束搜索 小结 序列搜索策略包括贪心搜索、穷举搜索和束搜索。 贪心搜索所选取序列的计算量最小,但精度相对较低。 穷举搜索所选取序列的精度最高,但计算量最大。 束搜索通过灵活选择束宽,在正确率和计算代价之间进行权衡…

栈和队列——用队列实现栈

题目中给出,让我们应用两个队列实现栈,首先我们先来想一下,栈是先进后出,队列是先进先出。所以我们就需要应用两个队列来回导才能实现栈的特点。因为这道题是基于队列来实现的,所以在下方若有看不懂的函数名称可以去栈…

Java 入门指南:Java 并发编程 —— Synchronized 实现悲观锁(Pessimistic Locking)

悲观锁 悲观锁(Pessimistic Locking)是一种悲观的并发控制机制,它基于悲观的假设,即并发冲突会时常发生,因此在访问共享资源(如数据库记录或共享变量)之前,会先获取独占性的锁&…

数组结构第一周做题总结_基础练习

错误的原因是写了无参构造函数但是没有实现 id:8 A. 月份查询(指针数组) 题目描述 已知每个月份的英文单词如下,要求创建一个指针数组,数组中的每个指针指向一个月份的英文字符串,要求根据输入的月份数字输出相应的…

盘点java8 stream中隐藏的函数式接口

shigen坚持更新文章的博客写手,记录成长,分享认知,留住感动。个人IP:shigen 提到函数式接口,最常见的就是lambda表达式,IDEA也有智能的提示: 最后改成这样的就是最简洁的、IDEA希望的风格&#…

机器学习:基于机器学习的中文评论情感分析

通过机器学习技术对中文评论进行情感分析。我们使用了jieba进行中文分词,移除了停用词,并利用词袋模型(Bag of Words)和多项式朴素贝叶斯分类器对评论进行了情感分类。实验结果表明,该模型在测试集上达到了较高的准确率…

如何构建高效的中药材进存销管理系统?——运用Java SpringBoot和Vue实现库存实时监控,简化销售流程,提升药材管理效率。

🍊作者:计算机毕设匠心工作室 🍊简介:毕业后就一直专业从事计算机软件程序开发,至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长:按照需求定制化开发项目…

前端宝典二十一:前端异步编程规范手写Promise、async、await

本文主要探讨前端异步编程的处理方式、处理场景,并且手写Promise的全家桶,介绍async、await方法使用 一、异步处理方式有: 1. 回调函数 function fetchDate(callback) {setTimeout(() > {const date new Date();callback(date);}, 100…

SpringSecurity Oauth2 - 密码模式完成身份认证获取令牌 [自定义UserDetailsService]

文章目录 1. 授权服务器2. 授权类型1. Password (密码模式)2. Refresh Token(刷新令牌)3. Client Credentials(客户端凭证模式) 3. AuthorizationServerConfigurerAdapter4. 自定义 TokenStore 管理令牌1. TokenStore 的作用2. Cu…