【原创】略谈BootLoader

      昨天在公司没什么事干,难得的清闲便趁机增值一下自己。看了WindowsCE的两个视频教程,关于bootloader方面的,记录一下。

刚开始对bootloader的用途概念不大清楚,只知道它叫系统引导程序,OS的启动是由它负责的,但是究竟是怎样启动的?它还有什么的功能?是怎么实现?这些都不清楚。现在终于算是有点了解了。

典型的bootloader设计,将代码分成两个阶段,这主要是为了在代码的可移植性和效率上做一个折中。因为bootloader是高度硬件相关的,不同体系结构的cpu初始化等操作截然不同。代码的第一阶段主要任务的是初始化硬件设备,为bootloader第二阶段准备好RAM空间并初始化堆栈。这部分内容一般由汇编实现。第二阶段的主要工作是设置系统时钟,设置Translation Table并初始化MMU,设置内核启动参数并将内核映像由Nand Flash拷贝到相应的SDRAM中,最后跳转到内核的入口点。 

pc机上,os的进入是依赖于引导加载程序,引导加载程序是由BIOS和位于磁盘中的MBR上的BootLoader组成。系统上电以后,BIOS主要是负责硬件的初始化和系统资源的分配,然后BIOS会把MBR上的bootloader读入RAM中,然后bootloader主要是负责再把OS的内核读入到RAM中,至此系统可以正常启动。

在嵌入式系统中,OS是怎么跑起来的呢?

    做嵌入式式系统的一般都需要片外存储器,有数据存储器和代码存储器,现在在市场比较流行的两种存储器是Nor FlashNand Flash

NOR的特点是芯片内执行(XIP, eXecute In Place),这样应用程序可以直接在flash闪存内运行,不必再把代码读到系统RAM中。NOR的传输效率很高,14MB的小容量时具有很高的成本效益,但是很低的写入和擦除速度大大影响了它的性能。由于成本比较高和效率相对于Nand Flash来说比较低,所以现在用得比较多的是Nand Flash。一般使用Nor的话,可以把整个OS放在里面,因为代码放在Nor flash中会自动运行,Nor flash会从它的地址0开始执行程序。

Nand Flash由于其最小的执行单元不是字节,而是以页为单位,所以它不能自动运行程序。但是它又是如何启动OS的呢?其实有些Nand Flash设计会分配一小段的空间放置bootloader,而这个bootloader的过程又分成两个阶段:

一、硬件的初始化、为第二阶段分配RAM空间等等,这个阶段中的所有工作都是为第二阶段作准备的。由于在这个阶段中分配的空间比较小,一般都是使用汇编编写这部分代码。

二、这个部分就是OS的引导启动了,在这阶段会将bootloader读入到SRAM中,然后bootloader就获得了所有权,由它再把flashos镜像读入RAM中,开始执行os内核,进而启动系统。

Bootloader有两种工作模式,一是下载模式,二是正常的工作模式。工作模式上面已经说过,主要说说下载模式,这种工作模式主要是系统镜像文件的更新时所处于的一种模式。当用户按了某个键或者组合键的时候,系统就不会进行正常的工作模式,而进入到下载模式,镜像的下载可以通过usb或者以太网的形式从主机上把镜像文件download到本机上,这是bootloader不会被更改,它会保存起来,然后先擦除掉flash中原来的os镜像,然后把新的镜像文件下载到flash中,走的就是这么一个流程。Bootloader保存起来其实是有好处的,譬如说你的机子在download的过程中因为断电,而原来的os擦除掉了但新的镜像文件又没有完全下载,但是如果bootloader保存起来了,它依然能保证可以重新下载镜像文件。

这是自己对bootloader的一些拙见,理解的也不知道正确与否,文章也有部分是参考网上的。希望在以后的工作过程中慢慢的加深对bootloader的熟悉,慢慢搞透。

你可能感兴趣的:(loader)