引导加载程序(Bootloader)是一种 用于启动计算机的软件。当计算机关闭时,操作系统、应用程序代码和数据仍存储在非易失性存储器中。当计算机开机时,它通常没有操作系统或其随机存取存储器(RAM)中的加载程序。计算机首先执行存储在只读存储器(ROM,后来是EEPROM,NOR闪存)中的一个相对较小的程序以及一些需要的数据,以初始化RAM(特别是在x86系统上)以访问非易失性设备(通常是块设备,例如NAND闪存)或可以将操作系统程序和数据加载到RAM中的设备。启动此序列的小程序称为引导加载程序、引导程序或引导加载程序。
在PC机中,引导加载程序由BIOS(其本质就是一段固件程序)和位于硬盘MBR中的OS BootLoader(比如,LILO和GRUB等)一起组成。BIOS在完成硬件检测和资源分配后,硬盘MBR中的BootLoader读到系统的RAM中,然后控制权交给OS BootLoader。BootLoader的主要运行任务就是内核映象从硬盘上读到RAM中,然后跳转到内核的入口点去运行,也即开始启动操作系统。
在嵌入式系统中,通常并没有像BIOS那样的固件程序(注,有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由BootLoader来完成。比如在一个基于ARM7TDMI core的嵌入式系统中,系统在上电或复位时通常都从地址0x00000000处开始执行,而在这个地址处安排的通常就是系统的BootLoader程序。
简单地说,BootLoader就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。通常,BootLoader是严重地依赖于硬件而实现的,特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的BootLoader几乎是不可能的。尽管如此,我们仍然可以对BootLoader归纳出一些通用的概念来,以指导用户特定的BootLoader设计与实现。