
以及它主要做些什么事情,它在整个个人计算机之中所处的.doc
4页1我们已经使用 BIOS 超过了二十年.可是直到今天还友许多朋友不知道 BIOS 到底是什么,以及它主要做些什么事情,它在整个个人计算机之中所处的地位如何.事实上,BIOS 是整个计算机系统中最重要的底层系统软件.二十多年来,中国的程序员们纷纷忽略了BIOS,或者由 BIOS 衍生出的开发技术,相反,我们对如何调整一两个 BIOS 设置津津乐道.今天,BIOS 业界开始悄悄的变革,EFI 或者 UEFI 的到来即将改变世界,从而彻底改变我们对过去的计算机启动过程的认识.但是我们中国的开发者们仍然在谈论 JAVA或者.NET,我想,是到了清晰的研究 BIOS 的时候了. 小生不才,但也愿意就我所学,贡献成一篇简短的入门文章,带领大家进入 BIOS 这个有趣而又充满了神秘的地域,我们一起来探究 BIOS,尤其是探究下一代个人计算机的基础系统软件,或者说基础固件:UEFI bios 的方方面面.由于类似的文章网上也比较多,所以我就重点谈些别人一般忽略的部分吧. BIOS Definitions BIOS -- Basic Input and Output System,is used for initializing,testing and putting the PC into the ready state so that an OS may be started.Part of the BIOS remains in the system main memory after POST,or Power On Self Test.BIOS provides a consistent software interface to varying types of the hardware devices.It also provides the basic system level services to OS.The BIOS is also used for helping IHV to fix their hardware design bugs by using the SMM mode of the IA architechture. 上面这句话是我在初学 BIOS 的时候,我的老师,一位受到整个业界尊敬的杰出 BIOS Engineer 对我说的,这段话虽然短,但是却清楚的道出了 BIOS 的基本功能,那就是: 1) 检测硬件,又叫 POST. 2) 初始化硬件,设置其基本状态,使得整个计算机达到所谓的"可用状态"(Ready State) . 3) 启动 OS Loader 加载操作系统. 4) 在操作系统启动起来以后,一部分继续驻留内存,向操作系统以及其他软件提供基本的系统级的服务.如磁盘读写等. 5) 修复硬件缺陷. 下面我们一个一个的来看这些功能.第一个检测硬件可能比较好理解一点,就是看看你的硬件是否还正常的工作,但是从软件的角度看.其中最重要的就是对内存的检测的.大家都还对刚开机的时候内存的大小一直在跳的屏幕有记忆吧,那就是在做 Memory Test,或者说 Memory Sizing. 第二个功能是初始化硬件,可能有不少朋友问:为什么我的硬件还需要初始化?问的好,2硬件的设计厂家往往为了通用市场的考虑,不愿意将硬件设计成定制的状态,可能一个网卡,可以安装在 PC,同样也可以安装在嵌入式系统上.所以为了使得硬件能够按照 PC 的架构工作,BIOS 必须要按照由 IHV(Indenpendent Hardware Vendor)提供的手册将硬件设置好,比如写几个必须的寄存器之类的,做一些 enable 的工作.这点非常重要,如果一个硬件没有 enable,那么在 OS 下将不可见. 第三个功能是启动操作系统,这也是 BIOS 必须要做的事情之一.启动的方式是由 BIOS规定,操作系统必须按照 BIOS 的要求来设计.这也是为什么操作系统从 DOS 一直到Vista,都只能把自己的 loader 放在 MBR,因为 BIOS 只读 MBR.强大的微软都必须要按照这个不成标准的标准来:)当然,在 EFI 时代,这一点有所改变, EFI 支持的 Boot From File 不在需要 MBR. 第四个功能可能之前作过 DOS 开发的朋友比较熟悉吧,还记得 INT 10 基本屏幕服务,INT 13 磁盘服务吗?多少病毒正是靠 INT 13 来传播.又有朋友曾经试图绕过 INT 10 来直接写屏?Windows 时代,这些东西事实上仍然存在,并且继续发挥着基本的核心作用,只是他们被 Windows 包装起来了,一般的程序无法接触到,但这并不能说明他们就没有用处了.MS 的开发人员不久前还表示,事实上甚至就是开发中的 Longhorn 的安装程序,目前仍然有许多 code 是基于 INT 10 来写屏的. 第五个功能估计一般的朋友可能就不知道了,就是之前稍微接触过 BIOS 的朋友们可能也是第一次听说吧!Intel 在它的 CPU 里专门留了个模式叫 System Managment Mode,拥有最高的权限.SMM 中断的时候,就连号称无所不能的 Windows 的也不知道,这样就可以给 CPU 扑 bug 了,举个例子,比如某天 Intel 的一个 CPU 对 ADD 指令给出错误操作结果,那么就可以利用 SMM 在每次执行这个指令的时候,中断一下,由 BIOS 软件给出正确的执行结果.这就达到了给硬件修复缺陷的目的.这样 Intel 也不用招回它的CPU 了,呵呵.此外,每次 BIOS 开机的时候,事实上都会更新 CPU Microcode,同样是用来给 CPU 补 bug 的.所以很多时候,刷 BIOS 刷出问题,事实上某个 CPU 的 bug没有补上导致出了问题出现. BIOS 在哪里 上面罗嗦了一大堆的 BIOS Basics,那么 BIOS 到底在哪里呢?答案是在你的计算机里:) 的确有些无聊,事实上 BIOS 有三种状态,分别是: 1) Before Build 2) BIOS Image 3) BIOS Runtime 第一种呢,这个时候 BIOS 表现为 BIOS 开发者硬盘上的一堆源代码. 处于第二种的时候,BIOS 则是沉睡在 Flash 里的一段 image.BIOS 真正发挥作用是在第三种模式下,3哪个时候 BIOS 执行,控制系统,与操作系统交互. EFI BIOS EFI 是由 Intel 提出的,目的在于为下一代的 BIOS 开发树立全新的框架。
EFI 是英文Extensible Firmware Interfaces 的缩写正如它的名字一样,EFI 不是一个具体的软件,而是在操作系统与平台固件(platform firmware)之间的一套完整的接口规范EFI 定义了许多重要的数据结构以及系统服务,如果完全实现了这些数据结构与系统服务,也就相当于实现了一个真正的 BIOS 核心 EFI 最早是在 Spring 2000 IDF(Intel Developer’s Forum)上提出的,当时 Intel 认为,随着 IBM 在 80 年代初推出了第一台个人计算机开始,直到今天为止,个人计算机硬件平台已经发生了翻天覆地的变化,相关的系统软件如操作系统等也从最早的 MS DOS1.0 到今天的 Windows XP,而作为整个系统的最底层也最为关键的系统软件之一的BIOS 却基本上保持了架构二十年不变这在整个软件史上都是一件不可思议的事情如今,BIOS 已经变成了严重阻碍 IT 产业前进的绊脚石,必须通过对 BIOS 的革新来为下一代的操作系统(如 Windows Server Longhorn)提供更加强大的支持 上面是我很早之前写的一段对 EFI 的介绍,现在看来,难免有些错误,不过大致意思非常明确,EFI 就是用来替换传统 BIOS.作为更好的 BIOS,EFI 可以提供过去无法在 BIOS中作到的许多事情.后面的文章我会逐步展现给大家. 一些常见的关于 BIOS/EFI 的问题以及我的简短回答 : 1) BIOS 一般有多大? 传统 bios(以后说 legacy bios)一般都是 512KB,而早期的 EFI bios 也是 512KB.现在EFI 基本上是 1MB 了. 2) BIOS 用什么工具开发? legacy bios 一般用 MASM 6.11 开发,同时还会配上一些厂商自己写的 buid tools. EFI则使用 Viusal Studio.NET 2003 以及 MASM 6.11 开发( 没想到吧~) 3) EFI boot 是怎么一回事? EFI 有自己独特的 boot 方式, 完全抛弃掉了传统的 0 磁道 0 扇区的 MBR 概念.EFI 的boot 方式与文件系统息息相关. 过去的 legacy bios 由于不带文件系统 ,不得已选择从硬盘上特定空间装载程序的办法,而 EFI 则附带了完整的文件系统支持,所以不再对硬盘有特定的要求,EFI 下的操作系统加载程序事实上存储在 boot\ia32\bootia32.efi 文件里.( 假定是 IA32 架构).这是一个 EFI 应用程序. 下面是一些深入学习 bios 的资源汇总: 1. BIOS Boot Specification 4业内一般叫 BBS,详细描述 bios 启动时必须要做的所有事情, 如何区分启动设备,如何选择启动设备等等. 2. UEFI Specification UEFI 规范,详细描述了 UEFI bios 必须支持的接口. 以及 UEFI bios 的模型, 提供的服务等等. 开发 UEFI 必备的. http://www.uefi.org 3. Ralf Brown's Interrupt List 这个人似乎就一辈子都都在收集中断的东西,对 legacy bios 学习很有用. 4. El Torito CD-ROM Boot 描述了 bios 如何从光驱上 boot 的细节. 5. USB Specification USB 设备规范 http://www.usb.org 6. Plug-and-Play Specifications MS 的 PnP 规范 7. BIOS Writer's Guide bios 开发的圣经,由 cpu 厂商给出.Intel 的绝对看不到,Intel 的是绝密级的文档.AMD 的倒是可以看到,不同的 cpu 有不同的 BWG.这里给出一个 amd 比较新的 cpu 的 BWG: 还有很多很多相关的文档.其实编写 bios 最难的在于同时支持业界几乎所有的通用规范. 。





![河南新冠肺炎文件-豫建科[2020]63号+豫建科〔2019〕282号](http://img.jinchutou.com/static_www/Images/s.gif)






