Linux——Uboot命令使用

news2024/11/26 11:10:13

什么是Uboot?

1)Uboot是一个裸机程序,比较复杂。类似我们PC机的BIOS程序。

2)Uboot就是一个bootloader,作用就是用于启动Linux或者其他系统,Uboot最主要的工作是初始化DDR,因为Linux的运行是运行在DDR里面的。(Linux镜像编译出来如果不做裁剪的话有四五兆字节那么大,一般芯片内部ram没有那么大,无法运行,必须放到DDR中运行),所以如果要运行Linux,就要先初始化好DDR,才能在DDR中运行Linux系统。

一般Linux镜像(叫做zimage或者是uimage)+设备树(.dtb)存放在SD、EMMC、NAND、SPI FLASH等等外置存储区域。

Uboot可以引导Linux镜像从外置flash拷贝到DDR中,再去启动。

Uboot不仅能启动Linux,也可以启动其他系统,比如vxworks。

Uboot是个通用的bootloader,支持多种架构。

 Uboot编写简要流程

最直接的方式就是官网下载,但是不可能编写Uboot的时候考虑到所有芯片的需求,如果需要一些特别的驱动,就需要SOC(系统级芯片)厂商自己去更改和添加原始Uboot的一些内容,做开发板的厂商也需要根据SOC厂商做好的Ubooot进行修改,从而来适应自己制作的开发板。

编写好的Uboot程序的编译

(1)通过FTP传输(FileZilla)在Windows系统下将正点原子编写的Uboot压缩包传输到Ubuntu

(2)通过命令进行解压缩

v显示过程,x解压缩,j表示tar.bz2文件,f使用归档文件

(3)512MB(DDR3)+8GB(EMMC)核心板使用如下命令来编译Uboot

清理编译文件

配置Uboot

文件夹下会生成一个.config文件,使用ls  -a命令查看

编译Uboot

V=1的作用是把编译的过程详细打印出来。

编译完成之后会在文件夹里生成一个u-boot.bin的文件,与我们的裸机实验一样生成一个可执行文件,但是我们要运行程序必须在.bin文件里添加头部信息(主要有IVT镜像向量表,包含了一系列的地址信息、BOOT Data包含了启动时需要的一些关键数据,比如镜像要拷贝到哪个地址、拷贝的大小等信息、DCD是设备配置数据,主要用于初始化系统时钟、DDR等设备信息。),添加完之后会生成u-boot.imx文件,uboot是通过/tools/mkimage这样的一个工具添加头部信息的,如下:

Uboot命令的使用

信息查询命令

常用的信息查询命令有3个,分别是bdinfo、printenv和version。

bdinfo命令可以得出 DRAM 的起始地址和大小、启动参数保存起始地址、波特率、 sp(堆栈指针)起始地址等信息,如下:

printenv命令用于输出环境变量信息。Uboot的环境变量是可以修改的,有专门的命令来修改Uboot的环境变量。

version命令用来显示版本号,下图打印出的信息表示用的Uboot版本是2016年的,上次编译时间是2024年,用的是arm-linux-gnueabihf-gcc编译器。

环境变量操作命令

1)修改环境变量

环境变量的修改涉及到两个命令,setenv命令用于设置环境变量或者修改环境变量,saveenv命令将修改后的环境变量保存到flash中。

例如我们要将延时时间修改成5秒后才启动linux内核,可以

如果我们修改的环境变量的值有空格,我们就需要将其值用单引号括起来

2)新建环境变量

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

3)删除环境变量

删除环境变量的命令跟设置环境变量命令相同,只要在变量后面赋空值即可

内存操作命令

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

1)md命令

格式如下:

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

显示格式[.b,.w,.l]对应byte、word和long,也就是1个字节、2个字节和4个字节来显示内存值。,address是要查看内存的起始地址,[# of objects]表示要查看的数据长度,比如要显示的内存长度为20,显示格式为.b的话就是20个字节,显示格式为.w的话就是20*2个字节,显示格式为.l的话就是20*4个字节。

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

例如要查看以0x80000000开始的20个字节的内存值,显示格式位.b,(0x14表示20)使用如下命令:

2)nm命令

nm命令用于修改指定地址的内存值,修改完之后输入q退出

3)mm命令

mm命令也是修改指定地址的内存值的,但是相比于nm命令,mm命令修改完一个内存值之后地址会自增。

4)mw命令

命令mw用于使用一个指定的数据填充一段内存

5)cp命令

cp是数据拷贝指令,用于将DRAM中的数据从一段内存拷贝到另一段内存,或者从NOR FLASH中拷贝到DRAM

6)cmp命令

cmp是比较命令,用于比较两段内存的数据是否相等

网络操作命令

在进行网络操作命令之前,我们需要将电脑和开发板连接至同一路由器(笔记本电脑也可以无线连接,但要确保虚拟机有网络),且我们需要将开发板和虚拟机设置为同一网段,由于我们的开发板连接了路由器,所以要是处于同一网段我们需要手动修改Ubuntu的ip,如下:

DNS服务器记得设置!不然可能会没网!!

如果还是没网的话设置一下虚拟机:

根据实际设置环境变量

1)ping命令

作用是检测处于同一网段的机器能不能相互通信,现在我们的开发板与我们的虚拟机处于同一网段

2)dhcp命令

从路由器获取ip地址

3)nfs命令

通过nfs(网络文件系统)可以在计算机之间通过网络来分享资源

格式:nfs [loadAddress] [[hostIPaddr:]bootfilename]

loadAddress 是要保存的 DRAM 地址,[[hostIPaddr:]bootfilename]是要下载的文件地址。这 里我们将正点原子官方编译出来的 Linux 镜像文件 zImage 下载到开发板 DRAM 的 0x80800000 这个地址处。

如果出现Loading: T T T T T T T T /Loading: *** ERROR: File lookup fail这些情况,可以参考我的另一篇博客Linux——Uboot使用NFS出现Loading: T T T T T T T T /Loading: *** ERROR: File lookup fail-CSDN博客

4)tftp命令

        tftp 命令的作用和 nfs 命令一样,都是用于通过网络下载东西到 DRAM 中,只是 tftp 命令 使用的 TFTP 协议,Ubuntu 主机作为 TFTP 服务器。因此需要在 Ubuntu 上搭建 TFTP 服务器, 需要安装 tftp-hpa 和 tftpd-hpa,命令如下:

创建文件

在文件中输入如下内容

然后启动 tftp 服务

打开文件tftpd-hpa

修改

重启tftp

tftp服务器已经搭建好了

一点要确保我们已经给了tftp文件夹和zImage权限,不然会传输失败!!

EMMC和SD卡操作命令

1)mmc命令

“mmc”是一系列命令,其后可以跟不同的参数,输出?mmc或者mmc -help即可查看mmc相关的命令:

FAT格式文件操作命令

1)fatinfo命令

fatinfo 命令用于查询指定 MMC 设备分区的文件系统信息

命令的作用是查询emmc的分区1的文件系统信息(mmc表示接口)

2)fatls命令

fatls命令的作用是查询FAT格式设备的目录和文件信息

命令的作用是查询SD卡的分区1的目录和文件信息

3)fstype命令

查询设备的文件格式

fat格式存放Linux的镜像和设备树,ext4格式存放Linux的根文件系统(rootfs)

4)fatload命令

fatload 命令用于将指定的文件读取到 DRAM 中

命令的作用是将mmc接口的设备1的分区1的zImage文件写到DRAM的80800000位置

5)fatwrite命令

将DRAM的数据写到MMC设备中

语句的作用是将DRAM的0x80800000位置的zImage文件写到MMC设备1的分区1,大小为0x6788f8

EXT格式文件系统操作命令

uboot有ext2和ext4两种格式文件系统的操作命令。

常用的命令为ext2load、ext2ls、ext4load、ext4ls 和 ext4write,使用方式跟FAT格式文件系统一样。

BOOT操作命令

1)bootz命令

bootz 命令用于启动 zImage 镜像文件

2)bootm命令

bootm 和 bootz 功能类似,但是 bootm 用于启动 uImage 镜像文件

3)boot命令

boot命令是来启动Linux系统,boot会读取环境变量bootcmd来启动Linux系统

如果我们要通过网络来启动Linux,可以进行如下操作

设置好环境变量bootcmd然后保存,通过boot命令来启动Linux系统,如果要从emmc启动就做如下环境变量定义

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

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

相关文章

2024智能机器人与自动控制国际学术会议 (IRAC 2024)

主办,承办,支持单位 会议官网 www.icirac.org 大会时间:2024年11月29-12月1日 大会简介 2024智能机器人与自动控制国际学术会议 (IRAC 2024)由华南理工大学主办,会议将于2024年11月29日-12月1日在中国广…

Linux网络——NAT/代理服务器

一.NAT技术 1.NAT IP转换 之前我们讨论了, IPv4 协议中, IP 地址数量不充足的问题,NAT 技术就是当前解决 IP 地址不够用的主要手段, 是路由器的一个重要功能。 NAT 能够将私有 IP 对外通信时转为全局 IP. 也就是一种将私有 IP 和全局IP 相互转化的技术方法: 很…

【架构】主流企业架构Zachman、ToGAF、FEA、DoDAF介绍

文章目录 前言一、Zachman架构二、ToGAF架构三、FEA架构四、DoDAF 前言 企业架构(Enterprise Architecture,EA)是指企业在信息技术和业务流程方面的整体设计和规划。 最近接触到“企业架构”这个概念,转念一想必定和我们软件架构…

亚信安全发布《2024年第三季度网络安全威胁报告》

《亚信安全2024年第三季度网络安全威胁报告》的发布旨在从一个全面的视角解析当前的网络安全威胁环境。此报告通过详尽梳理和总结2024年第三季度的网络攻击威胁,目的是提供一个准确和直观的终端威胁感知。帮助用户更好地识别网络安全风险,并采取有效的防…

【c++】模板详解(2)

🌟🌟作者主页:ephemerals__ 🌟🌟所属专栏:C 目录 前言 一、非类型模板参数 二、模板的特化 1. 概念 2. 场景举例 3. 函数模板的特化 4. 类模板的特化 全特化 偏特化 1. 部分特化 2. 对参数的…

红队笔记--W1R3S、JARBAS、SickOS、Prime打靶练习记录

W1R3S(思路为主) 信息收集 首先使用nmap探测主机,得到192.168.190.147 接下来扫描端口,可以看到ports文件保存了三种格式 其中.nmap和屏幕输出的一样;xml这种的适合机器 nmap -sT --min-rate 10000 -p- 192.168.190.147 -oA nmapscan/ports…

Qt/C++基于重力模拟的像素点水平堆叠效果

本文将深入解析一个基于 Qt/C 的像素点模拟程序。程序通过 重力作用,将随机分布的像素点下落并水平堆叠,同时支持窗口动态拉伸后重新计算像素点分布。 程序功能概述 随机生成像素点:程序在初始化时随机生成一定数量的像素点,每个…

十一月二十五

双向循环链表 class Node:#显性定义出构造函数def __init__(self,data):self.data data #普通节点的数据域self.next None #保存下一个节点的链接域self.prior None #保存前一个节点饿链接域 class DoubleLinkLoop:def __init__(self, node Node):self.head nodeself.siz…

Python + 深度学习从 0 到 1(00 / 99)

希望对你有帮助呀!!💜💜 如有更好理解的思路,欢迎大家留言补充 ~ 一起加油叭 💦 欢迎关注、订阅专栏 【深度学习从 0 到 1】谢谢你的支持! ⭐ 什么是深度学习? 人工智能、机器学习与…

UG NX二次开发(C++)-UIStyler-指定平面的对象和参数获取

文章目录 1、前言2、在UG NX中创建平面和一个长方体,3、在UI Styler中创建一个UI界面4、在VS中创建一个工程4.1 创建并添加工程文件4.2 在Update_cb方法中添加选择平面的代码4.3 编译完成并测试效果1、前言 在采用NXOpen C++进行二次开发时,采用Menu/UIStyler是一种很常见的…

C# 命令行运行包

环境:net6 nuget包:Cliwrap 3.6.7 program: 相当于cmd运行命令:nuget search json static async Task Main(string[] args) {var cmd Cli.Wrap("D:\\软件\\Nuget\\nuget.exe").WithArguments(args >args.Add("…

长三角文博会:Adobe国际认证体系推动设计人才评价新标准

2024年11月22日,由上海、江苏、浙江、安徽三省一市党委宣传部共同发起的第五届长三角文化博览会(简称“长三角文博会”)在上海国家会展中心盛大启幕。长三角文博会自2018年起已成功举办多届,已成为展示区域文化产业发展成果、推动…

音视频基础扫盲之视频码率控制策略(CBR、VBR还是ABR)

视频码率控制策略 CBR(Constant Bit Rate)、VBR(Variable Bit Rate)和ABR(Average Bit Rate)是三种常见的比特率控制方式,以视频码率控制为例,视频码率控制策略主要是在保证视频质量…

【C语言】传值调用与传址调用:深度解析与实现

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C语言 文章目录 💯前言💯什么是传值调用和传址调用?1. 传值调用(Call by Value)2. 传址调用(Call by Reference) 💯传值调…

C++《二叉搜索树》

在初阶数据结构中我学习了树基础的概念以及了解了顺序结构的二叉树——堆和链式结构二叉树该如何实现,那么接下来我们将进一步的学习二叉树,在此会先后学习到二叉搜索树、AVL树、红黑树;通过这些的学习将让我们更易于理解后面set、map、哈希等…

Leetcode647. 回文子串(HOT100)

链接 代码&#xff1a; class Solution { public:int countSubstrings(string s) {int res 0;for(int i 0;i<s.size();i){for(int j i,k i;j>0&&k<s.size();j--,k){if(s[j]!s[k])break;else res;}for(int j i,k i1;j>0&&k<s.size();j--…

ubuntu, 安装部署comfyui,记录2:下载模型GGuf及测试

0.清除工作流 1.安装manager 2024年最新ComfyUI汉化及manager插件安装详解&#xff01;_comfyui-manager-CSDN博客 ComfyUI Manager安装 转到ComfyUI的安装目录ComfyUI/custom_nodes; 使用git拉取ComfyUI Manager&#xff0c;git clone https://github.com/ltdrdata/Comf…

【Y20030006】基于php+mysql的课程学习网站的设计与实现(附源码 配置 文档)

网络购物商城的设计与实现 1.摘要2.开发目的和意义3.系统功能设计4.系统界面截图5.源码获取 1.摘要 随着互联网的普及和在线教育的兴起&#xff0c;课程学习网站已经成为越来越多人获取知识和提升技能的重要途径。在这样的背景下&#xff0c;开发一个基于Laravel框架的课程学习…

O2O: (BOORL) Bayesian Design Principles for Offline-to-Online RL

ICML 2024 paper code Intro O2O如何避免悲观学习导致sample efficiency较低&#xff0c;亦或者乐观估计导致的performance drop。本文提出贝叶斯准则&#xff0c;指导在线学习过程中的探索和利用。通过构建一个Q值相关的信念分布&#xff0c;agent可以对不同策略的优劣有一个…

Hyper-V配置-cnblog

启用Hyper-V以在 Windows 10上创建虚拟机 &#xff08;1&#xff09;控制面板检查系统要求&#xff1a; 确保您的计算机符合 Hyper-V 的系统要求。通常情况下&#xff0c;您的计算机需要运行 Windows 10 专业版、企业版或教育版&#xff0c;并且具有启用了虚拟化技术的处理器。…