Boot流程

来源:互联网 发布:鼻子丑怎么办 知乎 编辑:程序博客网 时间:2024/04/29 06:16
大部分处理器的BOOT过程都要经历多个阶段,所谓的“chained loading method”,每一步新的bootloader都完成一些CPU初始化工作,加载下一步要运行的程序,然后将CPU的控制权完全转交。 
    对于Beaglebone平台来说,其应用的是AM335x系列的CPU,系统boot过程分为四大步: 
    1)处理器PoR(power-on reset)后就会跳到复位向量所指的程序段去运行,这段程序位于处理器的ROM中,由处理器生产厂商提供,我们称其为ROM Boot Loader(RBL)。RBL在初始化固定存储设备(NAND Flash,MMC,Etc.)后,根据CPU的跳线选择,从持久性存储设备中将第二部要用到的bootloader读入内存(至于是内部还是外部,要根据ROM中的程序来定,Beaglebone是内部ram),而后将控制权转交。 
     2)这一步的bootloader我们称为Secondary Program Loader(SPL),当然这是TI的叫法,你也可以称其为xloader,UBL。SPL完成有限的初始化工作,最重要的就是初始化DDR RAM(或是其他大一点的外部RAM),因为下一步的U-Boot将要进驻其中。在这之后,SPL从持久性存储设备中将U-Boot(其他bootloader也行,我们这里以U-Boot为例)读入DDR RAM中,随后转交CPU控制权。 
    3)终于到了万众瞩目的U-Boot阶段,使能大部分的处理器功能,将操作系统内核读入DDR RAM中,而后配置启动参数启动Linux内核。当然U-Boot的功能可不止这些,U-Boot中提供了很多应用程序,可以应用tftp下载文件,或是格式化存储设备等等。 
    4)Linux内核启动……内核初始化,MMU使能,外部设备初始化,PID(1)Init进程启动…… 
WHY 4 STEPS? 
    好了,那可能有人会问,搞得那么麻烦干嘛?一步Boot起来不行吗?>_< 其实任何一门技术都是让我们的生活变的简单,Bootloader也是,所以其不可能是麻烦……首先,第一步的RBL不可能太复杂,ROM大小是一个限制,最重要的还是因为其所能获取的系统信息太少,所以处理器只能应用简单的方法去寻找能完成复杂功能的代码,而后将处理器初始化工作交给它来完成。其次,SPL也不能很复杂,因为其位于处理器的内部RAM中,一般处理器的内部RAM都要小于128KB,其大小注定其不能完成很复杂的功能,是故,再寻找能力更强大一些的代码,将处理器初始化工作交给它来完成。到了在DDR RAM中执行的Bootloader(U-Boot算一个),其功能就比较完善了,此时就可以启动操作系统了。