嵌入式系统的Boot Loader技术

合集下载

基于ARM嵌入式系统的Boot Loader启动分析与移植

基于ARM嵌入式系统的Boot Loader启动分析与移植

2018年第7期信息通信2018 (总第187 期)INFORMATION & COMMUNICATIONS (Sum. No 187)基于AR M嵌入式系统的Boot Loadei•启动分析与移植江敏(西华师范大学电子信息工程学院,四川南充637002)摘要:Boot Loader启动代码的分析与移植是嵌入式产品研发中最重要的环节之一。

近年,嵌入式技术已取得了飞速的 发展,但对于其最本质的桂心部分Boot Loader的分析却不是很多。

实践证明,Boot Loader的优越与否,对喪入式系统的 性能起到决定性的作用。

文章根据Linux系统的编译环境及嵌入式系统的编程特点,分析了 U-boot在ARM i.MX6Q嵌 入式系统中的启动过程和移植过程。

该研究对Boot Loader的设计有一定的借鉴作用。

关键词:Boot Loader;嵌入式;借鉴中图分类号:TP368.1 文献标识码:A文章编号:1673-1131(2018)07-0098-02The analysis and transplantation of Boot Loader based on ARM embedded systemJiang Min(College of Electronic Information Engineering,China West Normal University sichuan nanchong637002) Abstract:The analysis and transplantation of Boot Loader's bootcode is one of the most important parts in the development of embedded products.In recent years,the embedded technology has achieved a rapid development,but the analysis of t he most es­sential core of t he Boot Loader is not much.lt has been proved that the advantages of t he Boot Loader play a decisive role in the performance of the embedded system.Based on the compilation environment of Linux system and the programming character­istics of embedded system,this paper analyzes the start-up process and transplantation process of u-boot in the ARM i.MX6Q embedded system.This paper has some reference to the design of Boot Loader.Keywords:Boot Loader;embedded;reference〇引言随着时代的发展,电子产品智能化程度愈来愈高,这与微 处理器的发展有着密切的联系。

s32 bootload 代码

s32 bootload 代码

近年来,随着科技的不断发展,嵌入式系统的应用范围越来越广泛。

在嵌入式系统中,bootloader(引导程序)扮演着至关重要的角色,它负责初始化系统硬件、加载操作系统,并将控制权交给操作系统。

在嵌入式领域中,s32 bootload 代码作为一种引导程序,在汽车电子、工业控制等领域得到了广泛的应用。

1. s32 bootload 代码的基本原理s32 bootload 代码是为NXP公司的S32微控制器设计的引导程序。

它的基本原理是在系统上电后,首先执行引导程序,引导程序负责初始化各种外设和系统环境,并且加载操作系统。

s32 bootload 代码在引导过程中会检查系统中的固件,如果固件需要更新,它会负责更新固件,保障系统的稳定和安全运行。

2. s32 bootload 代码的特点s32 bootload 代码具有很多特点,其中最突出的包括:- 灵活可配置:s32 bootload 代码可以根据具体的应用需求进行灵活配置,从而满足不同应用场景的需求。

- 安全可靠:s32 bootload 代码具有严格的固件验证和安全机制,确保固件的完整性和安全性。

- 高效性能:s32 bootload 代码能够在短时间内完成引导过程,并将控制权交给操作系统,保障系统的快速启动和高效运行。

3. s32 bootload 代码的应用领域s32 bootload 代码广泛应用于汽车电子、工业控制、通信设备等领域。

在汽车电子领域,s32 bootload 代码可以实现汽车ECU(电子控制单元)的固件升级和安全验证,保障汽车电子系统的稳定和安全运行。

在工业控制领域,s32 bootload 代码可以实现工业设备的固件升级和远程管理,提高工业设备的可靠性和安全性。

在通信设备领域,s32 bootload 代码可以实现通信设备的固件升级和安全验证,提高通信设备的性能和稳定性。

总结回顾:s32 bootload 代码作为一种引导程序,在嵌入式系统中发挥着至关重要的作用。

基于Linux嵌入式系统的Boot Loader研究与实现

基于Linux嵌入式系统的Boot Loader研究与实现
系 统 解 决 方 案
基f iu 嵌 入 式系统 的 B o L a e 研究 与实现 Ln x o t odr
李 力
( 东科 学技 术 职 业 学 院 , 州 5 0 4 广 广 1 6 0)

要: 通过 深圳亿道 电子公 司嵌 入式产品E 1 d ei 开发板 , o t o d r o 对B o L a e的启 动过程和存 储映射进行 了研 究, 重点 分
Bo t o d r u ya d I lme tt n o mb d e se B s d o iu o a e d n L St mpe na i f o E e d d Sy t m a e n Ln x
U 1 i
( und n ste f c ne n ehooy u ghu 60 C i ) G ago gntu i c d cn l , a zo 1 4 , h a I i to S e a T gGn 50 n
动 (o t, 体任 务 是 : 始化 硬 件设 备 ; b o)具 初 建立 内存 空间 的 映 射 图 ; 成 内 核 的 加 载 , 内核 设 置 启 动 参 数 。 完 为 开 发b ola e是 进行 嵌入 式L n x 发 的第一 个 ot dr o iu 开 步骤 。 研究 使 用的 开 发平 台为 深圳 亿道 公 司 的 E l d 本 ei o
a dteme r po B o o d rr il u i , dt e r cp e f o o d rt es u tr f r ga aea ay e , dteg ieo n moyma f o t a eaemanys de a i il Bo t a e 、 t cueo po r m n ls da d f h L t dn h pn o L h r r n h u

嵌入式系统BooLoaderP

嵌入式系统BooLoaderP
对了解嵌入式系统底层运行机制、优化和快速启动
的研究都有重要的意义。
2
PC 机中的引导加载程序
两部分组成
BIOS(其本质就是一段固件程序) 位于硬盘 MBR 中的 OS Boot Loader(如LILO 和 GRUB 等)
流程
BIOS 在完成硬件检测和资源分配后,将硬盘 MBR 中的 Boot Loader 读到系统的 RAM 中,然后将控 制权交给 OS Boot Loader Boot Loader 的主要运行任务就是将内核映象从硬 盘上读到 RAM 中,然后跳转到内核的入口点去运行 ,即开始启动操作系统。
3
嵌入式系统中引导加载程序
系统的加载启动任务就完全由 Boot Loader 来完成
ARM7TDMI中,系统在上电或复位时从地址 0x00000000 处开始执行,这个地址是Boot Loader 程序
典型的嵌入式: boot loader object的缩写
10
Boot Loader 的启动过程
从固态存储设备上启动Boot Loader大多都是 2 阶段
stage 1和 stage 2
BOOTLOADER一般分为2部分
stage 1:汇编部分,执行简单的硬件初始化 stage 2:C语言部分,负责复制数据,设置启动参数,串口通信等
在操作系统内核运行之前运行的一段小程序 功能
初始化硬件设备 建立内存空间的映射图 调整系统的软硬件环境,以便操作系统内核启动
不通用
依赖于硬件CPU 依赖于主板board
不同的CPU有不同的Boot Loader
有些 BootLoader 支持多CPU,如U-Boot支持ARM和 MIPS

嵌入式系统的BootLoader技术浅析

嵌入式系统的BootLoader技术浅析

论文导读::嵌入式系统是以应用为中心、以计算机为基础、软硬件可裁剪。

即启动过程可分为阶段1和阶段2两个部分。

技术概述。

论文关键词:嵌入式系统,启动过程,BootLoader技术一 BootLoader技术概述嵌入式系统是以应用为中心、以计算机为基础、软硬件可裁剪,适用于系统对功能、可靠性、成本、功耗严格要求的专用计算机系统。

计算机系统都具有相应的引导程序,对于嵌入式系统在执行主程序之前要执行一些初始化的过程来完成对系统的初始化,并创造嵌入式程序运行的环境。

我们熟悉的PC中的引导程序一般BIOS和位于MBR的 OS bootloader (例如 LILO 或者 GRUB)一起组成。

在嵌入式系统中,出于经济方面的考虑一般不配置 BIOS,在嵌入式系统中,通常采用BootLoader技术来启动程序。

启动时用于完成初始化操作的代码被称为BootLoader 程序,整个系统的加载启动任务就由 BootLoader来完成。

通过这段程序,可以初始化硬件设备、建立内存空间的映射图启动过程,从而将系统的软硬件环境设定在一个合适的状态,以便为调用操作系统内核准备好正确的环境。

BootLoader依赖于硬件和应用环境,不同的CPU有不同的 Bootloader。

即使他们是基于同一种 CPU,要想让运行在一块目标板上的Bootloader程序也能运行在另一块板子上,通常也需要对BootLoader的源程序进行修改。

因此,对 Bootloader 进行分析,并找出其中的规律和原理,使得BootLoader 运行于各种不同的硬件平台。

二 BootLoader 技术的基本特征1 BootLoader 安装地址的固定性系统加电或复位后,CPU 通常都从由CPU 制造商预先安排好的地址上取指令, 如XScale 内核的CPU 通常都从地址0x00000000处取它的第一条指令。

基于这种CPU 构建的嵌入式系统通常都有某种类型的固态存储设备被映射到这个预先安排的地址上。

BootLoader

BootLoader

BootLoader锁定本词条由“科普中国”百科科学词条编写与应用工作项目审核。

行之前运行。

可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最U也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由BootLoader来完成。

在一个基于ARM7TDM I00000000处开始执行,而在这个地址处安排的通常就是系统的BootLoader程序。

中文名启动装载外文名BootLoader说明系统启动前引导程序操作模式启动模式、交互模式1背景介绍Bootloader是嵌入式系统在加电后执行的第一段代码,在它完成CPU和相关硬件的初始化之后,再将操作系统映像或固化的嵌入式应用程序装在到内存中然后跳转到操作系统所在的空间,启动操作系统运行。

[1]对于嵌入式系统,Bootloader是基于特定硬件平台来实现的。

因此,几乎不可能为所有的嵌入式系统建立一个通用的Bootloader,不同的处理器架构都有不同的Bootloader 。

Bootloader不但依赖于CPU的体系结构,而且依赖于嵌入式系统板级设备的配置。

对于2块不同的嵌入式板而言,即使它们使用同一种处理器,要想让运行在一块板子上的B ootloader程序也能运行在另一块板子上,一般也都需要修改Bootloader的源程序。

反过来,大部分Bootloader仍然具有很多共性,某些Bo otloader也能够支持多种体系结构的嵌入式系统。

例如,U-Boot就同时支持PowerPC、ARM、MIPS和X86等体系结构2操作模式1.自启动模式:在这种模式下,bootloader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。

2.交互模式:在这种模式下,目标机上的bootloader将通过串口或网络等通行手段从开发主机(Host)上下载内核映像等到RAM中。

可以被bootloader写到目标机上的固态存储媒质中,或者直接进入系统的引导。

嵌入式系统下的Bootloader---LMCBBAT

嵌入式系统下的Bootloader---LMCBBAT

2.下载(down loading)方式
• 在这种引导方式下目标机上的BootLoader 将通过串口连接或网络连接等通信手段从 主机下载文件,如下载应用程序、数据文 件、内核映像等。从主机下载的文件通常 首先被BootLoader保存到目标机的RAM中, 然后再被BootLoader写到目标机上的固态 存储设备中,其后完成内核的引导运行。 BootLoader的这种引导方式通常在系统研 发和更新时使用。
– 脚本语言支持(类似BASH脚本) – 支持WatchDog、LCD logo和状态指示功能 – 支持MTD和文件系统 – 支持中断 – 详细的开发文档
• U-BOOT源代码结构
– /board:和一些已有开发板相关的文件 – /common:与体系结构无关的文件,实现各种 命令的C文件 – /cpu:CPU相关文件 – /disk:disk驱动的分区处理代码 – /doc:文档 – /drivers:通用设备驱动程序,如网卡串口USB 等
• • • • R0=0; R1=机器类型ID;关于机器类型号,可以参见: linux/arch/arm/tools/mach-types。 R2=启动参数标记列表在RAM中起始基地址;
– CPU 模式:
• 必须禁止中断(IRQs和FIQs); • CPU必须SVC模式;
– Cache和MMU的设置:
kernel
File System
Bootloader在系统中的位置
• 在嵌入式系统中,通常没有像PC机中的 BIOS那样的固件程序,因此整个系统的加 载启动任务就完全由Bootloader来完成。 Bootloader 是CPU加电后运行的第一段程 序,它的作用就是对嵌入式系统中的硬件 进行初始化,创建内核需要的一些信息并 将这些信息通过相关机制传递给内核,从 而将系统的软硬件环境带到一个合适的状 态,最终调用操作系统内核,真正起到引 引 导和加载内核的作用

基于嵌入式ARM的Bootloader研究与实现

基于嵌入式ARM的Bootloader研究与实现

三、Bootloader的研究进展开嵌 入式ARM系统的Bootloader研究 与实现
三、Bootloader的研究进展开嵌入式ARM系统的Bootloader研究与 实现
嵌入式ARM系统在许多领域得到广泛应用,如工业控制、智能家居、通信设备 等。在这些应用场景中,Bootloader的作用不言而喻。本次演示将深入探讨嵌入 式ARM系统的Bootloader研究与实现。
内存管理模块主要负责内存的映射和保护工作。为了实现通用性,我们可以 采用内存分页和分段的技术来实现内存管理。通过将内存分为不同的段或页,我 们可以实现对内存的灵活管理。例如,我们可以将系统程序代码映射到 0x~0x0FFFFFFF的空间,将数据映射到0x~0x1FFFFFFF的空间等。
4、异常处理模块
一、Bootloader的启动过程
5、将引导程序加载到内存中,并跳转到该执行。
二、Bootloader的实现方法
二、Bootloader的实现方法
1、汇编语言实现:由于Bootloader需要直接与硬件打交道,因此通常使用 汇编语言实现。常用的汇编语言有ARM汇编和Keil汇编。
二、Bootloader的实现方法
基于嵌入式ARM的 Bootloader研究与实现
目录
01 一、Bootloader的 启动过程
03 三、Bootloader的 研究进展开嵌入式 ARM系统
02 二、Bootloader的 实现方法
04 参考内容
嵌入式ARM系统的Bootloader研 究与实现
嵌入式ARM系统的Bootloader研究与实现
三、通用Bootloader的实现
为了进一步实现通用的Bootloader,我们还需要使用一种可扩展的程序设计 方法。该方法允许我们在不更改程序代码的前提下,通过添加不同的模块来实现 不同的功能。例如,我们可以添加一个网络模块来实现从网络启动的功能;我们 也可以添加一个USB模块来实现从USB设备启动的功能。

嵌入式系统-第8章 嵌入式系统Boot Loader技术

嵌入式系统-第8章   嵌入式系统Boot Loader技术
2. Linux 内核。特定于嵌入式板子的定制内核以及内核的启动参数。 3. 文件系统。包括根文件系统和建立于 Flash 内存设备之上文件系 统。通常用 ram disk 来作为 root fs。 4. 用户应用程序。特定于用户的应用程序。有时在用户应用程序和 内核层之间可能还会包括一个嵌入式图形用户界面。常用的嵌入式 GUI 有:MicroWindows 和 MiniGUI 等。
15
Stage1: 1、 基本的硬件初始化
这是 Boot Loader 一开始就执行的操作,其目的是为 stage2 的执行以及随后的 kernel 的执行准备好一些基本 的硬件环境。它通常包括以下步骤(以执行的先后顺序): (1) 屏蔽所有的中断。 (2)设置 CPU 的速度和时钟频率。 (3) RAM 初始化。 (4) 初始化 LED。 (5) 关闭 CPU 内部指令/数据 cache。
14
Boot Loader 的 stage1 通常包括以下步骤(以执行的先后顺序): • 硬件设备初始化。 • 为加载 Boot Loader 的 stage2 准备 RAM 空间。 • 拷贝 Boot Loader 的 stage2 到 RAM 空间中。 • 设置好堆栈。 • 跳转到 stage2 的 C 入口点。 Boot Loader 的 stage2 通常包括以下步骤(以执行的先后顺序): • 初始化本阶段要使用到的硬件设备。 • 检测系统内存映射(memory map)。 • 将 kernel 映像和根文件系统映像从 flash 上读到 RAM 空间中。 • 为内核设置启动参数。 • 调用内核。
典型的嵌入式系统 boot loader
➢ Blob: boot loader object的缩写 ▪ 开源,遵循GPL,很好的Linux loader,主要针对ARM

Boot Loader

Boot Loader

简单地说,Boot Loader 就是在操作系统内核运行之前运行的一段小程序。

通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。

通常,Boot Loader 是严重地依赖于硬件而实现的,特别是在嵌入式世界。

因此,在嵌入式世界里建立一个通用的Boot Loader 几乎是不可能的。

尽管如此,我们仍然可以对Boot Loader 归纳出一些通用的概念来,以指导用户特定的Boot Loader 设计与实现。

1. Boot Loader 所支持的CPU 和嵌入式板每种不同的CPU 体系结构都有不同的Boot Loader。

有些Boot Loader 也支持多种体系结构的CPU,比如U-Boot 就同时支持ARM 体系结构和MIPS 体系结构。

除了依赖于CPU的体系结构外,Boot Loader 实际上也依赖于具体的嵌入式板级设备的配置。

这也就是说,对于两块不同的嵌入式板而言,即使它们是基于同一种CPU 而构建的,要想让运行在一块板子上的Boot Loader 程序也能运行在另一块板子上,通常也都需要修改Boot Loader 的源程序。

2. Boot Loader 的安装媒介(Installation Medium)系统加电或复位后,所有的CPU 通常都从某个由CPU 制造商预先安排的地址上取指令。

比如,基于ARM7TDMI core 的CPU 在复位时通常都从地址0x00000000 取它的第一条指令。

而基于CPU 构建的嵌入式系统通常都有某种类型的固态存储设备(比如:ROM、EEPROM 或FLASH 等)被映射到这个预先安排的地址上。

因此在系统加电后,CPU 将首先执行Boot Loader 程序。

3. 用来控制Boot Loader 的设备或机制主机和目标机之间一般通过串口建立连接,Boot Loader 软件在执行时通常会通过串口来进行I/O,比如:输出打印信息到串口,从串口读取用户控制字符等。

第3章 Boot Loader

第3章 Boot Loader
(5)打开LED
(6)UART初始化 (7)加载ViVi的第二部分到内存中 (8)跳转到Stage2阶段运行
Page 29
2013-8-12
3.2 ViVi
2.ViVi启动的Stage2 ViVi的Stage2是从main()函数开 始的,同一般的C语言程序一样,该 函数在/init/main.c文件中,一共可以 分为以下8个步骤:
Page 24 2013-8-12
3.2 ViVi
(3)init:这个目录只有main.c和 version.c两个文件。和普通的C程序一 样,ViVi将从main函数开始执行。 (4)include:头文件的公共 目录,其中的s3c2410.h定义了处理器 的一些寄存器。 (5)lib:一些平台公共的接口代码。
目标板的子目录。 s3c2410:该目录下是对S3C2410的支 持代码。 def-configs:该目录下是硬件平台的 配置文件。
Page 23 2013-8-12
3.2 ViVi
(2)drivers:其中包括了引导内核需 要的设备的驱动程序(MTD和串口)。 mtd:该目录下是MTD设备的驱动程 序。 net:该目录下是网络设备的驱动程序 。 serial:该目录下是串口设备的驱动程 序。
由于在结构上Bootloader由两个部分组成, 所以Bootloader的启动过程也分为两个阶段, 即stage1和stage2 两部分。stage1主要完成依赖 于CPU体系结构的代码的初始化,比如设备初 始化代码等,而且这些代码通常都是用汇编语 言的形式来实现的。stage2通常用C语言来实现 ,用以实现较复杂的功能,并且使代码具有更 好的可读性和可移植性。
Bootloader的系统启动方案流程如下图所示:

嵌入式系统 Boot Loader 技术内幕(3)

嵌入式系统 Boot Loader 技术内幕(3)

嵌入式系统Boot Loader 技术内幕(3)在boot loader 程序的设计与实现中,没有什么能够比从串口终端正确地收到打印信息能更令人激动了。

此外,向串口终端打印信息也是一个非常重要而又有效的调试手段。

但是,我们经常会碰到串口终端显示乱码或根本没有显示的问题。

造成这个问题主要有两种原因:(1) boot loader 对串口的初始化设置不正确。

(2) 运行在host 端的终端仿真程序对串口的设置不正确,这包括:波特率、奇偶校验、数据位和停止位等方面的设置。

此外,有时也会碰到这样的问题,那就是:在boot loader 的运行过程中我们可以正确地向串口终端输出信息,但当boot loader 启动内核后却无法看到内核的启动输出信息。

对这一问题的原因可以从以下几个方面来考虑:(1) 首先请确认你的内核在编译时配置了对串口终端的支持,并配置了正确的串口驱动程序。

(2) 你的boot loader 对串口的初始化设置可能会和内核对串口的初始化设置不一致。

此外,对于诸如s3c44b0x 这样的CPU,CPU 时钟频率的设置也会影响串口,因此如果boot loader 和内核对其CPU 时钟频率的设置不一致,也会使串口终端无法正确显示信息。

(3) 最后,还要确认boot loader 所用的内核基地址必须和内核映像在编译时所用的运行基地址一致,尤其是对于uClinux 而言。

假设你的内核映像在编译时用的基地址是0xc0008000,但你的boot loader 却将它加载到0xc0010000处去执行,那么内核映像当然不能正确地执行了。

Boot Loader 的设计与实现是一个非常复杂的过程。

如果不能从串口收到那激动人心的uncompressing linux.................. done, booting the kernel 内核启动信息,恐怕谁也不能说:嗨,我的boot loader 已经成功地转起来了!。

嵌入式系统BootLoader

嵌入式系统BootLoader
地址来实现
17
Stage2
stage2 的代码通常用 C 语言来实现,代码可读性和可移植性 不能使用 glibc 库中的任何支持函数
Why? trampoline(弹簧床)编程方式
用汇编语言写一段trampoline 小程序,并将这段 trampoline 小程序来作为 stage2 可执行映象的执行入口点
20
检测系统的内存映射(memory map)
在 4GB 物理地址空间中哪些地址范围被分配用来寻址 系统的RAM 单元
在Samsung S3C44B0X 中,从0x0c00,0000 (192M)到
0x1000,0000(256M) 之间的 64M 地址空间被用作系统的 RAM 地址空间 嵌入式系统往往只把 CPU 预留的全部 RAM 地址空间中 的一部分映射到 RAM 单元上,而让剩下的那部分预留 RAM 地址空间处于未使用状态 Boot Loader 的 stage2 必须检测整个系统的内存映射 情况
BOOTLOADER一般分为2部分
汇编部分执行简单的硬件初始化 C语言部分负责复制数据,设置启动参数,串口通信等功能 BOOTLOADER的生命周期 1. 初始化硬件,如设置UART(至少设置一个),检测存储器等 2. 设置启动参数,告诉内核硬件的信息,如显示控制台LCD或串
(0x0c110000)

46 #define RAMDISK_RAM_BASE
(0x0c400000)

47

48 /* and where do they live in flash */

49 #define BLOB_FLASH_BASE
(0x00000000)

嵌入式系统的BootLoader技术

嵌入式系统的BootLoader技术

PPT文档演模板
嵌入式系统的BootLoader技术
• 2)为加载阶段2准备RAM空间
– 必须确保所安排的地址范围的的确确是可读写的RAM 空间
1. 先保存memory page一开始两个字的内容 2. 向这两个字中写入任意的数字 3. 立即将这两个字读回,若不是,则说明不是一段有效
的RAM空间 4. 再向这两个字写入任意数字 5. 立即将这两个字读回。若不是,则说明不是有效的
.text .globl _trampoline _trampoline:
bl main /* if main ever returns we just call it again */ b _trampoline
PPT文档演模板
嵌入式系统的BootLoader技术
2.2 Boot Loader阶段2介绍
– 设置堆栈指针是为了执行C语言代码做好准备
– 通常可以设置为sp = stage2_end – 4
– 此时, Boot Loader 的 阶段2 可执行映象刚 被拷贝到 RAM 空间时的系统内存布局,如下 图:
• 5)跳转到阶段2的C入口点
– 修改PC寄存器为合适地址来实现
PPT文档演模板
嵌入式系统的BootLoader技术
PPT文档演模板
嵌入式系统的BootLoader技术
1. Boot Loader程序的基本概念
• 一个嵌入式 Linux 系统从软件的角度看通常可以 分为四个层次:
– 1. 引导加载程序。
• 包括固化在固件(firmware)中的 boot代码(可选),和 Boot Loader 两大部分。
– 2. Linux 内核。
• 在 linux内核启动前, boot loader 会将存储介 质中的 initrd 文件加载到内存,内核启动时会在 访问真正的根文件系统前先访问该内存中的 initrd 文件系统。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2
Boot Loader程序基本概念
Boot Loader是在系统启动时激活,在操 作系统内核运行之前运行的一段程序


初始化硬件设备和建立内存空间的映射图 将系统的软硬件环境带到一个合适的状态, 以便为最终调用操作系统内核准备好正确的 环境
3
PC机的Boot Loader——BIOS(1/2)
1、当PC机加电之后,BIOS启动相应的程序完成机器自检 POST(Power-On Self Test);
2、寻找可以引导的驱动器,即启动盘IPL(Initial Program Load Device);
3、若找到合法的引导扇区(以0xAA55结束),那么就会将 引导扇区的内容(共512字节)装载到内存0x0000:7C00处; 4、BIOS把控制权限交给系统引导扇区的程序。
27
Boot Loader阶段1介绍(1/4)
Boot Loader的阶段1通常包括以下步骤: 1)硬件设备初始化

屏蔽所有的中断 设置CPU的速度和时钟频率 RAM初始化 初始化LED
关闭CPU内部指令/数据Cache
28
Boot Loader阶段1介绍(2/4)
2)为加载阶段2准备RAM空间
INT 19H(系统引导入口):0xe6f2 -> int19_relocated -> int19_function -> int19_load_done
INT 18H:int18_handler Jump to the boot vector
15
下一代BIOS——UEFI (1/3)
37
Boot Loader阶段2介绍(7/8)
例:设置ATAG_MEM的代码如下:
params->hdr.tag = ATAG_MEM; params->hdr.size = tag_size(tag_mem32); params->u.mem.start = memory_map[i].start; params->u.mem.size = memory_map[i].size; params = tag_next(params);
3)加载内核映像和根文件系统映像

规划内存占用的布局
内核映像所占用的内存范围

MEM_START + 0X8000 MEM_START + 0X00100000
根文件系统所占用的内存范围


从Flash上拷贝
While循环
36
Boot Loader阶段2介绍(6/8)
4)设置内核的启动参数
Boot Sector
0x7c00h Interrupt Vector
0x0000h ~ 0x3ffh
12
BIOS-构成分析
BIOS映像文件
BIOS-bochs-latest
源代码
C程序:rombios.c、 rombios32.c 汇编代码: rombios32start.S
30
Boot Loader阶段1介绍(4/4)
31
Boot Loader阶段2介绍(1/8)
1)初始化本阶段要使用到的硬件设备


初始化至少一个串口,以便和终端用户进行 I/O输出信息 初始化计时器等
32
Boot Loader阶段2介绍(2/8)
2)检测系统的内存映射


内存映射的描述 可以用如下数据结构来描述RAM地址空间中 的一段连续的地址范围:
23
Boot Loader的功能种类
简单Bootloader

只具有系统引导功能 调试支持
具有监控功能(Monitor)的Bootloader



内存读写
Flash烧写 网络下载 环境变量配置
24
开放源码的Boot Loader程序
名称
LILO
支持体系结构
X86
是否Monitor

GRUB
嵌入式系统
An Introduction to Embedded System
第四课 嵌入式系统的 BootLoader技术
教师:蔡铭
cm@
浙江大学计算机学院人工智能研究所 航天科技-浙江大学基础软件研发中心
1
课程大纲
Bootloader程序的基本概念 Bootloader典型框架结构 S3C2410 Bootloader代码分析
Makefile BIOS映像生成工具
biossums.c
13
BIOS-映像文件分析
BIOS-bochs-latest
上电起始 运行代码
14
BIOS模拟-rombios.c分析
16位实模式程序
Power-up Entry Point(系统上电入口) :0xfff0 POST Entry Point(系统检测入口):0xe05b
BIOS——Basic Input Output System
4
PC机的Boot Loader——BIOS(2/2)
BIOS——Basic Input Output System
ROM
PROM
EEPROM
EPROM
5
BIOS与CMOS的关系(1/2)
BIOS:是一个用于系统自检、初始化、 中断处理及系统参数设置的程序。 CMOS :是主机板上一块特殊的RAM芯 片,用于存储系统参数。 通过BIOS设置程序对CMOS参数进行设置。
BLOB
X86
ARM


Etherboot
U-boot RedBoot VIVI
X86
X86、ARM、PPC X86、ARM、PPC A Bootloader程序的基本概念 Bootloader典型框架结构 S3C2410 Bootloader代码分析
26
Boot Loader的典型框架结构
for (p = (char *)0x100000; (int)p < 0x40000000; p += delta) { for (ix = 0; ix < N_TIMES; ix++) /* 保存内存原有信息 */ { temp[ix] = *((int *)p + ix); *((int *)p + ix) = TEST_PATTERN; /*TEST_PATTERN 0x12345678*/ } cacheFlush (DATA_CACHE, p, 4 * sizeof(int)); if (*(int *)p != TEST_PATTERN) /* 测试内存单元有效性 */ p -= delta; for (ix = 0; ix < N_TIMES; ix++) /* 恢复内存原有信息 */ *((int *)p + ix) = temp[ix]; 34 }
Boot Loader的启动过程通常是多阶段的

提供复杂的功能:突破引导扇区512字节限制 提高代码移植性:高阶段代码采用高级语言 提高运行速度 :高阶段代码在内存中执行
大多数Boot Loader可分为阶段1和阶段2 两大部分

阶段1:实现依赖于CPU体系结构的代码 阶段2:实现一些复杂的功能
Boot Loader阶段2介绍(4/8)
非连续内存区域探测——具有空洞内存的探测
from 内存区域低端 to 内存区域最高端,以页为单位进行内存探测 { 对当前内存进行检测; if (当前内存页状态 与 前一内存页状态一致) 合并内存状态情况; else 记录当前内存区域状态。 }
35
Boot Loader阶段2介绍(5/8)
10
BIOS Boot Specification
BIOS Boot Specification
用于描述BIOS识别各类IPL(Initial Program
Load)设备,并进行引导设备优先级排序、
启动加载等功能。
BIOS启动时采用实模式(real mode)
寻址,寻址空间为16位。
9
从PC机启动扇区程序
MBR示例—《自己动手写操作系统》
BIOS中断服务 10H 屏幕显示 11H 设备检验 12H 测定存储器容量 13H 磁盘I/O 14H 串行通讯口I/O 15H 盒式磁带I/O 16H 键盘输入 17H 打印机输出 18H BASIC入口代码 19H 引导装入程序
21
嵌入式系统的Boot Loader程序(2/2)
Boot Loader的实现依赖于硬件环境

CPU体系结构:ARM、PPC、x86、MIPS 板级设备:时钟、FLASH、通讯端口 Boot Loader的入口地址 Boot Loader与开发机的通讯机制
串口 网络
专用Boot Loader 通用Boot Loader:U-boot、Redboot


标记列表(tagged list)的形式来传递启动参数, 启动参数标记列表以标记ATAG_CORE开始,以标记 ATAG_NONE结束 嵌入式Linux系统中,通常需要由Boot Loader设置。 常见启动参数有:ATAG_CORE、ATAG_MEM、 ATAG_CMDLINE、ATAG_RAMDISK、ATAG_INITRD,以 ATAG_NONE结束。
17
下一代BIOS——UEFI (3/3)
UEFI的优势
32/64位寻址模式,支持2T硬盘,驱动空间大大提高
模块化、C语言风格、动态链接形式系统结构
Driver/protocol替代中断/硬件端口操作,启动速度快 采用Flat mode替代X86实模式 采用Removable Binary Drivers替代二进制code 提供UEFI shell命令
相关文档
最新文档