【uboot1】常用指令

news2024/11/23 15:33:39

文章目录

    • 1.U-Boot命令之常用命令:
    • 7.U-Boot命令之EMMC和SD卡操作命令:一般EMMC和SD卡是同一个东西,没特殊说明,统一MMC来代指EMMC和SD卡
    • 8.U-Boot命令之内存操作命令:直接对DRAM进行读写操作,uboot命令中的数字都是十六进制的,不是十进制
    • 9.U-Boot命令之boot命令:boot(引导)命令来启动linux
    • 10.U-Boot命令之网络操作命令:查看信息(bdinfo/version/bdinfo)


1.U-Boot命令之常用命令:

reset:复位重启

tftp 87800000 printf.bin
go 87800000 执行printf.bin

setenv mybootemmc ‘fatload mmc 1:1 80800000 zImage; fatload mmc 1:1 83000000 imx6ullalientek-emmc.dtb;bootz 80800000 -83000000’

setenv mybootnand ‘nand read 80800000 4000000 800000;nand read 83000000 6000000100000;bootz 80800000 - 83000000’

setenv mybootnet ‘tftp 80800000 zImage; tftp 83000000 imx6ull-alientek-emmc.dtb; bootz 80800000 - 83000000’

saveenv

run mybootemmc
run mytoobnand
run mybootnet
mtest 命令是一个简单的内存读写测试命令,可以用来测试自己开发板上的 DDR。测试范围为 0X80000000~0X80001000,已经测试了 6656 次,如果要结束测试就按下键盘上的“Ctrl+C”键。
在这里插入图片描述

7.U-Boot命令之EMMC和SD卡操作命令:一般EMMC和SD卡是同一个东西,没特殊说明,统一MMC来代指EMMC和SD卡

1.mmc info:输出当前选中的设备信息,如下当前选中的 MMC设备是SD卡,版本为 3.0,容量为 14.8GiB(EMMC为 4GB),速度50000000Hz=50MHz, 4 位宽的总线。"? mmc"即可查看 mmc 有关的命令。
在这里插入图片描述
2.mmc rescan:用于扫描当前开发板上所有的MMC设备,包括EMMC和SD卡。
3.mmc list:用于来查看当前开发板一共有几个MMC设备。 FSL_SDHC:0是 SD卡, FSL_SDHC:1是 EMMC。
4.mmc dev 1:切换到EMMC。
在这里插入图片描述
5.mmc part:查看分区。此时EMMC有两个分区,扇区20480~ 262144为第一个分区,扇区 282644~14987264为第二个分区。如果EMMC里面烧写了Linux系统的话,第0个分区存放uboot,第1个分区存放Linux镜像文件和设备树,第2个分区存放根文件系统。但是在下图中只有两个分区,那是因为第0个分区没有格式化,所以识别不出来,实际上第0个分区是存在的。一个新的SD卡默认只有一个分区,那就是分区0。
在这里插入图片描述
6.mmc read addr blk# cnt:读取mmc设备数据,addr是数据读取到DRAM中的地址, blk是要读取的块起始地址(十六进制),一个块是512字节,这里的块和扇区是一个意思,在MMC设备中通常说扇区,cnt是要读取的块数量(十六进制)。比如从EMMC的第1536(0x600)个块开始读16(0x10)个块的数据到DRAM的0x80800000地址处。
在这里插入图片描述
7.mmc write addr blk# cnt:将数据写到MMC设备里面,用此命令升级uboot,也就是在uboot中更新uboot。这里要用到nfs或tftp命令将新的u-boot.bin下载到开发板的DRAM中,然后再用此命令将其写入到MMC设备中。更新一下SD中的uboot,先查看一下SD卡中的uboot版本号:
在这里插入图片描述
可看出当前SD卡中的 uboot 是 2020 /10/12 14:04:37编译的。重新编译一下uboot并将编译出来的u-boot.imx (u-boot.bin前面加了一些头文件) 拷贝到 Ubuntu 中的tftpboot 目录下。最后使用tftp命令将其下载到0x80800000地址处命令如下:
在这里插入图片描述
u-boot.imx大小为379904字节, 379904/512=742,所以我们要向SD卡中写入742个块,如果有小数的话就要加1个块。从SD卡分区0第2个块开始烧写(不要写SD卡或者EMMC的前2个扇区,因为里面保存着分区表),一共烧写742(0x2E6)个块。烧写成功后重启开发板(从SD卡启动),重启后再输入version来查看版本号。
在这里插入图片描述

// 在 uboot 中更新 EMMC 对应的 uboot,可以使用如下所示命令:
mmc dev 1 0 //切换到 EMMC 分区 0
tftp 80800000 u-boot.imx //下载 u-boot.imx 到 DRAM
mmc write 80800000 2 32E //烧写 u-boot.imx 到 EMMC 中
mmc partconf 1 1 0 0 //分区配置, EMMC 需要这一步!

8.mmc erase blk# cnt:擦除MMC设备的指定块。

8.U-Boot命令之内存操作命令:直接对DRAM进行读写操作,uboot命令中的数字都是十六进制的,不是十进制

md[.b, .w, .l] address [# of objects]:[.b .w .l]对应byte/word/long即分别以1/2/4个字节显示display内存值,address就是要查看的内存起始地址,[# of objects]表示要查看的数据长度(不是字节,和所选的显示格式有关)。比如你设置要查看的内存长度为20即md.b 80000000 14(0X80000000开始,20的十六进制0x14),如果显示格式为.b的话那就表示20个字节;如果显示格式为.w的话就表示20个word等。
在这里插入图片描述
mm命令也是修改指定地址内存值的,使用mm修改内存值的时候地址会自增,而使用nm地址不会自增。比如以.l 格式修改从地址0x80000000开始的连续3个内存块(3*4=12个字节)的数据为0X05050505。
在这里插入图片描述
如下0x10(16,16x4=64个字节)个内存块。
在这里插入图片描述
cp [.b, .w, .l] source target count:用于将DRAM中的数据从一段内存拷贝到另一段内存中,或把NorFlash中的数据拷贝到DRAM中。
在这里插入图片描述
在这里插入图片描述

9.U-Boot命令之boot命令:boot(引导)命令来启动linux

要启动Linux,需先将Linux镜像文件拷贝到DRAM 中,如果使用到设备树的话也需要将设备树拷贝到DRAM 中。可从EMMC或NAND等存储设备中将Linux镜像和设备树文件拷贝到DRAM,也可通过nfs或tftp将Linux镜像文件和设备树文件下载到DRAM中。

然后用bootz命令来启动,bootz命令用于启动zImage镜像文件,bootz命令格式如下:bootz [addr [initrd[:size]] [fdt]] addr是Linux镜像文件在DRAM中的位置,initrd是initrd文件在DRAM中的地址,如果不使用initrd的话使用-代替即可,fdt就是设备树文件在DRAM中的地址)。
在这里插入图片描述
boot命令也是用来启动Linux系统的,只是boot会读取环境变量bootcmd来启动Linux系统,bootcmd环境变量保存着引导命令,其实就是启动的命令集合,具体引导命令内容是可修改的。比如我们要想使用tftp命令从网络启动Linux那么就可以设置bootcmd为“tftp80800000 zImage; tftp 83000000 imx6ull-alientek-emmc.dtb; bootz 80800000 - 83000000”,然后使用saveenv将bootcmd保存起来,然后直接输入boot命令即可从网络启动Linux系统,uboot倒计时结束以后就会启动Linux系统,其实就是执行的bootcmd中的启动命令。只要不修改bootcmd中的内容,以后每次开机uboot倒计时结束以后都会使用tftp命令从网络下载zImage和imx6ull-alientek-emmc.dtb,然后启动Linux。

10.U-Boot命令之网络操作命令:查看信息(bdinfo/version/bdinfo)

一般环境变量是存放在外部flash中的,uboot启动的时候会将环境变量从flash读取到DRAM中。所以使用命令setenv修改的是DRAM中的环境变量值,修改以后要使用saveenv命令将修改后的环境变量保存到flash中,否则uboot下一次重启会继续使用以前的环境变量值。

根据如下提示看出环境变量保存到了MMC(0)中,也就是SD卡中。因为我用的SD卡启动,所以会保存到MMC(0)中。
在这里插入图片描述
有时候修改的环境变量值可能会有空格, 如bootcmd、bootargs等, 这个时候环境变量值就得用单引号括起来:setenv bootargs ‘console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw’。
新建环境变量:setenv author q ,删除环境变量:setenv author 空。

开发板和主机 PC 都连接到同一个路由器上!最后设置下表中所示的几个环境变量

setenv ipaddr 192.168.0.107    # 开发板ip,可不设置,dhcp命令来从路由器获取IP 
setenv ethaddr 00:04:9f:04:d2:35  # 开发板MAC地址,一定要设置
setenv gatewayip 192.168.0.1 
setenv netmask 255.255.255.0
setenv serverip 192.168.0.108  # 服务器IP地址,也就是Ubuntu主机IP地址,用于调试代码
saveenv

设置好网络相关的环境变量以后就可以使用网络相关命令了。
192.168.0.108 这个主机存在,说明 ping 成功, uboot 的网络工作正常。
在这里插入图片描述
只能在 uboot 中 ping 其他的机器,其他机器不能 ping uboot,因为 uboot 没有对 ping命令做处理,如果用其他的机器 ping uboot 的话会失败!
在这里插入图片描述
开发板通过 dhcp 获取到的 IP 地址为 192.168.0.102。同时在图中可以看到“warning: no boot file name;”这样的字样。这是因为 DHCP 不单单是获取 IP 地址,其还会通过 TFTP 来启动 linux 内核,输入“? dhcp”即可查看 dhcp 命令详细的信息,如下图 所示:
在这里插入图片描述
一般用uboot中的nfs(Network File System)命令将Ubuntu中文件下载到开发板DRAM中,在使用之前需要开启Ubuntu主机NFS服务(/etc/init.d/nfs-kernel-server restart),且新建一个NFS使用的目录,以后通过NFS访问的文件都要放到这目录中。
在这里插入图片描述

准备好以后就可以使用 nfs 命令来将 zImage 下载到开发板 DRAM 的 0X80800000 地址处,命令如下:
nfs 80800000 192.168.0.108:/home/qiaoqiao/linux/nfs/zImage

sudo apt-get install tftp-hpa tftpd-hpa
sudo apt-get install xinetd

mkdir /home/qiaoqiao/linux/tftpboot
chmod 777 /home/qiaoqiao/linux/tftpboot
# /etc/xinetd.d/tftp
server tftp
{
	socket_type = dgram
	protocol = udp
	wait = yes
	user = root
	server = /usr/sbin/in.tftpd
	server_args = -s /home/qiaoqiao/linux/tftpboot
	disable = no
	per_source = 11
	cps = 100 2
	flags = IPv4
}

sudo service tftpd-hpa start

# /etc/default/tftpd-hpa

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

sudo service tftpd-hpa restart

tftp 80800000 zImage

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

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

相关文章

MySQL数据库高级查询语句

MySQL数据库高级查询语句 一、语句SELECT ----显示表格中一个或数个字段的所有数据记录DISTINCT ----不显示重复的数据记录WHERE ----有条件查询AND OR ----且 或IN ----显示已知的值的数据记录BETWEEN ----显示两个值范围内的数据记录通配符 ----通常通配符都是跟 LIKE 一起使…

强化学习从基础到进阶-案例与实践[5]:梯度策略、添加基线(baseline)、优势函数、动作分配合适的分数(credit)

【强化学习原理项目专栏】必看系列:单智能体、多智能体算法原理项目实战、相关技巧(调参、画图等、趣味项目实现、学术应用项目实现 专栏详细介绍:【强化学习原理项目专栏】必看系列:单智能体、多智能体算法原理项目实战、相关技巧…

解决关于msvcp120.dll丢失的问题(解决方法)

msvcp120.dll是微软软件包的一部分。它是一个库文件,可用于支持软件运行时,msvcp120.dll的作用是提供计算机程序所需的标准库,msvcp120.dll还负责管理堆内存、线程和异常处理函数等。在使用windows编写的应用程序中,通常需要使用此…

【新星计划·2023】Linux系统的架构和组件讲解

作者:Insist-- 个人主页:insist--个人主页 作者会持续更新网络知识和python基础知识,期待你的关注 前言 本文将讲解Linux系统的架构和组件。 目录 一、Linux系统的架构 1、硬件层 2、内核层 3、进程管理子系统 4、内存管理子系统 5、…

JDBC和数据库应用总结

文章目录 1. JDBC介绍2. 相关jar包引入3. JDBC与数据库基本连接4. JDBC API 详解4.1 Connection 接口4.2 Statement 接口4.3 ResultSet 5. PreparedStatement 详解 1. JDBC介绍 JDBC是一套标准接口,这套接口用于操作所有的数据库,不同的数据库厂商对迎合…

在C#下运行Python:IronPython和Pythonnet

在C#下运行Python可能有不同的原因。其中一些原因包括: 使用C#应用程序中不可用的特定Python功能或库。结合Python的简单性和表现力以及C#的性能和稳健性,完成不同任务。与基于Python的系统或服务进行集成。 为实现Python和C#之间的互操作性&#xff0…

Java日志框架介绍

​今天来聊一聊 Java 日志框架,不管是在项目开发阶段的调试,还是项目上线后的运行,都离不开日志。日志具有处理历史数据、定位程序问题、理解程序运行过程等重要作用。在 Spring 项目开发过程中我们常见的日志框架可能就是 logback、log4j2 和…

Go学习圣经:Go语言实现高并发CRUD业务开发

说在前面: 现在拿到offer超级难,甚至连面试电话,一个都搞不到。 尼恩的技术社群中(50),很多小伙伴凭借 “左手云原生右手大数据”的绝活,拿到了offer,并且是非常优质的offer&#…

APP/小程序嵌入游戏,游戏飞跃的赛道

APP/小程序接入游戏运营已不是新鲜事,然而,其仍具有巨大的发展潜力,尤其是社交类APP,多以加入娱乐游戏增加互动,获取目标客户,同时为产品增加变现渠道,实现双赢。 对于APP嵌入式游戏&#xff0…

Java之SpringCloud Alibaba【一】【Nacos一篇文章精通系列】

Java之SpringCloud Alibaba【一】【Nacos一篇文章精通系列】 一、微服务介绍1、系统架构演变1)单体应用架构2)垂直应用架构3)分布式4)SOA架构5)微服务框架6)常见微服务架构 2、SpringCloud Alibaba介绍3、S…

【C语言督学训练营 第十四天】二叉树真题实战 ----- 层序建树、前中后序遍历、求树的WPL

文章目录 前言树概念二叉树层序建树四种遍历二叉树的方式层次遍历前序遍历中序遍历后续遍历 真题实战! 前言 今天进行总结的是考研408有关二叉树的基础知识,是王道C语言督学营的第十四天,随着课程的深入,代码实战的难度慢慢的上来…

MyCat01——如何实现MySQL中的主从复制

1 问题 数据对于我们来说是一项最重要的资产,因为数据丢失带来的损失,对于一家公司来说,有时也是毁灭性的。 那么如何确保数据安全,不因断电或系统故障带来数据丢失呢? 当用户增加,对数据库的访问量也随…

推荐一款好用的时序预测工具——Alibaba DChain Forecast

前言 绝大部分行业场景,尤其是互联网、量化行业,每天都会产生大量的数据。金融领域股票价格随时间的走势;电商行业每日的销售额;旅游行业随着节假日周期变化的机票酒店价格等。我们称这种不同时间收到的,描述一个或多…

Ajax技术的秘密揭秘:异步传输,高效交互

文章目录 I. 什么是AjaxAjax的定义和起源Ajax与传统的Web应用程序之间的区别 II. Ajax的工作原理Ajax的基本原理Ajax如何通过异步传输实现无需刷新页面 III. Ajax的应用场景在Web应用程序中应用Ajax的优势Ajax在哪些场景中使用 IV. Ajax的组成部分和APIXHR对象FormData对象Fetc…

用postman进行web端自动化测试

目录 前言 一、抓包(使用Charles抓包工具) 二、选择请求方法 三、填写url地址 四、填写Header 五、填写body 六、断言(Tests页) 七、获取动态参数——例如token 八、设置静态参数(请求地址、账号密码等&#x…

【Django-功能优化】存储、循环、操作选择对代码性能的影响

功能开发背景 港口货轮需要进行集装箱的装卸任务: 船上的每一个集装箱,可以用三个维度的坐标来唯一定位:(bay, column, layer),这三个维度结合其他一些固有信息,构成了一个箱子的字段属性,存储在箱子数据表…

百度的人脸识别的技术

百度的人脸识别的技术 1.基本概念 分组:分组ID(group_id):分组ID用于对一组相关的人脸进行分组和管理。你可以根据自己的需求,将不同的人脸数据分配到不同的分组中。例如, 你可以根据人员的职位、部门或其…

Nginx优化安全防盗链

1.Nginx的页面优化 1.1 Nginx的网页压缩 在Nginx的ngx_http_gzip_module压缩模块提供对文件内容压缩的功能。进行相关的配置修改,就能实现Nginx页面的压缩,达到节约带宽,提升用户访问速度 1.2 配置Nginx的图片缓存 当Nginx将网页数据返回给…

阿里云企业邮箱免费版、标准版、集团版和尊享版区别

阿里云企业邮箱版本分为免费版、标准版、集团版和尊享版,除了价格区别,功能方面有什么差异?如何选择企业邮箱版本?免费版0元适合初创型企业,标准版适合大、中、小型企业使用,涉及子公司之间邮箱通讯可以选择…

jQuery学习

原生实现计数器 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-wi…