bootloader启动流程分析

1、Bootloader的概念和作用

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。

3、Bootloader启动流程分析

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 必须关闭。

4、uboot简介

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

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

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

5、U-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

bootloader启动流程分析相关推荐

  1. 【SemiDrive源码分析】【X9芯片启动流程】27 - AP1 Android Preloader启动流程分析(加载atf、tos、bootloader镜像后进入BL31环境)

    [SemiDrive源码分析][X9芯片启动流程]27 - AP1 Android Preloader启动流程分析(加载atf.tos.bootloader镜像后进入BL31环境) 一.Android ...

  2. Exynos4412 Uboot 移植(二)—— Uboot 启动流程分析

    uboot启动流程分析如下: 第一阶段: a -- 设置cpu工作模式为SVC模式 b -- 关闭中断,mmu,cache v -- 关看门狗 d -- 初始化内存,串口 e -- 设置栈 f -- ...

  3. Bootm启动流程分析

    Bootm启动流程分析 如何引导内核 uboot启动命令 内核镜像介绍 内核启动前提 Bootm命令详解 Bootm命令格式 do_bootm do_bootm_subcommand images全局 ...

  4. Android系统开机到Launcher启动流程分析

    本文基于Android10.0的源码. 由于google团队在对framework层代码进行大量重构,所以代码变动还是挺大的. 常见基础问题: SystemServer系统服务进程是如何创建的?Lau ...

  5. 全志linux关机键,全志平台linux启动流程分析

    转载:全志平台linux启动流程分析 一.BROM阶段 机器上电之后会执行固化在BROM里面的一段引导程序,这个程序会依次遍历所有支持的启动介质,直到找到第一个支持的.目前支持的启动介质是sd/mmc ...

  6. android 开机向导加载过程,开机向导启动流程分析

    开机向导启动流程 首先来看Android启动流程: 1.Bootloader(系统启动加载器,将Linux加载到RAM): 2.Kernel 3.init进程 4.Zygote(Zygote进程是整个 ...

  7. Android开机向导启动流程分析

    Android开机向导启动流程 首先来看Android启动流程: 1.Bootloader(系统启动加载器,将Linux加载到RAM): 2.Kernel 3.init进程 4.Zygote(Zygo ...

  8. STM32的完整启动流程分析-----在外存flash中运行代码

    1. 根据boot引脚决定三种启动模式 复位后,在 SYSCLK 的第四个上升沿锁存 BOOT 引脚的值.BOOT0 为专用引脚,而 BOOT1 则与 GPIO 引脚共用.一旦完成对 BOOT1 的采 ...

  9. u-boot启动流程分析(1)_平台相关部分

    转自:http://www.wowotech.net/u-boot/boot_flow_1.html 1. 前言 本文将结合u-boot的"board->machine->arc ...

最新文章

  1. 前端_JavaScript_Method
  2. PCL 点云 欧式聚类疑问
  3. 今天 我的博客正式建立了
  4. viewDidUnload 和 dealloc 的区别
  5. DM8168评估板上供电电源的设计
  6. JS的window.parent ,window.top,window.self
  7. Vue—相关工具—webpack
  8. IntelliJ IDEA2017 修改缓存文件的路径
  9. java移位运算符_Java中的移位运算符(“”、“”、“”)
  10. linux ping mtu值,ping 包长度及 MTU
  11. 读书印记 - 《文案创作完全手册:文案大师教你一步步写出销售力》
  12. 《安富莱嵌入式周报》第287期:下一代Windows12界面,支持各种工业以太网协议参考,百款在线电子开发工具,seL4安全微内核,旋转拨号手机,PSP掌机逆向
  13. 救活了一只溺水的小巴西龟
  14. 运放基本结构及频响(一)
  15. 左倾堆(对两个优先队列合并)
  16. CodeForces 13A Numbers
  17. (ICASSP 19)AUTOMATIC GRAMMAR AUGMENTATION FOR ROBUST VOICE COMMAND RECOGNITION
  18. Java程序员面试技巧:这样面试通过率增加90%
  19. unity 网络 --NetWorking
  20. WORD的三种选定文本的方法

热门文章

  1. 【转载】#323 - A Generic Class is a Template for a Class
  2. JEECMS编辑漏洞及随便拿webshell,啊哈哈
  3. [JavaScript]return false;和e.preventDefault();的区别
  4. 笔记本 cpu 参数
  5. linux命令 ps -ef 的含义
  6. 学成在线--14.使用RabbitMQ完成页面发布
  7. 深度学习目标检测之 YOLO v1
  8. php图型分析插件,IMAGE缩略图插件
  9. 河南王牌计算机专业,河南计算机专业实力突出的7所大学,郑大位列次席,榜首实至名归...
  10. 05_JS流程控制语句