Bios
一组固化到计算机主板上ROM组件中的程序,主要负责开机时检测硬件功能和引导操作系统启动功能。

Legacy
传统BIOS启动方式,启动操作系统的顺序:
开机 -> BIOS初始化 -> BIOS自检 -> 引导操作系统 -> 进入操作系统

1、电脑开机后,开始启动BIOS,开始BIOS自检。
2、通过自检后,bios找到硬盘上的主引导记录MBR。
3、MBR开始读取硬盘分区表DPT,找到活动分区中的分区引导记录PBR,并且把控制权交给PBR。
4、PBR搜索活动区中的启动管理器bootmgr,找到后,PBR把控制权交给bootmgr(相当于xp里的ntldr文件)。
5、Bootmgr寻找活动分区中的boot文件夹中的BCD文件(启动配置数据,相当于xp里的boot.ini文件)。
6、找到BCD后,Bootmgr首先从BCD 中读取启动管理器bootmgr菜单的语言版本信息,没多系统直接加载系统,有多系统会显示多操作系统选择画面。

legacy使用中断服务读取磁盘,每次读取64kb。

UEFI
统一可扩展固件接口(Unified Extensible Firmware Interface),是一种新型的BIOS,启动操作系统的顺序(启动流程同legacy大致相似,区别与具体细节):
开机 -> UEFI初始化 -> 引导操作系统 -> 进入操作系统

1、电脑开机后,上电自检,UEFI固件被载,并由它初始化启动要用的硬件。
2、UEFI固件寻找EFI分区中的启动文件(\efi\Microsoft\boot\bootmgfw.efi)启动管理器。
3、启动管理器读取硬盘EFI分区中BCD文件(efi\Microsoft\BCD)系统菜单。
4、最后根据配置内容加载引导程序winload.efi(\Windows\system32\winload.efi)加载系统。

一般来说,UEFI只支持64位系统,且磁盘分区必须为GPT模式,每次可以读入1MB,载入速度更加迅速。并且UEFI支持图像化选择,用户操作更加直观。

个人猜想(个人用于理解驱动开发层面)
在BIOS启动时,BIOS固件只是找到MBR中1MB的loadleader,具体的事务都是由loadleader及后续的磁盘上得启动程序来进行的,与BIOS无关了。
因此我觉得BIOS模式下,win 驱动是在启动程序中被加载,BIOS固件除了加载第一段代码不做任何事。
BIOS是16位实寻址汇编语言编写的保存在ROM芯片中。

UEFI 在GPT分区中有一个ESP分区(fat文件系统)保存,开发UEFI使用的是C语言。

问题:
UEFI模式驱动程序和BIOS模式驱动程序的区别?还是两者开发驱动程序其实一样的只是引导方式不一样?

因为bois需要各种操作系统(例如Windows)自己提供驱动接口,并由硬件提供商实现接口函数,安装加载驱动也由操作系统自身提供(例如Windows命令行配合注册表加载驱动)。
而UEFI则提供统一管理(有一套接口流程规范),uefi以protocol形式去统一驱动实现(protocol类似抽象类)。
*上述理解:bios,windows和linux都有自己的驱动接口 ;uefi则统一了规范,制定了一套各个平台都能使用的抽象接口 *

个人理解:驱动就是接口