引导程序bootl

上传人:san****019 文档编号:69899899 上传时间:2019-01-15 格式:PPT 页数:11 大小:286.31KB
返回 下载 相关 举报
引导程序bootl_第1页
第1页 / 共11页
引导程序bootl_第2页
第2页 / 共11页
引导程序bootl_第3页
第3页 / 共11页
引导程序bootl_第4页
第4页 / 共11页
引导程序bootl_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《引导程序bootl》由会员分享,可在线阅读,更多相关《引导程序bootl(11页珍藏版)》请在金锄头文库上搜索。

1、引导程序 Bootloader,计算机操作系统的引导,PC 机中的引导加载程序由 BIOS和位于硬盘 MBR 中的 OS Boot Loader(比如,LILO 和 GRUB 等)一起组成。BIOS 在完成硬件检测和资源分配后,将硬盘 MBR 中的 Boot Loader 读到系统的 RAM 中,然后将控制权交给 OS Boot Loader。Boot Loader 的主要运行任务就是将内核映象从硬盘上读到 RAM 中,然后跳转到内核的入口点去运行,也即开始启动操作系统。 嵌入式系统中,通常并没有像 BIOS 那样的固件程序,因此整个系统的加载启动任务就完全由 Boot Loader 来完成。

2、在一个基于 ARM9的嵌入式系统中,系统在上电或复位时通常都从地址 0x00000000 处开始执行,而在这个地址处安排的通常就是系统的 Boot Loader 程序。,Boot Loader 的概念,简单地说,Boot Loader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。 通常,Boot Loader 是严重地依赖于硬件而实现的,每种不同的 CPU 体系结构都有不同的 Boot Loader。有些 Boot Loader 也支持多种体系结构

3、的 CPU,比如 U-Boot 就同时支持 ARM 体系结构和MIPS 体系结构。除了依赖于 CPU 的体系结构外,Boot Loader 实际上也依赖于具体的嵌入式板级设备的配置。这也就是说,对于两块不同的嵌入式板而言,即使它们是基于同一种 CPU 而构建的,要想让运行在一块板子上的 Boot Loader 程序也能运行在另一块板子上,通常也都需要修改 Boot Loader 的源程序。,Boot Loader 的操作模式,启动加载模式:这种模式也称为“自主” 模式。也即 Boot Loader 从目标机上的某个固态存储设备上将操作系统加载到 RAM 中运行,整个过程并没有用户的介入。这种模

4、式是 Boot Loader 的正常工作模式,因此在嵌入式产品发布的时侯,Boot Loader 显然必须工作在这种模式下。 下载模式:在这种模式下,目标机上的 Boot Loader 将通过串口连接或网络连接等通信手段从主机(Host)下载文件,比如:下载内核映像和根文件系统映像等。从主机下载的文件通常首先被 Boot Loader 保存到目标机的 RAM 中,然后再被 Boot Loader 写到目标机上的FLASH 类固态存储设备中。,Boot Loader 的主要任务与典型结构框架,从操作系统的角度看,Boot Loader 的总目标就是正确地调用内核来执行。另外,由于 Boot Lo

5、ader 的实现依赖于 CPU 的体系结构,因此大多数 Boot Loader 都分为 stage1 和 stage2 两大部分。 依赖于 CPU 体系结构的代码,比如设备初始化代码等,通常都放在 stage1 中,而且通常都用汇编语言来实现,以达到短小精悍的目的。而 stage2 则通常用C语言来实现,这样可以实现给复杂的功能,而且代码会具有更好的可读性和可移植性。,Boot Loader的 stage1 工作步骤,硬件设备初始化。 屏蔽所有的中断。 设置 CPU 的速度和时钟频率。 RAM 初始化。 初始化 LED。 关闭 CPU 内部指令数据 cache。 为加载 Boot Loader

6、 的 stage2 准备 RAM 空间。 拷贝 Boot Loader 的 stage2 到 RAM 空间中。 设置好堆栈。 跳转到 stage2 的 C 入口点。,加载 Boot Loader 的 stage2 准备 RAM 空间,为了获得更快的执行速度,通常把 stage2 加载到 RAM 空间中来执行,因此必须为加载 Boot Loader 的 stage2 准备好一段可用的 RAM 空间范围。 由于 stage2 通常是 C 语言执行代码,因此在考虑空间大小时,除了 stage2 可执行映象的大小外,还必须把堆栈空间也考虑进来。此外,空间大小最好是 memory page 大小(通常是

7、 4KB)的倍数。一般而言,1M 的 RAM 空间已经足够了。,Boot Loader的 stage2工作步骤,初始化本阶段要使用到的硬件设备。 检测系统内存映射(memory map)。 将 kernel 映像和根文件系统映像从 flash 上读到 RAM 空间中。 为内核设置启动参数。 调用内核。,规划内核映像和根文件系统内存占用的布局,对于内核映像,一般将其拷贝到从(MEM_START0x8000) 这个基地址开始的大约1MB大小的内存范围内(嵌入式 Linux 的内核一般都不操过 1MB)。为什么要把从 MEM_START 到 MEM_START0x8000 这段 32KB 大小的内存

8、空出来呢?这是因为 Linux 内核要在这段内存中放置一些全局数据结构,如:启动参数和内核页表等信息。 而对于根文件系统映像,则一般将其拷贝到 MEM_START+0x00100000 开始的地方。如果用 Ramdisk 作为根文件系统映像,则其解压后的大小一般是1MB。,设置内核的启动参数,应该说,在将内核映像和根文件系统映像拷贝到 RAM 空间中后,就可以准备启动 Linux 内核了。但是在调用内核之前,应该作一步准备工作,即:设置 Linux 内核的启动参数。 Linux 2.4.x 以后的内核都期望以标记列表(tagged list)的形式来传递启动参数。启动参数标记列表以标记 ATA

9、G_CORE 开始,以标记 ATAG_NONE 结束。每个标记由标识被传递参数的 tag_header 结构以及随后的参数值数据结构来组成。数据结构 tag 和 tag_header 定义在 Linux 内核源码的include/asm/setup.h 头文件中:,调用内核,Boot Loader 调用 Linux 内核的方法是直接跳转到内核的第一条指令处,在跳转时,下列条件要满足: CPU 寄存器的设置: R00; R1机器类型 ID; R2启动参数标记列表在 RAM 中起始基地址; CPU 模式: 必须禁止中断(IRQs和FIQs); CPU 必须 SVC 模式; Cache 和 MMU 的设置: MMU 必须关闭; 指令 Cache 可以打开也可以关闭; 数据 Cache 必须关闭;,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号