01_什么是Uboot

news2024/11/9 4:52:47

目录

U-Boot简介

获取Uboot

U-Boot初次编译

U-Boot烧写与启动


U-Boot简介

Linux系统要启动就必须需要一个bootloader程序(裸机程序),也就说芯片上电以后先运行一段bootloader程序。这段bootloader程序会先初始化DDR等外设,然后将Linux镜像从flash(NAND,NOR FLASH,SD,EMMC等)拷贝到DDR中,最后启动Linux 内核。当然了,bootloader的实际工作要复杂的多,但是它最主要的工作就是启动Linux内核, bootloader和Linux内核的关系就跟PC上的BIOS和Windows的关系一样, bootloader就相当于BIOS。所以我们要先搞定bootloader,很庆幸,有很多现成的bootloader软件可以使用,比如U-Boot、 vivi、RedBoot等,其中以U-Boot使用最为广泛

因为Linux镜像是存在Flash里面,要想运行Linux系统需要一定的RAM,芯片内部RAM一般没有辣么大所以就需要DDR,bootloader就是需要准备Linux运行条件,譬如初始化DDR,然后再从Flash中读取到DDR中运行Linux系统。Uboot的主要目的就是为系统的启动做准备。

Uboot不仅仅能启动 Linux,也可以启动其他系统,比如 vxworks。Linux不仅仅能通过uboot启动,还可以用其他bootloader启动。Uboot是个通用的bootloader,他支持多种架构。

获取Uboot

1.uboot的全称基UniverealRoot1oader uboot基一个道活GPL议的开软件uboot基一个裸机代码,可以看作是一个裸机综合例程。现在的uboot已经支持液晶屏、网络、USB等高级功能。uboot官网为http://www.denx.de/wiki/U-Boot/,如图所示:

 图就是uboot原汁原味的源码文件。但是我们一般不会直接用 uboot 官方U-Bbot源码的。uboot官方的uboot 源码是给半导体厂商准备的,半导体厂商会下载uboot官方的uboot源码,然后将自家相应的芯片移植进去。也就是说半导体厂商会自己维护一个版本的uboot,这个版本的uboot相当于是他们定制的。既然是定制的,那么肯定对自家的芯片支持会很全,虽然uboot官网的源码中一般也会支持他们的芯片,但是绝对是没有半导体厂商自己维护的uboot全面。

2.SOC厂商会从uboot官网下载某个版本的uboot,然后再这个版本的uboot上加入相应的SOC以及驱动。这就是SOC厂商定制版的uboot。

3.做开发板的厂商,开发板会参考SOC厂商的板子,加入自己想要的一些东西。

 

那么这三种 uboot该如何选择呢?首先uboot官方的基本是不会用的,因为支持太弱了。最常用的就是半导体厂商或者开发板厂商的uboot,如果你用的半导体厂商的评估板,那么就使用半导体厂商的uboot,如果你是购买的第三方开发板,比如正点原子的I.MX6ULL开发板,那么就使用正点原子提供的uboot源码(也是在半导体厂商的uboot上修改的)。当然了,你也可以在购买了第三方开发板以后使用半导体厂商提供的uboot,只不过有些外设驱动可能不支持,需要自己移植,这个就是我们常说的uboot移植。

U-Boot初次编译

首先在Ubuntu中安装ncurses库,否则编译会报错,安装命令如下:

sudo apt-get install libncurses5-dev

把Uboot镜像放在自己创建的文件里,然后使用如下命令对其进行解压缩:

tar-vxjfuboot-imx-2016.03-2.1.0-g8b546e4.tar.bz2

解压完成以后文件夹内容如图所示:

 图中除了uboot-imx-2016.03-2.1.0-g8b546e4.tar.bz2这个正点原子提供的uboot 源码压缩包以外,其他的文件和文件夹都是解压出来的uboot源码。

512MB(DDR3)+8GB(EMMC)核心板

如果使用的是512MB+8GB的EMMC 核心板,使用如下命令来编译对应的uboot:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-(加空格)
mx6ull_14x14_ddr512_emmc_defconfig

make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf--j2

这三条命令中ARCH=arm设置目标arm架构,CROSS_COMPILE 指定所使用的交叉编译器。第一条命令相当于“make distclean”,目的是清除工程,一般在第一次编译的时候最好清理一下工程。第二条指令相当于"make mx6ull_14x14_ddr512_emme_defconfig",用于配置uboot,配置文件为 mx6ull_14x14_ddr512_emme_defconfig。最后一条指令相当于 “make-j2”也就是使用2核来编译uboot.当这三条命令执行完以后uboot也就编译成功了,如图所示:

 可以看出,编译完成以后uboot 源码多了一些文件,其中u-boot.bin就是编译出来的uboot二进制文件。uboot是个裸机程序,因此需要在其前面加上头部(IVT、DCD等数据)才能在I.MX6U上执行,图中的u-boot.imx文件就是添加头部以后的u-boot.bin, u-boot.imx就是我们最终要烧写到开发板中的uboot镜像文件。

U-Boot烧写与启动

uboot编译好以后就可以烧写到板子上使用了

等待烧写完成,完成以后打开MobaXterm,设置好串口参数并打开,最后复位开发板。在MobaXterm上出现“Hit any key tostop autoboot:”倒计时的时候按下键盘上的回车键,默认是3秒倒计时,在3秒倒计时结束以后如果没有按下回车键的话uboot就会使用默认参数来启动Linux内核了。如果在3秒倒计时结束之前按下回车键,那么就会进入uboot的命令行模式,如图所示:

第1行是uboot版本号和编译时间,可以看出,当前的uboot版本号是2016.03,编译时间是 2023416日凌晨1925分。

第3和第4行是CPU信息,可以看出当前使用的CPU是飞思卡尔的I.MX6ULL (I.MX以前属于飞思卡尔,然而飞思卡尔被NXP收购了),频率为 792MHz,但是此时运行在396MHz.这颗芯片是工业级的,结温为-40°C-105°C

第5行是复位原因,当前的复位原因是POR. I.MX6ULL芯片上有个POR_B引脚,将这个引脚拉低即可复位I.MX6ULL.

第6行是板子名字,当前的板子名字为“I.MX6U ALPHAIMINI”.

第7行提示12C 准备就绪。

第8行提示当前板子的 DRAM(内存)为512MB

第9行提示当前有两个MMC/SD卡控制器: FSL_SDHC(0)和 FSL_SDHC(1). I.MX6ULL支持两个MMC/SD,正点原子的I.MX6ULL EMMC核心板上FSL-SDHC(0)接的SD(TF)卡,FSL_SDHC(1)接的EMMC.

第10和第11行是LCD型号,当前的LCD型号是ATK-LCD-7-1024x600 (1024x600),分辨率为 1024x600,格式为RGB888(24位)

第12-14是标准输入、标准输出和标准错误所使用的终端,这里都使用串口(serial)作为终端。

第15和16行是切换到emme的第0个分区上,因为当前的uboot是emmc版本的,也就是从emmc启动的。

第17行是网口信息,提示我们当前使用的 FEC1 这个网口,I.MX6ULL 支持两个网口。

第18行提示FEC1网卡地址没有设置,后面我们会讲解如何在uboot里面设置网卡地址。

第20行提示正常启动,也就是说uboot要从emme里面读取环境变量和参数信息启动Linux内核了。

第21行是倒计时提示,默认倒计时3秒,倒计时结束之前按下回车键就会进入Linux命令行模式。如果在倒计时结束以后没有按下回车键,那么Linux内核就会启动, Linux内核一旦启动,uboot 就会寿终正寝。

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

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

相关文章

【防止恶意用户注册】-- 手机在网状态 API 的防欺诈应用解析

简介 手机在网状态 API 支持传入手机号码,查询手机号在网状态,返回在网、在网不可用、不在网(销号/未启用/停机)等多种状态,查询手机号在网状态之后,可以根据具体的业务需求来进行不同的处理。 本文主要介…

EA的使用---文档的生成

EA中文档的自动生成 1.找到如下界面 2.选择第一个 3.设置存储的位置 4.点击Generate 5.查看生成的文档

ViT Vision Transformer进行猫狗分类

文章目录依赖准备数据集合残差结构PatchEmbed模块Attention模块MLPBlockVisionTransformer结构模型定义定义一个模型训练VISION TRANSFORMER简称ViT,是2020年提出的一种先进的视觉注意力模型,利用transformer及自注意力机制,通过一个标准图像…

【C++STL精讲】string的模拟实现

文章目录💐专栏导读💐文章导读🌷定义string类🌷构造函数🌷拷贝构造函数🌷赋值重载🌷析构函数🌷[]操作符重载🌷比较运算符重载🌷c_str、size、capacity&#x…

模板学堂|DataEase图表样式解析

DataEase开源数据可视化分析平台于2022年6月正式发布模板市场(https://dataease.io/templates/)。模板市场旨在为DataEase用户提供专业、美观、拿来即用的仪表板模板,方便用户根据自身的业务需求和使用场景选择对应的仪表板模板,并…

「VS」Visual Studio 常用小技巧

目录指定代码不编译设置选中项目为启动项代码区显示行号新建垂直文档组生成后将dll复制到指定目录指定代码不编译 说明:在项目开发时,有时候已经将代码加入到项目中,但有不想要编译时可以一下操作。 文件处右键→属性→常规→从生成中排除→选…

快速解决CentOS中yum下载慢的问题(更换成阿里云)

目录1、备份自带的YUM源2、下载新的yum源3、清除旧的 yum 缓存4、更新yum缓存4、查看更换的阿里云镜像的仓库是否生效。为了下载速度快,每次都要做好镜像的更改,既然次数多,懒得每次还来查资料,就自己写一篇博客加强自己的记忆。 …

Docker环境安装

Docker环境安装Docker简介Docker工作原理Docker的应用场景Docker 的优点CentOS Docker 安装与配置Docker 安装Docker 配置Docker容器概念Docker容器操作拉取镜像删除镜像容器相关命令创建并启动容器停止和恢复容器删除容器Docker简介 Docker 是一个开源的应用容器引擎&#xf…

4年外包上岸,我只能说这类公司能不去就不去

我大学学的是计算机专业,毕业的时候,对于找工作比较迷茫,也不知道当时怎么想的,一头就扎进了一家外包公司,一干就是4年。现在终于跳槽到了互联网公司了,我想说的是,但凡有点机会,千万…

ChatGPT背后的AI背景、技术门道和商业应用(万字长文,建议收藏)

作者:京东科技 李俊兵 各位看官好,我是球神(江湖代号)。 自去年11月30日ChatGPT问世以来,迅速爆火出圈。 起初我依然以为这是和当年Transformer, Bert一样的“热点”模型,但是当一篇篇文章/报告不断推送…

计算机网络面试八股文攻略(二)—— TCP 与 UDP

一、基础概念 TCP 与 UDP 是活跃于 运输层 的数据传输协议 TCP:传输控制协议 (Transmission Control Protocol)–提供面向连接的,可靠的数据传输服务。具体来说就是一种要建立双端连接才能发送数据,能确保传输可靠的…

Hive DDL和DML

目录 一 DDL 1.1 数据库 1.1.1 创建数据库 1.1.2 查询数据库 1.1.3 修改数据库 1.1.4 删除数据库 1.1.5 切换当前数据库 1.2 表 1.2.1 创建表 1.2.2 查看表 1.2.3 修改表 3.2.4 删除表 3.2.5 清空表 二 DML 2.1 Load 2.2 Insert 2.2.1 将查询结果插入表中 2…

C++程序设计函数部分(定义+实例)

目录 1、内联函数 2、默认形参值函数 3、重载函数 4、系统函数 1、内联函数 (1)定义 在函数前面加上 inline 申明 eg: inline double CalArea(double radius) { return 3.14*radius*radius; } void main() { double r(3.0); dou…

后缀数组的应用:[Leetcode] 321.拼接最大数(困难)

题目描述 给定长度分别为 m 和 n 的两个数组&#xff0c;其元素由 0-9 构成&#xff0c;表示两个自然数各位上的数字。现在从这两个数组中选出 k (k < m n) 个数字拼接成一个新的数&#xff0c;要求从同一个数组中取出的数字保持其在原数组中的相对顺序。 求满足该条件的…

ChatGPT 究竟在做什么?它为何能做到这些?(1)

ChatGPT能够自动生成一些表面上看起来像人类写出的文字的东西&#xff0c;是一件很厉害且出乎大家意料的事。那么&#xff0c;它是如何做到的呢&#xff1f;又是为何能做到呢&#xff1f;我在这里想大致介绍一下ChatGPT的内部机理&#xff0c;然后探讨一下为什么它能很好地生成…

ZNS 架构实现 : 解决传统SSD问题的高性能存储栈设计

声明 主页&#xff1a;元存储的博客_CSDN博客 依公开知识及经验整理&#xff0c;如有误请留言。 个人辛苦整理&#xff0c;付费内容&#xff0c;禁止转载。 内容摘要 2.2 ZNS 的架构实现 先看看 支持zone 存储的 SMR HDD 以及 支持 zonefs 的 nvme ssd 的整个存储栈形态 其中对…

前端项目-12-个人中心-二级路由配置-导航守卫-懒加载

目录 1-个人中心 1.1-个人中心路由注册 1.2-拆分二级路由组件 1.3-动态渲染我的订单页面 2-导航守卫优化 2.1-用户未登录导航守卫优化 2.2-路由独享 2.3-组件内守卫 3-懒加载 3.1-图片懒加载 3.2-路由懒加载 4-map文件处理 1-个人中心 需求&#xff1a;当用户点击支…

计算机图形学 | 实验五:模型导入

计算机图形学 | 实验五&#xff1a;模型导入计算机图形学 | 实验五&#xff1a;模型导入模型加载库AssimpAssimp简介Assimp构建Mesh && Model 类的创建MeshModel绘制模型华中科技大学《计算机图形学》课程 MOOC地址&#xff1a;计算机图形学&#xff08;HUST&#xff…

进阶C语言

1.数据的存储 1.1 为什么数据在内存中存放的是补码 因为CPU只有加法器,而使用补码&#xff0c;就可以将符号位和数值域统一处理(即统一处理加法和减法)且不会需要额外的硬件电路。 1.2 为什么会有大小端 这是因为在计算机系统中,是以字节为单位的,比如: 每个地址单元都对应着…

双指针算法初阶

前言&#xff1a;首先&#xff0c;这是不是你所了解的双指针算法&#xff1f; for (int i 0; i < n; i) {for (int j 0; j < n; j){...} } 那你就要继续往下看了&#xff0c;双指针算法可不是简单的两层的for循环暴力&#xff0c;这并不能起到时间优化的作用。 那话…