- 积分
- 726
- 最后登录
- 2024-3-29
- 精华
- 0
- 阅读权限
- 40
- 主题
- 85
- UID
- 573606
- 帖子
- 990
- PB币
- 6038
- 威望
- 55
- 贡献
- 0
- 技术
- 18
- 活跃
- 3032
- UID
- 573606
- 帖子
- 990
- PB币
- 6038
- 贡献
- 0
- 技术
- 18
- 活跃
- 3032
|
发表于 2014-3-20 18:53:04
IP属地重庆
|显示全部楼层
本帖最后由 在野 于 2014-4-28 10:11 编辑
在普通电脑上安装苹果系统确实是非常蛋疼的一件事情。真的是花很多时间,坚持下去网上到处搜资料。前不久外接一个电视弄了有一周吧,为了忘记就记录一下吧。
参考资料
1. http://user.qzone.qq.com/350043876/blog/1346126552 微星z68gd65主板升级dsdt修改日志
2. http://pci-ids.ucw.cz/read/PC/8086 Intel
4. https://bbs.pcbeta.com/viewthread-1053119-1-1.html AppleHDA开启HDMI音频综合帖
5. https://bbs.pcbeta.com/viewthread-1157609-1-1.html 技嘉Z77M-D3H在M Lion下修改DSDT实现ATI显卡DP&HDMI音频输出(intel7系列可参考)
一:首先肯定是编译dsdt修改所有错误。
二:在dsdt的头部,很多“Name”的前面插入一个修改dsdt必须要的函数DTGP。
Method (DTGP, 5, NotSerialized)
{
If (LEqual (Arg0, Buffer (0x10)
{
/* 0000 */ 0xC6, 0xB7, 0xB5, 0xA0, 0x18, 0x13, 0x1C, 0x44,
/* 0008 */ 0xB0, 0xC9, 0xFE, 0x69, 0x5E, 0xAF, 0x94, 0x9B
}))
{
If (LEqual (Arg1, One))
{
If (LEqual (Arg2, Zero))
{
Store (Buffer (One)
{
0x03
}, Arg4)
Return (One)
}
If (LEqual (Arg2, One))
{
Return (One)
}
}
}
Store (Buffer (One)
{
0x00
}, Arg4)
Return (Zero)
}
三:加载苹果原生电源管理(AppleIntelCPUPowerManagement),丢弃NullCPUPowerManagement.kext需要的修改有两处
搜索“HPET”添加下面两行
IRQNoFlags ()
{0}
IRQNoFlags ()
{8}
大约成这个样子
Device (HPET)
{
Name (_HID, EisaId ("PNP0103"))
Name (CRS, ResourceTemplate ()
{
IRQNoFlags ()
{0}
IRQNoFlags ()
{8}
Memory32Fixed (ReadWrite,
0xFED00000, // Address Base
0x00000400, // Address Length
_Y20)
})
搜索“001F0000”添加“_DSM”函数如下
Name (_ADR, 0x001F0000)
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x02)
{
"device-id",
Buffer (0x04)
{
0x44, 0x1C, 0x00, 0x00
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
其中"device-id",
Buffer (0x04)
{
0x44, 0x1C, 0x00, 0x00
}
楼主的主板是z68用的0x44, 0x1C, 0x00, 0x00也就是z68主板的控制器硬件ID是1c44,下面有两张苹果支持的硬件ID图,如果你的电脑硬件ID不在这个表内就随便选个较低的版本吧。
这样修改之后,你的黑苹果应该就可以加载AppleLPC了。不过还要修改DSDT的两处地方来避免出现声音变形的问题。
1、查找“PNP0000”,用/*…*/屏蔽IRQ。
2、 查找“PNP0100”,用/*…*/屏蔽IRQ。
四:添加声卡以便用苹果原生声卡驱动(要打补丁)。搜索“HDEF”或者“001B0000”添加函数如下,这个是Alc892的其它声卡问李彦宏吧。
Device (HDEF)
{
Name (_ADR, 0x001B0000)
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x10)
{
"AAPL,slot-name",
Buffer (0x09)
{
"Built-In"
},
"device_type",
Buffer (0x11)
{
"Audio Controller"
},
"model",
Buffer (0x0F)
{
"Realtek Alc892"
},
"built-in",
Buffer (One)
{
0x01
},
"codec-id",
Buffer (0x04)
{
0x92, 0x08, 0xEC, 0x10
},
"layout-id",
Buffer (0x04)
{
0x7C, 0x03, 0x00, 0x00
},
"device-type",
Buffer (0x0F)
{
"Realtek ALC892"
},
"PinConfigurations",
Buffer (Zero) {}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
}
}
五:防止bios被重置,搜索“RTC”找到如下。
Device (RTC)
{
Name (_HID, EisaId ("PNP0B00"))
Name (_CRS, ResourceTemplate ()
{
IO (Decode16,
0x0070, // Range Minimum
0x0070, // Range Maximum
0x00, // Alignment
0x02, // Length
)
})
}
只修改这一行
0x02, // Length
是其他值的比如0x04修改为0x02,其他不要动。
六:集成显卡-Intel HD 3000
查找“0x00020000” 把上面找到的Device(XXXX)全部改为Device (IGPU)并做相对应的转换,如果有独立显卡请考虑综合考虑第六步看是否冲突。把下面13行代码复制到Device(IGPU)下Name(_ADR,0x00020000)之后
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x02)
{
"hda-gfx",
Buffer (0x0A)
{
"onboard-2"
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
六:独立显卡-AMD/Nvidia
查找显卡地址(一般为显卡地址"0x00010000"或"0x00030000")
用Device (PEGP)代替你找到的Device(PEG0),Device(P0P1),Device(P0P2)或Device(P0P3),参照那五步考虑怎么修改替换名字不会冲突。
在Device (PEGP)里面添加设备Device (GFX0)和Device (HDAU),注意这里的Device (GFX0)是楼主的显卡5770专用注意替换。代码如下:
Device (GFX0)
{
Name (_ADR, Zero)
Name (_SUN, One)
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x0A)
{
"@0,name",
Buffer (0x0C)
{
"ATY,Vervet"
},
"@1,name",
Buffer (0x0C)
{
"ATY,Vervet"
},
"@2,name",
Buffer (0x0C)
{
"ATY,Vervet"
},
"model",
Buffer (0x13)
{
"AMD Radeon HD 5770"
},
"hda-gfx",
Buffer (0x0A)
{
"onboard-1"
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
}
Device (HDAU)
{
Name (_ADR, One)
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x02)
{
"hda-gfx",
Buffer (0x0A)
{
"onboard-1"
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
}
在Device(GFX0)中加入以下代码,不能直接使用提供的,需要根据你的显卡的实际情况来定
具体的说接口个数:从0开始
如果你有4个那就是0,1,2,3;如果你有3个则是0,1,2;以此类推
使用的Framebuffer:下表代码中的"ATY,Uakari"改成自己使用的参数
像我使用的是Eulemur,则改为"ATY,Eulemur",并把buffer()括号里的值删除
显示名称:Model下就是显卡显示的名称,改为自己想要的,并把buffer()括号里的值删除
Store (Package (0x0C)
{
"@0,name",
Buffer (0x0D)
{
"ATY,Uakari"
},
"@1,name",
Buffer (0x0D)
{
"ATY,Uakari"
},
"@2,name",
Buffer (0x0D)
{
"ATY,Uakari"
},
"@3,name",
Buffer (0x0D)
{
"ATY,Uakari"
},
"model",
Buffer (0x13)
{
"AMD Radeon HD 5870"
},
|
|