
一般来说,当电脑启动时,它所执行的第一条指令并不是来自安装在硬盘上的 *** 作系统。换句话说,要想启动我们熟悉的 *** 作系统,电脑需要首先启动一个预程序。完成这一 *** 作的就是引导程序(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、grub 命令行接口(一次性设置)
系统启动过程中按 c 键可进入grub 命令行界面,就可以自定义grub 启动参数了。常用命令有:
help ##查询帮助
help COMMAND ##查询命令帮助
ls : 显示系统磁盘及分区情况
root (hd#,#) :将hd#的第#号分区设置为根分区(CentOS 6)
kernel /PATH/TO/KERNEL_FILE : 设定本次启动用到的内核文件(CentoS 6)
set root=(hd#,msdos#) : 将第#块硬盘的第#个分区设置为根分区(CentOS 7)
linux /PATH/TO/KERNEL_FILE : 设定本次启动用到的内核文件(CentoS 7)
r oot=/dev/mapper/cl-root ro init=/bin/sh : 指明根分区路径;以ro/rw格式挂载第一个运行的程序是bash
initrd /PATH/TO/INITRAMFS_FILE_FILE : 为选定的内核提供额外的ramdisk
CentOS 7:
然后boot 重启,将会出现以下定制的系统了:
CentOS 6:
2、grub 配置文件: 永久配置是要在grub 的配置文件中配置的;
CentOS 6 : /boot/grub/grub.cfg
default=0 : 设置默认启动菜单项;编号从0开始
timeout=5 : 设置菜单项等待被选择的时长
title CentOS Express ##定义内核菜单选项
root (hd0,0)
kernel /vmlinuz-VERSION-release ro [selinux=0] root=/dev/mapper/vg0-root (根据系统设置)
initrd /initramfs-VERSION-release.img
CenOS 7 : /boot/grub2/grub.cfg (/etc/grub2.cfg ), 不要直接修改
grub2-mkconfig会调用/etc/grub.d中的脚本去搜集/etc/default/grub 中的配置参数,生成/etc/grub2.cfg
/etc/default/grub中的参数被修改,就可以使用grub2-mkconfig重新生成/etc/grub2.cfg
#grub2-mkconfig –o /boot/grub2/grub.cfg
3、给Grub 添加保护
CentOS 6:
配置项:
default=0
timeout=5
password [--md5] STRING : 菜单编辑认证
title TITLE :
root (hd#,#) :
kernel /PATH/TO/VMLINUXZ_FILE [PARAMETERS]
initrd /PATH/TO/INITRAMFS_FILE
password [--md5] STRING : 启动选定的内核或 *** 作系统时需要进行认证
CentOS 7:
a.添加grub菜单和命令行的密码认证:
>>>grub2-setpassword ##输入密码两次生成/boot/grub2/user.cfg 文件
>>>cat /boot/grub2/user.cfg
GRUB2_PASSWORD=grub.pbkdf2.sha512.10000.CC6F56BFCFB90C49E6E16DC7234.....
>>>grub2-mkconfig -o /boot/grub2/grub.cfg ##重新生成配置文件
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-327.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-327.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-f9725b0c842348ce9e0bc81968cf7181
Found initrd image: /boot/initramfs-0-rescue-f9725b0c842348ce9e0bc81968cf7181.img
done
>>>shutdown -r now
再次键入e 或 c ,系统都会要求输入用户名和密码的
rel: https://www.thegeekdiary.com/centos-rhel-7-how-to-password-protect-grub2-menu-entries/
b. 删除grub 密码保护(删除掉user.cfg,重新生成配置文件即可)
>>>rm -rf /boot/grub2/user.cfg
>>>grub2-mkconfig -o /boot/grub2/grub.cfg
>>>reboot
DSP系统的引导程序(BOOT)是系统加电或复位时,DSP将一段存储在外部的非易失性存储器的程序代码通过DMA方式拷贝到内部的高速内存中运行。这样既能扩展DSP有限的存储空间,又能充分发挥DSP内部资源的效能。用户的代码也可以通过掩膜方式写入到DSP内部ROM中,但这样受容量和价格的限制,且不便于扩展和升级。 DSP的引导过程如下: 1) DSP复位后,通过DMA方式将外部CE1空间的数据读入到内部程序空间地址0处,读入数据的多少因芯片而异(TMS320C6712一次只拷贝1KB)。 2) DSP推出复位状态,开始执行内部程序空间地址0处的程序,这段程序先将外部主程序数据读入到DSP内部程序空间相应地址,然后跳转到主程序运行。 第一步是由芯片自动完成,关键是第二步:用户需要编写相应的汇编程序,实现二次引导,即用户主程序的装载欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)