博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BootLoader理解
阅读量:4297 次
发布时间:2019-05-27

本文共 1262 字,大约阅读时间需要 4 分钟。

在嵌入式操作系统中,BootLoader是在内核运行之前运行。可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用准备好正确的环境。在中,通常并没有像BIOS那样的程序(注,有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由BootLoader来完成。在一个基于ARM7TDMI core的中,系统在上电或复位时通常都从地址0x00000000处开始执行,而在这个地址处安排的通常就是系统的BootLoader程序。

Bootloader是嵌入式系统在加电后执行的第一段代码,在它完成CPU和相关硬件的初始化之后,再将操作系统映像或固化的嵌入式应用程序装在到内存中然后跳转到操作系统所在的空间,启动操作系统运行。

在专用的板子运行GNU/Linux系统已经变得越来越流行。一个Linux系统从的角度看通常可以分为四个层次:

1、 引导加载程序。包括固化在(firmware)中的boot代码(可选),和BootLoader两大部分。
2、。特定于板子的定制内核以及内核的启动参数。
3、 文件系统。包括和建立于设备之上文件系统。通常用ramdisk来作为rootfs。
4、 用户。特定于用户的。有时在用户和层之间可能还会包括一个。常用的GUI有:MicroWindows和MiniGUI等。
引导加载程序是系统加电后运行的第一段。PC机中的引导加载程序由(其本质就是一段程序)和位于硬盘中的OS BootLoader(比如,和等)一起组成。BIOS在完成硬件检测和资源分配后,将硬盘MBR中的BootLoader读到系统的RAM中,然后将控制权交给OS BootLoader。BootLoader的主要运行任务就是将映象从硬盘上读到 RAM 中,然后跳转到内核的入口点去运行,也即开始启动。
通常,BootLoader是严重地依赖于硬件而实现的,特别是在世界。因此,在世界里建立一个通用的BootLoader几乎是不可能的。尽管如此,我们仍然可以对bootloader归纳出一些通用的概念来,以指导用户特定的BootLoader设计与实现。
1.自启动模式:在这种模式下,bootloader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。
2.交互模式:在这种模式下,目标机上的bootloader将通过串口或网络等通行手段从开发主机(Host)上下载内核映像等到RAM中。可以被bootloader写到目标机上的固态存储媒质中,或者直接进入系统的引导。也可以通过串口接收用户的命令。
启动过程:
第一阶段:
1.初始化基本硬件;
2.把bootloader自动搬运到内存中;
3.设置堆栈指针并将bss段清零。为后续执行代码做准备;
第二阶段:
1.初始化本阶段要用到的硬件;
2.读取环境变量;
3.启动:
(a)自启动模式,从Flash或通过网络加载内核并执行;
(b)下载模式,接收到用户的命令后执行;

转载地址:http://sacws.baihongyu.com/

你可能感兴趣的文章
文章索引~OpenCV
查看>>
国内从事红外热成像的公司
查看>>
opencv Bmp和opencv格式转换
查看>>
IplImage结构
查看>>
CvMat
查看>>
图像处理和图像识别中常用的OpenCV函数
查看>>
VC多线程--在线程之间传递窗口句柄是安全的
查看>>
在OnPaint中必须调用一次BeginPaint和EndPaint,且也只能调用一次
查看>>
为什么析构函数是虚函数
查看>>
多线程和MsgWaitForMultipleObjects
查看>>
窗口刷新 Invalidate UpdateWindow RedrawWindow
查看>>
Visual Studio 2008 查找耗时函数 C++ Profiler 性能 优化
查看>>
MFC 工具条 CToolBar : 添加控件
查看>>
MFC程序崩溃的友好处理
查看>>
CMFCControl 问题
查看>>
ActiveX 控件注册的几种方法 VC++编写
查看>>
文件类型及相关打开程序的注册
查看>>
C++成员函数做为线程函数
查看>>
C++计算 MD5值 (数字签名)
查看>>
MFC之模态与非模态对话框的创建与销毁
查看>>