嵌入式系统BootLoader详解:从启动到加载内核

需积分: 9 8 下载量 189 浏览量 更新于2024-07-12 收藏 159KB PPT 举报
"调用内核的BootLoader是嵌入式系统和PC机启动过程中的关键部分,负责初始化硬件、加载操作系统内核。在嵌入式ARM-Linux系统中,BootLoader尤其重要,因为它通常是系统加电后运行的第一段代码。在调用内核时,必须确保CPU寄存器、模式以及Cache和MMU的设置正确。" BootLoader详解: BootLoader是操作系统启动前运行的一段小程序,它的主要职责包括初始化硬件设备、建立内存空间映射图以及调整系统的软硬件环境,以便操作系统内核能够顺利启动。由于BootLoader依赖于特定的硬件平台和板级配置,因此不同的CPU和嵌入式系统通常会有不同的BootLoader实现。 在PC机中,引导加载程序由两部分组成:BIOS(固件程序)和硬盘MBR中的OS BootLoader,如LILO和GRUB。BIOS先进行硬件检测和资源分配,然后将控制权交给位于硬盘主引导记录(MBR)中的BootLoader,后者负责加载操作系统内核到内存并跳转到内核入口点执行。 然而,在嵌入式系统中,特别是基于ARM架构的系统,通常没有像BIOS这样的固件程序。系统上电或复位后,CPU会从地址0x00000000开始执行,这个地址通常存放着BootLoader程序。常见的BootLoader如Blob和U-Boot,它们都是开源项目,遵循GPL许可证,Blob主要针对ARM,而U-Boot则支持多种处理器架构,如ARM、MIPS、X86和Nios,并能启动多个操作系统,如VxWorks、QNX和Linux。 BootLoader执行的第一条指令至关重要,因为这是系统启动的起点。在嵌入式系统中,固态存储设备(如ROM、EEPROM或FLASH)通常会被映射到预设的地址,如0x00000000,以供CPU直接执行。在跳转到内核之前,需要满足一些条件,例如: 1. CPU寄存器设置:R0应设为0,R1应设为机器类型ID,R2应指向启动参数标记列表在RAM的起始基地址。 2. CPU模式:应禁用中断(IRQs和FIQs),且工作在SVC模式。 3. Cache和MMU设置:MMU必须关闭,指令Cache可开可关,但数据Cache必须关闭。 在BootLoader执行过程中,它会完成以下步骤: - 初始化CPU和外围设备,如串口、时钟、内存控制器等。 - 配置内存映射,确保内核映像可以正确加载。 - 检查和加载操作系统内核到内存,这可能涉及从各种存储设备(如SD卡、NAND Flash等)读取内核映像。 - 设置启动参数,这些参数可能包含硬件配置信息或特定的启动选项。 - 最后,BootLoader会将控制权传递给操作系统内核的入口点,从而启动操作系统。 BootLoader在嵌入式系统中扮演着至关重要的角色,它是连接硬件和操作系统的桥梁,确保系统能够平稳、高效地启动。