认识Uboot(一)

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

2. uboot 的发展历程
自己使用的小开源项目->被更多人认可使用->被 SoC 厂商默认支持。
总结: uboot 经过多年发展,已经成为事实上的业内 bootloader 标准。现在大部分的嵌入式设备都会默认使用 uboot 来做为 bootloader

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

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

5.总结:uboot的出现是一种必然,如果没有uboot也会有另一个bootloader来代替。

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

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

3.典型嵌入式linux系统启动过程
(1)嵌入式系统的部署和启动都是参考PC机的。只是设备上有一些差别
(2)典型嵌入式系统的部署:uboot程序部署在Flash(能作为启动设备的Flash)上、OS部署在Flash(嵌入式系统中用Flash代替了硬盘)上、内存在掉电时无作用,CPU在掉电时不工作。
(3)启动过程:嵌入式系统上电后先执行uboot、然后uboot负责初始化DDR,初始化Flash,然后将OSFlash中读取到DDR中,然后启动OSOS启动后uboot就无用了)

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

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

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

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

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

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

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

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 命令,而启动内核命令一旦执行就回不来了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值