本文我们来讨论计算机主板的固件-BIOS和UEFI,UEFI本身是一个非常复杂的技术标准,下面仅介绍最基本的知识。
UEFI BIOS还是UEFI 你会看到有人说UEFI BIOS,甚至有的主板固件也会标明UEFI BIOS,但实际上BIOS不是固件的通用叫法,BIOS只是IBM兼容PC里的一个具体的固件。UEFI是另外一种固件的标准,所以,UEFI应该只被称呼为UEFI,而不是UEFI BIOS。
为什么需要BIOS BIOS的全称为Basic Input/Output System(基本输入输出系统),它的职责是: 1.初始化CPU和RAM 2.开机自检(Power on Self Test) 3.初始化LAN、PCIe接口 4.启动MBR分区的boot loader,或USB存储设备,网络上的boot loader。 当它完成以上任务时,BIOS将控制权交给操作系统。
Legacy BIOS 因为BIOS是在1985年诞生的,至今已经有31年历史了,所以有时候BIOS也会被称为Legacy BIOS。在八九十年代,鼠标键盘用的是PS/2接口,软盘(floppy disk)也非常流行,今天这些技术已经过时了,但BIOS里还保留了针对这些过时技术的代码。
什么是UEFI UEFI的前身是EFI,全称为Extensible Firmware Interface(可扩展的固件接口)。EFI是由Intel公司于上世纪90年代开始研发的,当时Intel正在生产64位的处理器,但是BIOS的代码是16位的,不能充分发挥64位处理器的作用,所以Intel便开发一种新的固件,即EFI,第一个版本的EFI于2002年发布.2005年,计算机硬件和软件厂商联合组成了UEFI论坛,开头的U,代表Unified,意指计算机硬件和软件厂商之间的统一。 UEFI实际上只是一个固件的标准,而不是具体的固件实现。任何人都可以按照UEFI标准来写自己的UEFI兼容的固件,简称UEFI固件。
BIOS和UEFI的不同之处 1.编程语言不同 BIOS是用汇编语言写的,而UEFI固件是99%都是用C语言写的,对于程序员来说,C语言更易于阅读,维护,添加或删除新功能。 2.OptionROM vs. 驱动 BIOS固件要求主板的其他设备采用OptionROM存放代码。例如,网卡的OptionROM可以增强BIOS的功能,让计算机从网络上的其他设备启动,瘦客户端(thin client)就是利用网卡的OptionROM来启动远程主机的操作系统.但OptionROM最大容量只有64KB,它不能从硬盘,USB设备加载。另外,OptionROM依赖于具体的硬件,移植性差,如果硬件变了,那么OptionROM的代码也得变。 如果主板用的是UEFI固件,那么程序员就不需要写OptionROM代码了,而是写驱动程序,驱动程序没有OptionROM以上的缺点。 3.MBR vs. GPT BIOS固件通常要求硬盘采用MBR分区,MBR的全称是Master Boot Record,MBR分区有两个缺陷,一是主分区不能超过4个,二是不支持2TB以上容量的硬盘。 UEFI固件要求硬盘采用GPT分区,GPT的全称是GUID Parition Style,GPT允许硬盘有128个主分区,并且支持2TB以上容量的硬盘。 在使用BIOS固件的计算机上,Linux支持硬盘采用GPT分区,这时硬盘上要有一个bios_grub分区,这个分区通常为1MB大小,而windows只支持MBR分区。 BIOS在初始化硬件和开机自检后,仍然会提供一些服务,而UEFI只在启动时提供服务,启动完成后将控制权完全交给操作系统。
UEFI Shell UEFI固件还有一个UEFI Shell,它看起来像Linux的终端,UEFI Shell有自己的命令语法,可以让你运行一些UEFI程序。
启动模式 有一些UEFI固件内置了一个兼容支持模块(Compatibility Support Module、CSM),CSM可以让主板使用BIOS模式,在这种情况下,计算机可以有3种启动模式。 1.BIOS模式 2.BIOS和UEFI混合模式 3.原生UEFI模式 (native UEFI) 注意,混合模式是不同于原生UEFI模式的,如果你真的想让你的计算机使用UEFI,那么你必须关闭CSM模块,启用原生UEFI模式,原生UEFI可以加快系统启动速度,因为这时候不需要加载BIOS代码。
操作系统支持 1.MS Windows只支持BIOS固件+MBR硬盘,或UEFI固件+GPT硬盘。 2.Linux支持BIOS固件+MBR硬盘,BIOS固件+GPT硬盘,UEFI固件+GPT硬盘,以及UEFI固件+MBR硬盘。 3.苹果Mac电脑的固件是EFI+UEFI混合固件,它不是符合UEFI标准的固件。
UEFI固件的架构 大多数Intel处理器支持32位和64位指令,同时可执行8086/80286的16位指令,所以Intel平台下的UEFI有可能编译成32位的,也可能编译成64位。 UEFI标准要求boot loader的架构要与UEFI固件的架构一致,以减少不必要的麻烦,换句话说,32位的UEFI固件只能加载32位的boot loader,64位的UEFI只能加载64位的boot loader,但我们可以用32位的boot loader加载64位的操作系统,也可以用64位的boot loader来加载32位的操作系统。
怎么查看自己的UEFI固件是32位还是64位 在Linux终端里运行下面的命令 cat /sys/firmware/efi/fw_platform_size
从输出中可以知道,我的UEFI固件是64位的,现在的大多数新电脑采用的是64位UEFI。
怎么确定自己的Linux系统是在UEFI模式下安装的 方法一、查看Grub 如果Linux是以UEFI模式下安装的,那么系统上会有一个grub-efi程序。
grub-efi是为UEFI固件编写的boot loader,grub-pc是为BIOS固件编写的boot loader。
方法二、在Linux终端里运行下面的命令 [ -d /sys/firmware/efi ] && echo "Installed in UEFI mode" || echo "Installed in Legacy mode"
怎么确信操作系统是以UEFI模式启动的 首先,你可以在主板固件设置里禁用BIOS以及CSM模块,只启用原生UEFI模式,另外,你可以查看Linux系统上是否有/sys/firmware/efi这个目录,如果这个目录存在,那么系统就是以UEFI模式启动的。
ESP分区 UEFI标准要求硬盘上要有一个ESP分区,ESP的全称是EFI System Partition,即EFI系统分区,ESP分区的文件系统格式为FAT32或FAT16,它是用来存放boot loader程序的,推荐ESP分区大小为512MB,Linux用户要将ESP分区要挂载到/boot/efi目录下。 在Gparted分区管理器中,ESP分区有两个标识(flag): boot和esp,ESP分区可以不是硬盘的第一个分区。
Secure Boot 安全引导 Secure boot是UEFI固件的一个扩展功能,Fedora、OpenSUSE、Ubuntu等Linux发行版支持secure boot,但很多Linux发行版如Debian还不支持secure boot,注意,secure boot不是微软的创造物,微软只是要求电脑销售商必须默认启用secure boot才能在电脑上贴上微软认证的标签,但是这一做法间接地伤害了广大Linux用户,因为很多Linux发行版不支持secure boot。
相关主题 |