1引言Bootloader是在操作系统运行之前执行的一段程序。通过这段小程序,初始化硬件设备,建立内存空间的映射表,设置适当的系统软硬件环境,为最终调用操作系统内核做准备。目前流行的可以引导加载Linux的Bootloader包括:支持x86体系结构的LILO,GRUB,ROLO,Loadlin,Etherboot,LinuxBIOS;支持ARM体系结构的Compaq的bootldr,Blob,U-Boot,vivi,RedBoot;支持MIPS体系结构的PMON和支持m68K体系结构的sir-boot。相对于上述Boot
1引言
Bootloader是在操作系统运行之前执行的一段程序。通过这段小程序,初始化硬件设备,建立内存空间的映射表,设置适当的系统软硬件环境,为最终调用操作系统内核做准备。目前流行的可以引导加载Linux的Bootloader包括:支持x86体系结构的LILO,GRUB,ROLO,Loadlin,Etherboot,LinuxBIOS;支持ARM体系结构的Compaq的bootldr,Blob,U-Boot,vivi,RedBoot;支持MIPS体系结构的PMON和支持m68K体系结构的sir-boot。相对于上述Bootloader,Blob具有代码量小,文件结构清楚等优势,更易于在具有ARM核的器件上移植。
2 Blob简介
Blob是Boot Loader Object的缩写,是一款功能强大的Bootloader。它遵循GPL,源代码完全开放,既可用来进行简单调试,也可启动Linux Kernel。最初的Blob是Jan-DerkBakker和Erik Mouw为一块名为LART(Linux Advanced Radio Terminal)的板子写的,该板使用的处理器是StrongARMSA-1100。Blob的主要特征是引导嵌入式Linux功能即把Kernel、根文件系统等从Flash中调入SDRAM执行;存储操作功能。即支持内存查看、修改、比较;设备驱动功能。即支持串口,Flash、外部SDRAM等驱动;命令交互功能。可在命令行下在线更新Blob,Kemel和ramdisk。
3 Blob的运行过程分析
图1给出Blob的启动示意图。定义Blob编译后的最大代码为64 KB,并且这64 KB分为两个阶段来执行。第一阶段的代码在start.s中定义,大小为1 KB,包括从系统上电后在0x00000000地址开始执行的部分。这部分代码包括对S3C2440A的一些寄存器的初始化和将Blob第二阶段代码从Flash拷贝到SDRAM中。除去第一阶段的1 KB代码,剩下的部分都是第二阶段的代码。第二阶段的起始文件为trampoline.s,被复制到SDRAM后,就从第一阶段跳到这个文件开始执行剩余部分代码。第二阶段的代码最大为63 KB,trampoline词义为"蹦床",所以在该程序中进行一些BSS段设置和堆栈的初始化等工作后,最后跳转到main.c进入C函数。