bootloader启动流程分析

来源:互联网 发布:网络汇聚层 编辑:程序博客网 时间:2024/04/30 05:29

bootloader启动流程分析

 

1Bootloader的概念和作用

      Bootloader是嵌入式系统的引导加载程序,它是系统上电后运行的第一段程序。在完成对系统的初始化任务之后,它会将Flash中的Linux内核拷贝到 RAM 中去,跳转到内核的第一条指令处继续执行,从而启动 Linux 内核。由此可见,bootloader和 Linux内核密不可分,要想了解 Linux内核的启动过程,我们必须先得了解 bootloader的执行过程,这样才能对嵌入式系统的整个启过程有清晰的掌握。

 

2、常见的Bootloader

X86:LILO和GRUB

ARM: 每一种芯片都会有自己的Bootloader

PowerPC:ppcboot

MIPS:YAMON

U-BOOT支持以上所有平台,是bootloader介公认的老大,因此接下来要深入学习U-BOOT。

 

3Bootloader启动流程分析

      Bootloader启动的两个阶段: stage1 和 stage2两大部分。 stage1 主要是一些依赖于 CPU 体系结构的代码。这一阶段的代码主要是通过汇编来实现的。 stage1 为位置无关代码,通常在Flash 中运行。所以有的指令为相对寻址,可以在任何位置运行。stage2 则是通常用 C 语言来实现,这样可以实现更复杂的功能,而且代码 会具有更好的可读性和可移植性。

stage1负责的主要任务有:
   ① 硬件设备初始化包括:关闭Watchdog、关闭中断、设置 CPU 的速度和时钟频率、配置SDRAM 存储控制器及 IO、关闭处理器内部指令/数据 Cache 等;
   ② 为加载Bootloader 的 stage2 代码准备 RAM ;
   ③ 复制 Bootloader的 stage2 代码到 RAM 中;
   ④ 设置堆栈;
   ⑤ 跳转到 stage2的 C 函数入口点。

stage2 负责的主要任务有:
    ① 硬件设备的初始化(如串口、Flash和网卡等);
    ② 系统的内存映射检测;

    ③将内核映像从 Flash 读到 RAM 中;
    ④ 设置内核启动参数;
    ⑤ 调用内核。

Bootloader 调用内核的方法就是直接跳转到内核的第一条指令处。在调用内核之前下列的条件必须要满足:

(1) CPU 寄存器的设置

    ① R0 为 0;
    ② R1 为机器码;
    ③ R2 为启动参数,标记列表在RAM 中的起始基地址。

(2)CPU 工作模式
    ① 必须禁止中断( IRQ 和 FIQ);
    ② CPU 必须设置为 SVC 模式。

(3)Cache 和 MMU 的设置
    ① MMU 必须关闭;
    ② 指令 Cache 可以打开或关闭;
    ③ 数据 Cache 必须关闭。

 

4uboot简介

    U-Boot,全称Universal Boot Loader,遵循GPL 条款。为什么我们要选用U-Boot 作为Bootloader 呢?

    ①开放源码;
    ②对多种嵌入式操作系统内核的支持,如Linux、QNX等;
    ③对多个处理器系列的支持,如X86、PowerPC 、ARM等;
    ④较好的稳定性和可靠性;

    ⑤功能的设置较为灵活,适合U-Boot 调试、操作系统不同引导要求、产品发布等;
    ⑥丰富的设备驱动源码,如串口、以太网等。

 

5U-BOOT代码结构分析

U-BOOT目录下有多个子目录,分别存放管理不同的源程序。这些目录下所要存放的文件有其规则,可以分成三类:

第一类目录与处理器体系结构或者开发板硬件直接相关;

第二类目录是一些通用的函数或者驱动程序;

第三类目录是 U-BOOT 的应用程序、工具或者文档。

U-BOOT目录结构

board

本目录存放与已有开发板相关的文件。每种开发板有一个子目录,子目录仅存放与开发板相关的c文件和配置文件,不包含开发板CPU架构通用的实现文件。

common

实现基本命令,一条命令一个文件

CPU

与CPU 架构相关的目录,每款CPU或架构在一个子目录下。其中的子目录都是以 U-BOOT 所支持的 CPU 为名,比如有子目录 mips、 mpc8260等,每个子目录中都包括Makefile、config.mk、interrupt.c、cpu.c和serials.c和 start.S。

disk

对磁盘的支持

doc

文档目录

drivers

存放设备驱动程序的目录,mmc、串口等

examples

一些独立运行的应用程序的例子。

fs

支持的文件系统。如ext2、yaffs2、jffs2等文件系统

include

需要的头文件都在该目录下,和各种平台所支持的汇编文件,系统配置文件和对文件系统所支持的文件,其configs 子目录下与目标 板相关的配置头文件是移植过程中经常要修改的文件。

net

与网络协议栈相关的代码。BOOTP 协议、 TFTP 协议 RARP协议和 NFS 文件系统的实现。

lib

库文件

post

上电自检。

tools

生成U-BOOT的工具,例如mkimage等

 

后面分析uboot时的一些参考手册:

(1)ARM Architecture Reference Manual.pdf

(2)S5PV210_iROM_ApplicationNote_Preliminary_20091126.pdf

(3)S5PV210_UM_REV1.1.pdf


0 0
原创粉丝点击