bootloader启动流程分析
来源:互联网 发布:网络汇聚层 编辑:程序博客网 时间:2024/04/30 05:29
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启动流程分析
- bootloader启动流程分析
- bootloader的启动流程分析
- S3C2440 BootLoader启动流程分析
- S3C2440 BootLoader启动流程分析--startup
- S3C2440 BootLoader启动流程分析--startup
- S3C2440 BootLoader启动流程分析--startup
- AM3517开发板bootloader启动流程分析
- [转载] linux启动流程分析(1)---bootloader启动内核过程
- linux启动流程分析(1)---bootloader启动内核过程
- Bootloader启动流程
- Bootloader的启动流程
- bootloader简单启动流程
- 基于ARM的嵌入式系统Bootloader启动流程分析(S3C44B0X)
- 基于ARM的嵌入式系统Bootloader启动流程分析----- 转!!
- 基于ARM的嵌入式系统Bootloader启动流程分析
- BootLoader启动过程分析
- BootLoader启动过程分析
- R13shengji
- 通过源码分析一个linux进程可以运行多个android应用
- Android系统源码阅读(9):Content Provider数据更新通知
- 指向函数的指针
- 学习Hadoop第七课(HDFS架构原理)
- bootloader启动流程分析
- AIM Tech Round (Div. 2) D. Array GCD(dp,two pointers)
- 百科知识网址
- 统计损失
- Maven 手动添加 JAR 包到本地仓库
- RUP和六个最佳实践的关系
- 欢迎使用CSDN-markdown编辑器
- 轻松理解java的File,InputStream,InputStreamReader,BufferedReader之间的关系
- 视频播放器原理