天天看点

uboot什么意思(uboot fastboot)

1.什么是uboot?

U-Boot、全名通用引导加载器是遵循GPL条款的开源项目。 U-Boot的作用是引导系统。

U-Boot是从FADSROM、8xxROM、PPCBOOT逐渐演化而来的。 其源目录、编译格式与Linux内核非常相似。

事实上,许多U-Boot源代码都基于相应的Linux内核源程序进行了简化。

特别是某些设备的驱动程序可以通过U-Boot源代码的注释来指示。

2.为什么要有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的版本号问题

FTP ://FTP.denx.de/pub/u-boot /      

1 )早期uboot的版本号类似于uboot-1.3.4。 此后,版本号类似于uboot-2010.06。

2 ) uboot的核心部分几乎没有变化,只是支持越新版本越多的开发板,对于较旧版本的芯片来说,旧版本的uboot和较旧版本的uboot没有区别。

1 ) uboot是通用启动代码,通用是指可以在很多地方使用。 所以uboot是有移植性的。

2 ) uboot可移植性并不是说uboot可以在任何开发板上自由使用,而是说uboot具有源代码级的移植能力,可以移植到多个开发板上,移植后可以在这块开发板上使用。

uboot的出现是必然的,如果没有uboot,也有其他的bootloader。

总结:uboot到底是干嘛的,对应下面uboot必须要解决哪些问题!

1)uboot主要作用是用来启动操作系统内核。体现在uboot最后一句代码就是启动内核。

2)uboot还要负责部署整个计算机系统。体现在uboot最后的传参。

3)uboot中还有操作Flash等板子上硬件的驱动。例如串口要打印,ping网络成功,擦除、烧写flash是否成功等。

4)uboot还得提供一个命令行界面供人来操作。很简单,至少你能看到。

计算机系统的组成部件非常多,不同的计算机系统组成部件也不同。 然而,运行所有计算机系统所需的主要核心部件是CPU外部存储器(闪存/硬盘)内部存储器(DDR SDRAM/SDRAM/SRAM )这三个。 典型的PC启动过程是在打开PC电源后运行BIOS程序。 实际上,PC的BIOS是NorFlash。 BIOS程序负责DDR内存初始化、硬盘初始化,从硬盘将操作系统镜像读入DDR,跳转至DDR运行操作系统,直到启动。

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

3 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.S5PV210的uboot与架构

5 uboot的工作方式

5.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去运行。

5.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)环境变量就是运行时的配置属性。

4.4思考:结合ARM裸机部分进行理解和印证

1)及时复习ARM裸机中和现在讲到的相关的知识点,在复习中巩固ARM裸机中学到的。这过程中如果原来学习记了笔记非常容易容易好,如果没有记笔记那就难办了。

继续阅读