引导程序
Posted 荆棘人
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了引导程序相关的知识,希望对你有一定的参考价值。
计算机的存储器分为大容量存储器(通常为硬盘)和主存储器(即内存),操作系统(如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绝对是不二的选择!
号外
如果您有什么问题,请关注“嵌入式系统开发者之家”给本公众号留言,我们会在第一时间回复您的问题!
//-----------------------------------------------------------------------------------------------------------
一、介绍
- 系统开机或者重启
- BIOS 加电自检 ( Power On Self Test -- POST )。BIOS执行内存地址为 FFFF:0000H 处的跳转指令,跳转到固化在ROM中的自检程序处,对系统硬件(包括内存)进行检查。
- 读取主引导记录(MBR)。当BIOS检查到硬件正常并与 CMOS 中的设置相符后,按照 CMOS 中对启动设备的设置顺序检测可用的启动设备。BIOS将相应启动设备的第一个扇区(也就是MBR扇区)读入内存地址为0000:7C00H 处。
- 检查0000:7DFEH-0000:7DFFH(MBR的结束标志位)是否等于55AAH,若不等于则转去尝试其他启动设备,如果没有启动设备满足要求则显示"NO ROM BASIC"然后死机。
- 当检测到有启动设备满足要求后,BIOS将控制权交给相应启动设备。启动设备的MBR将自己复制到0000:0600H处, 然后继续执行。
- 根据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内核载入程序]载入程序自动载入注册表和驱动文件之后就是你看见的登陆界面了,要是没有密码就直接进桌面了
//-----------------------------------
以上是关于引导程序的主要内容,如果未能解决你的问题,请参考以下文章