• BIOS、BootLoader、uboot对比


    转载:http://blog.csdn.net/conowen/article/details/7253620

    BIOS

    BIOS是英文"Basic Input Output System"的缩略语,直译过来后中文名称就是"基本输入输出系统"。其实,它是一组固化到计算机内主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、系统设置信息、开机后自检程序和系统自启动程序。 其主要功能是为计算机提供最底层的、最直接的硬件设置和控制。

    BootLoader

    PC机中的引导加载程序由BIOS(其本质是一段固件程序)和GRUB或LILO一起组成。BIOS在完成硬件检测和资源分配后,将硬盘中的引导程序读到系统内存中然后将控制权交给引导程序。引导程序的主要任务是将内核从硬盘上读到内存中,然后跳转到内核的入口点去运行,即启动操作系统。

    BootLoader是一段小程序,可以把它想象成PC机linux上的GRUB/LILO引导程序,只不过在嵌入式linux中,没有BIOS,而是直接从flash中运行,来装载内核。它可以初始化硬件设备,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统做好准备。

    简单地说,BootLoader就是在操作系统运行之前运行的一段小程序。通过这段小程序,可以初始化硬件设备,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统做好准备。

    一个嵌入式系统从软件角度来看分为三个层次:
    1.引导加载程序
    包括固化在固化中的boot程序(可选),和BootLoader两大部分
    2.linux内核
    特定于嵌入式平台的定制内核
    3.文件系统
    包括了系统命令和应用程序

    --------------------------------------------------------------------------------
     BootLoader-->Boot Parameters-->Kernel-->Root Filesystem 
    --------------------------------------------------------------------------------

    为什么需要进行bootloader移植?
    答:1.因为每种不同的CPU体系结构都有不同的BootLoader
    2.BootLoader依赖于具体的嵌入式板级设备的配置
    --------------------------------------------------------------------------------
    BootLoader启动过程可分为单阶段和多阶段(stage1、stage2),其中stage1完成初始化硬件,如CPU寄存器、内存控制器,为stage2准备内存空间。一般stage1是可以直接在nor flash中运行的,并将stage2复制到内存RAM中,设置堆栈,然后跳转到stage2(从这也可以看出stage2是在RAM中运行的,与stage1不同)

    BootLoader的stage1通常包括以下步骤:
    1.硬件设备初始化  如CPU寄存器、内存控制器
    2.为加载BootLoader的stage2准备RAM空间
    3.拷贝BootLoader的stage2到RAM空间中
    4.设置好堆栈    为什么?为了跳转到stage2的入口,因为stage2大多数是用C语言写的
    5.跳转到stage2的C入口点

    BootLoader的stage2通常包括以下步骤:
    1.初始化本阶段要使用到的硬件设备    各种设备,如网卡
    2.将内核映像和根文件系统映像从flash上读到RAM中去
    3.调用内核

    --------------------------------------------------------------------------------

    Uboot

    Uboot用于多种嵌入式CPU的BootLoader程序
    支持多种嵌入式操作系统的引导
    UBOOT目录结构
    1.Borad        与开发板有关的文件。第一个开发板都以一个子目录出现在当前目录中
    2.Common    实现Uboot支持的命令
    3.Cpu        与特定CPU架构相关的代码,支持的CPU对应一个子目录(注意CPU与开发板的区别)
    3.Disk        对磁盘的支持
    4.Doc        文档目录
    5.Drivers    Uboot支持的设备驱动程序  如各种网卡、串品、USB、支持CFI的Flash
    6.Fs         文件系统的支持
    7.Iclude    Uboot使用的头文件。该目录下configs目录有与开发板相关的配置头文件        该目录下的asm目录有与CPU体系结构相关的头文件
    8.Net        与网络协议相关的代码    各路协议的实现
    9.Tools        生成Uboot的工具,如:mkimage,crc等等

    Uboot编译分为两步
    1.执行每种board相关的配置    如:make amdk_2420
    2.编译生成uboot.bin文件        如:make CROSS_COMPILE=arm-linux-(指定正确路径)

    u-boot终极目的就是启动内核 。。。。分两步

    a. 从flash读出内核UImage, 分区名不重要, 关键是代码中写死的 分区起始地址。。。

    b. 启动内核, do_bootm_linux

    do_bootm_linux又分两步,设置启动参数,告诉内核一些参数(有一个起始地址,按固定格式写入),跳到内核入口地址再启动内核,内核启动后要读取设置的参数可以从起始地址读取。。。

  • 相关阅读:
    uni-app 发起请求,Toast 消息提示 ,跳转页面
    uView初识
    uni-app初识
    docker目录 /var/lib/docker/containers 日志清理
    Linux中使用pigz工具更快的压缩和解压文件
    docker 修改默认网段
    LayaAir提示:版本不匹配!全局tsc(2.7.2)!=VS Code的语言服务(2.1.5)。可能出现不一致的编译错误
    C++ 格式化 浮点为字符串
    安装 ta-lib
    编译 python 代码
  • 原文地址:https://www.cnblogs.com/Caden-liu8888/p/7603837.html
Copyright © 2020-2023  润新知