初识Legacy和UEFI

一.、BIOS (legacy)

 基本输入输出系统 (Basic Input  Output System)
 
 1975年由IBM 提出,现在一般使用“legacy”表示。
  1. 主要作用:

1). 加电自检程序,开机时对硬件检测
  2). 初始化,硬件初始化和中断向量初始化等…
  3). 基本外围I/O处理的子程序代码
  4. CMOS设置程序

2. 缺点:

1). 开发效率低:大部分BIOS使用汇编,使代码与硬件耦合程度 高,受硬件影响大,导致开发效率低。
  2). 性能差:使用大量中断,导致开销大。没有异步,导致大量时间消耗在没用的等待上。
  3). 功能扩展性差,升级缓慢:BIOS代码采用静态链接,要增加硬件功能,必须把代码放到0x0C0000 - 0x0DFFFF区间,初始化的时候要约定对应的中断。而且BIOS没有提供动态加载设备驱动方案
  4). 安全性:BIOS运行过程中对可执行代码没有安全方面的考虑
  5). 不支持从硬盘2T以上的地址引导:受限于BIOS硬盘的寻址方式, BIOS采用32地址,因而引导扇区的最大逻辑地址是232 , (换算成字节,即232 x 512 = 2TB) 。

3. 传统BIOS流程图如下:

  legacy BIOS 官方说在2020 年将会推出历史舞台,现在行内说的BIOS一般就是指UEFI

二、 UEFI

  1. 统一可扩展固件接口 ( Unified Extensible Firmware Interface)
    其定义了平台固件和操作系统之间标准,只是一种标准,并没有提供实现,具体实现一般由平台公司提供。
  2. 实现一般分为两部分:
       1). 平台初始化
       2). 固件-操作系统接口
  3. UEFI相比legacy的优点:   1). 开发效率:在UEFI中,绝大部分代码采用C语言编写,UEFI应用程序和驱动甚至可以用C++编写。采用BS和RT服务,为OS和Os加载器屏蔽了底层硬件细节,使UEFI上层应用可以方便使用。
      2). 扩展性:体现在两个方面,一是驱动模块化设计;二是软硬件升级的兼容性。
       大部分硬件的初始化是通过UEFI驱动实现。每个驱动是一个独立的模块,可以包含在固件中,也可以放在设备上,运行时根据需要动态加载。
       UEFI的每个表,每个Protocol(包括驱动)都有版本号,系统平滑升级更简单。   3). 系统性能:
       1) UEFI提供了一步操作。基于事件的异步操作,提高了CPU的利用率,减少了总的等待时间。
       2)UEFI舍弃了中断这种比较好时的操作外部设备的方式,只保留了时钟中断。外部设备操作采用“事件+异步操作”完成。
       3)可伸缩遍历设备,启动时可以仅仅遍历启动所需的设备,从而加速系统的启动。    4). 系统安全性:
      
     当系统安全功能打开后,UEFI在执行应用程序和驱动前会先检测程序和驱动的证书,仅当证书被信任时才会执行这个应用程序或驱动。UEFI应用程序和驱动采用PE/COFF格式,其签名放在签名块中。
  1. UEFI流程图如下:
      在这里插入图片描述
  2. UEFI官网:www.uefi.org
    规范主要有两个:
    UEFI specification -仅仅限于制定操作系统和系统固件的编程接口
    UEFI Platform Initialization specification (PI) -PI 制定主板从上电到把控制权交给操作系统这个中间过程

参考 《戴正华-UEFI原理与编程》

你可能感兴趣的:(#,UEFI基础认识和编程练习,UEFI)