一、为什么要有uboot
1、计算机系统的主要部件
(1)计算机系统是由CPU来做核心进行运行的系统。典型的计算机系统有:PC机(台式机+笔记本)、嵌入式设备(手机、平板电脑、游戏机)、单片机(家用电器像电饭锅、空调)
(2)计算机系统的组成部件非常多,不同的计算机系统组成部件也不同。(虽然不一样,但是共性相同)所有计算机系统运行时需要
的主要核心部件都是3个东西:CPU + 内部存储器(DDR SDRAM/SRAM)+ 外部存储器(flash/硬盘)
2、CP机的启动过程
(1)、部署:怎么安排;怎么配制;怎么存放;(客人到家晚上安排住宿)计算机系统的部署:内存外存功能怎么来安排(代码)
部署和启动有关系,启动是根据部署来启动的,部署在那里将来就在那里启动。
(2)典型的的PC机的部署:BIOS程序部署在PC机主板上(随主板出厂时已经预制了),操作系统部署在硬盘上,内存在掉电时不工作,
CPU在掉电时不工作;(静态的)
(3)启动过程:PC上电后先执行BIOS程序(实际上PC的BIOS就是NorFlash),BIOS程序负责初始化DDR内存,负责初始化硬盘,然后从硬盘上将OS镜像读取到DDR中,然后跳转到DDR中去执行直到启动(OS启动后BIOS就无用了)
3、典型嵌入式linux系统启动过程
(1)嵌入式系统的部署和启动都是参考PC机的。只是设备上有一些差别
(2)典型嵌入式系统的部署:uboot程序部署在flash(能作为启动设备的flash)上、OS部署在flash(嵌入式系统中没有硬盘)上、内存在掉电时不工作,CPU在掉电时不工作(静态的)。
(3)启动过程:嵌入式系统上电后先执行uboot、然后uboot负责初始化DDR,初始化flash,然后将OS从flash中读取到DDR中,然后跳转到DDR中去执行直到启动(OS启动后uboot就无用了)。
总结:嵌入式系统和PC机的启动过程几乎一样,只是BIOS成了uboot,硬盘成了flash。
疑问:按朱老师所讲uboot如果部署在flash上,是无法就地运行的。
猜测1:flash应该是Norflash或者具有相同特性的存储器。
猜测2:在运行flash上的uboot前硬件多加了一块具有Norflash物理特性的存储器件来保证开启第一段程序的运行。
4、android系统启动过程
(1)android系统的启动和linux(前面讲的典型的嵌入式系统启动)几乎一样。前面完全一样,只是在内核启动后加载根文件系统后不同了。
(2)可以认为启动分为2个阶段:第一个阶段是从uboot到OS启动;第二个阶段是OS启动后到rootfs加载到命令行执行;现在我们主要研究
第一个阶段,android的启动和linux的差别在第二个阶段。
5、总结:uboot到底用来干嘛的
(1)、uboot主要作用是用来启动操作系统内核。
(2)uboot还要负责部署整个计算机系统。(如:uboot启动以后从flash里读取内核到DDR中,那是谁把内核的镜像放到flash中的
裸机刷机时用到fastboot刷机,刷机就是把uboot,内核,文件系统放到flash上。是fastboot负责放上去的,fastboot就是uboot中的一块
内容)。
(3)uboot中还有操作flash等板子上硬件的驱动。
(4)uboot还得提供一个命令行界面供人来操作。