U-Boot常用命令

2023-10-27

U-Boot常用命令

一、信息查询命令

1. 查看开发板信息 [ bdinfo ]

在这里插入图片描述

2. 查看环境变量信息 [ printenv ]

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

3. 查看U-Boot版本号 [ version ]

在这里插入图片描述

二、环境变量操作命令

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

1. 修改环境变量 [ setenv ]

  1. 设置环境变量
    将环境变量 bootdelay 改为 5
    setenv bootdelay 5

  2. 修改环境变量
    新建一个环境变量author,并赋值
    setenv author 'console=ttySTM0,11520 root=/dev/mmcblk2p2 rootwait rw '

  3. 删除环境变量
    给这个环境变量赋空值即可(下例删除上面新建的环境变量author)
    setenv author

2. 保存环境变量 [ saveenv ]

直接调用 saveenv即可将修改后的环境变量保存到 flash 中

三、内存操作命令

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

注意:uboot 命令中的数字都是十六进制的!不是十进制的!

1. 显示内存值命令 [ md ]

用于显示对应地址的内存值
格式:md[.b, .w, .l] address [# of objects]
命令中的[.b .w .l]对应 byte、word 和 long
address就是要查看的内存起始地址
[# of objects]表示要查看的数据长度。
(数据长度单位不是字节,与所选择的显示格式有关。)

例如:
查看0XC0100000 开始的 20 个字节的内存值,显示格式为.b
md.b C0100000 14
20(十进制) = 0x14(十六进制)

2. 修改指定地址的内存值命令 [ nm ]

用于修改指定地址的内存值
格式:nm [.b, .w, .l] address
命令参数含义同上

例如:
以.l 格式修改 0XC0100000 地址的数据为 0x12345678
先输入 nm.l C0100000 命令得到如下响应
在这里插入图片描述
ea0000b8 表示地址 0xc0100000 现在的数据
‘?’ 后面就可以输入要修改后的数据 0x12345678,输入完成以后按下回车,然
后再输入‘q’即可退出
在这里插入图片描述

3. 自增-修改指定地址的内存值命令 [ mm ]

用法同nm命令,但修改完成后地址会自增,从而对下一个地址进行修改,直到输入q退出命令。
在这里插入图片描述

4. 使用一个指定的数据填充一段内存命令 [ mw ]

使用一个指定的数据填充一段内存
格式:mw [.b, .w, .l] address value [count]
address 表示要填充的内存起始地址,value 为要填充的数据,count 是填充的长度。

例如:
使用.l 格式将以 0XC0100000 为起始地址的 0x10 个内存块(0x10 * 4=64 字节)填充为 0X0A0A0A0A
mw.l C0100000 0A0A0A0A 10

5. 数据拷贝命令 [ cp ]

用于将 DRAM 中的数据从一段内存拷贝到另一段内存中,或者把
NorFlash 中的数据拷贝到 DRAM 中。
格式:cp [.b, .w, .l] source target count
source 为源地址,target 为目的地址,count 为拷贝的长度。

例如:
使用.l 格式将 0xC0100000 处的地址拷贝到 0xC0100100 处,长度为 0x10 个内存块(0x10 * 4=64 个字节)
cp.l c0100000 c0100100 10

5. 比较命令 [ cmp ]

用于比较两段内存的数据是否相等
格式:cmp [.b, .w, .l] addr1 addr2 count
addr1 为第一段内存首地址,addr2 为第二段内存首地址,count 为要比较的长度。

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

四、网络操作命令

移植 uboot 的时候一般都要调通网络功能进行调试
注意:建议开发板和主机 PC 都连接到同一个路由器上!

1. 环境变量配置

环境变量					描述
ipaddr				开发板 ip 地址,可以不设置,使用 dhcp 命令来从路由器获取 IP 地址。
ethaddr				开发板的 MAC 地址,一定要设置。
gatewayip			网关地址。
netmask				子网掩码。
serverip			服务器 IP 地址,也就是 Ubuntu 主机 IP 地址,用于调试代码。

设置环境变量:

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

2. 网络连接测试命令 [ ping ]

用法:ping 服务器IP地址
例如:
服务器 IP 地址为 192.168.1.249
ping 192.168.1.249
注意:只能在 uboot 中 ping 其他的机器,其他机器不能 ping uboot,因为 uboot 没有对 ping
命令做处理,如果用其他的机器 ping uboot 的话会失败!

3. IP地址获取命令 [ dhcp ]

直接输入 dhcp 命令即可通过路由器获取到 IP 地址
所获取到的IP地址与路由器分配机制有关

4. 网络文件系统命令 [ nfs ]

可以使用 uboot 中的 nfs 命令将 Ubuntu 中的文件下载到开发板的 DRAM 中,在使用之前需要开启 Ubuntu 主机的 NFS 服务,并且要新建一个 NFS 使用的目录,以后所有要通过NFS 访问的文件都需要放到这个 NFS 目录中。

格式:nfs [loadAddress] [[hostIPaddr:]bootfilename]
loadAddress 是要保存的 DRAM 地址,[[hostIPaddr:]bootfilename]是要下载的文件地址。
例如:
使用 nfs 命令来将 uImage 下载到开发板 DRAM 的 0XC2000000 地址处
nfs C2000000 192.168.1.249:/home/fallencity/linux/nfs/uImage

5.网络文件系统命令 [ tftp ]

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

  1. 使用前需要在Ubuntu上搭建tftp服务器
    sudo apt-get install tftp-hpa tftpd-hpa
    sudo apt-get install xinetd

  2. 和 NFS 一样,TFTP 也需要一个文件夹来存放文件,新建一个目录,并修改执行权限
    mkdir /home/fallencity/linux/tftpboot
    chmod 777 /home/fallencity/linux/tftpboot

  3. 还需要配置tftp
    新建文件/etc/xinetd.d/tftp,如果没有/etc/xinetd.d 目录的话自行创建,然后在里面输入如下内容:

server tftp
{
	socket_type = dgram
	protocol = udp
	wait = yes
	user = root
	server = /usr/sbin/in.tftpd
	server_args = -s /home/fallencity/linux/tftpboot
	disable = no
	per_source = 11
	cps = 100 2
	flags = IPv4
}
  1. 启动 tftp 服务
    sudo service tftpd-hpa start

  2. 打开/etc/default/tftpd-hpa 文件,将其修改为如下所示内容:

# /etc/default/tftpd-hpa

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/home/fallencity/linux/tftpboot"
TFTP_ADDRESS=":69" 
TFTP_OPTIONS="-l -c -s"

TFTP_DIRECTORY 就是我们上面创建的 tftp 文件夹目录,以后我们就将所有需要通过TFTP 传输的文件都放到这个文件夹里面,并且要给予这些文件相应的权限。

  1. 重启tftp服务器
    sudo service tftpd-hpa restart

  2. 使用tftp下载调试文件

例如:将 uImage 镜像文件拷贝到 tftpboot 文件夹中,并且给予 uImage 相应的权限,命令如下:

cp uImage /home/fallencity/linux/tftpboot
cd /home/fallencity/linux/tftpboot
chmod 777 uImage

调用格式:tftpboot [loadAddress] [[hostIPaddr:]bootfilename]
loadAddress 是文件在 DRAM 中 的存 放 地 址 ,
[[hostIPaddr:]bootfilename]是要从 Ubuntu 中下载的文件

将 uImage 文件下载到开发板 DRAM 的 0XC2000000 地址处
tftp C2000000 uImage

注意:tftp和 nfs 命令的区别在于,tftp 命令不需要输入文件在 Ubuntu 中的完整路径,只需要输入文件名即可。

五、EMMC 和 SD 卡操作命令 [ mmc ]

mmc 是一系列的命令,其后可以跟不同的参数

1.输出当前选中的设备的信息 [ mmc info ]

直接输入命令 mmc info 即可
在这里插入图片描述

2. 复扫描当前开发板上所有的 MMC 设备 [ mmc rescan ]

直接输入命令 mmc rescan 即可

3. 查看当前开发板MMC 设备数量 [ mmc list ]

直接输入命令 mmc list 即可
在这里插入图片描述

4.切换当前 MMC 设备 [ mmc dev ]

格式:mmc dev [dev] [part]
[dev]用来设置要切换的 MMC 设备号,[part]是分区号,如果不写分区号的话默认为分区 0。

例如:
切换至SD卡命令:mmc dev 0
注:切换到 SD 卡,0 为 SD 卡,1 为 eMMC

5. 分区查看 [ mmc part ]

有时候 SD 卡或者 EMMC 会有多个分区,可以使用命令“mmc part”来查看其分区

例如:
查看EMMC分区情况
1. 先切换到EMMC,输入命令 mmc dev 1
2. 查看 EMMC 分区,输入命令 mmc part

在这里插入图片描述
3. 如果要将 EMMC 的分区 2 设置为当前 MMC 设置分区,可输入命令 mmc dev 1 2

6. 读取 mmc 设备的数据 [ mmc read ]

格式:mmc read addr blk# cnt
addr 是数据读取到 DRAM 中的地址,blk 是要读取的块起始地址(十六进制),一个块是 512字节,这里的块和扇区是一个意思,在 MMC 设备中我们通常说扇区,cnt 是要读取的块数量(十六进制)。

例如:
从 EMMC 的第 1024(0x400)个块开始,读取 16(0x10)个块的数据到 DRAM 的0XC0000000 地址处
1. 切换到EMMC,输入命令 mmc dev 1
2. 读取数据,输入命令 mmc read c0000000 400 10

六、EXT 格式文件系统操作命令 [ ext4 ]

1. 查询 EXT4 格式设备的目录和文件信息 [ ext4ls ]

格式:ext4ls <interface> [<dev[:part]>] [directory]
interface 是要查询的接口,比如 mmc,dev 是要查询的设备号,part 是要查询的分区,directory是要查询的目录。

例如:
查询 EMMC 分区 2 中的所有的目录和文件
输入命令:ext4ls mmc 1:2

2. 将指定的文件读取到 DRAM 中 [ ext4load ]

格式:fatload <interface> [<dev[:part]> [<addr> [<filename> [bytes [pos]]]]]
interface 为接口,比如 mmc,dev 是设备号,part 是分区,addr 是保存在 DRAM 中的起始地址,filename 是要读取的文件名字。bytes 表示读取多少字节的数据,如果 bytes 为 0 或者省略的话表示读取整个文件。pos 是要读的文件相对于文件首地址的偏移,如果为 0 或者省略的话表示从文件首地址开始读取。

例如:
EMMC 分区 2 中的 uImage 文件读取到DRAM 中的 0XC2000000 地址处
输入命令:ext4load mmc 1:2 C2000000 uImage

3. 将 DRAM 中的数据写入到 MMC 设备中 [ ext4write ]

格式:ext4write <interface> <dev[:part]> <addr> <absolute filename path> [sizebytes] [file offset]
interface 为接口,比如 mmc;dev 是设备号;part 是分区;addr 是要写入的数据在 DRAM中的起始地址;absolute filename path 是写入的数据文件名字,注意是要带有绝对路径,以‘/’开始;sizebytes 表示要写入多少字节的数据;file offset 为文件偏移。
我们可以通过 fatwrite 命令在 uboot 中更新 linux 镜像文件和设备树。

例如:
uImage 大小为 7313888(0X6F99E0)个字节,接下来使用命令 ext4write 将其写入到 EMMC的分区 2 中。为了和原有的 uImage 文件区分,我们将要写入的文件命名为 test_uImage。
输入命令:ext4write mmc 1:2 c0000000 /test_uImage 0x6f99e0

七、BOOT 操作命令

BOOT命令用来引导启动Linux,常用的跟 boot 有关的命令有:bootm、bootz 和 boot。

1. 启动 uImage 镜像文件 [ bootm ]

格式:bootm [addr [arg ...]]
bootm 主要有三个参数,addr 是 Linux 镜像文件在 DRAM 中的位置,后面的“arg…”表示其他可选的参数,比如要指定 initrd 的话,第二个参数就是 initrd 在 DRAM 中的地址。如果 Linux 内核使用设备树的话还需要第三个参数,用来指定设备树在 DRAM 中的地址,如果不需要 initrd 的话第二个参数就用‘-’来代替。

例如:

  1. tftp下载镜像启动Linux
    在这里插入图片描述
  2. 从EMMC中读取镜像,启动Linux
    在这里插入图片描述

2. 启动 uImage 镜像文件 [ bootz ]

bootz 和 bootm 功能类似,使用方法也和 bootm 一模一样,但是所引导的 Linux 镜像格式不同, bootz 用于启动 zImage 镜像文件。例如NXP 的 I.MX6ULL就是使用 bootz 命令来引导 Linux 内核的。

3. 命令集引导启动Linux [ boot / bootd ]

boot 和 bootd 其实是一个命令,它们最终执行的是同一个函数。为了方便起见,后面就统一使用 boot 命令,此命令也是用来启动 Linux 系统的,只是 boot 会读取环境变量 bootcmd 来启动 Linux 系统,bootcmd 是一个很重要的环境变量!其名字分为“boot”和“cmd”,也就是“引导”和“命令”,说明这个环境变量保存着引导命令,其实就是多条启动命令的集合,具体的引导命令内容是可以修改的。

  1. 设置环境变量bootcmd
    例如:
    使用 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

八、UMS 命令 [ ums ]

可以将 EMMC 虚拟成 U 盘以后就可以直接在电脑上向开发板拷贝文件了,比如我们在产品开发阶段,就可以直接在 uboot 下将某个文件拷贝到开发板的根文件系统中,这样就不需要进入系统或者通过网络来替换文件。

格式:ums <USB_controller> [<devtype>] <dev[:part]>
其中 USB_controller 是 usb 接口索引,有的开发板有多个 USB SLAVE 接口,具体要使用哪个就可以通过 USB_controller 参数指定。正点原子 STM32MP157 开发板的只有一个 USB_OTG口可以作为 USB SLAVE,对应的索引为 0。Devtype 是要挂载的设备,默认为 mmc,dev[:part] 是要挂载的 Flash 设备,part 是要挂载的分区。

例如:
将开发板的EMMC 挂载到电脑上,首先使用USB Type-C线将开发板的USB_OTG口与电脑连接起来,然后用以下命令启动:ums 0 mmc 1
挂载成功以后就会在电脑上有多个 U 盘,U 盘数量取决于你当前开发板 EMMC 分区数量

九、其他常用命令

1. 复位重启命令 [ reset ]

在这里插入图片描述

2. 跳到指定的地址处执行应用 [ go ]

格式:go addr [arg ...]
addr 是应用在 DRAM 中的首地址。

3. 运行环境变量中定义的命令 [ run ]

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

例如:
就可以通过自定义环境变量来实现不同的启动方式,比如定义环境变量 mybootemmc 表示从 emmc 启动,定义mybootnet 表示从网络启动。如果要切换启动方式的话只需要运行"run mybootemmc" 或 “run mybootnet”

# 创建环境变量
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

4. 内存读写测试命令 [ mtest ]

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

格式:mtest [start [end [pattern [iterations]]]]
start 是 要 测 试 的 DRAM 开始地址, end 是 结 束 地 址

例如:
我 们 测 试0XC0000000~0XC0001000 这段内存,输入命令:mtest C0000000 C0001000
在这里插入图片描述上图可以看出,测试范围为 0XC0000000~0XC0001000,已经测试了 527 次,如果要结束测试就按下键盘上的“Ctrl+C”键。

至此,uboot 常用的命令就讲完了,原文可参考正点原子提供的Linux驱动开发文档

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

U-Boot常用命令 的相关文章

随机推荐

  • 【JVM】Java内存区域与内存溢出异常

    JVM Java内存区域 链接 Java内存区域 Java虚拟机 运行时数据区域 线程独占 程序计数器 各个线程都有一个独立的程序计数器 记录正在执行的虚拟机字节码指令的地址 Java虚拟机栈 线程私有 与线程拥有相同的生命周期 虚拟机栈描
  • unity把切好的图集导出

    以前的博客有介绍怎么切割图片 https blog csdn net qq 42661974 article details 84258719 首先创建一个脚本 放在Editor文件夹中 using UnityEngine using Un
  • 基数排序的简单介绍

    一 基数排序原理 将需要排序的数列统一为相同位数的数 不足的在前面补0 确定执行轮数MAX 创建0 9的桶 因为数字只有从0 9 然后 从最低位开始 依次进行一次排序 这样从最低位排序一直到最高位排序完成以后 就变成一个有序序列 二 基数排
  • 全网最牛,接口测试mock详细总结,彻底打通接口测试...

    目录 导读 前言 一 Python编程入门到精通 二 接口自动化项目实战 三 Web自动化项目实战 四 App自动化项目实战 五 一线大厂简历 六 测试开发DevOps体系 七 常用自动化测试工具 八 JMeter性能测试 九 总结 尾部小
  • spark SQLQueryTestSuite sql 自动化测试用例

    把SQL 添加到自动化测试用例 sql core src test resources sql tests inputs 目录存放原始的SQL sql core src test resources sql tests results存放S
  • 目标跟踪算法之相关滤波器(一):MOSSE

    前言 MOSSE David S Bolme J Ross Beveridge Bruce A Draper Yui Man Lui Visual Object Tracking using Adaptive Correlation Fil
  • IPV4报头及IP分片

    IP协议是无连接 不可靠 无状态的 无连接就是指通讯时不能长久的维持对方信息 保持连接 不可靠就是不能保证数据准确的发送给接受方 可能会丢失 变错 截断等 无状态就是指发送的数据可能是乱序的重复的 至于为什么IP协议的特性是这样的 为什么T
  • Linux系统:清除文件内容与两个特殊文件

    目录 一 理论 1 清除文件内容 2 dev null与 dev zero 一 理论 1 清除文件内容 1 使用echo命令 echo gt filename 2 使用truncate命令 该命令会将文件内容清空 并将文件大小设置为0 tr
  • 基于PythonOpenCv的视频图像处理

    博主简介 博主是一名大二学生 主攻人工智能研究 感谢让我们在CSDN相遇 博主致力于在这里分享关于人工智能 c Python 爬虫等方面知识的分享 如果有需要的小伙伴可以关注博主 博主会继续更新的 如果有错误之处 大家可以指正 专栏简介 本
  • WIN7打不开chm问题

    网上很多解决方法都是扯蛋 这里给出一个靠谱的
  • centos7安装nacos2.1.0

    centos7安装nacos2 1 0 下载nacos压缩包 https github com alibaba nacos releases 下载之后放到Liunx上 并解压 tar zxvf nacos server 1 1 3 tar
  • Spring学习(三):Spring中的bean配置

    上面一篇文章是Spring的一个简单的演示 从这篇文章开始主要详细的介绍Spring中的细节部分 IOC Inversion of control 其主要思想就是反转资源获取的方向 传统的资源查找方式要求组件向容器发起请求查找资源 作为回应
  • springboot够用就好系列-2.基于commandfast框架的应用开发

    参考web的jsoncat框架 实现一个控制台IO的commandfast简易框架 并进行使用 目录 程序效果 实现过程 样例代码 工程文件 参考资料 程序效果 截图1 查询当前时间和用户 查询磁盘空间 利用commandfast框架 实现
  • vue项目中使用高德地图获取用户当前位置信息

    项目背景是用vue开发的小程序 需要获取当前用户的地理位置 折腾了好久终于弄好了 今天分享给大家 话不多说 let s go 第一步 在index html页面引入高德地图 注意 引入地图的js一定要放在引用js的前面 不让会报 AMap
  • React系列之配置基础路由

    闲暇之余不忘学习 提升自己 知识在于积累 更是一笔财富 看完文章 感谢各位支持一下呗 配置登录页面的路由并显示到页面中 实现步骤 安装路由 yarn add react router dom 在 pages 目录中创建两个文件夹 Login
  • react地图组件

    最近项目中有此需求 react地图组件的开发 1 输入地址可查询出对应地图位置并标记点 2 能返回经纬度 并提交服务端保存 3 在地图上点击某一点 也能返回对应经纬度和地址信息 4 国内 国外均可使用 经过调研决定 采用谷歌地图和高德地图来
  • 数据分析36计(30):关于 AB 实验的 1.5 万字总结

    实验原理 假设检验的目标是拒绝原假设 它的核心是证伪 先假设原假设成立 然后计算原假设反面出现的概率 如果概率较大 则证明原假设不成立 对于 A B Test 来说 p值是在实验组和对照组没有差别这个前提成立的条件下 实验仍然检测到差异 即
  • 前端框架_React知识点精讲

    当我们心情愉悦时 大脑会分泌一种叫内啡肽的神经递质 它能帮助我们减轻疼痛 大家好 我是柒八九 今天 我们继续前端面试的知识点 我们来谈谈关于React知识点的相关知识点和具体的算法 该系列的文章 大部分都是前面文章的知识点汇总 如果想具体了
  • Windows上的ROS和Ubuntu系统中的ROS通信

    感谢博主 41条消息 Windows上的ROS和Ubuntu系统中的ROS通信 详细图文 寻找灵魂的机器狗的博客 CSDN博客 ubuntu和ros 主要是参考博主的文章实现windows下的ROS和Ubuntu下的ROS通信功能 但是也发
  • U-Boot常用命令

    U Boot常用命令 一 信息查询命令 1 查看开发板信息 bdinfo 2 查看环境变量信息 printenv 3 查看U Boot版本号 version 二 环境变量操作命令 1 修改环境变量 setenv 2 保存环境变量 savee