本帖最后由 syscl 于 2015-3-14 03:35 编辑
『在这里,你主宰你的命运』
以上面这句话作为起点,我更想表达的是,OS X安装在PC上面的诀窍,就是敢于尝试,具体问题具体分析,还有永不放弃尝试的耐心和毅力。
前一阵子在论坛看到有消息说Haswell 平台以及Haswell Refresh平台的赛扬(Celeron G18XX)和奔腾(Pentium G3XXX)无法顺利安装OS X,表现为启动卡在『15/3/13 下午3:17:29.000 kernel[0]: XCPM: registered』附近。致使我曾想入手7系列的主板,但是很多主板的价格高不成低不就,整个平台配套下来也不便宜,结合作死的心态,入手了微星H87M加上赛扬(Celeron)G1840。
全文分两部分,一部分直接面向偷懒的朋友(配置相近),直接下载附件中的Clover档案,扔进EFI分区即可。
另一部分,是希望不断追求完善和的朋友们看的。在完成了系统的安装后,我们的系统还仅仅能『用』,自然希望系统更完美的运行,如减少第三方内核扩展(Kext)的调用,AppleHDA原生驱动声卡,网卡内建以实现AppStore购买,处理器/显卡变频,完美睡眠,USB 3.0驱动...
硬件
- 主板: 微星(MSI) H87M-G43 (H87M-S01)『Bios版本 1.8 需要进一步修改』
- 处理器: Intel(R) Celeron(R) G1840 @ 2.80GHz 变频档位(8、28)
- 音频: Realtek ALC892 (VenderID 10ec0892)
- 以太网卡:Realtek RTL8111/8168/8411
- 显卡: Pegatron GeForce G210(VenderID 10de0a60)
- 显示器: HP 2009f
主板接线
HP p6215cx在使用上述接口时,前面板一旦接入设备,便会睡眠瞬间/自动/一秒唤醒。即便移除了DSDT中的GLAN,EHC,XHC也无效。引入参数gux_defer_usb2、gux_noidle、gux_nosleep,也无效。移植技嘉对EHC的管理方法也不行,然而在把前置USB接到USB Front 3上面的时候,奇迹出现了,睡眠不再自动唤醒。当然,方法不绝对,每个人的配置或多或少存在区别,也正是如此,完善OS X的过程中,你,主宰你的命运!
BIOS设置
1. Settings—>Advanced—>Integrated Peripherals
SATA1/2/3/4/5/6 Hot Plug 设置成『Enabled』 2. Settings—>Advanced—>Wake Up Event Setup
Wake Up Event By 设置成『BIOS』 Resume From S3/S4/S5 By USB Device 设置成『Enabled』(鼠标,键盘唤醒) 3. Settings—>Advanced—>USB Configuration XHCI Hand-off 设置成『Enabled』 EHCI Hand-off 设置成『Enabled』 4. Settings—>Advanced—>Boot
Boot mode select 设置成『UEFI』 5. Overclocking
EIST 设置成『Enabled』 6. Overclocking—>CPU Features
Intel Adaptive Thermal Monitor 设置成『Enabled』 Intel C-State 设置成『Enabled』 C1E Support 设置成『Enabled』
Clover设置(Config.plist)
1. ACPI 部分
2. Boot 部分
3. Devices 部分
4. Graphics 部分
- 5. KernelAndKextPatches 部分
这部分需要重点说明 (i)FakeCPUID填入『0x0306A0』
6. SMBIOS 部分
7. 所需UEFI驱动
*可选/非必要操作(注意:以下操作有可能损坏您主板BIOS芯片,如果没有一定的善后能力,请注意标红部分,在按照标红部分设置后,你可以跳过下面的操作)
**在Config.plist的『KernelAndKextPatches』增加『KernelCpu』和『KernelPM』,类型为『Boolean』,值为『Yes』。
**
1. 务必完整备份主板原先的BIOS。
2. M-Flash更新BIOS到最新版(Select one file to update BIOS and ME)
3. 利用UEFIPatch(https://github.com/LongSoft/UEFITool/releases/tag/0.20.4)解除MSR 0xE2 register lock 。
将UEFIPatch、patches.txt和待修改的BIOS放置在同一目录下 UEFIPatch BIOSName.XXX
4. M-Flash完整的刷入修缮过的BIOS(Select one file to update BIOS and ME)
5. Ubuntu提取DSDT和SSDT,Codec。
完成了步骤1,步骤2,步骤3和步骤4后,就可以去掉Clover当中的『Kernel PM』以及『Kernel CPU』。也就是,OS X可原生(不再需要每次都破解mach_kernel)加载Haswell 平台的电源管理XCPM并且不会发生引导重启的问题了。
附件中含微星H87M-G43(H87M-S01)1.8 版本修改好的BIOS,并加入Dell SLIC 2.2用以激活系统。
DSDT
*这部分需要MaciASL,iasl。
1. iasl反编译得到可用的dsl 2. 修复错误和部分警告
错误:syntax error, unexpected PARSEOP_ZERO
删除错误位置下的Zero
错误:10887, 6126, syntax error, unexpected '}' If (CondRefOf (MDBG)) { Return (MDBG) Arg0 }
删除标红处,或者在MaciASL 中『打补丁』—>『RehabMan』—>『Fix ADBG Error』
手动删除:
或者打补丁:
错误:83, 6074, Name already exists in scope (_SB_.PCI0.PEG0)
找到错误所在行 - External (_SB_.PCI0.GFX0.TCHE, UnknownObj)
- External (_SB_.PCI0.PEG0, UnknownObj)
- External (_SB_.PCI0.PEG0.PEGP, UnknownObj)
复制代码删除后 - External (_SB_.PCI0.GFX0.TCHE, UnknownObj)
- External (_SB_.PCI0.PEG0.PEGP, UnknownObj)
复制代码错误:83, 6074, Name already exists in scope (_SB_.PCI0.PEG0.PEGP) - External (_SB_.PCI0.GFX0.TCHE, UnknownObj)
- External (_SB_.PCI0.PEG0.PEGP, UnknownObj)
- External (_SB_.PCI0.PEG1, UnknownObj)
复制代码删除后 - External (_SB_.PCI0.GFX0.TCHE, UnknownObj)
- External (_SB_.PCI0.PEG1, UnknownObj)
复制代码错误:83, 6074, Name already exists in scope (_SB_.PCI0.PEG1)
找到错误所在行 - External (_SB_.PCI0.GFX0.TCHE, UnknownObj)
- External (_SB_.PCI0.PEG1, UnknownObj)
- External (_SB_.PCI0.PEG2, UnknownObj)
复制代码删除后 - External (_SB_.PCI0.GFX0.TCHE, UnknownObj)
- External (_SB_.PCI0.PEG2, UnknownObj)
复制代码错误:83, 6074, Name already exists in scope (_SB_.PCI0.PEG2)
找到错误所在行 - External (_SB_.PCI0.GFX0.TCHE, UnknownObj)
- External (_SB_.PCI0.PEG2, UnknownObj)
- External (D1F0, UnknownObj)
复制代码删除后 - External (_SB_.PCI0.GFX0.TCHE, UnknownObj)
- External (D1F0, UnknownObj)
复制代码2. 原生加载AppleLPC.kext (仿冒Low Pin Controller(LPC)的设备ID为9c43)
搜索0x001F0000,定位到LPCB模块,在模块最后添加 - Method (_DSM, 4, NotSerialized)
- {
- If (LEqual (Arg2, Zero)) { Return (Buffer() { 0x03 } ) }
- Return (Package()
- {
- "compatible", "pci8086,9c43",
- })
- }
复制代码3. 驱动AppleHDA.kext (注入硬件Layout-ID(Audio ID)类型为 1 )
搜索0x001B0000,添加 - Method (_DSM, 4, NotSerialized)
- {
- If (LEqual (Arg2, Zero)) { Return (Buffer() { 0x03 } ) }
- Return (Package()
- {
- "layout-id", Buffer() { 0x01, 0x00, 0x00, 0x00 },
- "PinConfigurations", Buffer(Zero) {}, "hda-gfx", Buffer() { "onboard-1" }, })
- }
复制代码
注入后:
4. 修复因为注入声卡而导致的声音爆破或者声音变形
MaciASL—>『打补丁』—>『RehabMan』—>『IRQ Fix』
5. 电源键休眠
搜索PNP0C0C,将 - Name (_HID, EisaId ("PNP0C0C")) // _HID: Hardware ID
复制代码改成 - Name (_CID, EisaId ("PNP0C0C")) // _HID: Hardware ID
复制代码
至此,DSDT的修改完成,转换成dsdt.aml后(注意大小写),拷贝至『/EFI/CLOVER/ACPI/patched/』即可 。
二楼主要解决的问题是,利用SSDT实现Haswell奔腾Pentium以及赛扬Celeron在Yosemite下以及Mavericks下的变频功能。
所需附件
|