从PC机、嵌入式linux、以及android系统的启动过程来总结uboot到底是干嘛的

本文转载自《朱有鹏老师嵌入式linux核心课程》的《第二部分uboot和系统移植》

1.PC机的启动过程

(1)典型的PC机的部署(部署指的是没有上电时候的样子)

  • BIOS程序(按F12可以进入,用来设置启动顺序等等的代码)部署在PC机主板上(随主板出厂时已经预制了),(如果bios损坏 则只能将主板拆下来返厂维修了。换句话说如果你买了一个新的电脑 ,这个新的电脑可能没有操作系统,但是一定会带BIOS,如果没有BIOS则根本无法装系统。 我们能够装系统,就是通过BIOS)。
  • 操作系统部署在硬盘上,这个操作系统是自己装的。
  • 内存在掉电时无作用。
  • CPU在掉电时不工作。

(2)启动过程:

PC上电后先执行BIOS程序(实际上PC的BIOS就是NorFlash),(PC能够保证PC上电后,BIOS的程序能够送到CPU中去执行,也就是说程序不用先拷贝到内存中,这种执行就叫做代码的原地执行,换句话说就是代码直接在flash中被CPU读取并送到CPU中,norflash这种flash支持原地执行代码。)BIOS程序负责初始化DDR内存,负责初始化硬盘, 然后从硬盘上将OS镜像读取到DDR中,然后跳转到DDR中去执行OS直到启动(OS启动后BIOS就无用了)。(这里面有一个问题,BIOS是怎么知道用户使用的是什么牌子的DDR和硬盘的呢? 可能不同硬盘以及DDR的初始化程序不一样啊?解决方法:因为市场上的DDR和硬盘的启动步骤大都标准化了,另外在BIOS程序中可以将市面上所有硬盘和DDR的启动步骤都兼容。)

2.典型嵌入式linux系统启动过程

(1)嵌入式系统的部署和启动都是参考PC机的。只是设备上有一些差别

(2)典型嵌入式系统的部署:

  • uboot程序部署在Flash上(这里的flash指的是能作为启动设备的Flash,不同的SOC支持的启动设备Flash不同,以S5PV210为例,请看S5PV210_iROM_ApplicationNote_Preliminary_20091126.pdf,里面的第9页就说明了支持哪些类型的flash启动)。
  • OS部署在FLash(嵌入式系统中用Flash代替了硬盘)上,需要说明的是uboot和OS可以部署在同一个flash中,也可以不在同一个flash中,现在为了节省成本,逐渐倾向于将uboot和OS放到同一个flash中。
  • 内存在掉电时无作用。
  • CPU在掉电时不工作。

(3)启动过程:

嵌入式系统上电后先加载执行uboot、然后uboot负责初始化DDR,初始化Flash, 然后将OS从Flash中读取到DDR中,然后启动OS(OS启动后uboot就无用了)。

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


3.android系统启动过程

(1)android系统的启动和linux系统(前面讲的典型的嵌入式系统启动)几乎一样。

    几乎一样意思就是前面完全一样,只是在内核启动后加载根文件系统后不同了。

(2)可以认为启动分为2个阶段:

   第一个阶段是uboot到OS启动;

   第二个阶段是OS启动后到rootfs加载到命令行执行;        

 android的启动和linux的差别在第二阶段。


总结:uboot到底是干嘛的
(1)uboot主要作用是用来启动操作系统内核。(操作系统内核无法自己启动自己,需要有人帮忙,这个人就是uboot)。
(2)uboot还要负责部署整个计算机系统。(通俗的讲就是把uboot、OS和根文件系统放到flash中的什么 位置)。
(3)uboot中还有操作Flash等板子上硬盘的驱动 (如果没有这些驱动是没法将OS和根文件系统部署到flash中的)。

(4)uboot还得提供一个命令行界面供人来操作。(其实uboot中没有这个部分也是可以启动内核,但是有了这个部分就能够更好的部署内核,可以更好的设置启动内核的参数)。



uboot必须解决哪些问题

(1)自身可开机直接启动:

  • 由于不同硬件的设计不同,因此必须进行硬件相对应的代码级别的更改和移植。才能够保证可以从相应的启动介质启动(不同SOC支持的启动介质是不一样的,这个需要看手册查询)。uboot中第一阶段的start.S文件中具体处理了这一块。

(2)能够引导操作系统内核启动并给内核传参

  • uboot的终极目标就是启动内核。
  • linux内核在设计的时候,设计为可以被传参。也就是说我们可以在uboot中事先给linux内核准备一些启动参数放在内存中特定位置然后传给内核,内核启动后会到这个特定位置去取uboot传给他的参数,然后在内核中解析这些参数,这些参数将被用来指导linux内核的启动过程(这样linux的启动就是活的了,否则无法设置,linux启动就是死的,如果要想再次设置就要重新编译,增加复杂性)。

(3)能提供系统部署功能

  • uboot必须能够被人借助而完成整个系统(包括uboot、kernel、rootfs等的镜像)在Flash上的烧录下载工作。

(4)能进行soc级和板级硬件管理

uboot中实现了一部分硬件的控制能力(uboot中初始化了一部分硬件),因为uboot为了完成一些任务必须让这些硬件工作。

  • 譬如uboot要实现刷机必须能驱动iNand。
  • 譬如uboot要在刷机时LCD上显示进度条就必须能驱动LCD。
  • 譬如uboot能够通过串口提供操作界面就必须驱动串口。
  • 譬如uboot要实现网络功能就必须驱动网卡芯片。

(5)uboot的“生命周期”

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

总结:一切都是为了启动内核










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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值