zoukankan      html  css  js  c++  java
  • 引导程序

      引导程序(bootstrap)是一种实用程序。计算机启动后,系统自行输入的一个简短的程序,由它来完成引导过程。[1]  
    引导是计算机开始输入时,常采用的一种手段。计算机启动后,由设备来实现少量指令和数据的输入,然后由它们再输入其他程序,这种过程称为引导。微型计算机中的引导程序可将用户通过键盘打入的程序及数据,引导输入到随机存储器中。
     
    //----------------百度知道

      计算机的存储器分为大容量存储器(通常为硬盘)和主存储器(即内存),操作系统(如windows、UNIX、Linux、Mac OS)安装在大容量存储器上,而主存储器又分为两部分:能够永久保存数据的ROM(Read Only Memory)和易失性存储器部分(即在关机后数据全部丢失)。
      在ROM部分,有两个程序,引导(boot strapping,简称boot)和BIOS(基本输入输出程序)。
    特征:
      在计算机开机时,boot被自动执行,指引CPU把操作系统从大容量存储器中传送到主存储器的易失区[1] 。一旦操作系统放到了主存储器中,boot要求CPU执行一条转移指令,转到这个存储区域,在这个时候,操作系统接管并且开始控制整个机器的活动。
      在操作系统变成可用之前,boot可以执行BIOS,完成基本的输入输出活动。
    1、开机执行BIOS(基本输入输出系统)引导程序,这个过程叫做系统自检,标识和配置所有的即插即用设备,并配置DMA通道;完成加电自检,测试内存,端口,键盘,视频适配器,磁盘驱动器等基本设备,以及CD-ROM驱动器;对引导驱动器可引导分区定位:在CMOS(complementary metal oxide semiconductor,互补金属氧化物半导体)中,可以自行设置引导顺序,一般顺序是软驱,磁盘,光驱;加载主引导记录以及引导驱动器的分区表,执行主引导记录MBR,主引导记录在硬盘上找到可引导分区,将其分区引导记录装入内存,并将控制权交给分区引导记录,由分区引导记录定位根目录,然后装入操作系统。

    //-----------------------------

    分8步
    1.执行第一条指令。
    2.进入POST(Power On Self Test,加电自检)自检。
    3.初始化显卡。
    4.测试CPU和内存。
    5.检测标准设备。
    6.检测即插即用设备。
    7.更新ESCD系统BIOS将更新ESCD(Extend System Configuration Data,扩展系统数据配置)。
    8.按指定的顺序启动磁盘。

    //---------------------------------------

    系统引导程序的工作原理

      单片机控制系统中,由于程序规模不大,它完全可以存储于程序可寻址的ROM片上(Read Only Memory:只读存储器,它的种类很多,这里不做过多解释)。

    当程序运行时,不需要移动程序位置,便可直接通过PC(Programming Counter:程序计数器,它总是指向CPU下一条要执行的程序指令)指针指向,加载到CPU当中并解释执行。

      目标系统规模比较庞大的嵌入式系统,需要使用规模很大的系统软件与应用软件来实现控制功能。那么,这些软件直接存储在片上可直接寻址的ROM中,是不可能的(CPU的位宽,决定了可直接寻址的物理地址范围不够大)。所以,它们只能存放于容量较大的外部存储设备当中,而外部存储设备的内部空间(类似于某单位的库房内部货架,外部人员无法直接使用,只能通过库房管理员完成出库入库操作)往往不能被PC直接寻址访问!那么,如果要运行程序,必须要将它加载到CPU可寻址的RAM当中。

    谁来做

      系统引导程序(BootLoader)。嵌入式系统中的控制核心SOC(System On A Chip)芯片,在设计伊始,就预留了一部分PC可直接寻址的ROM空间,这部分空间,用户可存放一小段代码,当系统复位时,CPU直接指向这里,并执行它。这是非常重要的特性,针对不同的SOC,其实现方式可能完全不同,但原理相通。

    如何做之第一

    简单的初始化硬件设备(戏说“类似于抢滩登陆当中的先锋部队,规模很小,任务很明确:抢占滩头,并开辟一块安全的登陆区域,供后续抢滩部队安全登陆”),比如:初始化内存,设置堆栈,调整配置CPU工作模式,初始化中断控制系统,驱动存放系统软件的外部存储设备等;

    如何做之第二

    加载系统引导程序自身到RAM中(戏说“后续抢滩部队登陆在先锋部队的引导下登陆”)。因为系统引导程序的规模也比较大,它的代码存储范围也会超出PC可直接指向的范围,所以,必须要加载完整的系统引导程序到RAM中;

    如何做之第三

    系统引导程序驱动并初始化后续所有被使用到的硬件设备(戏说“抢滩部队开辟大范围的安全的登陆场,足够后续的主力作战部队登陆并展开”),比如:检测内存、LCD屏、声音输出设备、简单的通讯设备、存储设备等等;

    如何做之第四

    从外部存储设备中加载操作系统内核,同时为内核设定启动参数,并将系统的控制权交给操作系统(戏说“抢滩部队引导主力作战部队在指定的安全区域登陆,然后讲当前的战场形态以信息的形式通知给主力作战部队,最后将战场的控制权交给主力作战部队,完成任务”),结束使命。

    结束语

    系统引导程序,是嵌入式系统当中必不可少的软件。没有系统引导程序,操作系统自身不能被加载并正确运行。当前在嵌入式系统当中使用最多的系统引导程序是U-Boot,它开源、免费,并且支持绝大部分的嵌入式SOC芯片。同时它还支持很多常用的外部硬件设备,因为它的硬件设备驱动来源于Linux操作系统。所以,对嵌入式系统设计者来说,选择U-Boot绝对是不二的选择!

    号外

    如果您有什么问题,请关注“嵌入式系统开发者之家”给本公众号留言,我们会在第一时间回复您的问题!

    //-----------------------------------------------------------------------------------------------------------

    磁盘引导程序原理及简介

    一、介绍

    • 系统开机或者重启
      1. BIOS 加电自检 ( Power On Self Test -- POST )。BIOS执行内存地址为 FFFF:0000H 处的跳转指令,跳转到固化在ROM中的自检程序处,对系统硬件(包括内存)进行检查。
      2. 读取主引导记录(MBR)。当BIOS检查到硬件正常并与 CMOS 中的设置相符后,按照 CMOS 中对启动设备的设置顺序检测可用的启动设备。BIOS将相应启动设备的第一个扇区(也就是MBR扇区)读入内存地址为0000:7C00H 处。
      3. 检查0000:7DFEH-0000:7DFFH(MBR的结束标志位)是否等于55AAH,若不等于则转去尝试其他启动设备,如果没有启动设备满足要求则显示"NO ROM BASIC"然后死机。
      4. 当检测到有启动设备满足要求后,BIOS将控制权交给相应启动设备。启动设备的MBR将自己复制到0000:0600H处, 然后继续执行。
      5. 根据MBR中的引导代码启动引导程序。

    二、几个问题

    • 为什么需要磁盘引导程序


    为什么需要磁盘引导程序而不是直接载入操作系统?或许是因为历史原因,BIOS最初是为最原始的8位PC所创,8位的PC磁盘很小,所以BIOS只能先载入磁盘引导程序然后通过磁盘引导程序导入操作系统。

    • 磁盘引导程序为什么要从1扇区,0磁头,0磁道加载到7c00H处


    “引导程序加载器--int19”。由于BIOS加载磁盘引导程序时需要调用系统中断int19来加载引导程序,而这个中断指定了将磁盘1扇区,0磁头,0磁道加载到7c00H处。

    • 磁盘引导程序为什么最大只能是512字节


    “A bootstrap must be exactly512 bytes long because of the two byte check and the one sector limitation.”
    “一个引导程序必须为512字节,因为他的大小有一个扇区的限制,最后两个字节需要设置为'0xAA55'。”

    • 磁盘引导程序为什么是16位


    因为DOS系统是16位,X86系统都向后兼容引导时的16位模式。

    //----------------------------------

    Windows7的开机引导

    由bios启动,然后查找硬盘的mbr,mbr指向当前活动分区根目录的bootmgr引导器,bootmgr读取当前活动分区boot文件夹中的bcd数据配置文件,来生成菜单和载入设置用户选择后,控制权转交给winload.exe[windows内核载入程序]载入程序自动载入注册表和驱动文件之后就是你看见的登陆界面了,要是没有密码就直接进桌面了

    //-----------------------------------

  • 相关阅读:
    autocomplete
    ORM组件 ELinq (一)首航之旅
    ORM组件 ELinq 系列
    Jet 驱动对CRUD的支持
    ORM组件 ELinq 更新日志
    年度开源力作ORM组件 ELinq诞生了
    Excel 连接字符串详解
    国内开源ORM组件 ELinq正式版发布
    Firebird 问题总结
    ORM组件 ELinq (二) 映射配置之Table
  • 原文地址:https://www.cnblogs.com/Tpf386/p/6322769.html
Copyright © 2011-2022 走看看