从BIOS到UEFI

Last Updated: 2023-11-23 15:21:37 Thursday

-- TOC --

由于太底层,这两个名词背后所涉及的技术细节始终像隔着一层捉摸不透的东西,难以理解透彻。本文尝试总结相关知识点。有一点是很明确的,现在UEFI是主流!

UEFI标准:https://uefi.org/specifications

BIOS和UEFI

EFI,Extensible Firmware Interface,中文译为可扩展固件接口,其主要目的是为了提供一组在 OS 加载之前(启动OS前)在所有平台上一致的、正确指定的启动服务。EFI最初由Intel开发,并在2002年12月所发布1.1版,后来在2005年Intel将此规范交由UEFI论坛来推广与发展,并更名为Unified EFI(UEFI)。TianoCore是论坛的Logo。

EFI是一种个人电脑系统规格,用来定义操作系统与系统固件之间的软件界面,为替代BIOS的升级方案。UEFI负责加电自检(POST)、连系操作系统以及提供连接操作系统与硬件的接口,增加与改进了加密编码(cryptography)、 网络认证(network authentication)与用户界面架构(User Interface Architecture)等方面的内容。

UEFI用来代替传统的BIOS,UEFI和BIOS工作在一个层面,他们是同一个东西的两种不同实现。

EFI技术源于英特尔安腾处理器(Itanium)平台的推出。安腾处理器是英特尔瞄准服务器高端市场投入近十年研发力量设计产生的与x86系列完全不同的64位新架构。当x86系列处理器进入32位的时代,由于兼容性的原因,新的处理器(80386)保留了16位的运行方式(实模式), 此后多次处理器的升级换代都保留了这种运行方式。甚至在含64位扩展技术的至强系列处理器中,处理器加电启动时仍然会切换到16位的实模式下运行。英特尔将这种情况归咎于BIOS技术的发展缓慢。

为什么这么说呢?因为自从PC兼容机厂商通过净室(见下)的方式复制出第一套BIOS源程序,BIOS就以16位汇编代码,寄存器参数调用方式,静态链接,以及1MB以下内存固定编址的形式存在了十几年。虽然由于各大BIOS厂商近年来的努力,有许多新元素添加到产品中, 如PnP BIOS,ACPI,USB设备支持等等,但BIOS的根本性质没有得到任何改变。这迫使英特尔在开发新的处理器时,都必须考虑加进使性能大大降低的兼容模式。正是在这种背景下,Intel发展了EFI技术。

Intel芯片强大的兼容性,看起来也存在被迫无奈的原因,BIOS程序竟然是16位的。

BIOS和UEFI其实是一个层面的东西,只是实现细节和所提供的功能有很大区别:

EFI在开机时的作用和BIOS一样,就是初始化PC,但在细节上却有很多不一样。BIOS对PC的初始化,只是按照一定的顺序对硬件通电,简单地检查硬件是否能工作,而EFI不但检查硬件的完好性,还会加载硬件在EFI中的驱动程序,不用操作系统负责驱动的加载工作。对于很多非专业人士而言,EFI的最革命之处,就在于颠覆了BIOS的界面概念,让操作界面和Windows一样易于上手。在EFI的操作界面中,鼠标成为了替代键盘的输入工具,各功能模块也做的和Windows程序一样,可以说,EFI就是一个小型化的GUI based mini OS系统,毫不夸张。

EFI在概念上非常类似于一个低阶的操作系统,并且具有操控所有硬件资源的能力。不少人感觉它的不断发展将有可能代替现代的操作系统。事实上,EFI的缔造者们在第一版规范出台时就将EFI的能力限制于不足以威胁操作系统的统治地位。

当UEFI所有组件加载完毕时,系统可以开启一个类似于操作系统Shell的命令解释环境(更像Windows Cmd)。在这里,用户可以调入执行任何EFI应用程序(UEFI可以访问FAT32文件系统)。这些程序可以用于硬件检测,功能或设置软件,操作系统引导软件(Grub)等等。理论上来说,对于EFI应用程序的功能并没有任何限制,任何人都可以编写这类软件,并且效果较以前MS-DOS下的软件更华丽,功能更强大。

反向工程和净室

这不是生产高端光模块的净室...

《著作权法》对软件的保护与对其他作品一样,只保护表达(expression),不保护思想(idea)。这意味着只要用不同的代码表现出来,即使蕴涵在软件产品中的思路是一样的,也不构成著作权法意义上的侵权。这使得反向工程在著作权法意义上的合法化成为可能。

近年来反向工程和净室技术越来越多地出现计算机计算机软件的研发过程中。与反向工程相联系的,叫做净室(clean-room)开发模式。主要过程是将研发人员分成两组,第一组负责对原软件进行反向工程,分析出其设计要素和思路,第二组负责开发新软件。第一组人员只能通过文档告诉第二组人员原软件做什么,但是不能告诉是怎么做的。两组人员之间所有的信息传递都在法律顾问的严格监督下进行,且不能直接接触,以确保净室的封闭性,实现开发过程与环境的净化,从而合理规避《著作权法》对软件作品的保护。

反向工程+净室技术只能起到对著作权上的权利进行合理规避的作用,对专利权无能为力。

在采用此方式开发软件时,要聘请法律顾问,在其监督下封闭开发,并且对每个工作日、工作地点都进行详细的纪录。一旦发生诉讼,这些记录便可以成为最有力的不侵权证据。

当年AMD生成Intel早期32位芯片,也用过这个方法,编写微代码。

修改UEFI启动项

在x64上默认读取的efi程序是"/EFI/BOOT/BOOTX64.efi",但OS可以通过修改UEFI NVRAM的值为其添加特定的启动项。例如Windows写入的启动项为"Windows Boot Manager",路径为"/EFI/Microsoft/bootmgfw.efi",Ubuntu写入的启动项为"ubuntu",路径为"/EFI/ubuntu/grubx64.efi"或"/EFI/ubuntu/shimx64.efi"(开启Secure Boot时)。

开机后按F12看到的启动选项,应该就是来自UEFI NVRAM。

本文链接:https://cs.pynote.net/hd/202306051/

-- EOF --

-- MORE --