Bootloader基础知识解析
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Bootloader是最先被系统执行的程序。
每种不同的 CPU 体系结构都有不同的 Boot Loader。
有些 Boot Loader 也支持多种体系结构的 CPU,比如 U-Boot 就同时支持 ARM 体系结构和MIPS体系结构。
Boot Loader 实际上也依赖于具体的嵌入式板级 设备的配置。对于两块不同的嵌入式板而言,即使 它们是基于同一种 CPU 而构建的,要想让运行在一 块板子上的 Boot Loader 程序也能运行在另一块 板子上,通常也都需要修改 Boot Loader 的源程序。
固态存储设备的典型空间分配结构
引导加载程序是系统加电后运行的第一段软件代码。 在 PC 机中: PC 机中的引导加载程序由 BIOS(其本质就是一段固 件程序)和位于硬盘中的OS Boot Loader(比如,LILO 和 GRUB 等)一起组成。 BIOS: 在完成硬件检测和资源分配后,将硬盘中的 Boot Loader 读到系统的 RAM 中,然后将控制权交给 OS Boot Loader。 Boot Loader: 主要运行任务就是将内核映象从硬盘上读到 RAM 中,然后跳转到内核的入口点去运行,也即开始启动 操作系统。
在嵌入式系统中: 通常并没有像 BIOS 那样的固件程序
(有的嵌入式 CPU 也会内嵌一段短小的启动程序)
,因此整个系统的加载启动任务就完全由 Boot Loader 来完成。 比如在一个基于 ARM7TDMI core 的嵌入式系统 中,系统在上电或复位时通常都从地址 0x00000000 处
开始执行,而在这个地址处安排的通常就是系统的
一、 bootloader的基本概念
1、什么是bootloader(引导加载程序)
简单地说BootLoader就是在操作系统内核或 用户应用程序运行之前运行的一段小程序。通过 这段小程序,我们可以初始化硬件设备、建立内 存空间的映射图(有的CPU没有内存映射功能 如 S3C44B0),从而将系统的软硬件环境带到一 个合适的状态,以便为最终调用操作系统内核或 用户应用程序准备好正确的环境。
最常见的情况是,目标机上的BootLoader通过串口与主 机之间进行文件传输,传输协议通常xmodem/ymodem/zmodem 协议中的一种。但是,由于串口传输的速度是有限的,因此 通过以太网连接并借助TFTP协议来下载文件是个更好的选择。 但是,在通过以太网连接和TFTP协议来下载文件时,因为主 机方必须有一个软件用来的提供TFTP服务,所以操作相对复 杂。
2、 Boot Loader的操作模式
多数BootLoader都包含两种不同的操作模式。“启动 加载”模式和“下载”模式,这种区别仅对于开发人员才 有意义。但从最终用户的角度看,BootLoader的作用就是 用来加载操作系统,而并不存在所谓的启动加载模式与下 载工作模式的区别。 启动加载(Boot loading)模式:这种模式也称为 “自主”(Autonomous)模式,也即BootLoader从目标机 上的某个固态存储设备上将操作系统加载到RAM中运行, 整个过程并没有用户的介入。这种模式是BootLoader的正 常工作模式。因此在嵌入式产品发布的时候, BootLoader显然必须工作在这种模式下。
3、BootLoader的启动过程
由于 Boot Loader 的实现依赖于 CPU 的体 系结构,因此大多数 Boot Loader 的启动都分为 stage1 和 stage2两大部分。依赖于 CPU 体系结 构的代码,比如设备初始化代码等,通常都放在 stage1中,而且通常都用汇编语言来实现,以达 到短小精悍的目的。而 stage2则通常用C语言来 实现,这样可以实现更复杂的功能,而且代码会 具有更好的可读性和可移植性。
Boot Loader 的 stage1
• 通常包括以下步骤(以执行的先后顺序):
硬件设备初始化 1. 屏蔽所有的中断。为中断提供服务通常是 OS 设 备驱动程序的责任,因此在 Boot Loader 的执行全过程 中可以不必响应任何中断。中断屏蔽可以通过写 CPU 的 中断屏蔽寄存器或状态寄存器(比如 ARM 的 CPSR 寄存 器)来完成。 2. 设置 CPU 的速度和时钟频率。 3. RAM 初始化。包括正确地设置系统的内存控制器的 功能寄存器以及各内存库控制寄存器等。 4. 初始化 LED。典型地,通过 GPIO 来驱动 LED,其 目的是表明系统的状态是 OK 还是 Error。如果板子上没 有 LED,那么也可以通过初始化 UART 向串口打印 Boot Loader 的 Logo 字符信息来完成这一点。 5. 关闭 CPU 内部指令/数据 cache。
Boot Loader 程Βιβλιοθήκη Baidu。
系统加电或复位后,所有的处理器通常都从某个预先 安排的地址上取指令。 比如,ARM在复位时从地址0x0取指。
嵌入式系统中通常都有某种类型的固态存储设备(比 如:ROM、EEPROM 或FLASH 等)被映射到这个预先安 排的地址上。因此在系统加电后,处理器将首先执行 Bootloader 程序。
第六章
Bootloader
一个嵌入式 Linux 系统从软件的角度看通常可以分为五 个层次:
1. 引导加载程序 包括固化在固件中的 boot 代码(可选),和 Bootloader 两大部分。 2. Linux 内核 特定于嵌入式板子的定制内核(包括驱动程序)以及内核的 启动参数。 3. 文件系统 建立于 Flash 设备之上文件系统。 4.驱动程序编写(移植) 5. 用户应用程序 特定于用户的应用程序。有时在用户应用程序和内核层之间 可能还会包括一个嵌入式图形用户界面。常用的嵌入式 GUI 有:QT 和 MiniGUI 。
• 下载(Down loading)模式: 在这种模式下 目标机上的BootLoader 将通 过串口连接或网络连接等通信手段从主机下载文 件,比如:下载应用程序、数据文件、内核映像 等。从主机下载的文件通常首先被BootLoader保 存到目标机的RAM中,然后再被BootLoader写到目 标机上的固态存储设备中。BootLoader的这种模 式通常在系统更新时使用。工作于这种模式下的 BootLoader通常都会向它的终端用户提供一个简 单的命令行接口。
每种不同的 CPU 体系结构都有不同的 Boot Loader。
有些 Boot Loader 也支持多种体系结构的 CPU,比如 U-Boot 就同时支持 ARM 体系结构和MIPS体系结构。
Boot Loader 实际上也依赖于具体的嵌入式板级 设备的配置。对于两块不同的嵌入式板而言,即使 它们是基于同一种 CPU 而构建的,要想让运行在一 块板子上的 Boot Loader 程序也能运行在另一块 板子上,通常也都需要修改 Boot Loader 的源程序。
固态存储设备的典型空间分配结构
引导加载程序是系统加电后运行的第一段软件代码。 在 PC 机中: PC 机中的引导加载程序由 BIOS(其本质就是一段固 件程序)和位于硬盘中的OS Boot Loader(比如,LILO 和 GRUB 等)一起组成。 BIOS: 在完成硬件检测和资源分配后,将硬盘中的 Boot Loader 读到系统的 RAM 中,然后将控制权交给 OS Boot Loader。 Boot Loader: 主要运行任务就是将内核映象从硬盘上读到 RAM 中,然后跳转到内核的入口点去运行,也即开始启动 操作系统。
在嵌入式系统中: 通常并没有像 BIOS 那样的固件程序
(有的嵌入式 CPU 也会内嵌一段短小的启动程序)
,因此整个系统的加载启动任务就完全由 Boot Loader 来完成。 比如在一个基于 ARM7TDMI core 的嵌入式系统 中,系统在上电或复位时通常都从地址 0x00000000 处
开始执行,而在这个地址处安排的通常就是系统的
一、 bootloader的基本概念
1、什么是bootloader(引导加载程序)
简单地说BootLoader就是在操作系统内核或 用户应用程序运行之前运行的一段小程序。通过 这段小程序,我们可以初始化硬件设备、建立内 存空间的映射图(有的CPU没有内存映射功能 如 S3C44B0),从而将系统的软硬件环境带到一 个合适的状态,以便为最终调用操作系统内核或 用户应用程序准备好正确的环境。
最常见的情况是,目标机上的BootLoader通过串口与主 机之间进行文件传输,传输协议通常xmodem/ymodem/zmodem 协议中的一种。但是,由于串口传输的速度是有限的,因此 通过以太网连接并借助TFTP协议来下载文件是个更好的选择。 但是,在通过以太网连接和TFTP协议来下载文件时,因为主 机方必须有一个软件用来的提供TFTP服务,所以操作相对复 杂。
2、 Boot Loader的操作模式
多数BootLoader都包含两种不同的操作模式。“启动 加载”模式和“下载”模式,这种区别仅对于开发人员才 有意义。但从最终用户的角度看,BootLoader的作用就是 用来加载操作系统,而并不存在所谓的启动加载模式与下 载工作模式的区别。 启动加载(Boot loading)模式:这种模式也称为 “自主”(Autonomous)模式,也即BootLoader从目标机 上的某个固态存储设备上将操作系统加载到RAM中运行, 整个过程并没有用户的介入。这种模式是BootLoader的正 常工作模式。因此在嵌入式产品发布的时候, BootLoader显然必须工作在这种模式下。
3、BootLoader的启动过程
由于 Boot Loader 的实现依赖于 CPU 的体 系结构,因此大多数 Boot Loader 的启动都分为 stage1 和 stage2两大部分。依赖于 CPU 体系结 构的代码,比如设备初始化代码等,通常都放在 stage1中,而且通常都用汇编语言来实现,以达 到短小精悍的目的。而 stage2则通常用C语言来 实现,这样可以实现更复杂的功能,而且代码会 具有更好的可读性和可移植性。
Boot Loader 的 stage1
• 通常包括以下步骤(以执行的先后顺序):
硬件设备初始化 1. 屏蔽所有的中断。为中断提供服务通常是 OS 设 备驱动程序的责任,因此在 Boot Loader 的执行全过程 中可以不必响应任何中断。中断屏蔽可以通过写 CPU 的 中断屏蔽寄存器或状态寄存器(比如 ARM 的 CPSR 寄存 器)来完成。 2. 设置 CPU 的速度和时钟频率。 3. RAM 初始化。包括正确地设置系统的内存控制器的 功能寄存器以及各内存库控制寄存器等。 4. 初始化 LED。典型地,通过 GPIO 来驱动 LED,其 目的是表明系统的状态是 OK 还是 Error。如果板子上没 有 LED,那么也可以通过初始化 UART 向串口打印 Boot Loader 的 Logo 字符信息来完成这一点。 5. 关闭 CPU 内部指令/数据 cache。
Boot Loader 程Βιβλιοθήκη Baidu。
系统加电或复位后,所有的处理器通常都从某个预先 安排的地址上取指令。 比如,ARM在复位时从地址0x0取指。
嵌入式系统中通常都有某种类型的固态存储设备(比 如:ROM、EEPROM 或FLASH 等)被映射到这个预先安 排的地址上。因此在系统加电后,处理器将首先执行 Bootloader 程序。
第六章
Bootloader
一个嵌入式 Linux 系统从软件的角度看通常可以分为五 个层次:
1. 引导加载程序 包括固化在固件中的 boot 代码(可选),和 Bootloader 两大部分。 2. Linux 内核 特定于嵌入式板子的定制内核(包括驱动程序)以及内核的 启动参数。 3. 文件系统 建立于 Flash 设备之上文件系统。 4.驱动程序编写(移植) 5. 用户应用程序 特定于用户的应用程序。有时在用户应用程序和内核层之间 可能还会包括一个嵌入式图形用户界面。常用的嵌入式 GUI 有:QT 和 MiniGUI 。
• 下载(Down loading)模式: 在这种模式下 目标机上的BootLoader 将通 过串口连接或网络连接等通信手段从主机下载文 件,比如:下载应用程序、数据文件、内核映像 等。从主机下载的文件通常首先被BootLoader保 存到目标机的RAM中,然后再被BootLoader写到目 标机上的固态存储设备中。BootLoader的这种模 式通常在系统更新时使用。工作于这种模式下的 BootLoader通常都会向它的终端用户提供一个简 单的命令行接口。