联想M910Q 黑苹果折腾系列③ Hackintosh opencore完善 EFI分享
lipiwang 2024-11-21 17:46 7 浏览 0 评论
本系列文章预计4篇:
1.装机展示
2.BIOS魔改
3.黑苹果折腾
4.黑苹果展示
本教程参考:
- 司波图 黑苹果系列视频教程
- XJN's Blog
- OpenCore Desktop Guide
- 远景爬贴
免责声明:
我是5月17买的机器,5月18司波图就发了M920Q黑苹果视频教程,所以起初主要参考司波图M920Q黑苹果视频教程。但是M910Q和M920Q毕竟不是一个平台,涉及到魔改操作,而且在我实际折腾过程中发现一些不同之处,甚至原则性的错误,参考了XJN大佬的博客,以及官方guide,远景大量爬贴后有了本文。当然本人也是小白一枚,有错误的地方在所难免,对此造成的任何损失请自行负责,本文仅做折腾分享,感谢理解!
大体思路和司波图相同,司波图把过程讲的很清楚,建议多观看几遍视频教程。我这里不讲过程,着重讲一下M920Q和M910Q的区别以及一些操作的原理。
有关EC屏蔽
首先还是提取DSDT,并反编译为dsl文件,用到SSDTTime和iasl。(可以下载司波图整理的文件包,能用到的东西基本上都有)
直接用文本编辑器打开,推荐notepad++
搜索关键词:PNP0C09
可以看到有关EC部分系统默认屏蔽的,所以就不用FakeEC生成SSDT-EC.aml,这里司波图没有查验这一步直接生成的,可能并不影响,但是opencore尽量少用SSDT补丁及更名补丁,有利于启动速度以及系统稳定性,我作为一个强迫症必须要知道。
有关AWAC时钟
继续搜索关键词:AWAC ,搜索不到说明M910Q主板没有用到AWAC时钟,用不到SSDT-AWAC去切换时钟,这里是和M920Q不同的地方。
有关NVRAM:
NVRAM Testing: You can test if your NVRAM is working by running the following Terminal command and rebooting: sudo nvram TestVar=HelloWorld; once you reboot, run sudo nvram -p | grep 'TestVar'; if you see a result, your NVRAM is working; if not, your NVRAM is broken and needs to be fixed, or otherwise iMessage won't work; after testing, you can delete the TestVar variable by running sudo nvram -d TestVar
输入命令:sudo nvram TestVar=HelloWorld; 写入一个TestVar变量到NVRAM,重启电脑
输入命令:sudo nvram -p | grep 'TestVar'; 可以看到返回结果HelloWorld说明我们的主板原生支持NVRAM。
有关SSDT:
SSDT-PLUG:用于加载原生电源管理,这里我们要用到。
SSDT-EC-USBX:用于屏蔽EC和修正USB供电的,我们EC不用屏蔽,而且强烈建议修正USB供电不要使用SSDT补丁,Xjn大佬解释是opencore没有判断win还是mac系统,双系统特别注意。经过我实测定制USB接口以后,生成的USBPorts.kext里面有修正USB供电代码,USB供电也正常,所以我们用不到这个。
SSDT-AWAC:用于切换RTC时钟,我们用不上。
SSDT-PMC:用于300系主板使用原生NVRAM,实测M910Q支持原生NVRAM,所以我们也用不上。
所以SSDT time用到的就提取SSDT,然后按 3 生成SSDT-PLUG。
有关CFGLock解锁
我们主板没有CFGLock的开关,所以用到opencore的工具CFGLock.efi,这个我的EFI里面会提供
opencore启动界面选CFGLock.efi,进入工具。
工具会自动识别CFGLock状态以及地址,按Y即可自动解锁。(我这里是解锁好的,是不是比司波图那个简便很多?)
有关驱动文件:
我用到的驱动文件如图所示,作用如下:
AppleALC.kext:声卡驱动
Innie.kext:lilu插件,解决nvme识别成外置磁盘,M910Q有这个问题。
IntelMausi.kext:Intel网卡驱动
Lilu.kext:底层依赖
NVMeFix.kext:为NVME硬盘增加ASPT属性来保证节电
SMCProcessor.kext:VirtualSMC插件,CPU核传感器
SMCSuperIO.kext:VirtualSMC插件, IO传感器
USBPorts.kext:USB定制驱动
VirtualSMC.kext:传感器驱动依赖
WhateverGreen.kext:核显&显卡驱动
驱动文件除了常规的一些网卡声卡驱动,要注意的是Innie.kext 这个插件能解决nvme识别成外置黄盘,opencore有ExternalDiskIcons选项,实测不起作用。
有关USB定制:
USB定制教程黑果小兵有详细的视频教程,但是方法比较复杂,现在hackintool可以有更简单的方法:
驱动里面加载Usbinjectall.kext,重启后打开hackintool,定位到USB项目。
- 用USB2设备挨个插USB口,总共6个USB口,识别7个名称HS开头的USB2设备,因为有一个网卡蓝牙用到的端口,设置为USB2类型。
- 用USB3设备挨个插USB口,识别到6个名称SS开头的USB3设备。
- 删除多余的接口,然后把鼠标键盘和蓝牙所在USB口连接器类型设为internal(内建)。
- 点击下面图标最后一个导出。
这里会给到5个文件,我们只用得到USBPorts.kext替换Usbinjectall.kext
打开USBPorts.kext包里面的info.plist可以看到有修正USB电源相关的代码,所以SSDT-USBX.aml和类似于USBPower.kext的东西用不着。
SSDT-UIAC和USBPorts.kext端口定义是重复的,所以用不着放两个,只用USBPorts.kext就够了。我看过司波图的EFI,三个文件都丢进去了,咋说呢不一定会有冲突,系统加载速度可能影响也不大,但是强迫症忍不了,不够精致。
有关睡眠
这台机器现在唯一的问题就是睡眠了,折腾了许久真的搞不定,Wake reason一直是XDCI,我猜测是魔改有懂了BIOS ME模块,但是有说没有魔改的M910Q也不行,当然不排除其他地方原因,希望有大神能完善。
有关EFI
这里貌似不能分享链接,需要的请关注我,然后私聊发送关键字 EFI,系统会自动发送下载链接。
相关推荐
- 前端 JavaScript 字符串中提取数字
-
varstr="4500元";varnum=parseInt(str);alert(num);//4500如果字符串前面有非数字字符,上面这种方法就不行了:var...
- 使用JavaScript如何获取网站网址(js如何获取浏览器信息)
-
在做网站开发时,我们有时候会获取当前页面的完整路径。在网页前端如何实现呢?请在网页脚本代码段中粘贴如下代码。functiongetRootPath(){//获取当前网址,...
- java文本对比工具源码8(java比较文本相似度)
-
/***ParseatextualrepresentationofpatchesandreturnaListofPatch*objects.*@paramtextline...
- JavaScript实现的9大排序算法(js排序方法)
-
笔试面试经常涉及各种算法,本文简要介绍常用的一些算法,并用JavaScript实现。1、插入排序1)算法简介插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通...
- 使用函数化的Javascript代码编写方式
-
对于Javascript介绍想必大家都耳熟能详啦,基于函数化的编程语言,基于浏览器运行的编程语言,web开发语言,前端开发必备语言,blablabla...Javascript是一个非常灵...
- Js基础31:内置对象(js内置对象是什么意思)
-
js里面的对象分成三大类:内置对象ArrayDateMath宿主对象浏览器提供的对象(如bom、dom等等)自定义对象开发人员自己定义的对象内置对象——所谓内置对象,就是JavaScript自...
- js获取上传文件类型以及大小的方法
-
前端web上传文件时,需要在上传之前判断一下文件的类型以及文件的大小,HTML为前端的标记语言是无法做到这一点,只能使用javascript动态脚本代码来实现。js获取上传文件大小的方法示例代码:&...
- 黑客入门实践:如何绕过前端过滤上传文件
-
今天开始,我们就要开始学习具体的漏洞了,但是希望大家学完后,不要轻易"入侵"网站哦,当时测试环境下除外。今天的课程是关于“文件上传漏洞”,据安界网的老师介绍,文件上传漏洞仅次于命令执行...
- Java文件上传细讲(java文件夹上传)
-
什么是文件上传?文件上传就是把用户的信息保存起来。为什么需要文件上传?在用户注册的时候,可能需要用户提交照片。那么这张照片就应该要进行保存。免费学习资料获取方式上传组件(工具)为什么我们要使用上传工具...
- 鸿蒙上实现“翻译”功能(鸿蒙宴全文翻译)
-
本章节我们来制作中文翻译成英文的实例(运行在HarmonyOS上),通过HTTP去配合API进行实现。需求分析如下:文字输入HTTP协议使用文字翻译控件介绍①HTTP数据请求官方文档请求...
- JavaScript从入门到精通(javascript 入门教程)
-
前几天,我们学习了JavaScript的入门课程,但是要想做网站,仅仅学会入门是不够的,今后的几天,我将带领大家精通JavaScript,希望大家好好学习!JS内置对象String对象:字符串对象,提...
- 第15天|16天搞定前端,javascript语法篇(干货)
-
JavaScript是互联网上最流行的脚本语言,这门语言可用于HTML和web,可广泛用于服务器、PC、笔记本电脑、平板电脑和智能手机等设备。它是一个脚本语言,它是一个轻量级,但功能强大的编程...
- 通过js来实现打字效果(js如何输入)
-
有时候浏览网页经常会看见一些页面出现一些打字的效果,那么是怎么实现的呢?逻辑确定目标容器,在哪个容器进行输出确定输出内容,当前直接根据目标容器确定输出内容即可需要控制输出频率,因此需要循环输出完毕代码...
- 手把手教你学会一键还原混淆js原理
-
1.短变量名在以下示例代码中,我们将变量“customerName”替换为“a”:vara="JohnSmith";console.log(a);2.随机变量名在以下示例代码...
- sql中常用的字符串函数详解(sql字符串函数有哪些)
-
在日常开发中遇到处理最多的可能字符串要算其中一个了,什么替换啊截取啊大小写转换啊、删除空格啊等等,这些操作我们可以在前端操作,也可以直接在数据库的sql中操作,那么我们来看一下sql中处理字符串的...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- maven镜像 (69)
- undefined reference to (60)
- zip格式 (63)
- oracle over (62)
- date_format函数用法 (67)
- 在线代理服务器 (60)
- shell 字符串比较 (74)
- x509证书 (61)
- localhost (65)
- java.awt.headless (66)
- syn_sent (64)
- settings.xml (59)
- 弹出窗口 (56)
- applicationcontextaware (72)
- my.cnf (73)
- httpsession (62)
- pkcs7 (62)
- session cookie (63)
- java 生成uuid (58)
- could not initialize class (58)
- beanpropertyrowmapper (58)
- word空格下划线不显示 (73)
- jar文件 (60)
- jsp内置对象 (58)
- makefile编写规则 (58)