本帖最后由 ivis 于 2014-7-31 09:52 编辑
这部分,包括以下几个内容:
1.BIOS的发展探秘和EFI 2.从WIN7和WIN8的UEFI引导说开去。 3.CLOVER的应用。 4.MSI主板独有的CLOVER配置方案。 正文部分:
第一部分:BIOS发展探秘和EFI。
要说清楚这个问题,还的从BIOS谈起。BIOS,这是个老生常谈的话题了。说起来简单,深入进去不容易。BIOS的工作其实主要如下几个方面: 1.POST,检测硬件。 顾名思义就是看你的硬件是否OK,比如内存的检测Memory Test,有使用ECC校验内存的有时候这里校验的更加严格。 2.硬件初始化,按照BIOS的设置进行一些设定。 为了使得硬件能够按照PC的架构工作,BIOS必须要按照由IHV(Indenpendent HardwareVendor)提供的手册将硬件设置好,比如写几个必须的register等。在很多年前,BIOS可玩性不如现在这么强大。在系统中,调整寄存器可以带给我们很多惊喜,玩过寄存器的想必都知道。BIOS正是通过这些东西,对相关硬件进行设置,并准备进入工作状态。 3. 启动OS Loader加载操作系统。 显然这是BIOS重要的工作。BIOS的这种启动方式决定了操作系统的设计方式。我要求就是这样启动,你不这样设计,对不起,我无法启动你的系统。即使是盖茨这样的带头大哥,也要如此。所以从DOS到VISTA,都只能把LOADER 放在MBR。 MBR(Master Boot Record)主引导扇区。即硬盘的第零轨,让位于MBR中的开机管理程序可以将指针带到系统核心的地方。进入系统初始化第一步是BIOS将硬盘第一个扇区加载到内存后执行, Bootloader是MBR用来存储开机管理程序的位置。bootloader在开机时的功能主要有两个加载扇区和指向kernel。MBR的功能这么强大,身体却不能做大,只有512Byte。为了有效使用,又拆分为三部分,分别为: Bootloader446 Byte Partitiontable 64 Byte MagicNumber 2 Byte 其中Partition Table就是存储硬盘分区表(Partition Table)的地方,总大小为64Byte,硬盘分区有多少及每个分区的大小都记在其中。硬盘只能分为4个主分区,每个分区大小为16Byte。如果再想分区,只能通过扩展分区进行逻辑分区了。MBR这个地方,很关键。如果你把MBR分区搞坏了,那么硬盘里面就是系统是完好的,但是不能引导。因为Bootloader 无法发挥作用了。当然如果你喜欢玩MBR也是很有趣的,比如你可以在里面添加控制键,比如开机按下F1键,进入第一个分区的WIN7,按下F2进入第二个分区的XP。方便又快捷,还可以把FAT32分区的系统标志从OB改成12,这样一个OEM分区就做出来了。平时不会显示出来,里面可以装一些小的系统。或者一些重要的文件,需要的时候,可以直接在WINDOWS下挂载,进行使用。推出后便又恢复了隐藏。 强大的MBR,也在EFI的时候,失去了威风。EFI不再需要这些繁琐的东西。EFI支持的Boot From File即使随便一个U盘插上去,里面考个引导进去,都可以开始引导。EFI让引导变的更加丰富多彩,也更加轻松起来。 4. OS启动以后一部分继续驻留内存,向操作系统以及其他软件提供基本的系统级的服务。比如一些基于INT 10的屏幕服务和INT13的磁盘服务等。 5.修复硬件缺陷。 这是一个很重要的却容易被人忽视的功能。比如我们知道INTEL 有SMM 模式(System Management Mode),拥有最高的权限。当CPU有BUG的时候,SMM在执行相关指令的时候,发个中断,由BIOS软件给出正确的执行结果。这就达到了给硬件修复缺陷的目的。其实BIOS开机的时候,都要更新CPU Microcode,同样是用来给CPU修补BUG。比如MSI Z77 MPOWER最近的几版BIOS就在更新Microcode。以实现对更多CPU的良好支持。方法也没多神秘,是DESKTOP,还是MOBILE,还是SERVWORK,只要把对应的需要更新的PDB表放进去就OK。 到了EFI,心情爽了很多。自由开放可视化,奔放时髦还骚辣。将玩BIOS的所需要的智商直接推低了两个次元。 EFI最早在Spring 2000 IDF(Intel Developer’s Forum)上就提出了目的在于为下一代的BIOS开发建立全新的框架。Extensible FirmwareInterfaces正如它的名字一样,EFI不是一个具体的软件,而是在操作系统与平台固件(platform firmware)之间的一套完整的接口规范。EFI定义了许多重要的数据结构以及系统服务,如果完全实现了这些数据结构与系统服务,也就相当于实现了一个真正的BIOS核心。 显然EFI就是用来替换传统BIOS。作为更好的BIOS,EFI可以提供过去无法在BIOS中作到的许多事情。 关键的一点是EFI有自己独特的boot方式,完全抛弃掉了传统的MBR概念。EFI的boot方式与文件系统息息相关。过去legacy bios由于不带文件系统,不得已选择从硬盘上特定空间装载程序。而EFI则附带了完整的文件系统支持,所以不再对硬盘有特定的要求。即使你把EFI文件系统放到U盘里,它也可以工作。 APPLE这种敢为天下先的公司,自然毫无保留的选择了EFI。软件硬件都是按照自己的想法来,用EFI有得天独厚的优势。去你妹的BIOS,一个Fireware.scap 即可(发源于Sun Microsystems的Open Firmware)。也正是这样,给我们的机器安装MAC OS提供了便利。自从苹果PC从PowerPC架构转向INTEL架构。而Mac OS X操作系统又是以FreeBSD为架构,这为跨平台应用留下伏笔,曾经的想象变成了可能。 也许有人感觉EFI离我们很远,其实EFI的使用已经有些年头了。最早采用EFI BIOS的是Intel Itanium平台,EFI 1.0版本。Apple在采用 Intel处理器后,全部用的是EFI BIOS,版本1.1。而X86架构PC上将被广泛使用的则是UEFI 2.x。在X86架构PC上推行EFI BIOS是从Intel 945芯片组开始,如Intel 945GC等。到965、975时期,数量开始增加,到P35时期已经不少。虽然各厂商都采用了EFI BIOS,但是这些厂商对这个技术都很低调,基本没有什么宣传(包括Intel自己的主板),绝大多数的EFI enabled的主板,都没有把EFI接口做出来。这些EFI主板仍然将自己“伪装”成传统主板。直到MSI推出P35 Efinity,才公开宣传这项技术。 那么EFI主板如何支持传统的操作系统呢?这就是CSM了。CSM( Compatibility SupportModule)包括CSM32和CSM16。是EFI里面定义的一种用来对传统技术,如MBR,legacy PCI OpRom等支持的模块。包含32位代码和16位的代码,通过一种叫Thunk和Reverse Thunk的技术来切换CPU执行模式。CSM是EFI bios最核心的模块之一。 目前能提供EFI BIOS的厂商包括Intel、AMI、Insyde(替Apple开发EFI BIOS的厂商)、Phoenix,还有南京的Byosoft等。 Intel当然是用自家的Tiano平台(Intel已将其开源)。AMI用的是自家的Aptio平台,特色是自己的开发工具VEB。 Insyde采用自家的InsydeH2O平台(在一定程度上使用了Intel Tiano代码),最早的EFI解决方案,也同时卖legacy bios。 Phoenix的EFI技术有Phoenix SecureCore Tiano和Phoenix MicroCore Bios,不过动作比较慢,不为业界看好。 GeneralSoftware,专做x86 embedded bios的公司。 UEFI是由EFI 1.1为基础发展起来的,它的所有者已不再是Intel,而是一个称作Unified EFI Form的国际组织,包括Intel,Microsoft,AMI,等几个大厂,属于open source,目前版本为2.3.1。与legacy BIOS 相比,最大的几个区别在于: 1.编码99%都是由C语言完成; 2.一改之前的中断、硬件端口操作的方法,而采用了Driver/protocol的新方式; 3.将不支持X86实模式,而直接采用Flat mode(也就是不能用DOS了,现在有些 EFI 或 UEFI 能用是因为做了兼容,但实际上这部分不属于UEFI的定义了); 4.输出也不再是单纯的二进制code,改为Removable Binary Drivers; 5.OS启动不再是调用Int19,而是直接利用protocol/device Path; 6.对于第三方的开发,前者基本上做不到,除非参与BIOS的设计,但是还要受到ROM的大小限制,而后者就便利多了。 7.弥补BIOS对新硬件的支持不足的毛病。 那么原生支持EFI的操作系统呢?除了WIN8外,早在2000年,Linux操作系统便可以支持EFI,当时是elilo EFIboot loader(开机载体),演化至今是EFI版本的grub。Mac OS X 10.4(Tiger)的Intel版也可以支持EFI。2002年微软给Itanium CPU使用的Windows 2000 AdvancedServer Limited Edition及Datacenter Server Limited Edition版支持了EFI v1.10规范。后来的Windows Server 2003 forIA-64版和Windows XP 64-bit版本也支持EFI。至于UEFI的支持是从Windows Server 2008和Vista SP1的64位版本开始,包括Windows 7也只有64位版完整支持UEFI。 有了UEFI让我们的普通电脑以更接近原装苹果的方式运行MAC OS成为了可能。当Clover这样优秀软件出来以后,问题便迎刃而解了。(Chameleon是以legacy BIOS启动,这里略过。从兼容性考虑Clover也包含legacy BIOS启动模式,后文中会有提及)
第二部分,从WIN8的UEFI引导说开去 WIN7和WIN8的EFI文件类似,我以WIN8为例。正常安装情况下,是第二个隐藏的分区。第一个是恢复分区的300M。第二个是EFI分区100M。第三个是MSR分区128M。 我挂载到桌面。(图1)
EFI文件中,有两个文件夹。一个是BOOT,一个是MICROSOFT。其中BOOT文件中含有BOOTX64.EFI。而microsoft文件中的BOOT文件夹下的文件如上图。以前安装WIN7我们知道,一般的启动模式是 LECACYBIOS->BOOT->bootmgr->bcd->wim-> winload.exe。 UEFI下也是类似的情况。 UEFIBIOS->BOOTX64.EFI->bootmgr.efi->bcd->wim->winload.efi。 UEFICLOVER的启动方式也是类似的: UEFIBIOS->BOOTX64.efi->Apple's boot.efi->mach_kernel 最近更新的CLOVER版本的文件夹设置,更贴近了WIN8的EFI文件格式。也方便了大家的理解。
第三部分,CLOVER的应用简介。 CLOVER我只是粗略的说下,针对MSI而言的。如果详细的说,要写很多很多,知道这个东西,自己去搜帖子慢慢研究,慢慢试验。别人的设置未必适合你的机器。 CLOVER是SLICE的作品。玩家圈子就是这样,一个大神顶上去,千万个屌丝嗨起来。远景各位达人也进行了翻译和宣传,各位玩家也做了各种测试反馈,再加上最近开发团队打了鸡血一样的不停更新,这个东西已经越来越好用了。现在玩黑苹果的你没用过CLOVER,你都不好意思和别人打招呼。木哈哈哈~尤其你的主板还支持UEFI的话。 Cloverv2 是基于 Chameleon, rEFIt, XNU, VirtualBox 等四种不同专案的开源代码,如同幸运草的四片叶子一样。看一下CLOVER简单的介绍。 我只说UEFI的CLOVER。针对MSI的现在的主板而言,不用UEFI启动,等于浪费。 和前面我们说的WIN8的EFI文件夹一样。CLOVER的EFI文件里也有两个部分,BOOT和CLOVER。 BOOT文件夹里,就是BOOTX64.EFI,和BOOTIA32.EFI。我用的是64位启动,自然删除了BOOTIA32.EFI。CLOVER文件夹里包含的文件如下。
ACPI,可以放DSDT,也可以从主板BIOS提取各种APCI的表格。DOC介绍和各种说明,没用。可以删除。红色框的驱动是为LEGACY的32和64位的驱动,还有32位UEFI的驱动,我这里全部删除,只保留driver64UEFI即可。KEXTS文件夹是放FAKE.SMC的,mountain lion放到10.8文件夹下。MISC保存各种截图。OEM是一套CLOVER可以启动不同的系统,一套系统设置一套OEM,我们一般只有一个电脑,这个无用,可以删除。ROM,里面放ROM的,比如你把显卡的ROM放到里面,这样不用刷显卡,也可以尝试新的显卡BIOS。THEMES,是放置CLOVER主题的。CONFIG是一些启动的配置比较关键。REFIG,是对CLOVER本身进行一些设置。 只是大概进行了个介绍,详细的去官网看说明即可。 关键的就是driver64UEFI内驱动的放置和CONFIG的设置,如果加上主题的美化,THEMES和REFIT也是需要注意的。 先来看下驱动。 1CsmVideoDxe-64.efi 增强显卡在EFI模式下的兼容性 源自Intel EFI规范,与分辨率的实现相关 2DataHubDxe-64.efi Data Hub可抓取data集合成SMBios 源自Intel EFI规范 2EmuVariableRuntimeDxe.efi 针对某些 Phoenix UEFI 本本 例如DELL Vostro,某些ThinkPad 3FSInject-64.efi 为强制加载某些kext或注入提供支持 kext patcher,如ATIConnectorInfo patch 4HFSPlus64.efi 识别OSX分区 OSX必备,与VBoxHfs-64.efi通用 5NTFS64.efi 识别Win分区 单碟多系统必备 6OsxAptioFixDrv-64.efi 针对AMI Aptio UEFI 台式主板解决找不到内核问题 7OsxFatBinaryDrv-64.efi 胖二进制,对多架构提供支持, 如OSX的boot.efi OSX必备,或称通用二进制Universal Binary 即Intel/PPC 8OsxLowMemFixDrv-64.efi 针对 Insyde H2O UEFI 的本本 修复低位内存问题 9PartitionDxe-64.efi 提供对MBR、GPT等多分区表的支持 源自Intel EFI规范 10Ps2MouseDxe-64.efi PS鼠标 源自Intel EFI规范,待测试 11UsbMouseDxe-64.efi USB鼠标 源自Intel EFI规范,鼠标仍不可用 12VBoxExt2-64.efi 识别Linux分区 源自VBox,Ext4未能识别 13VBoxHfs.efi 识别OSX分区 源自VBox,GUI界面不显示HFS卷名 14XhciDxe-64.efi USB3.0支持 USB2.0的情况正常。 这些是驱动的介绍,对于MSI的Z77 MPOWER和Z77IA-E53来说,只需要用四到五个即可。后面的介绍,我也基本是以这两个板子为例,应该也有些代表性。其他的MSI主板,也都大同小异。基本没什么变化。 对于这两个MSI主板来说,只需要FSInject-64.efi,OsxAptioFixDrv-64.efi,OsxFatBinaryDrv-64.efi,VBoxHfs-64.efi 这四个即可。 如果你的显卡是INTEL集成的或者支持UEFI GOP BIOS的独立显卡,那么可以直接完好支持了,在开机进入CLOVER的引导过程和整个安装过程,分辨率都是很正常的。如果显卡不支持的话,只是进入CLOVER和安装过程分辨率难看一点而已,进入了MAC自然可以安装驱动了,对正常使用毫无关系。 当然如果为了安装过程分辨率好看点也可以加上CsmVideoDxe-64.efi。只是有时候会导致无法启动,这里需要注意。 关于MSI板子,BIOS经过我的修改以后,CONFIG的配置非常简单。
只需要一行 dart=0和slide=0 即可。 BIOS的修改我后面会提到。其他的参数也可以加,可以修饰的更好看些,对使用没有多大区别。 首先来看slide=0,这是个mountain lion必备的。 因为mountain lion用到了ASLR(位址空间编排随机化,Address Space LayoutRandomization)技术。ASLR可以在内存中随机保存系统代码,而非以前的固定内存段方式,这样就避免了特定类型恶意软禁搜索特定段系统代码进行攻击的行为。是一种针对缓冲区溢出的安全保护技术,通过对堆、栈、共享库映射等线性区布局的随机化,通过增加攻击者预测目的地址的难度,防止攻击者直接定位攻击代码位置,达到阻止溢出攻击的目的。ASLR可以有效的降低缓冲区溢出攻击的成功率,如今Linux、FreeBSD、Windows等主流操作系统都已采用了该技术。 Mountainlion每次开机时,内核被加载的位置都不同。这就影响了Clover对mach_kernel的加载。slide=0参数,就是要固定内核的加载位置,防止位置变来变去。固定加载至标准的0x10.0000地址,加载AptioFix后只认该地址即可搞定。 dart=0这是从变色龙时期就可以使用的参数,到了clover也可以用。如不加这个参数也可以在APCI中, DropDMAR设置为YES。 因为升级到OS X10.8.2后,必须要关掉CPU的VT-D虚拟化技术,否则无法进入MAC系统。以前有人就是直接替换了10.8.1的AppleACPIPlatForm.kext。这里你可以不用替换KEXT,也不用去BIOS中关闭VT-D,直接用dart=0即可。
|