5 嵌入式系统的Bootloader.ppt
《5 嵌入式系统的Bootloader.ppt》由会员分享,可在线阅读,更多相关《5 嵌入式系统的Bootloader.ppt(61页珍藏版)》请在三一办公上搜索。
1、嵌入式系统的Bootloader,宿主机-目标机开发模式,JTAG,并口/串口,嵌入式Linux系统从整体上讲,可以分为五大部分Bootloader(引导加载程序)Kernel(内核)Device drivers(驱动程序)Filesystem(文件系统)Applications(应用程序),从软件的角度看可以分为四个层次:1.引导加载程序。包括固化在固件中的 boot 代码(可选),和 Boot Loader 两大部分。2.Linux 内核。特定于嵌入式板子的定制内核(包括驱动程序)以及内核的 启动参数。3.文件系统。建立于 Flash 设备之上文件系统。4.用户应用程序。特定于用户的应用程
2、序。有时在用户应用程序和内核层之间,可能还会包括一个嵌入式图形用户界面。常用的嵌入式 GUI有:MicroWindows 和 MiniGUI。,Bootloader和嵌入式Linux,构建嵌入式Linux系统的主要任务,内核部分内核裁剪编译底层驱动开发应用程序部分构建基本的嵌入式Linux文件系统应用程序开发与移植,嵌入式Linux系统的开发流程,建立交叉编译环境 Bootloader开发Linux内核的裁剪构造根文件系统 驱动移植/开发应用程序移植开发和调试,Bootloader分类,BootLoader LILOGRUBU-BOOTvivi,Bootloader的通用性质,Bootload
3、er与嵌入式Linux的关系 一个嵌入式系统从软件角度来看分为四个层次:1.引导加载程序。包括固化在固件(firmware)中的 boot 代码(可选),和 Bootloader 两大部分。2.Linux 内核。特定于嵌入式板子的定制内核以及内核的启动参数。3.文件系统。包括根文件系统和建立于 Flash 内存设备之上文件系统。通常用 ram disk 来作为 root file system。4.用户应用程序。特定于用户的应用程序。,引导加载程序是系统加电后运行的第一段软件代码。回忆一下 PC 的体系结构我们可以知道,PC 机中的引导加载程序由 BIOS(其本质就是一段固件程序)和位于硬盘
4、MBR 中的 OS Bootloader(比如,LILO 和 GRUB 等)一起组成。BIOS 在完成硬件检测和资源分配后,将硬盘 MBR 中的 Bootloader 读到系统的 RAM 中,然后将控制权交给 OS Bootloader。Bootloader 的主要运行任务就是将内核映象从硬盘上读到 RAM 中,然后跳转到内核的入口点去运行,也即开始启动作系统。,而在嵌入式系统中,通常并没有像 BIOS 那样的固件程序(注,有的嵌入式 CPU 也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由 Bootloader 来完成。比如在一个基于 ARM7TDMI core 的嵌入式系统
5、中,系统在上电或复位时通常都从地址 0 x00000000 处开始执行,而在这个地址处安排的通常就是系统的 Bootloader 程序。,Bootloader 的概念 简单地说,Bootloader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。Bootloader 的主要运行任务就是将内核映象从硬盘上读到 RAM中,然后跳转到内核的入口点去运行,也即开始启动操作系统。通常,Bootloader 是严重地依赖于硬件而实现的,特别是在嵌入式世界。因此,
6、在嵌入式世界里建立一个通用的 Bootloader 几乎是不可能的。,Bootloader 所支持的 CPU 和嵌入式板,每种不同的 CPU 体系结构都有不同的 Bootloader。有些 Bootloader 也支持多种体系结构的 CPU,比如 U-Boot 就同时支持 ARM 体系结构和MIPS 体系结构。除了依赖于 CPU 的体系结构外,Bootloader 实际上也依赖于具体的嵌入式板级设备的配置。这也就是说,对于两块不同的嵌入式板而言,即使它们是基于同一种 CPU 而构建的,要想让运行在一块板子上的 Bootloader 程序也能运行在另一块板子上,通常也都需要修改Bootloade
7、r 的源程序。,Bootloader 的安装媒介 系统加电或复位后,所有的 CPU 通常都从某个由 CPU 制造商预先安排的地址上取指令。比如,基于 ARM7TDMI core 的 CPU 在复位时通常都从地址 0 x00000000 取它的第一条指令。一个同时装有 Bootloader、内核的启动参数、内核映像和根文件系统映像的固态存储设备的典型空间分配结构图:,用来控制 Bootloader 的设备或机制,主机和目标机之间一般通过串口建立连接,Bootloader 软件在执行时通常会通过串口来进行 I/O,比如:输出打印信息到串口,从串口读取用户控制字符等。,Bootloader 的主要任
8、务与典型结构框架 Bootloader 的启动过程可分为单阶段(Single Stage)和多阶段(Multi-Stage)两种。通常多阶段的 Bootloader 能提供更为复杂的功能,以及更好的可移植性。从固态存储设备上启动的 Bootloader 大多都是两阶段的启动过程,也即启动过程可以分为stage 1和 stage 2 两部分。,stage1通常用汇编语言实现,完成初始化硬件,为stage2准备内存空间,将stage2复制到内存中,设置堆栈,然后跳转到stage2的程序入口。stage2通常用C语言完成,使得程序有更好的可读性与可移植性。主要任务包括:初始化本阶段要用到的硬件设备,
9、检测内存,将操作系统的内核与根文件系统从Flash读到RAM中,设置内核启动参数,最后调用内核。,Bootloader 的操作模式(Operation Mode),大多数 Bootloader 都包含两种不同的操作模式“启动加载”模式“下载”模式这种区别仅对于开发人员才有意义。但从最终用户的角度看,Bootloader 的作用就是用来加载操作作系统,而并不存在所谓的启动加载模式与下载工作模式的区别。,启动加载(Boot loading)模式,这种模式也称为“自主”(Autonomous)模式。也即 Bootloader 从目标机上的某个固态存储设备上将操作系统加载到 RAM 中运行,整个过程并
10、没有用户的介入。这种模式是 Bootloader 的正常工作模式,因此在嵌入式产品发布的时侯,Bootloader 显然必须工作在这种模式下。,下载(Downloading)模式,在这种模式下,目标机上的 Bootloader 将通过串口连接或网络连接等通信手段从主机(Host)下载文件,比如:下载内核映像和根文件系统映像等。从主机下载的文件通常首先被 Bootloader 保存到目标机的 RAM 中,然后再被 Bootloader 写到目标机上的FLASH 类固态存储设备中。,Bootloader 的这种模式通常在第一次安装内核与根文件系统时被使用;此外,以后的系统更新也会使用 Bootlo
11、ader 的这种工作模式。工作于这种模式下的 Bootloader 通常都会向它的终端用户提供一个简单的命令行接口。,像 Blob 或 U-Boot 等这样功能强大的 Bootloader 通常同时支持这两种工作模式,而且允许用户在这两种工作模式之间进行切换。比如,Blob 在启动时处于正常的启动加载模式,但是它会延时 10 秒等待终端用户按下任意键而将 blob 切换到下载模式。如果在 10 秒内没有用户按键,则 blob 继续启动 Linux 内核。,BootLoader 与主机之间进行文件传输所用的通信设备及协议,最常见的情况就是,目标机上的 Bootloader 通过串口与主机之间进行
12、文件传输,传输协议通常是 xmodemymodemzmodem 协议中的一种。但是,串口传输的速度是有限的,因此通过以太网连接并借助 TFTP 协议来下载文件是个更好的选择。,此外,主机方所用的软件也要考虑。比如,在通过以太网连接和 TFTP 协议来下载文件时,主机方必须有一个软件用来提供 TFTP 服务。,Bootloader 的主要任务与典型结构框架,首先我们做一个假定,那就是:假定内核映像与根文件系统映像都被加载到 RAM 中运行。之所以提出这样一个假设前提是因为,在嵌入式系统中内核映像与根文件系统映像也可以直接在 ROM 或 Flash 这样的固态存储设备中直接运行。但这种做法无疑是以
13、运行速度的牺牲为代价的。从操作系统的角度看,Bootloader 的总目标就是正确地调用内核来执行。,由于 Bootloader 的实现依赖于 CPU 的体系结构,因此大多数 Bootloader 都分为 stage1 和 stage2 两大部分。依赖于 CPU 体系结构的代码,比如设备初始化代码等,通常都放在 stage1 中,而且通常都用汇编语言来实现,以达到短小精悍的目的。而 stage2 则通常用C语言来实现,这样可以实现给复杂的功能,而且代码会具有更好的可读性和可移植性。,多阶段的 Bootloader Bootloader 的 stage1 通常包括以下步骤(以执行的先后顺序):1
14、.硬件设备初始化。2.为加载 Bootloader 的 stage2 准备 RAM 空间。3.拷贝 Bootloader 的 stage2 到 RAM 空间中。4.设置好堆栈。5.跳转到 stage2 的 C 入口点。,Bootloader 的 stage2 通常包括以下步骤(以执行的先后顺序):1.初始化本阶段要使用到的硬件设备。2.检测系统内存映射(memory map)。3.将 kernel 映像和根文件系统映像从 flash 上读到 RAM 空间中。4.为内核设置启动参数。5.调用内核。,bootloader 的 stage2 可执行映象刚被拷贝到 RAM 空间时的系统内存布局,Boo
15、tloader 的 stage1,基本的硬件初始化 为加载 stage2 准备 RAM 空间 拷贝 stage2 到 RAM 中,基本的硬件初始化,这是 Bootloader 一开始就执行的操作,其目的是为 stage2 的执行以及随后的 kernel 的执行准备好一些基本的硬件环境。它通常包括以下步骤(以执行的先后顺序),屏蔽所有的中断 为中断提供服务通常是 OS 设备驱动程序的责任,因此在 Bootloader 的执行全过程中可以不必响应任何中断。中断屏蔽可以通过写 CPU 的中断屏蔽寄存器或状态寄存器(比如 ARM 的 CPSR 寄存器)来完成 设置 CPU 的速度和时钟频率 RAM 初
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式系统的Bootloader 嵌入式 系统 Bootloader

链接地址:https://www.31ppt.com/p-2237393.html