其他分享
首页 > 其他分享> > Bootloader

Bootloader

作者:互联网

什么是bootloader?

     首先我们都知道操作系统(作为一个程序)必须要运行在内存中。但究竟操作系统是如何跑到内存中的呢?CPU在出厂设置的时候会内置一段代码,这段代码用于将bootloader 代码拷贝至内存。bootloader 必须存在于ROM 中,它是断电不易失的存储媒介,否则一关机,bootloader 就消失了,那下次就无法启动了。bootloader 所存储的位置并不是用户的硬盘,而是烧写在 开发板 上的特殊ROM硬件上。因为bootloader 必须根据特殊的硬件架构而定制,所以它并不具备跨硬件平台的特性。

    CPU上电后,会从某个地址开始执行。比如MIPS结构的CPU会从0xBFC00000取得第一条指令,而ARM结构的CPU则从地址0x00000000开始。嵌入式开发板中,需要把存储器件ROM或Flash等映射到这个地址,Bootloader就存放在这个地址开始处,这样一上电就可以执行。

   UBoot就是一个Bootloader,可以实现在系统上电后,进行初始化系统(关闭WATCHDOG,改变系统时钟,初始化存储控制器等),复制操作系统到内存中。

(1)uboot主要作用是用来启动操作系统内核。
(2)uboot建立内存空间映射图,为内核的启动运行做好一切准备,将Linux内核代码加载到RAM中运行。
(3)uboot中还有操作Flash等板子上各种硬件的驱动。
(4)uboot还得提供一个命令行界面供人来操作

 

嵌入式系统中广泛采用的非易失性存储器通常是 Flash,而 Flash 又分为 Nor Flash 和Nand Flash 两种。 它们之间的不同在于: Nor Flash 支持芯片内执行(XIP, eXecute In Place),这样代码可以在Flash上直接执行而不必拷贝到RAM中去执行。而Nand Flash并不支持XIP,所以要想执行 Nand Flash 上的代码,必须先将其拷贝到 RAM中去,然后跳到 RAM 中去执行。实际应用中的 bootloader根据所需功能的不同可以设计得很复杂,除完成基本的初始化系统和调用 Linux 内核等基本任务外,还可以执行很多用户输入的命令,比如设置 Linux 启动参数,给 Flash 分区等;也可以设计得很简单,只完成最基本的功能。

 

嵌入式Linux软件系统架构图:

 

软件程序开发中,从下往上每一层的作用依次为:

Bootloader:将硬件初始化,并将内核引导起来;
Linux Kernel:定制、裁剪之后的Linux内核;
根文件系统:提供文件系统,更好的使用存储空间;
设备驱动:完成设备操作,并向上层软件提供设备的调用接口;
应用程序:Linux系统编程、网络编程、shell编程、图形界面编程等等;

 

标签:初始化,bootloader,Flash,内核,Linux,Bootloader
来源: https://www.cnblogs.com/ghnie/p/16638926.html