uboot常用命令及其使用

? 或者 help

第一次使用uboot,通过?查看所有帮助信息

?cmd 或者 help cmd

? bootz #查看bootz命令的帮助信息

通过该命令查看某个cmd的帮助信息

version

uboot启动后,查看uboot版本信息

bdinfo

uboot启动后,查看board信息

setenv

设置一个环境变量

格式:setenv key vlaue
setenv bootdelay 5  # 设置uboot启动延时5s

删除一个环境变量
uboot对于一个没有值的环境变量,默认不再维护,做删除处理

格式:setenv key
setenv ipaddr   # 删除ipaddr,让ipaddr不复存在

修改一个环境变量

格式:setenv key vlaue
setenv bootdelay 5  # 原来的bootdleay值被覆盖,采用新值5

saveenv

uboot启动时,从非易失性存储器中读取环境变量的值,在内存中维护一份拷贝,当采用setenv命令创建、修改、或者删除后,内存中被相应地创建、修改或者删除,非易失存储器中的那一份并没有改变。直到执行saveenv,写入非易失性存储器。

print

打印所有环境变量及其值。

print # 打印所有

打印某一个。如果要查看某个你知道名字的环境变量,可以使用该命令。例如,打印bootcmd命令:

print bootcmd # 只打印bootcmd

需要注意的是,所有参数需要十六进制数字输入。例如12345678默认为0x12345678,当然也可直接显式指定为0x12345678。

修改ddr中内存单元的值,可以连续修改。

mm [.b,.w,.l] addr
=>mm.l 80800000  #回车进入修改视图,地址自动递增
80800000: ? 12345678  # 回车
80800004: ? q         # 退出
=>

修改ddr中内存单元的值,地址不自增。

nm [.b,.w,.l] addr
=>mm.l 80800000  #回车进入修改视图,地址自动递增
80800000: ? 12345678  # 回车
80800000: ? q         # 退出
=>

显示ddr从addr处开始的内存数据,of object为数量,每个object的字节数量取决于参数.b,.w,.l。

md [.b,.w,.l] addr [#of objects]
md.b 80800000 100  # 80800000 100均为为十六进制数字,100h=256

mtest

需要注意的是,对于emmc,存在多个物理分区,每个物理分区独立编址。进行mmc操作前,需要先切换到对应的物理分区,然后对该物理分区进行操作。
笔者所用的开发板emmc包含硬件分区:

mmc info

mmc rescan

mmc list

列出当前扫描到的所有mmc设备。

mmc dev

切换硬件分区

格式:emmc dev [dev_no] [part_no]
mmc dev 1  #切换到1号设备的硬件分区0

mmc part

列出当前硬件分区上的软件分区。前提是当前硬件分区上存在分区表

mmc read

mmc读写,以块为单位,1个块为512Bytes。

mmc dev  1  1
mmc read 80800000 600 10 #从600块号开始,读取0x10=16个块到ddr

mmc write

mmc读写,以块为单位,1个块为512Bytes。

mmc dev  1  1
mmc write 80800000 600 10 #将80800000开始的数据写入到emmc的600块地址处,写入0x10=16个块

mmc erase

fatinfo

查看分区的fat文件系统信息

格式: fatinfo  [[:part]]
fatinfo mmc 1:1

fatls

列出fat文件系统所在分区上的所有文件

格式: fatls  [[:part]] [dir]
fatls mmc 1:1

fstype

查看分区文件系统类型

格式: fstype  [[:part]]
fstype mmc 1:0
fstype mmc 1:1
fstype mmc 1:2

fatload

从fat分区加载文件到内存

fatload mmc 1:1 80800000 zImage # 从fat分区加载zImage到DDR的80800000

fatwrite

将文件写入fat分区中

fatload mmc 1:1 80800000 zImage 6788f8 #从内存80800000处读取0x6788f8个数据写入fat分区,替换zImage文件

nand info

nand device

nand erase

nand read

nand write

ping

测试uboot和远程主机的连通性。但是远程主机无法ping通uboot,即使网络实际上连通。

dhcp

从dhcp获取ip地址。

tftp

从tftp server下载文件到ddr。

tftp 80800000 zImage #从tftpserver下载zImage到80800000处

nfs

从nfs服务器共享目录下载文件到ddr。和tftp不同的是,需要指定远程主机的ip地址和共享文件的全路径。

nfs [loadaddr] [[host_ip_addr]:filepath]
nfs 80800000 192.168.1.128:/home/book/nfs_rootfs/zImage#从nfserver下载zImage到80800000处

bootz

bootz命令根据给定的kernel、dtb在ddr中的地址,去启动内核。可以通过多种方式(tftp命令、fatload命令等方式将zImage、dtb加载到ddr指定位置)
输入参数1:zImage_addr
输入参数2:dtb_addr

if zimage_addr=80800000 dtb_addr=83000000
tftp 80800000 zImage
tftp 83000000 xxxx.dtb
bootz 80800000 - 83000000

bootm

bootm用于启动uImage

boot

boot命令执行uboot环境变量bootcmd中定义好的一组命令来启动系统。这一组命令一般包含
1)将kerneldtb拷贝到ddr指定位置的命令
2)bootz或者bootm命令

执行boot命令则执行环境变量bootcmd中定义好的命令
测试该命令,可以自定定义bootcmd命令,如下所示:
下面使用双引号包含多个命令,命令之间用分号隔开,单引号也可以
setenv bootcmd "tftp 80800000 zImage;tftp 83000000 xxxx.dtb;bootz 80800000 - 83000000"
saveenv   # 做测试可以不保存,如果保存了,聚会写入环境变量区
boot

run

run命令可以执行一个自定义命令,这个自定义命令的名字以一个环境变量形式出现,环境变量的内容就是用户要执行的一系列命令集合。

setenv usercmd "tftp 80800000 zImage;tftp 83000000 xxxx.dtb;bootz 80800000 - 83000000"
run usercmd

reset

复位系统。这里值得注意,uboot的复位不是reboot,reboot一般指操作系统重启。

让cpu到ddr指定地址执行程序。可以用于调试裸机程序。
如果一个裸机程序app.bin,链接地址设置为87800000,并烧写到了87800000,则可以通过go直接运行该程序

tftp 87800000 app.bin
go 87800000  # 跳转到87800000执行代码

这里要区分go和bootz命令的区别。bootz命令有两个地址输入作为参数,启动内核前,还会做一些其他的操作。不要指望简单的使用go 80800000这条命令去启动内核。

Original: https://www.cnblogs.com/arminker/p/15244714.html
Author: 流云的博客
Title: uboot常用命令及其使用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/573746/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Redis

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Java 2023年6月9日
    078
  • 【每日算法】动态规划四

    难度[简单] 给定一个整数&#x6570…

    Java 2023年6月9日
    054
  • Spring基于注解+扫描管理bean

    @Component:将类标识为普通组件 @Controller:将类标识为控制层组件 @Service:将类标识为业务层组件 @Repository:将类标识为持久层组件(dao…

    Java 2023年6月16日
    084
  • Idea运行HelloWorld与Idea自用设置

    Java运行机制 编译型compile:操作系统等需要速度的会使用编译型去做(全局翻译再运行) 解释型:网页,服务器脚本等对速度没有要求的使用解释型做(运行一句解释一句) 程序运行…

    Java 2023年6月9日
    087
  • 《代码修行:一步一步写出优美的业务代码》的代码清单

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Java 2023年6月9日
    062
  • Java终止线程的三种方式

    停止一个线程通常意味着在线程处理任务完成之前停掉正在做的操作,也就是放弃当前的操作。 在 Java 中有以下 3 种方法可以终止正在运行的线程: 使用退出标志,使线程正常退出,也就…

    Java 2023年5月29日
    092
  • go使用barcode库生成二维码并扫描其内容

    导入barcode包 使用barcode库生成二维码 这里复习一下defer关键字的主要用法:延迟执行,主要是关闭流时用到,在return之前执行,当有多个defer关键字时采用先…

    Java 2023年6月13日
    079
  • 机械师实时调度示例(I)-实时规划

    OptaPlanner创办人Geoffrey De Smet及其团队,在Red Hat 技术峰会上主题会场上,演示了一个通过OptaPlanner实现实时规划与调度的示例。Geof…

    Java 2023年6月16日
    092
  • Redis 安装与使用

    NoSQL 1. 定义 NoSQL(Not Only SQL)即不仅仅是 SQL,泛指非关系型的数据库 2. 为什么使用 NoSQL? 传统关系数据库在应付动态网站、特别是超大规模…

    Java 2023年6月8日
    086
  • [Java] Hashtable 源码简要分析

    线程安全。 Key、Value均不能为null。 包含了一个Entry[]数组,而Entry又是一个链表,用来处理冲突。 每个Key对应了Entry数组中固定的位置(记为index…

    Java 2023年5月29日
    0101
  • sqlserver 数据导入MySQL

    yyyy/mm/dd hh:mm:ss 不修改,导入的时候会提示不合法的值,因为Excel格式化时间戳的算法和MySQL的不一样,所以导入只能按字符串导入 数据无价需谨慎操作,最好…

    Java 2023年6月15日
    076
  • GDB高级一点的命令

    GDB 是我们平时调试 c/c++程序的利器, 查起复杂的 bug 问题,比打印大法要好的多,但是也不得不说, gdb 在默认情况下用起来并不是很好用,最近学习到几个高级点的技巧,…

    Java 2023年5月29日
    076
  • 如何去官网下载JDK (JDK8 JDK1.8)

    posted @2022-01-12 16:23 戈博折刀 阅读(119 ) 评论() 编辑 Original: https://www.cnblogs.com/libin6505…

    Java 2023年5月30日
    094
  • 使用easyUI 格式化datagrid列

    @author YHC 以下示例格式化在easyui DataGrid 里的列数据,和使用自定义列formatter ,如果价格小于20就将文本变为红色. 格式化一个DataGri…

    Java 2023年5月29日
    0114
  • 【Java分享客栈】SpringBoot线程池参数搜一堆资料还是不会配,我花一天测试换你此生明白。

    一、前言 首先说一句,如果比较忙顺路点进来的,可以先收藏,有时间或用到了再看也行;我相信很多人会有一个困惑,这个困惑和我之前一样,就是线程池这个玩意儿,感觉很高大上,用起来很fas…

    Java 2023年6月9日
    099
  • Linux操作系统–定时任务

    最近在学习Linux操作系统。学到了关于定时任务的章节,作为一个总结写下这篇文章。在Linux中,我们可以将耗时大的任务如复制大文件,压缩、解压缩大文件等放进定时任务中(深夜执行,…

    Java 2023年6月14日
    0207
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球