如何编写引导程序 Hello World

如何编写引导程序 Hello World,第1张

//入口函数编法,函数形参按编译器给的//Language:C++控制台程序#includeusingnamespacestdinttmain()//入口函数{cout>>"HelloWorld!">>endlreturn0}//以上代码在MicrosoftVisualC++2010下可运行成功

一般来说,当电脑启动时,它所执行的第一条指令并不是来自安装在硬盘上的 *** 作系统。换句话说,要想启动我们熟悉的 *** 作系统,电脑需要首先启动一个预程序。完成这一 *** 作的就是引导程序(Bootloader)。

引导程序通常很小,甚至只是预先写死在 ROM 中的几条指令。在机器接收到启动信号时,引导程序指挥机器去完成配置硬件、寻找系统等一系列 *** 作。

通常,我们可以根据启动顺序,把引导程序大致分为两类:

顾名思义,这种引导程序更底层,往往是预置在主板中,我们无法进行更改的。我们经常用到的 BIOS(严格来说我们常用到是 BIOS 设置界面,但是在交流中我们经常把设置界面和 BIOS 程序本身划等号,这里自然指的是 BIOS 程序)在电脑中就是扮演这个角色。折腾过电脑的人可能有过这样的经验,无论电脑是否连接了硬盘,都可以正常进入 BIOS;实际上,更多数遇到的情况是硬盘突然崩了导致开机无法进入系统而自动进入了 BIOS。可见,BIOS 程序的启动与硬盘无关。

当电脑启动了 BIOS 后,电脑便开始在硬盘上寻找 *** 作系统了。在硬盘茫茫文件中,电脑是如何精确定位到系统文件的呢?这时就需要硬盘上的二级引导程序。

为了讲清二级引导程序,我们需要首先了解几个关于硬盘的概念。

引导记录,通常指主引导记录(MBR),既可以指一种在硬盘最开始扇区寻找引导程序的引导方式,又可以指在硬盘最开始的一部分扇区中存放的记录分区、引导等重要信息的数据。不过为了方便理解,我个人习惯把引导方式称为“MBR 引导”,把负责记录引导的相关扇区称为“主引导记录(MBR)”,而负责记录分区的称为“分区表”。

硬盘的分区我想大家应该都能理解,所谓分区表就是指硬盘的分区方式,相关数据通常存在硬盘最开始的一部分扇区中。

这里,分区表又分为两种类型:

顾名思义,即以 MBR 方式进行分区的分区表类型。在这种方式中,硬盘前部的 64 个扇区存放分区表。由于每个主分区都需要 16 个扇区记录分区信息,所以 MBR 分区表类型下只能划分出 4 个主分区。若想划分更多的分区,只能牺牲最后一个主分区用作扩展分区,进而划分逻辑分区。

在这种分区下, 引导信息写在硬盘前部扇区的 MBR 中,而不是硬盘分区内。 由于扇区大小的限制,引导扇区中的引导程序不能太长。通常情况下都是在引导扇区中写入一个简单的引导程序,再指引电脑在硬盘分区执行下一步的引导程序。

GUID 是全局唯一标识分区表(GUID Partition Table)的缩写,这是为了替代 MBR 分区表而发布的一个新的标准。在这种分区表类型下,硬盘的容量不再限制于 4TB。同时,GUID 是 EFI(Extensible Firmware Interface,可扩展固件接口)标准中的一部分,在这种分区表类型下电脑采用了之后会提到的 EFI 执行程序的方式引导系统。

为了简化理解,我们可以大致总结出如下的对应关系。

: MBR 分区表类型——扇区引导——适用于 BIOS(LEGACY)启动

: GPT 分区表类型——分区引导——适用于 UEFI 模式启动

在 MBR 分区表类型中,BIOS 首先搜寻硬盘的引导扇区,在扇区中执行存放的引导指令,指令通常指向并启动硬盘中引导分区内的引导程序,进而启动系统。

而在 GPT 分区表类型中,电脑会在 EFI 引导分区(ESP 分区)中寻找 EFI 可执行程序,通常为 Bootx64.efi 或者 Bootia32.efi,这个程序会指向引导程序对应的执行文件,进而引导系统。

目前来看,UEFI 是主流趋势,BIOS 引导方式已经渐渐淡出了市场。不过由于 BIOS 引导年代流传下来了很多功能强大的工具,仍然有一些用户喜欢用 BIOS 方式引导系统(私人维修店的无良商家居多)。目前市场主流的主板都是符合 UEFI 标准并兼容 BIOS 启动方式的。

对于 Windows 电脑来说,这显然时最常见的引导方式。这种引导方式的主引导记录(MBR)为 Windows NT,直接搜索并启动第一个激活的分区。

电脑启动时,BOOTMGR 会搜索分区中的 bootmgr 内核文件(legacy 下为 ntldr),这个文件会继续按照 BCD 文件设置的系统参数启动系统。

Grub 是开源组织 GNU Project 开发的一个类 Unix 引导系统,通过配置.cfg 文件可以引导多种系统内核。目前大多数 Linux 系统都是用 Grub 作为引导方式。目前 Grub 有以下几个常用的分支:

基于 Grub 的一个魔改版,顾名思义,Grub4Dos 是为了兼容 DOS *** 作而生。因为其强大的图形界面定制和多系统引导功能,在盗版 DVD 年代广为受中国玩家欢迎,那个年代的各种系统修复 PE 工具箱基本都是用 Grub4Dos 编写的。

但是,Grub4Dos 有个致命的缺陷,那就是它不支持 EFI 启动,这也是为什么一些习惯使用 Grub4Dos 工具箱的私人维修店无良奸商在这个 EFI 主流的年代还会把 Windows 装成 BIOS 引导启动。

GNU 团队开发的第二代 Gurb,目前 Github 上很多大神还在日常维护。很多不懂洋文的人总是以为 Grub2 是 2 代,Grub4Dos 是 4 代所以 Grub4Dos 要比 Grub2 强大,显然这种刻板印象是可笑的。事实上,Grub2 是笔者目前见过功能最强大的引导程序。兼容 BIOS 和 EFI 两种启动方式,基本能够引导现在所有的 *** 作系统,非常适合作为 U 盘引导工具。

玩过黑苹果的人一定不会对 Clover 陌生,除了引导 OS X 以外,它支持 BIOS 和 EFI 两种启动模式下引导 Windows、Linux 系统。Clover 的强大之处在于对 OS X 驱动的配置上,针对不同的机型玩家的可 *** 作性很大。不过相比较 Gurb2 而言,Clover 更适合作为电脑系统引导,做 U 盘引导工具就要逊色于 Grub2 了。

syslinux 对于 Linux 系统的引导功能还是很强大的,不过似乎很少有人会去折腾 syslinux 的多系统启动,多是模块化之后在 Grub2 中用命令调用。

除此之外,可能还有 rEFInd、WEE、Plop 等引导程序,因为比较小众,在这里不做介绍了。

目前来说,EFI 引导方式是主流,不管是多系统启动还是引导修复,EFI 都要比 BIOS 简单方便许多。对于有多系统需要的玩家,EFI+Grub2 是一个比较完善的解决方案。

参考链接:

Comparison of boot loaders

: https://en.wikipedia.org/wiki/Comparison_of_boot_loaders

GNU GRUB

: https://www.gnu.org/software/grub/

1、启动Windows 7 *** 作系统,点击任务栏"开始"按钮。

2、唤出开始菜单列表,选择"所有程序→附件→Windows 资源管理器"项。

3、唤出"Windows 资源管理器"程序窗口,点击左侧"计算机"文件夹。

4、鼠标右击"计算机→本地磁盘(C:)"图标,d出快捷菜单选择"属性"项。

5、选择"本地磁盘(C:)属性→工具"标签,点击"查错→开始检查..."按钮。

6、勾选"磁盘检查选项"全部复选框,点击"开始"按钮。

7、这样就可以修复电脑硬盘引导程序出问题


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11835407.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存