bootloader启动流程分析
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启动流程分析相关推荐
- 【SemiDrive源码分析】【X9芯片启动流程】27 - AP1 Android Preloader启动流程分析(加载atf、tos、bootloader镜像后进入BL31环境)
[SemiDrive源码分析][X9芯片启动流程]27 - AP1 Android Preloader启动流程分析(加载atf.tos.bootloader镜像后进入BL31环境) 一.Android ...
- Exynos4412 Uboot 移植(二)—— Uboot 启动流程分析
uboot启动流程分析如下: 第一阶段: a -- 设置cpu工作模式为SVC模式 b -- 关闭中断,mmu,cache v -- 关看门狗 d -- 初始化内存,串口 e -- 设置栈 f -- ...
- Bootm启动流程分析
Bootm启动流程分析 如何引导内核 uboot启动命令 内核镜像介绍 内核启动前提 Bootm命令详解 Bootm命令格式 do_bootm do_bootm_subcommand images全局 ...
- Android系统开机到Launcher启动流程分析
本文基于Android10.0的源码. 由于google团队在对framework层代码进行大量重构,所以代码变动还是挺大的. 常见基础问题: SystemServer系统服务进程是如何创建的?Lau ...
- 全志linux关机键,全志平台linux启动流程分析
转载:全志平台linux启动流程分析 一.BROM阶段 机器上电之后会执行固化在BROM里面的一段引导程序,这个程序会依次遍历所有支持的启动介质,直到找到第一个支持的.目前支持的启动介质是sd/mmc ...
- android 开机向导加载过程,开机向导启动流程分析
开机向导启动流程 首先来看Android启动流程: 1.Bootloader(系统启动加载器,将Linux加载到RAM): 2.Kernel 3.init进程 4.Zygote(Zygote进程是整个 ...
- Android开机向导启动流程分析
Android开机向导启动流程 首先来看Android启动流程: 1.Bootloader(系统启动加载器,将Linux加载到RAM): 2.Kernel 3.init进程 4.Zygote(Zygo ...
- STM32的完整启动流程分析-----在外存flash中运行代码
1. 根据boot引脚决定三种启动模式 复位后,在 SYSCLK 的第四个上升沿锁存 BOOT 引脚的值.BOOT0 为专用引脚,而 BOOT1 则与 GPIO 引脚共用.一旦完成对 BOOT1 的采 ...
- u-boot启动流程分析(1)_平台相关部分
转自:http://www.wowotech.net/u-boot/boot_flow_1.html 1. 前言 本文将结合u-boot的"board->machine->arc ...
最新文章
- 前端_JavaScript_Method
- PCL 点云 欧式聚类疑问
- 今天 我的博客正式建立了
- viewDidUnload 和 dealloc 的区别
- DM8168评估板上供电电源的设计
- JS的window.parent ,window.top,window.self
- Vue—相关工具—webpack
- IntelliJ IDEA2017 修改缓存文件的路径
- java移位运算符_Java中的移位运算符(“”、“”、“”)
- linux ping mtu值,ping 包长度及 MTU
- 读书印记 - 《文案创作完全手册:文案大师教你一步步写出销售力》
- 《安富莱嵌入式周报》第287期:下一代Windows12界面,支持各种工业以太网协议参考,百款在线电子开发工具,seL4安全微内核,旋转拨号手机,PSP掌机逆向
- 救活了一只溺水的小巴西龟
- 运放基本结构及频响(一)
- 左倾堆(对两个优先队列合并)
- CodeForces 13A Numbers
- (ICASSP 19)AUTOMATIC GRAMMAR AUGMENTATION FOR ROBUST VOICE COMMAND RECOGNITION
- Java程序员面试技巧:这样面试通过率增加90%
- unity 网络 --NetWorking
- WORD的三种选定文本的方法
热门文章
- 【转载】#323 - A Generic Class is a Template for a Class
- JEECMS编辑漏洞及随便拿webshell,啊哈哈
- [JavaScript]return false;和e.preventDefault();的区别
- 笔记本 cpu 参数
- linux命令 ps -ef 的含义
- 学成在线--14.使用RabbitMQ完成页面发布
- 深度学习目标检测之 YOLO v1
- php图型分析插件,IMAGE缩略图插件
- 河南王牌计算机专业,河南计算机专业实力突出的7所大学,郑大位列次席,榜首实至名归...
- 05_JS流程控制语句