一、为什么要有uboot


1.1、计算机系统的主要部件

(1)计算机系统就是以CPU为核心来运行的系统。典型的计算机系统有:PC机(台式机+笔记本)、嵌入式设备(手机、平板电脑、游戏机)、单片机(家用电器像电饭锅、空调)
       (2)计算机系统的组成部件非常多,不同的计算机系统组成部件也不同。但是所有的计算机系统运行时需要的主要核心部件都是3个东西:
CPU + 外部存储器(Flash/硬盘) + 内部存储器(DDR SDRAM/SDRAM/SRAM)

1.2、PC机的启动过程

(1)部署:典型的PC机的BIOS程序部署在PC机主板上(随主板出厂时已经预制了),操作系统部署在硬盘上,内存在掉电时无作用,CPU在掉电时不工作。
       (2)启动过程:PC上电后先执行BIOS程序(实际上PC的BIOS就是NorFlash),BIOS程序负责初始化DDR内存,负责初始化硬盘,然后从硬盘上将OS镜像读取到DDR中,然后跳转到DDR中去执行OS直到启动(OS启动后BIOS就无用了)

1.3、典型嵌入式linux系统启动过程
       (1)典型嵌入式系统的部署:uboot程序部署在Flash(能作为启动设备的Flash)上、OS部署在FLash(嵌入式系统中用Flash代替了硬盘)上、内存在掉电时无作用,CPU在掉电时不工作。
       (2)启动过程:嵌入式系统上电后先执行uboot、然后uboot负责初始化DDR,初始化Flash,然后将OS从Flash中读取到DDR中,然后启动OS(OS启动后uboot就无用了)

总结:嵌入式系统和PC机的启动过程几乎没有两样,只是BIOS成了uboot,硬盘成了Flash。

1.4、android系统启动过程
       (1)Android系统的启动和Linux系统(前面讲的典型的嵌入式系统启动)几乎一样。几乎一样意思就是前面完全一样,只是在内核启动后加载根文件系统后不同了。
       (2)可以认为启动分为2个阶段:第一个阶段是uboot到OS启动;第二个阶段是OS启动后到rootfs加载到命令行执行;现在我们主要研究第一个阶段,android的启动和linux的差别在第二阶段。

1.5、总结:uboot到底是干嘛的        (1)uboot主要作用是用来启动操作系统内核。
       (2)uboot还要负责部署整个计算机系统。
       (3)uboot中还有操作Flash等板子上硬盘的驱动。
       (4)uboot还得提供一个命令行界面供人来操作。

二、为什么是uboot

2.1、uboot从哪里来的?

(1)uboot是SourceForge上的开源项目
       (2)uboot项目的作者:一个德国人最早发起的项目
       (3)uboot就是由一个人发起,然后由整个网络上所有感兴趣的人共同维护发展而来的一个bootloader。

2.2、uboot的发展历程

(1)自己使用的小开源项目。
       (2)被更多人认可使用
       (3)被SoC厂商默认支持。

总结:uboot经过多年发展,已经成为事实上的业内bootloader标准。现在大部分的嵌入式设备都会默认使用uboot来做为bootloader。

2.3、uboot的版本号问题

(1)早期的uboot的版本号类似于这样:uboot1.3.4。后来版本号便成了类似于uboot-2010.06。
       (2)uboot的核心部分几乎没怎么变化,越新的版本支持的开发板越多而已,对于一个老版本的芯片来说,新旧版本的uboot并没有差异。

2.4、uboot的可移植性的正确理解

(1)uboot就是universal bootloader(通用的启动代码),通用的意思就是在各种地方都可以用。所以说uboot具有可移植性。
       (2)uboot具有可移植性并不是说uboot在哪个开发板都可以随便用,而是说uboot具有在源代码级别的移植能力,可以针对多个开发板进行移植,移植后就可以在这个开发板上使用了。

三、uboot必须解决哪些问题

3.1、自身可开机直接启动

(1)一般的SoC都支持多种启动方式,譬如SD卡启动、NorFlash启动、NandFlash启动等·····uboot要能够开机启动,必须根据具体的SoC的启动设计来设计uboot。
       (2)uboot必须进行和硬件相对应的代码级别的更改和移植,才能够保证可以从相应的启动介质启动。uboot中第一阶段的start.S文件中具体处理了这一块。

3.2、能够引导操作系统内核启动并给内核传参

(1)uboot的终极目标就是启动内核。
       (2)linux内核在设计的时候,设计为可以被传参。也就是说我们可以在uboot中事先给linux内核准备一些启动参数放在内存中特定位置然后传给内核,内核启动后会到这个特定位置去取uboot传给他的参数,然后在内核中解析这些参数,这些参数将被用来指导linux内核的启动过程。

3.3、能提供系统部署功能

(1)uboot必须能够被人借助而完成整个系统(包括uboot、kernel、rootfs等的镜像)在Flash上的烧录下载工作。
       (2)裸机教程中刷机(ARM裸机第三部分)就是利用uboot中的fastboot功能将各种镜像烧录到iNand中,然后从iNand启动。

3.4能进行soc级和板级硬件管理

(1)uboot中实现了一部分硬件的控制能力(uboot中初始化了一部分硬件),因为uboot为了完成一些任务必须让这些硬件工作。譬如uboot要实现刷机必须能驱动iNand,譬如uboot要在刷机时LCD上显示进度条就必须能驱动LCD,譬如uboot能够通过串口提供操作界面就必须驱动串口。譬如uboot要实现网络功能就必须驱动网卡芯片。
       (2)SoC级(譬如串口)就是SoC内部外设,板级就是SoC外面开发板上面的硬件(譬如网卡、iNand)

3.5、uboot的“生命周期”

(1)uboot的生命周期就是指:uboot什么时候开始运行,什么时候结束运行。
       (2)uboot本质上是一个裸机程序(不是操作系统),一旦uboot开始SoC就会单纯运行uboot(意思就是uboot运行的时候别的程序是不可能同时运行的),一旦uboot结束运行则无法再回到uboot(所以uboot启动了内核后uboot自己本身就死了,要想再次看到uboot界面只能重启系统。重启并不是复活了刚才的uboot,重启只是uboot的另一生)
       (3)uboot的入口和出口。uboot的入口就是开机自动启动,uboot的唯一出口就是启动内核。uboot还可以执行很多别的任务(譬如烧录系统),但是其他任务执行完后都可以回到uboot的命令行继续执行uboot命令,而启动内核命令一旦执行就回不来了。
总结:一切都是为了启动内核

四、uboot的工作方式

4.1、从裸机程序镜像uboot.bin说起

(1)uboot的本质就是一个裸机程序,和我们裸机全集中写的那些裸机程序xx.bin并没有本质区别。如果非说要有区别,那就是:我们写的大部分小于16KB,而uboot大于16KB(一般uboot在180k-400k之间)
       (2)uboot本身是一个开源项目,由若干个.c文件和.h文件组成,配置编译之后会生成一个uboot.bin,这就是uboot这个裸机程序的镜像文件。然后这个镜像文件被合理的烧录到启动介质中拿给SoC去启动。也就是说uboot在没有运行时表现为uboot.bin,一般躺在启动介质中。
       (3)uboot运行时会被加载到内存中然后一条指令一条指令的拿给CPU去运行。

4.2、uboot的命令式shell界面

(1)普通的裸机程序运行起来就直接执行了,执行时效果和代码有关。
       (2)有些程序需要和人进行交互,于是乎程序中就实现了一个shell(shell就是提供人机交互的一个界面,回想ARM裸机全集第十六部分),uboot就实现了一个shell。
注意:shell并不是操作系统,和操作系统一点关系都没有。linux中打开一个终端后就得到了一个shell,可以输入命令回车执行。uboot中的shell工作方式和linux中的终端shell非常像(其实几乎是一样的,只是命令集不一样。譬如linux中可以ls,uboot中ls就不识别)

4.3、掌握uboot使用的2个关键点:命令和环境变量

(1)uboot启动后大部分时间和工作都是在shell下完成的(譬如uboot要部署系统要在shell下输命令、要设置环境变量也得在命令行地下,要启动内核也要在命令行底下敲命令)
       (2)命令就是uboot的shell中可以识别的各种命令。uboot中有几十个命令,其中有一些常用另一些不常用(我们还可以自己给uboot添加命令),后面会用几节课时间来依次学习uboot中常用命令。
       (3)uboot的环境变量和操作系统的环境变量工作原理和方式几乎完全相同。uboot在设计时借助了操作系统的设计理念(命令行工作方式借鉴了linux终端命令行,环境变量借鉴了操作系统的环境变量,uboot的驱动管理几乎完全照抄了linux的驱动框架)。
       (4)环境变量可以被认为是系统的全局变量,环境变量名都是系统内置的(认识就认识,不认识就不认识,这部分是系统自带的默认的环境变量,譬如PATH;但是也有一部分环境变量是自己添加的,自己添加的系统就不认识但是我们自己认识)。系统或者我们自己的程序在运行时可以通过读取环境变量来指导程序的运行。这样设计的好处就是灵活,譬如我们要让一个程序更改运行方法,不用去重新修改程序代码再重新编译运行,而只要修改相应的环境变量就可以了。
(5)环境变量就是运行时的配置属性。

什么是uboot?uboot有什么用?相关推荐

  1. RK3399 系列 U-BOOT (U-Boot 2014.10)

    Rockchip U-Boot 基于U-Boot 2014.10官方版本开发 Board:Nanopi M4 2G 编译配置 [Toolchain] sudo tar -jxvf arm-6.4.ta ...

  2. [uboot] uboot启动kernel篇(二)——bootm跳转到kernel的流程

    转自 https://blog.csdn.net/ooonebook/article/details/53495021 一.bootm说明 bootm这个命令用于启动一个操作系统映像.它会从映像文件的 ...

  3. Linux boot启动串口出现乱码,使用 am335x-evm-sdk-src-02.00.01.07 的源码,UBOOT阶段使用LCD控制器后,内核启动串口控制台输出乱码。...

    具体是这样的 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- omap2plus_defconfig make ARCH=arm CROSS_COMP ...

  4. 【嵌入式开发】 Bootloader 详解 ( 代码环境 | ARM 启动流程 | uboot 工作流程 | 架构设计)

    作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42462795 转载请著名出处 相关资源下载 :  -- u-boo ...

  5. u-boot分析之编译体验(零)

    目录 u-boot分析之编译体验 1. 嵌入式系统与pc系统的启动对比概述 2.如何应用补丁文件生成uboot.bin文件,步骤: 3. uboot里要实现的功能 3.1 uboot最终目的是启动内核 ...

  6. u-boot分析之启动简介(一)

    目录 u-boot启动简介(一) 启动概述 内部存储布局 Bootloader概述 内核启动参数 taggedlist 体验一下实际的Uboot U-boot的使用帮助 U-boot基本要求 u-bo ...

  7. u-boot分析之makefile分析(二)

    目录 u-boot(二)makefile 引入 目录结构(1.1.6) 配置文件 目标 配置具体的单板 编译阶段 过程 链接入口 配置链接地址 附录 附录A:mkconfig解析 附录B 链接脚本 u ...

  8. uboot流程——命令行模式以及命令处理介绍

    [uboot] (第六章)uboot流程--命令行模式以及命令处理介绍 2016年11月14日 20:39:26 阅读数:4323 以下例子都以project X项目tiny210(s5pv210平台 ...

  9. uboot流程——uboot启动流程

    [uboot] (第五章)uboot流程--uboot启动流程 2016年11月07日 20:12:07 阅读数:2230 以下例子都以project X项目tiny210(s5pv210平台,arm ...

  10. u-boot编译过程分析

    文章目录 U-boot Makefile国建过程 主机构建环境配置过程 定义主机系统架构 定义主机操作系统类型 定义SHELL脚本的解释器 设定编译输出目录 目标机相关配置过程 mkconfig脚本 ...

最新文章

  1. 把myeclipse中的web项目导入eclipse中不能编程web项目的解决办法
  2. Amazing Slide(图片轮播制作工具)中文版
  3. Ehcache 缓存
  4. Python 列表前加 *号
  5. 亚马逊专家课 | 数据体系+用户画像+商品画像系列课(立省 299 元)
  6. win7装mysql一直未响应6_win7重装mysql最后一步无响应解决方法
  7. jQuery+CSS动态改变class
  8. javascript判断非空
  9. jquery grid 显示隐藏列
  10. 前端加密js库--CryptoJs
  11. 打印学生选课清单(25分) c++实现
  12. 运维必须掌握的27道Linux面试题
  13. 网络抖动多少ms算正常_网络延迟多少ms算正常 - 卡饭网
  14. 电镜的成像原理-透射电镜成像原理2
  15. 流媒体传输协议(rtp/rtcp/rtsp/rtmp/mms/hls)
  16. 祖思机——第一台二进制可编程计算机
  17. 互动游戏对战平台推荐:盘点很火的互动小游戏多人对战平台
  18. 天津天地伟业程序员怎么样_香港警务处总警司丘绍箕莅临天地伟业考察调研,点赞智慧警务全系列解决方案...
  19. 罗昭锋 文献管理与信息分析一
  20. 阿里:饿了么质量体系搭建实战(含福利)

热门文章

  1. LeetCode_Stack_331. Verify Preorder Serialization of a Binary Tree 验证二叉树的前序序列化(Java)【栈,字符串处理】
  2. 杨昕立计算机学院,写在告别之前——那些来自辅导员们的悄悄话
  3. Linux环境开机自启动
  4. ***学习笔记教程七:密码恢复
  5. 重定向与重定位的理解
  6. 关于信息熵 ,KL散度,交叉熵,一文读懂(bushi)。
  7. 我真希望有人在我学计算机之前,就告诉了我这100多个程序员学习网站!【全编程人员都可以看】
  8. Shaders for Game
  9. mysql 密码忘记办法
  10. 【经验总结】“投”——如何寻找适合投递的期刊或者会议