uefi与win8 (根据网络资料整理)

 

 BIOS
      
所有电脑启动的时候,都会运行BIOS程序,用于初始化硬件。BIOS是英文"Basic Input Output System"的缩略语,直译过来后中文名称就是"基本输入输出系统"。其实,它是一组固化到计算机内主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、系统设置信息、开机后自检程序和系统自启动程序。其主要功能是为计算机提供最底层的、最直接的硬件设置和控制。

BIOS的基本功能,那就是:
1)  
检测硬件,又叫POST

检查硬件是否还正常的工作,但是从软件的角度看.其中最重要的就是对内存的检测的
2)  
初始化硬件,设置其基本状态,使得整个计算机达到所谓的"可用状态"(Ready State).
硬件的设计厂家往往为了通用市场的考虑,不愿意将硬件设计成定制的状态,可能一个网卡,可以安装在PC,同样也可以安装在嵌入式系统上.所以为了使得硬件能够按照PC的架构工作,BIOS必须要按照由IHVIndenpendent Hardware Vendor独立硬件商)提供的手册将硬件设置好,比如写几个必须的寄存器之类的,做一些enable的工作.这点非常重要,如果一个硬件没有enable,那么在OS下将不可见.

3)  启动OS Loader加载操作系统
这也是BIOS必须要做的事情之一.启动的方式是由BIOS规定,操作系统必须按照BIOS的要求来设计.这也是为什么操作系统从DOS一直到Vista,都只能把自己的loader放在MBR,因为BIOS只读MBR.强大的微软都必须要按照这个不成标准的标准来.当然,在EFI时代,这一点有所改变,EFI支持的Boot From File不在需要MBR

4)  在操作系统启动起来以后,一部分继续驻留内存,向操作系统以及其他软件提供基本的系统级的服务.如磁盘读写等.例如INT 10基本屏幕服务,INT 13磁盘服务,病毒正是靠INT 13来传播.还有试图绕过INT 10来直接写屏,Windows时代,这些东西事实上仍然存在,并且继续发挥着基本的核心作用,只是他们被Windows包装起来了,一般的程序无法接触到,但这并不能说明他们就没有用处了

5)  修复硬件缺陷

Intel在它的CPU里专门留了个模式叫System Managment Mode,拥有最高的权限.SMM中断的时候,就连号称无所不能的Windows的也不知道,这样就可以给CPUbug了,举个例子,比如某天Intel的一个CPUADD指令给出错误操作结果,那么就可以利用SMM在每次执行这个指令的时候,中断一下,由BIOS软件给出正确的执行结果.这就达到了给硬件修复缺陷的目的.这样Intel也不用招回它的CPU了,此外,每次BIOS开机的时候,事实上都会更新CPU Microcode,同样是用来给CPUbug的.所以很多时候,刷BIOS刷出问题,事实上某个CPUbug没有补上导致出了问题出现.

 

BIOS有三种状态,分别是:

1)  Before Build
BIOS
表现为BIOS开发者硬盘上的一堆源代码
2)  BIOS Image
BIOS
则是沉睡在Flash里的一段image(主板ROM中的代码)
3)  BIOS Runtime

BIOS执行,控制系统,与操作系统交互

 

EFI BIOS

eFI不是一个具体的软件,而是在操作系统与平台固件(platform firmware)之间的一套完整的接口规范。EFI定义了许多重要的数据结构以及系统服务,如果完全实现了这些数据结构与系统服务,也就相当于实现了一个真正的BIOS核心。

EFI最早是在Spring 2000 IDFIntel Developer’s Forum)上提出的,当时Intel认为,随着IBM80年代初推出了第一台个人计算机开始,直到今天为止,个人计算机硬件平台已经发生了翻天覆地的变化,相关的系统软件如操作系统等也从最早的MS DOS1.0到今天的Windows XP,而作为整个系统的最底层也最为关键的系统软件之一的BIOS却基本上保持了架构二十年不变。这在整个软件史上都是一件不可思议的事情。如今,BIOS已经变成了严重阻碍IT产业前进的绊脚石,必须通过对BIOS的革新来为下一代的操作系统(如Windows Server Longhorn)提供更加强大的支持。

通俗的说:EFI就是用来替换传统BIOS.作为更好的BIOSEFI可以提供过去无法在BIOS中作到的许多事情

 BIOS一般有多大?
传统bios(以后说legacy bios)一般都是512KB,而早期的EFI bios也是512KB.现在EFI基本上是1MB.

BIOS用什么工具开发?
legacy bios一般用MASM 6.11开发,同时还会配上一些厂商自己写的buid tools. EFI则使用Viusal Studio.NET 2003以及MASM 6.11开发

EFI boot是怎么一回事?
EFI有自己独特的boot方式,完全抛弃掉了传统的0磁道0扇区的MBR概念.EFIboot方式与文件系统息息相关.过去的legacy bios由于不带文件系统,不得已选择从硬盘上特定空间装载程序的办法,EFI则附带了完整的文件系统支持,所以不再对硬盘有特定的要求,EFI下的操作系统加载程序事实上存储在boot\ia32\bootia32.efi文件里.(假定是IA32架构).这是一个EFI应用程序.

 

bios的资源汇总:
1. BIOS Boot Specification
业内一般叫BBS,详细描述bios启动时必须要做的所有事情,如何区分启动设备,如何选择启动设备等等.

2. UEFI Specification
UEFI
规范,详细描述了UEFI bios必须支持的接口.以及UEFI bios的模型,提供的服务等等开发UEFI必备的.

3. Ralf Brown's Interrupt List
收集中断的东西,legacy bios学习很有用.

4. El Torito CD-ROM Boot
描述了bios如何从光驱上boot的细节.

5. USB Specification
USB
设备规范

6. Plug-and-Play Specifications
MS
PnP规范

7. BIOS Writer's Guide
bios
开发的圣经,cpu厂商给出.Intel的绝对看不到,Intel的是绝密级的文档.AMD的倒是可以看到,不同的cpu有不同的BWG

EFI如何支持传统操作系统如Windows XP?
:EFI通过一个叫CSM的东西来支持.CSMCompatibility Support Module,包括CSM32CSM16,EFI里面定义的一种用来对传统技术,MBR,legacy PCI OpRom等支持的模块.包含32位代码和16位的代码,通过一种叫ThunkReverse Thunk的技术来切换CPU执行模式.目前世界上有能力提供CSM的公司只有三家,分别是:Insyde,AMI以及我国南京的百敖软件(Nanjing Byosoft)。CSMefi bios最核心的模块之一。

原生支持EFI的操作系统出现了吗?
当然,Linux内核再2.4.0以上,就可以再编译的内核的时候选择EFI支持。Windows Vista也再SP1的时候提供了对EFI的支持,同时Windows Server 2008将直接支持EFI

 有能力提供EFI bios的厂家都有哪些?

1. Phoenix -- 早先主推CSS,现在开始逐渐转行EFI。不过它的动作最慢,已经不为业界看好。
2. Insyde -- 
主推H2O。最早的EFI解决方案,也同时卖legacy bios,但是质量一般。
3. AMI -- EFI
的方案叫Aption,特色是自己的开发工具VEB
4. Byosoft -- 
刚成立一年半的一家IBV,拿到了Intel的授权。目前如长城等OEM的一些特殊机器上的bios开始由Byosoft提供。(国产)
5. General Software -- 
专做x86 embedded bios的公司。国内很少见。

 

EFI下附带完整的FAT/FAT32文件系统支持,并且所有的源代码都是open source的,你可以从:
https://fat-driver.tianocore.org/
上面获取这个EFI下的FAT32驱动程序的代码

 

启动操作系统的细节问题。legacy BIOS下,系统固件是从默认的0磁道0扇区(俗称的MBR)来加载OSloader程序的。但是EFI提供了另一个选择,如那就是如果操作系统是EFI native的,那么操作系统可以选择将自己的loader程序做成EFI应用程序,然后按照UEFI规范,存放在硬盘的GPT分区内的ef\boot\目录下。具体的文件名是boot(ARCH).efi,这里ARCH是架构名,如果是IA32,则是bootia32.efi,当然也可以是bootx64.efibootIA64.efi等等。
BIOS
检测到这个文件,会自动将其加载到内存,然后执行。换言之,开始启动操作系统。
这就是UEFI BOOT

EFI相较于legacy BIOS,有优点也有缺点
优点是高度模组化,移植很方便,OEM开发module很方便。
缺点也正是因为这个模组化,完全没考虑到BIOS是直接操作hardwareEFI很不好debug

 

1998年,Intel牵头,联合AMDAMIAppleDellHPIBMLenovoMicrosoftPhoenix等业界主要厂商,开始制定新一代BIOS。这个项目叫做"统一的可扩展固定接口"Unified Extensible Firmware Interface),简称UEFI2005年推出1.1版,目前是2.3版。新型UEFI,全称统一的可扩展固件接口”(Unified Extensible Firmware Interface)是一种详细描述全新类型接口的标准。这种接口用于操作系统自动从预启动的操作环境,加载到一种操作系统上,从而使开机程序化繁为简,节省时间。从20129月以来,电脑运行的已经不是BIOS,而是UEFI BIOS。等它运行结束,再载入操作系统。

 微软的态度
       UEFI是一个很先进的、面向未来的规格。但是很长时间内无法推广,原因就是微软公司不积极。Windows操作系统是桌面市场的主流系统,如果它不推广UEFI,就没有硬件厂商会跟进。所以,普通消费者对这个新规格所知甚少。意想不到的变化,出现在20119月,微软毫无预兆地突然宣布,Windows 8将启用UEFI。这本来是一件好事。但是,问题是微软感兴趣的不是整个UEFI,而是UEFI的一个子规格Secure Boot。它要强行部署Secure Boot

Secure Boot
       Secure Boot
只是UEFI的一个部分。两者的关系是局部与整体的关系。Secure Boot的目的,是防止恶意软件侵入。它的做法就是采用密钥。UEFI规定,主板出厂的时候,可以内置一些可靠的公钥。然后,任何想要在这块主板上加载的操作系统或者硬件驱动程序,都必须通过这些公钥的认证。也就是说,这些软件必须用对应的私钥签署过,否则主板拒绝加载。由于恶意软件不可能通过认证,因此就没有办法感染Boot。这个设想是好的。但是,UEFI没规定哪些公钥是可靠的,也没规定谁负责颁发这些公钥,都留给硬件厂商自己决定。现在,微软就是要求,主板厂商内置Windows 8的公钥

Windows 8
      
首先明确,在不打开Secure Boot的情况下,Windows 8可以安装。这与安装以前版本的Windows没有差别。但是,微软规定,所有预装Windows 8的厂商(即OEM厂商)都必须打开Secure Boot。因此,消费者购买一台预装Windows 8的台式机或笔记本,想要在上面再安装其他操作系统(包括以前版本的Windows)是不可能的,除非关闭Secure Boot,或者其他操作系统能够通过Windows 8公钥的认证。如果选择关闭Secure Root,那么预装的Windows 8将无法使用,需要重新安装。

Linux的影响
       Secure Boot规格的本意是,让操作系统厂商自行选择公钥,通过认证。但是实际上,只有微软公司才有能力,让主板厂商内置它的公钥,其他公司都不具备这种能力。
      
根据微软针对OEM厂商的一则规定,Windows 8要求PC电脑采用UEFI(统一可扩展固件接口),这个接口将会替代PC机诞生以来历史悠久的BIOS固件设置。关于UEFI这个标准接口,是支持WindowsLinux OS X 操作系统的,只是微软要求预装Windows 8 PC电脑需要支持安全性启动机制,启动过程中涉及到的软件/固件都必须打上CA数字签名,这样,对于Linux 这种开源的无签名的系统就会直接阻止。
      
因此,如果要在打开Secure Boot的主板上安装Linux系统,这个系统就必须通过Windows 8的认证。目前,微软公司把Win8的数字签名外包给了Verisign。操作系统厂商想要通过认证,就必须花99美元,向Verisign买一张数字证书,嵌入自家的操作系统。最新动态是,Linux的各个发行版之中,Ubuntu已经购买了数字证书,FedoraSUSE计划购买,其他发行版还没做出决定。
      
因此,在预装Windows 8的电脑上安装Linux(或其他操作系统)的最佳做法,就是进入BIOS,关闭Secure Boot。但是,这意味着你花钱买来的Windows 8将无法使用。

       目前看上去,Linux购买Windows8的数字证书,是眼下唯一可行的相对容易的解决方法。但是,这种做法不可接受。首先,系统的公钥被微软控制,后果难以预料。如果微软决定更换和废除这个公钥,Linux就要被迫跟进。其次,Linux的启动管理器GrubGPL许可证,该许可证(第三版)明文禁止软件使用密钥配合硬件阻止一部分用户的使用,因此要改用非GPL许可证的启动管理器。再次,只有几个较大的Linux发行版才有能力购买数字证书,较小的发行版和用户自己定制的版本最终还是需要有自己的公钥。

关于移动设备
       Secure Boot
对移动设备的影响,比PC还要严重。微软明确规定,所有PC主板必须带有关闭Secure Boot的选项。这不是因为微软的善意,而是因为如果不这样做,它一定会遭到反垄断起诉。但是,在移动设备领域,微软不占优势,所以它就没有顾虑,规定所有安装Windows的移动设备的Secure Boot必须打开,而且没有关闭选项。
      
微软的平板电脑Surface RT就是一个最好的例子。它的Secure Boot是打开的,没法关闭,而且微软用了一个不同于桌面电脑Windows 8操作系统的公钥,且不提供获得数字证书的途径。因此理论上,用户不可能在Surface RT上安装其他操作系统。还有报道称,使用Windows Phone 8操作系统的智能手机也将采用这种做法。那么,用户也就不可能在Windows Phone上安装其他操作系统了。

Secure Boot的用意是保证系统安全,但现在似乎成了厂商保护市场垄断、阻碍竞争一种手段。除了微软公司,苹果公司也有这种倾向。在新一代的iPhoneiPad上面安装其他操作系统,似乎是不可能的。(不过一旦iPhoneiPad上面安能装其他操作系统,估计苹果就不是今天这个样子了,苹果玩的就是封闭!其实垄断也是有好处的!)
      
自由软件基金会呼吁反Secure Boot垄断,就是基于这种考虑:用户应该拥有硬件和软件的使用自由,操作系统应该是开放的,而不是封闭的。作为一种规格,自由软件基金会并不反对Secure Boot,它只是要求硬件厂商提供便利,使得用户可以更容易地安装和管理公钥,从而使用硬件平台对所有操作系统(以及设备驱动)保持开放。

 

磁盘分区类型:MBRGPT

    MBR分区:使用32位表示扇区数,分区不超过2T,按柱面分区。0磁道0扇区是最外层,是引导系统启动区域。它有512Byte,前446Byte是启动加载项,64个字节是分区表,16个字节标识一个分区,所以最多分4个主分区,还有2个自己是55AA标识

    GPT分区:使用64位,支持128个分区,使用128UUID表示磁盘和分区,GPT分区表自动备份在头和尾两份,并有CRC校验位,固件有UEFI接口,才支持GPT分区。

 

安装win7win8经常会出现这种提示Windows 无法安装到这个磁盘。选中的磁盘具有MBR分区表。在 EFI 系统上,Windows 只能安装到 GPT 磁盘。

出现这种情况主要是因为U盘启动时,默认使用EFI引导启动,而不是常见的MBR引导,所以会发生这种情况。这种情况常常出现在原来安装32位系统、现在改安64位系统的过程中。

    解决方法一:出现上述问题后,直接把U盘拔掉插到其它电脑,把U盘里的efi文件夹和bootmgr.efi文件删掉,问题就搞定了,然后,再用这个U盘启动盘去装系统,就不会出现这种问题了。
删掉这两个文件夹跟文件的原因是因为从U盘安装会默认使用efi引导启动,删掉之后没有efi,就默认用mbr启动了。

解决方法二:非预装win8机型出厂时,硬盘默认为MBR分区表格式,而UEFI模式仅支持在GPT分区表的硬盘上安装系统。
    如果系统安装光盘中包含了UEFI信息,启动时可能会自动加载并进入UEFI模式,因此便会出现“ windows无法安装到这个磁盘,选中的磁盘具有MBR分区表,在EFI系统上,windows只能安装到GFT磁盘”的提示。
建议您尝试以下方法:
    开机按ESC键,会显示两个光驱或者U盘的选项,选择光驱名称前没有UEFI的选项启动,即可正常把系统安装在MBR分区表硬盘上。

    解决方法三:进入主板选择启动的项目、比如F8、F11之类、u盘启动里有2项、一个是EFI启动、一个是普通启动,安装64位系统、选了EFI启动,就会出错,应该选普通启动。如果光盘安装,进BIOS看看, EFI进入bios看到UEFI状态时,Enabled 如果是启用状态,那么把他禁用掉看看(改为disabled),保存重启,选择光驱启动。但不能选择uefi的光驱模式。

 

总结:

1.uefi模式下安装win8 ,安装到GFT磁盘,不能安装到MBR硬盘

2.MBR硬盘下安装win 8,关闭Secure Boot,采用传统引导模式

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章