、、
1. 手上512GMBP 2013 late 差不多满了,因为穷,所以在淘宝上买了一个NVME转Macbook pcie,然后再买一个NVME 2T的硬盘
2. NVME因为需要最新的Firmware Rom支持,所以必须使用原装的硬盘(必须原装)安装Mac 14以上,我安装了14.5.要不然识别不出来新安装的NVME硬盘
3. 买之前就知道是会有休眠问题的,问了卖家推荐了一些型号说不会的,其中我是买了推荐的HP EX950 2T, 比intel足足贵了700元,结果然并卵,安装完系统测试了一下,发现也是有休眠问题的。测试办法如下:
pmset -a hibernatemode 25
pmset sleepnow
然后合上盖子,过上几分钟,发现就睡死了。根本醒不过来了。必须强行关机再开机, 确认了多次如此。 估计有人说2013 late的机子可以,可能是默认的hibernatemode 3 ,或者设置了hibernatemode 0, 要不就是插着电源。
同时还有副作用,就是开机会黑屏过10-20秒才看到苹果和进度条,开机速度超慢。
4. 遍查了整个网络,找到了以下的资料:
Background
证实了,只要是2013-2014的Macbook都会有问题的,任何型号的NVME转接的SSD都有问题,没有例外,原因是固件中的NVME驱动有问题会令到无法唤醒.
参考URLhttps://forums.macrumors.com/threads/upgrading-2013-2014-macbook-pro-ssd-to-m-2-nvme.2034976/page-87
解决办法也给出了,就是使用2015的固件中NVME替换2013-2014的固件驱动,GUID为51116915-C34B-4D8E-86DB-6A70F2E60DAA, 然后使用编程器去先从MX25L6406EMI这芯片读出原来的Rom, 然后从Macos的安装包找出2015的NVME替换好了,再刷回MX25L6406EMI。
文中CH341A编程器淘宝有卖,好便宜,只需要20-30元不等,但是它是使用一个SPI to J6100 adapter,这个查了一下发现淘宝没有,只有ebay上有,韩国卖家,几百块,发货时间还要超长。。。
5. 既然升级系统的时候可以升级固件,那么说明使用软件来刷也是可行的,就是前几天发的文章了,
1. get the FirmwareUpdate.pkg file from the OS installer app's installESD.dmg
2. extract the contents using pkgutil --expand /path/to/FirmwareUpdate.pkg /FirmwareUpdate
3. in terminal, cd to the Scripts directory inside the expanded FirmwareUpdate pkg directory.
4. with Scripts as your working directory, run these 2 commands, then reboot:
sudo /usr/libexec/FirmwareUpdateLauncher -p "$PWD/Tools"
sudo /usr/libexec/efiupdater -p "$PWD/Tools/EFIPayloads"
5. at the reboot, firmware will be updated if there are any updates to be applied.
测试了一下,固件是可以刷的,但是必须满足以下所有条件:
1. 使用原装的硬盘
2. 原装的固件
3.固件版本必须大于等于当前的固件的版本
efiupdate只是把文件复制到efi分,然后设置了一些nvram的参数,然后是固件启动的时候从efi的指定地方来更新,但是很明显上面的测试表明了,这个固件的更新之前是有校验的上面三个条件都满足才给刷的,修改了的固件刷不了。
https://apple.stackexchange.com/questions/287644/do-macbooks-support-nvme-ssd-drives-via-the-use-of-a-sintech-adapter
这里人下 Y.H. wong说
hat guide on MacRumors is really useful. I recently upgraded a 2014 MBPr board using most of its instructions, and it still works. Changes made: 1. No need for kapton tape. 2. I used a Sintech ST-NGFF2013-B. 3. I didn't turn off hibernation with pmset, I didn't buy a CH341A programmer either. I just looked up the MBP112 and MBP114 firmwares, transplanted the NVMe driver from MBP114 to MBP112, and flashed my Mac with /usr/libexec/efiupdater -p /path/to/EFIPayloads --force-update. Wakeup problem completely gone. – Y.H Wong Nov 4 '18 at 13:00
@Y.HWong: Sounds like the easiest way to flash the firmware. Can you tell in more detail how you proceeded? May be even join the discussion at MacRumors. Thanks a lot! – Bernhard Fürst Feb 6 at 19:20
不知道他是怎么做到的,始终无法把修改后的固件成功刷上去,有点怀疑他可能是没有测试清楚 。
6. 没有办法了,看到intel是有一个fpt.efi(Flash proramming tool)的,可以在Uefi的shell下执行来刷UEFI的BIOS/固件,但是只是对于PC的,工具和文档参考https://github.com/holoto/efi_shell_flash_bios/
于是安装了refind,然后从clover那里找了一个shellx64.efi放到/EFI/tools/shell.efi下,然后下载了fpt.efi也放到这里,然后运气并不好,fpt.efi无法识别SPI的设备.
但是发现安装refind解决了一些问题:
1.启动不会黑屏20秒左右了,马上就可以启动看到启动菜单,把超时设置为0的话,马上就可以看到苹果和进度条了。
2.唤醒虽然还是有问题,但是表现有些不一样,唤醒的时候不会直接黑屏卡死,而是可以看到refind的启动菜单,然后自动重启,然后再重启开机,这个其实也还好,至少不需要手动长按关机再开机那么烦了。
这个两个问题的解决,我认为问题应该不只是固件的问题,还和启动的efi有关系,然后翻查了一下refind的文档,发现它在原装的硬件中唤醒表现竟然是和我的机器的表现是一致的,就是唤醒变成了自动重启两次。
新的希望又有了,看来唤醒这个只是refind没有做好,在白苹果还有一个选择就是refit这个工具,虽然很久没有更新了,但是工作方式有些不同,它是直接安装在系统盘的根目录的,而不是EFI的分区中,也没有使用nvram的变量。 据查在白苹里使用它是没有休眼唤醒的问题的。于是把refind删除了,安装了refit, 然而也是没有走到狗屎运. :(
7. 好好的查了一下mx25L6406EMI-12G的datasheet, 知道它是8 SOP封装的,问了做硬件的朋友,他说其实可以焊几条线来用刷,但是不想动手电烙铁,上次拆硬盘的bios是拆得满头大汗,折腾许久,最后竟然还没有成功,所以有点信心不足. 于是在淘宝上再试试找那个连接线,也是没有找到,但是发现有一个sop 8的夹子,研究一下买家的评论图片,都是用来刷路由器,刷笔记本的,看来是一个可行,价格便宜又可以快速达成的办法。 于是拍了ch341a+夹子+一堆转接1.8v之类的一整套回来,花了50元左右,第二天就收到了。
8. 买ch341a没有说明书, 我汗,看到有一个跳线写着3.3V5V的,从https://static6.arrow.com/aropdfconversion/cb5c77c505104f4e4cad1b3667abe88327b4ee44/mx25l6406e203v2064mb20v1.9.pdf
先下载datasheet确认了这个mx25L6406EMI是3.3V的,然后小心翼翼用万用表量了一个8号脚是3.3V的, 然后把跳线插在编程那个两个脚上(板上好在有提示),
夹子夹了第一次没有夹好,读不出来,夹第二次好了,测试一下,可以读, 一切正常. 如图:
按上面的https://forums.macrumors.com/threads/upgrading-2013-2014-macbook-pro-ssd-to-m-2-nvme.2034976/page-87
一步一步都做,最后成功刷入固件。 开机问题好了,使用pmset -a hibernatemode 25来测试,唤醒问题也好了。
一切完美解决。
应要求补充一下翻译过来的操作步骤:
1. 打开后盖,主板上找mx25L6406EMI-12G这个芯片,是8只脚的,写了mx25L6406EMI这些字在上面的, 照图夹好BIOS, 红线对齐第一只脚(芯片上有一个圆点标记的)
2. 安装flash rom 工具,使用brew安装
brew install flashrom
3. 开始读出原来的 bios ROM ,这个大小是8M的。输入以下命令:
flashrom -p ch341a_spi -r dump1.bin -c "MX25L6406E/MX25L6408E"
保险起见,执行3次,每次改改名,如下:
flashrom -p ch341a_spi -r dump2.bin -c "MX25L6406E/MX25L6408E"
flashrom -p ch341a_spi -r dump3.bin -c "MX25L6406E/MX25L6408E"
然后可以md5看看hash是不是一致的
md5 *.bin
要是读不出,或者是三次不一致,应该是没有夹好,重新夹一下。
在读数据的时候,这个ch341a的红灯会亮起来
4. 从升级/安装包解压出2015的MBP固件中的NVME驱动
2013-2014 MacBook Pro (MacBookPro11,1), 用MacBookPro11,4 的 firmware
2013-2014 MacBook Air (MacBookAir6,1),用 MacBookAir7,1的 firmware
4.1 双击装载 InstallESD.dmg , 在macOS安装包的Contents/SharedSupport目录下.
4.2 在InstallESD.dmg image, 找到 Packages/FirmwareUpdate.pkg 这个安装包
4.3 用Pacifist或The Archive Browser 打开 the FirmwareUpdate.pkg
4.4 打开Scripts
4.5 从Tools/EFIPayloads 这里解压合适的firmware.
MBA71_0177_B00.fd 是2015 MacBook Air
MBP114_0183_B00.fd 是 2015 MacBook Pro
4.6 上面的操作使用命令行也是可以,我是使用命令行来操作的
xar -x Packages/FirmwareUpdate.pkg
cat Scripts | cpio -i
5. 修改dump1.bin 中的NVME驱动
5.1 用UEFITool 打开2015的固件,找到这个驱动,有查找菜单的,找GUID为 51116915-C34B-4D8E-86DB-6A70F2E60DAA 的就是了。
5.2 右键 “Extract as is…” 把2015的驱动保存下来.
5.3 使用5.2这时保存下来的驱动去替换dump下来的rom里的nvme驱动,也是定位那个GUID,然后右键 "replace aS IS ...."
5.4 替换的动作可以在UEFITool的界面如下图看到,保存这个文件为MBA71_0117_B00-Mod.rom ,
5.5 可以再次打开这个修改后的文件,可以对比一下这个rom的驱动和2015的firmware中的驱动的信息是不是一致的。
如果一致的,那么你这一步成功修改了你机器定制的rom了。
6. 使用flashrom 把修改后的rom写入bios芯片里, flashrom写完之后会自己校验的。
flashrom -p ch341a_spi -w MBA71_0117_B00-Mod.rom -c "MX25L6406E/MX25L6408E"
写完之后,拔出USB的ch341a编程,夹子松开移走,开机,应该一切都是完美的了,可以看到开机马上就看到进度条了,而不是原来的卡上个几十秒,可以使用上面说的方法测试休眠唤醒。
祝好运.