【Note7】uboot,

news2024/12/30 2:20:59

文章目录

  • 1.uboot
    • 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.uboot

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/635673.html

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

相关文章

CMake学习(7): CMake的嵌套

博客参考自:爱编程的大丙: https://subingwen.cn/cmake/CMake-primer/ ,仅供学习分享使用 如果项目很大,或者项目中有很多的源码目录,在通过 CMake 管理项目的时候如果只使用一个 CMakeLists.txt,那么这个文件相对会比较复杂&…

【嵌入式环境下linux内核及驱动学习笔记-(16)linux总线、设备、驱动模型之input框架】

目录 1、Linux内核输入子系统概念导入1.1 输入设备工作机制1.2 运行框架1.3 分层思想 2、驱动开发步骤2.1 在init()或probe()函数中2.2 在exit()或remove()函数中:2.3 上报事件2.4 input驱动要素导图2.5 input驱动的总…

代码生成器实现

代码生成器实现 实现封装元数据的工具类实现代码生成器的代码编写掌握模板创建的 构造数据模型 需求分析 借助Freemarker机制可以方便的根据模板生成文件,同时也是组成代码生成器的核心部分。对于Freemarker而 言,其强调 数据模型 模板 文件 的思…

chatgpt赋能python:Python与硬件结合的现实价值

Python与硬件结合的现实价值 Python是当今最受欢迎和广泛使用的编程语言之一,因其易学易用、开放源代码和灵活性而备受欢迎。但是当我们将它与硬件相结合,它能做到什么? 在这篇文章中,我们将向您介绍如何将Python与硬件结合&…

戴尔外星人m16r1国行中文原厂Windows11系统自带Support Assist OS Recovery恢复出厂设置

戴尔外星人m16r1国行中文原厂系统自带Support Assist OS Recovery恢复出厂设置 文件地址https://pan.baidu.com/s/1Pq09oDzmFI6hXVdf8Vqjqw?pwd3fs8 提取码:3fs8 支持Support Assist OS recovery型号: 戴尔外星人m18r1国行中文版Windows11系统 戴尔外星人x16r1国行中文版…

2023/6/9总结

CSS Less嵌套 子元素的选择器可以直接写在父元素里面。 如果不是它的后代元素,比如你想写伪类选择器、交集选择器,需要在前面加&号。 Less运算: 加减乘除都可以,运算符必须用空格隔开。如果俩个元素都有单位&#xff0…

【SpringBoot 3.x】使用starter整合Druid

Druid介绍 Druid是阿里巴巴的一个开源项目,号称为监控而生的数据库连接池,在功能、性能、扩展性方面都超过其他例如DBCP、C3P0、BoneCP、Proxool、JBoss DataSource等连接池,而且Druid已经在阿里巴巴部署了超过600个应用,通过了极为严格的考…

网络作业9【计算机网络】

网络作业9【计算机网络】 前言推荐网络作业9一. 单选题(共12题,36分)二. 多选题(共1题,3分)三. 填空题(共2题,10分)四. 阅读理解(共1题,17分&…

C++【STL】之string的使用

STL简介 STL是C标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。STL由六大组件构成:仿函数、算法、迭代器、空间配置器、容器和配接器。 其中各种容器可以很大帮助的提升我们编写程序的效率&#…

静态NAT配置与验证实验

静态NAT配置与验证实验 【实验目的】 部署静态NAT。熟悉静态NAT的应用方法。验证配置。 【实验拓扑】 实验拓扑如图所示。 实验拓扑 设备参数如表所示。 设备参数表 设备 接口 IP地址 子网掩码 默认网关 R1 f0/0 192.168.10.1 255.255.255.0 N/A S1/0 10.0.0.1…

GlyphControl: Glyph Conditional Control for Visual Text Generation

GlyphControl: Glyph Conditional Control for Visual Text Generation (Paper reading) Yukang Yang, Microsoft Research Asia, arXiv2023, Cited: 0, Code, Paper 1. 前言 最近,人们对开发基于扩散的文本到图像生成模型的兴趣日益增长,这些模型能够…

软件工程开发文档写作教程(11)—需求分析书的编写

本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl本文参考资料:电子工业出版社《软件文档写作教程》 马平,黄冬梅编著 需求分析书主要内容 按照国家《软件需求说明书GB8567-88》所定义的标准,软件需求…

2023去水印小程序saas系统源码修复独立版v1.0.3+uniapp前端

🎈 限时活动领体验会员:可下载程序网创项目短视频素材 🎈 🎉 有需要的朋友记得关赞评,阅读文章底部来交流!!! 🎉 ✨ 源码介绍 一个基于uniapp写的小程序,后端…

MATLAB | 绘图复刻(九) | 泰勒图及组合泰勒图

有粉丝问我这个图咋画: 我一看,这不就泰勒图嘛,就fileexchange上搜了一下泰勒图绘制代码,但是有的代码比较新的版本运行要改很多地方,有的代码需要包含一些压缩包没并没有的别人写的函数,于是我干脆自己写了…

JAVA-八种基础数据类型和包装类型及相关面试题

文章目录 前言一、基本数据类型1.1 分类1.2 概念1.3 代码1.4 二维表 二、各基本数据类型间强制转换2.1 为什么Java中有强制转换?2.2 示例代码 三、包装类型3.1 为什么有包装类型?3.2 基本概念3.3 转换方法 四、转换过程中使用的自动装箱和自动拆箱4.1 来…

Redis Lua脚本原理

Lua脚本执行过程 创建并修改Lua环境 1 创建基础Lua环境2 载入函数库3 创建全局表格Lua4 替换随机函数5 创建排序辅助函数6 创建redis.pcall函数7 全局环境保护8 修改后的Lua环境保存到服务器状态的Lua属性,等待脚本执行 Redis中带有不确定性的命令: …

RK3588平台开发系列讲解(以太网篇)PHY状态机

平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、PHY状态机定义二、PHY的状态变化三、PHY的状态变化打印沉淀、分享、成长,让自己和他人都能有所收获!😄 一、PHY状态机定义 phy状态机: 目录:include/linux/phy.h enum phy_state {PHY_DOWN = 0,</

开源模型的力量

2 月&#xff0c;Meta 发布了其大型语言模型&#xff1a;LLaMA。与 OpenAI 及其 ChatGPT 不同&#xff0c;Meta 不仅仅为世界提供了一个可以玩的聊天窗口。 相反&#xff0c;它将代码发布到开源社区&#xff0c;此后不久模型本身就被泄露了。研究人员和程序员立即开始修改、改…

Protobuf实战:通讯录

网络版通讯录 需求 Protobuf常⽤于通讯协议、服务端数据交换场景。接下来将实现⼀个⽹络版本的通讯录&#xff0c;模拟实现客⼾端与服务端的交互&#xff0c;通过Protobuf来实现各端之间的协议序列化。 需求如下&#xff1a; 客⼾端可以选择对通讯录进⾏以下操作&#xff1a;…

电子科技大学编译原理复习笔记(七):自下而上语法分析

目录 前言 重点一览 引言 自下而上分析 分析方法 规范规约&#xff08;最左规约&#xff0c;对应最右推导&#xff09; 算符优先分析法 算符优先文法 最左素短语 举个例子 优先关系表的构造 规范规约与算符优先分析 LR分析法 概述 LR&#xff08;0&#xff09…