本文系本人原创,转载请注明来自杜斟技术博客。

苹果隔三差五的就会放出固件升级包,从我买笔记本到现在,已经放出3、4个固件升级包了。如果有人像我一样彻底在硬盘上铲除了Mac OS系统,恐怕更新固件将会成为一个很困难的问题。

下面我将具体阐述一下如何在不恢复Mac OS系统的前提下安装固件更新,这恐怕是国内最权威、最高科技、最专业的一篇文章了。很多知识都是我自己摸索出来的,国外论坛上都没有的。有些技术细节国外论坛上的有个老外一直在求助,都还没有人回答。

言归正传,先通过下面这个地址检查下您的笔记本有哪些固件需要升级。

http://support.apple.com/kb/HT1237?viewlocale=zh_CN

上面那个苹果网站写出了一个很重要的基础知识,固件更新分为EFI和SMC两种。要理解这两种固件其实还需要了解一个知识,就是UEFI系统。简单的说UEFI就是BIOS的升级版,功能更强大。UEFI是一个图形界面的小型操作系统,可以读取硬盘EFI分区(FAT格式),并且可以把硬件驱动封装起来,对高级操作系统(如Windows)开放公共接口。因此,以我的理解,SMC固件更新的其实是UEFI系统的主程序,类似BIOS的ROM;而EFI固件更新的是各个硬件的UEFI底层驱动程序。EFI固件往往比较大,但不会超过200M(苹果的EFI分区大小为200M)。

关于UEFI完整的知识可以参考这篇文章:http://www.ihacksoft.com/uefi.html

下面摘抄自苹果官网,告诉您如何查看本机的固件版本。

检查电脑的 EFI Boot ROM 或 SMC 固件版本。

从 Apple (?) 菜单中(Mac OS系统左上角),选取“关于本机”。

点按“更多信息”。

对于 OS X Lion、OS X Mountain Lion 和 OS X Mavericks,点按“系统报告”。对于更低版本的 OS X,请跳到第 4 步。

点按“硬件”部分,以显示型号标识符、Boot ROM 版本和 SMC 版本号。

版本信息显示在右侧面板中,如下图所示:

【原创】新版Macbook Air无Mac OS系统手动更新固件(EFI、SMC) - ( )nnn - 杜斟的技术博客 

了解了以上背景知识,下面可以考虑升级的问题了。我的电脑是2013年中的13寸Air,所以需要下载以下两个升级固件(电脑的具体型号可以在Mac OS系统中“关于本机”中查到)。

MacBook Air(13 英寸,2013 年中)

MacBookAir6,2

MBA61.0099.B20 (2015-002)

2.13f9 (SMC 2.0)

先从上面那个地址的网页中下载需要升级的固件包。注意不要下载错误,固件升级可不像软件升级,一旦升级失败笔记本就会变砖的!下载后发现是.dmg格式的文件,这个格式只有Mac OS环境下可以打开。

先拿出安装了Mac OS系统的移动硬盘进入Mac OS系统。如果你还没有的话请参考我前一篇博文,没有Mac OS系统的话是完全没可能成功升级固件的。然后打开下载的dmg文件,这个文件在Mac OS环境下是可以直接打开的,类似rar格式的压缩文件。打开后发现里面有个pkg安装包,这个安装包可以直接运行。但是,你会发现直接安装的话虽然不会提示失败,但重启后发现根本没有升级固件。原因是这样的:

EFI类型的固件升级只能通过EFI分区进行,需要把.scap格式的文件复制到EFI分区,并由EFI启动程序加载,在进入操作系统之前更新;SMC类型的固件升级需要在EFI Shell下通过执行.efi命令更新固件,这一点类似以前用awdflash刷新BIOS。

那么到底怎么在移动硬盘上的Mac OS环境下更新固件呢?

先说下怎么更新SMC固件吧,这个简单一些:

首先,把pkg文件拖到桌面上来,然后在Mac OS环境下下载并安装一个叫做Pacifist的软件,这个软件可以提取pkg安装包中的文件。安装这个软件的时候如果系统提示权限问题,可以在菜单中的“前往”-“应用程序”-“系统偏好设置”-“安全性与隐私”中把“允许从以下位置下载的应用程序”设置成“任何来源”。

SMC固件安装包提取出来的升级文件主要是两个,SmcFlasher.efi和xxx.smc。这两个文件一个是EFI Shell下的刷机程序,一个是固件升级包。那么只要弄个EFI Shell,运行命令把固件刷进去就好了。具体步骤如下:

首先,在Mac OS下安装rEFIt这个软件,可以让系统启动的时候进入EFI Shell。

然后,用Pacifist把从苹果官网上下载的MacBookAirSMCUpdate2.0.dmg文件解压后的MacBookAirSMCUpdate.pkg解开,找到对应你笔记本型号的文件夹。我的是2013MacBookAir62SMC110,里面有三个文件。把这个目录拷贝到移动硬盘系统所在的根目录。

最后,重启系统,按Option,选择EFI,会出现一个选择操作系统的画面,选择EFI Shell,进入Shell>命令行模式。输入指令“map -r”,这个指令把所有磁盘做了映射,一般移动硬盘不是fs0就是fs1;再输入“fs0:”,切换当前所在磁盘,输入“ls”命令查看文件,如果没有文件,就输入“fs1:”,切换磁盘再ls,直到看到包括2013MacBookAir62SMC110这个目录在内的一大堆根目录文件(如果滚屏看不到可以使用ls -b来分页显示),输入“cd 2013MacBookAir62SMC110”,再执行“SmcFlasher.efi -LoadApp 2013MBA13.smc”刷新固件(其中.efi文件是刷机程序,.smc是对应的固件,千万别刷错),风扇狂转几秒后完成刷新,20秒左右黑屏过后自动重启。

进入Mac OS查看“关于本机->更多信息->系统报告”,关注“SMC版本(系统)”这项的变化即可知道是否成功升级。我的Macbook Air成功升级到2.13f9了。

总结一下进入EFI Shell后执行的命令:

map -r

fs1:

cd 2013MacBookAir62SMC110

SmcFlasher.efi -LoadApp 2013MBA13.smc

至此,硬盘上无Mac OS系统的Macbook Air成功升级SMC固件。

下面该讲怎么升级EFI固件了,这个也是我翻遍了国外论坛也没找到答案的难题,而且我发现很多老外也在问这个问题,但是没有答案。

其实最简单的答案就是先用ghost把硬盘上的Windows备份,然后网络恢复系统,更新后再还原Windows。虽然看上去很笨,但是相信我,这已经是最简单的方式了。当然,如果你的硬盘像我的一样有SMART错误,不能安装系统了,就继续看后面的内容吧。下面的内容我在air的硬盘上已经实验成功了,只靠移动硬盘是无法升级EFI固件的,原因我在最后阐述了。

先搞清楚之前我说的那个事实,就是EFI固件必须借助EFI分区才能实现升级,如果没有EFI分区,是不可能升级成功的。那么,下面的问题就是怎么建立EFI分区了。

不知道大家是否看过了我最早的一篇在Macbook Air上安装Windows的博文,其中提到了EFI分区,大小是200M。那个时候我并不知道这个分区有升级固件的作用,所以完全没保留。很多人可能和我一样删除了EFI分区,那么怎样才能还原呢?

首先,大家必须知道的是,EFI分区只能在GPT格式的硬盘分区表下建立,Windows系统常见的MBR格式是不支持的。所以,请用移动硬盘上的WinPE启动系统,用DiskGenius转换硬盘分区表为GPT格式,并建立一个200M的EFI分区。

然后,在移动硬盘的Mac OS系统中打开“终端”应用,输入以下命令建立一个完整的EFI分区并映射。

diskutil list(使用这个命令查看EFI分区的代号,我的EFI分区是disk0s1)

sudo newfs_msdos -v EFI /dev/disk0s1(这个命令是建立新的文件系统,由于EFI使用FAT格式,所以指定为msdos)

mkdir /Volumes/EFI(建立一个空目录)

sudo mount_msdos /dev/disk0s1 /Volumes/EFI(挂载U盘上的EFI分区到/Volumes/EFI)

这个时候在桌面上可以看到EFI盘符了。那么一个EFI分区建立好了,但分区中没有任何文件,无法启动系统。不过,其实我们并不需要让这个EFI分区来引导系统,所以如果只是想升级苹果固件,下面关于Clover的这段可以忽略。

我们再下载一个叫做Clover应用的EFI配置文件,我已经把这个文件放到我的百度云盘中了,大家可以在这个地址下载http://pan.baidu.com/s/1hq0AQIK。文件名是EFI-2618-x64-UEFI专用.zip,如果下载地址失效,大家也可以搜索这个名字下载。

下载后把这个文件在Mac OS系统中打开,把解压缩后的文件拷贝到桌面上的EFI分区中即可。

最后再在终端中执行sudo umount -f /dev/disk0s1卸载盘符

那么到这个时候,我们已经在硬盘上建立了EFI分区。下一步就是把移动硬盘上的Mac OS用ghost拷贝到笔记本的硬盘上来启动系统并更新固件了。

可能有的同学要问了,这样好low啊,难道没有手动更新的方式吗?答案是:没有。

首先,如果我们把苹果官网下载的MacBookAirEFIUpdate2.8.dmg文件打开,用Pacifist解压出里面的文件,发现是一个叫做MBA61_0099_B12_LOCKED.scap的文件。

如果想把这个文件手动安装到EFI分区中,必须要满足一个条件,就是Mac OS系统和EFI分区在同一个硬盘上。这也是我经过了惨痛的教训才悟出的道理……因此,必须要在这个有EFI分区的硬盘上再弄一个Mac OS系统才行。那么,在移动硬盘上弄个EFI分区,是不是也行呢?答案是:不行。

虽然手动安装是有命令行方式的,这是我在国外论坛上搜到的。在终端应用中输入指令:

sudo bless -mount / -firmware /MBA61_0099_B12_LOCKED.scap -recovery -setBoot -nextonly -verbose

这个命令行有一个参数很特殊,就是-recovery,这个参数貌似并不是标准linux系统的bless命令的参数,而是苹果加上去的,意思就是进入recovery模式。整个命令会把firmware文件拷贝到EFI分区的指定目录(就是EFI分区的EFI/Apple/Firmware目录),并改写UEFI启动系统的配置文件,让UEFI启动时进入recovery模式更新固件。如果不加recovery参数,这行命令在移动硬盘上也是可以执行成功的,但无法修改成正确的配置文件,所以无法在重启后自动更新固件。而加上recovery参数后,移动硬盘上是无法执行成功的,报错信息是recovery模式的firmware是不能存在无法访问到的设备上的。也就是说,在UEFI进入recovery模式更新固件的时候,移动硬盘根本无法加载,也就无法访问到上面的固件文件。

明白了这些原理,相信各位也就明白为什么在硬盘上恢复Mac OS是升级EFI固件最简单的办法了。其实从原理上讲,UEFI系统启动时只需要访问EFI分区上的固件文件,并不需要Mac OS系统。但目前只能用Mac OS系统中的bless命令手动设置UEFI的配置文件,而这个命令又只会在Mac OS所在硬盘上找EFI分区进行操作,所以没办法从移动硬盘上的Mac OS系统手动更新EFI固件了。我在想bless命令是否有特殊参数可以不强制搜索Mac OS所在硬盘的EFI分区,而能找到硬盘上的EFI分区并设置正确的UEFI配置文件。但在国外论坛上没有找到答案,自己乱试的话可能会变砖的,所以还是乖乖重装系统吧。好在有Ghost相助,先备份Windows,再恢复Mac OS升级固件,再恢复Windows,2个小时之内还是可以完成升级的。

文章版权:杜斟的个人博客 - 个人技术分享

本文链接:http://ipfei.com/index.php/archives/447/

转载请注明文章原始出处 !

添加新评论

返回顶部