02_Uboot基本命令与内存命令

news2024/10/7 5:20:47

目录

U-Boot命令使用

信息查询命令

环境变量操作命令

内存操作命令


U-Boot命令使用

进入uboot的命令行模式以后输入“help”或者“?”,然后按下回车即可查看当前uboot 所支持的命令,如图所示:

 图中只是uboot的一部分命令,具体的命令列表以实际为准。图中的命令并不是uboot所支持的所有命令,前面说过uboot是可配置的,需要什么命令就使能什么命令。uboot支持的命令还有很多,而且,也可以在uboot中自定义命令。这些命令后面都跟有命令说明,用于描述此命令的作用,但是命令具体怎么用呢?我们输入“help(或?)命令名”既可以查看命令的详细用法,以“bootz”这个命令为例,我们输入如下命令即可查看“bootz”这个命令的用法:

 

信息查询命令

bdinfo此命令用于查看板子信息

从图中可以得出DRAM的起始地址和大小、启动参数保存起始地址、波特率、sp(堆栈指针)起始地址等信息。 

printenv用于输出环境变量信息

 在图中有很多的环境变量,比如baudrate、board_name、board_rec、boot_fdt、bootemd等等。uboot 中的环境变量都是字符串,既然则做环境变量,那么它的作用就和“变量”一样比如bootdelay这个环境变量就表示uboot 时时间,默认 bootdelay=3,也就默认延时 3秒。前面说的3秒倒计时就是由bootdelay定义的,如果将bootdelay改为5的话就会倒计时5s了。uboot中的环境变量是可以修改的,有专门的命令来修改环境变量的值,稍后我们会讲解。

命令version用于查看uboot 的版本号

 从图可以看出,当前uboot版本号为2016.03, 2023417日编译的,编译器为arm-poky-linux-gnueabi-gcc,这是 NXP 官方提供的编译器

环境变量操作命令

1.修改环境变量

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

譬如修改uboot启动时间为5s

 在图中,当我们使用命令saveenv保存修改后的环境变量的话会有保存过程提示信息,根据提示可以看出环境变量保存到了MMC(0)中,也就是SD卡中。因为我们现在将 uboot"烧写到了SD卡里面,所以会保存到MMC(0)中。如果烧写到EMMC里面就会提示保存到MMC(1),也就是EMMC设备,同理,如果是NAND版本核心板的话就会提示保存到NAND中。

 有时候我们修改的环境变量值可能会有空格,比如bootemd,bootargs等,这个时候环境变量值就得用单引号括起来,比如下面修改环境变量 bootargs的值:

上面命令设置bootargs的值为"console=ttymxc0,115200 root-/dev/mmeblk1p2 rootwaitrw",其中"console=ttymxc0,115200"、"root=/dev/mmeblk1p2"、"rootwait"和"rw"相当于四组"值",这四组值之间用空格隔开,所以需要使用单引号‘将其括起来,表示这四组值都属于环境变量bootargs

2.新建环境变量

命令setenv也可以用于新建命令,用法和修改环境变量一样,比如我们新建一个环境变量author, author的值为yyyyy,那么就可以使用如下命令:

setenv author yyyyy

saveeny

新建命令author完成以后重启uboot,然后使用命令printenv查看当前环境变量,如图所示:

从图可以看到新建的环境变量: author,其值为: yyyyy

3.删除环境变量

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

setenv author

saveenv

上面命令中通过setenv给author赋空值,也就是什么都不写来删除环境变量author。重启uboot就会发现环境变量author没有了。

内存操作命令

1.md命令

md命令用于显示内存值,格式如下:

md[.b, .w, .l] address [# of objects]

命令中的[.b.w.l]对应byte、word和long,也就是分别以1个字节、2个字节、4个字节来显示内存值。address就是要查看的内存起始地址, [# of objects]表示要查看的数据长度,这一个数据长度单位不是字节,而是跟你所选择的显示格式有关。比如你设置要查看的内存长度为20(十六进制为0x14),如果显示格式为.b的话那就表示20个字节,如果显示格式为.w的话就表示20个word,也就是20*2=40个字节;如果显示格式为.l的话就表示20个long,也就是20*4=80个字节。另外要注意:

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

比如你想查看以0x80000000开始的20个字节的内存值,显示格式为.b的话,应该使用如下所示命令:

md.b 80000000 14

上面说了, uboot命令里面的数字都是十六进制的,所以可以不用写“0x”前缀,十进制的20其十六进制为0x14,所以命令md后面的个数应该是14,如果写成20的话就表示查看32(十六进制为0x20)个字节的数据。

2.nm命令

nm命令用于修改指定地址的内存值,命令格式如下:

nm [.b, .w, .I] address

nm命令同样可以以.b..w和.l来指定操作格式,比如现在以.l格式修改0x80000000地址1的数据为0x12345678输入

nm.l 80000000

输入上述命令以后如图所示:

 在图中,80000000表示现在要修改的内存地址,0000a1ff表示地址0x80000000现在的数据, ?后面就可以输入要修改后的数据0x12345678,输入完成以后按下回车,然后再输入‘q’即可退出,如图所示:

 修改完成以后在使用命令md来查看一下有没有修改成功,如图所示:

 

3.mm命令

mm命令也是修改指定地址内存值的,使用mm修改内存值的时候地址会自增,而使用命今nm的话地址不会自增。比如以.l格式修改从地址0x80000000 开始的连续3个内存块(3*4=12个字节)的数据为0x05050505,操作如图所示:

 从图可以看出,修改了地址0x80000000,0x80000004和0x8000000C的内容为0x05050505.使用命令md查看修改后的值,结果如图所示:

 4.mw命令

命令mw用于使用一个指定的数据填充一段内存,命令格式如下:

mw [.b, .w, .I] address value [count]

mw命令同样可以以.b..w和.l来指定操作格式, address表示要填充的内存起始地址, value为要填充的数据, count是填充的长度。比如使用.l格式将以0x80000000为起始地址的0x10个内存块(0x10*4=64字节)填充为0X0A0A0A0A.命今如下:

 

5.cp命令

cp 是数据拷贝命令,用于将DRAM中的数据从一段内存拷贝到另一段内存中,或者把 NorFlash中的数据拷贝到DRAM中。命令格式如下:

cp [.b,.w, .I] source target count

cp命令同样可以以.b..w和.l来指定操作格式, source为源地址,target为目的地址, count为拷贝的长度,使用.l格式将0x80000000处的地址拷贝到0x80000100处,长度为0x10个内存块(0x10*4=64个字节),命令如下所示:

сp.l 80000000 80000100 10

 

6.cmp命令

cmp是比较命令,用于比较两段内存的数据是否相等,命令格式如下:

cmp [.b,.w, .l] addr1 addr2 count

cmp命令同样可以以.b .w和.l来指定操作格式,addrl为第一段内存首地址,addr2为第二段内存首地址, count为要比较的长度。我们使用l格式来比较0x80000000和0x80000100这两个地址数据是否相等,比较长度为0x10个内存块(16*4=64个字节),命令如下所示:

 从图可以看出两段内存的数据相等。我们再随便挑两段内存比较一下,比如地址0x80002000和0x800003000,长度为0x10,比较结果如图所示:

 从图可以看出, 0x80002000处的数据和0x80003000处的数据就不一样。

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

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

相关文章

Mongo初遇回忆录

序 上周,我和M女士分手了,也许是上个月,我不知道。也许是她太墨守成规,也许是我太肆意妄为,她说我给不了她想要的平稳和安定。她没有留下太多东西,我也不愿留下更多回忆。 做决定的过程中,我比…

「计算机控制系统」4. 计算机控制系统分析

Z平面 稳定性分析 稳态误差分析 动态过程分析 频率特性 文章目录Z平面与S平面的映射关系稳定性分析离散Routh判据Jury判据离散Nyquist判据稳态误差静态误差系数动态过程频率特性Z平面与S平面的映射关系 S平面虚轴的映射 ω\omegaω与θ\thetaθ的映射 可以看出从S平面到Z平面…

远程组态管理的好处

远程组态管理可以简化管理工作,帮助您节省时间和金钱。远程组态管理可以通过各种应用程序来实现,包括: •监控所有设备的状态,以确保它们正常工作。 •记录现场数据,例如温度,压力或流量。 •快速、轻松地…

自动驾驶「时过境迁」,这家头部出行服务平台再出发

滴滴自动驾驶复活了? 昨日,滴滴正式发布了首个自动驾驶自动运维中心,以及首款未来服务概念车DiDi Neuron,同时还公布了在技术、硬件、量产以及新业务探索方面的进展。 按照计划,滴滴自动驾驶正在结合新能源整车企业能…

【单链表】的增删查改

🖊作者 : Djx_hmbb 📘专栏 : 数据结构 😆今日分享 : “Onc in a blu moon” : “罕见的,千载难逢的” (出现在19世纪,指的是"在一个月内出现的第二次圆月”,这种现象每隔32个月发生一次。) 文章目录✔单链表的功能实现:&…

大前端突围之路:从RN跨平台到大前端全栈统一

本文首发自「慕课网」(imooc.com),想了解更多IT干货内容,程序员圈内热闻,欢迎关注"慕课网"! 作者:FE大公爵|慕课网讲师 前言 不知不觉,在大前端领域也混迹十年了,一路的经历不敢说…

接口自动化测试yaml+requests+allure技术,你学会了吗?

目录 前言 一、什么是接口自动化测试 二、为什么要进行接口自动化测试 三、接口自动化测试的流程 四、yaml语言介绍 五、requests库介绍 六、allure技术介绍 七、总结 前言 接口自动化测试是在软件开发过程中常用的一种测试方式,通过对接口进行自动化测试&a…

SQL Sever 单表数据查询(下)

提示:本篇文章是在上篇文章的基础上进行单表数据查询操作的补充,主要以例题的方式呈现. 文章目录前言1.分组:统计各门课程的选修人数2.分别统计男女生的平均年龄3.查询所有科目成绩在85分以上的学生的学号及其平均分4.查询平均年龄大于18岁的系部和平均年…

Linux复习 / 动静态库QA梳理 | 如何使用第三方库?

文章目录前言Q&A概念Q:使用静态库和使用动态库的程序有什么区别?Q:什么是静态链接/动态链接?使用与制作Q:如何制作动静态库?Q:如何使用第三方库?Q:程序加载时&#x…

C语言-实现顺序二叉树和平衡二叉树AVL

1. 结构体 在实现二叉树之前先看下结构体的一些使用方法 数组是保存一系列相同的数据。在实际问题中,一组数据往往有很多种不同的数据类型。例如,登记学生的信息,可能需要用到 char型的姓名,int型或 char型的学号,in…

4.6--计算机网络之TCP篇之TCP的基本认识--(复习+深入)---好好沉淀,加油呀

1.TCP 头格式有哪些? 序列号: 在建立连接时由计算机生成的随机数作为其初始值,通过 SYN 包传给接收端主机,每发送一次数据,就「累加」一次该「数据字节数」的大小。 用来解决网络包乱序问题。 确认应答号: …

MySQL优化——Explain分析执行计划详解

文章目录前言一. 查看SQL执行频率二. 定位低效率执行SQL三. explain分析执行计划3.1 id3.2 select_type3.3 table3.4 type3.5 key3.6 rows3.7 extra四. show profile分析SQL前言 在应用的的开发过程中,由于初期数据量小,开发人员写 SQL 语句时更重视功能…

酷炫的3D智慧工厂不会打造?这40+可视化大屏模板千万别错过!

数字化已成为各行各业的重要趋势,因为数字化能够带来精准的效益提升。小米公司最近推进了黑灯工厂业务。”24小时熄灯操作,全程无人工干预”,这是小米智能工厂的重要特征。走进工厂,闪烁的灯带提示生产正在进行,机器通…

【Spring从成神到升仙系列 四】从源码分析 Spring 事务的来龙去脉

👏作者简介:大家好,我是爱敲代码的小黄,独角兽企业的Java开发工程师,CSDN博客专家,阿里云专家博主📕系列专栏:Java设计模式、数据结构和算法、Kafka从入门到成神、Kafka从成神到升仙…

【ChatGPT】Prompt Engineering入门

Prompt Engineering入门一、什么是 Prompt Engineering?二、我们还需要学习 PE 吗?三、Prompt基础原则一、什么是 Prompt Engineering? 简单的理解它是给 AI 模型的指令。它可以是一个问题、一段文字描述,甚至可以是带有一堆参数的…

数据结构 - 排序 | C (插入、希尔、选择、堆、冒泡)

目录0.排序思维导图(总)一、插入排序1.直接插入排序思路分析代码实现时间复杂度2.希尔排序思路分析代码实现时间复杂度二、选择排序1.选择排序思路分析代码实现时间复杂度2.堆排序思路分析代码实现时间复杂度三、交换排序冒泡排序思路分析代码实现时间复…

如何基于vue实现倒计时效果

如何基于vue实现倒计时效果基于vue2 element实现画面效果代码基于vue2 element 实现画面效果 代码 <template><div><div class"Box"><div style"position: relative;"><el-progress type"circle" :width"30…

pytorch注意力机制

pytorch注意力机制 最近看了一篇大佬的注意力机制的文章然后自己花了一上午的时间把按照大佬的图把大佬提到的注意力机制都复现了一遍&#xff0c;大佬有一些写的复杂的网络我按照自己的理解写了几个简单的版本接下来就放出我写的代码。顺便从大佬手里盗走一些图片&#xff0c…

Vue3使用触摸滑动插件(Swiper)

Vue2使用触摸滑动插件&#xff08;Swiper&#xff09; 参考文档&#xff1a; Swiper官方 Swiper Vue Swiper Demos 本文使用的是最新版本&#xff1a;Swiper9.2.2 安装插件&#xff1a;yarn add swiper 本文基于Swiper插件进行封装&#xff0c;主要实现两种形式的轮播图展示…

电脑自带远程桌面和远程控制软件哪个好?

随着科技的不断发展和普及&#xff0c;越来越多的公司和个人开始关注远程控制软件的使用。我们常常需要在不同的地方工作&#xff0c;但工作需要的文件和软件却只能在一个地方使用&#xff0c;这时候远程控制电脑软件就变得尤为重要咯。但是&#xff0c;许多人分不清楚&#xf…