长贴:有很多教程链接;n7as(mcp7a) 的完美mac历程
本帖最后由 yanjin 于 2009-5-22 13:40 编辑听说苹果新的 mac 和 macbook 都是用的mcp79的平台加扣肉。为了追求完美的mac 我入了一个昂达的n7as 主板,配合我原有的
扣肉6300,开始了我的mac历程。
一开始,哇,不要说原版leopard 10.5.6 就是ipc 10.5.6 , ideb1.4*** 10.5.6 没有一个能正常安装。ideb1.4,可以安装但是不能启动,还不如我原先的七彩虹975x 主板。怎么办。问google .通过一番搜索,明白了这是 著名的CPUS=1问题是bios 中 acpi dsdt 不兼容导致的。
我阅读了如下帖子。
http://www.bios.net.cn/bbs/thread-44327-1-1.html
http://forum.insanelymac.com/index.php?showtopic=90505
里面讲述了如何修改dsdt 解决 cpus=1 的问题,但是我照着做时,发现无法走通,经过研究发现,我的bios与文中的不同,我的dsdt是
独立的表,而文中是和acpi放在一起。所以我改变了方法。
如下:
http://home.pcbeta.com/space.php?uid=46240&do=blog&id=1602
刷了修改的bios 后 我直接安装了原版。用变色龙引导安装。
安装后,无显卡驱动,网卡驱动,声卡驱动。
首先解决的是显卡:
我首先使用ox86tools使用 EFI string ,结果是有分辨率了。但是 无qe/ci
后来我下载了 nvkush 安装,显卡正常。
http://diabolik1605.com/DHF/
网卡:
https://www.pcbeta.com/html/56/t-372156.html
声卡:
我头痛死了。装了几个驱动都不行。后来我在ipc中提取了 alc883add0alc883add1
发现了 alc883add1 中的 hdaenabler 有用。
我有根据 https://www.pcbeta.com/html/03/t-366603.html
的办法制作了applehda applehdacontrol 仿冒驱动,解决了这个问题。
不过后来我发现了更好的驱动。支持10.5.7的仿冒驱动 在 http://www.insanelymac.com/forum/index.php?showtopic=143697
现在好了,完美了
不,我不要将这些驱动放在系统中,我想将所有的破解驱动,外来驱动都放到,变色龙的 Extra/Extensions中。保持系统干净。
说了就做。
将我所用到的 所有破解驱动都放到了 变色龙的 Extra/Extensions同时在驱动的infolist
后面都添加了OSBundleRequired=Root
发现声卡,网卡可以加载,显卡不能启动qe/ci
经过几次测试 确认 nvkush 在 /S/L/E 下 可以打开qe/ci在 变色龙的 Extra/Extensions只能改分辨率。
最后我只能孤零零的将 nvkush 扔在/S/L/E 下
后来见到了,威廉三世的帖子,https://bbs.pcbeta.com/thread-484842-1-1.html
我也起了修改 dsdt 支持显卡的想法、但是 威廉三世提供 的acpipatch 不支持我的显卡,也不能识别我的bios ,
但是我在insanelymac 找到了 asus p5n7a-vm(mcp7a)的 dsdt.aml
http://www.insanelymac.com/forum/index.php?showtopic=148416&st=200&p=1082035&#entry1082035
New Updated DSDT :
HPET Fixed, So you can have AppleIntelCPUPowerManagement.kext installed w/o a Disabler.
GPU Injection, No need to have NVKush (or any other gpu injector) installed.
All thanks go to Signal64 for all the help.
The 2 core version .aml : http://www.insanelymac.com/forum/style_images/lucidity/folder_mime_types/zip.gifDSDT.aml.zip ( 16.44K ) Number of downloads: 241
The .dsl if you want to edit for 4 core detection : http://www.insanelymac.com/forum/style_images/lucidity/folder_mime_types/zip.gifdsdt.dsl.zip ( 30.15K ) Number of downloads: 82
-D-
我将 他的 dsdt.aml 放到变色龙的 Extra/Extensions删除 /S/L/E 下的 nvkush 启动
果然我的先看正常驱动了 开了 qe/ci
但是 不能像他所说使用 原版 AppleIntelCPUPowerManagement.kext ,也不能替代 hdaenabler 的作用,没有关系毕竟p5n7a-vm
与我的n7as 硬件有所不同。
我决定按他的办法 自己修改自己的 dsdt.aml
http://www.insanelymac.com/forum/index.php?showtopic=148416&st=340 第355楼开始的帖子。
首先用 mmtools 提取 dsdt.aml 根据你的 bios 情况 使用
http://home.pcbeta.com/space.php?uid=46240&do=blog&id=1602
或者
http://www.bios.net.cn/bbs/thread-44327-1-1.html
然后用
iasl -d dsdt.aml 反编译成 dsdt.dsl
dsdt.dsl 是一个 文本文件。
打开
1. 修改 解决cpus=1
搜素 Scope (_PR)
去掉 alias 开头的语句。
改成如下样子
原有的语句
Scope (_PR)
{
Processor (P001, 0x01, 0x00004010, 0x06) {}
Alias (P001, CPU1)
Processor (P002, 0x02, 0x00000000, 0x00) {}
Alias (P002, CPU2)
Processor (P003, 0x03, 0x00000000, 0x00) {}
Alias (P003, CPU3)
Processor (P004, 0x04, 0x00000000, 0x00) {}
Alias (P004, CPU4)
}
修改后的样子
Scope (_PR)
{
Processor (CPU1, 0x01, 0x00004010, 0x06) {}
Processor (CPU2, 0x02, 0x00000000, 0x00) {}
Processor (CPU3, 0x03, 0x00000000, 0x00) {}
Processor (CPU4, 0x04, 0x00000000, 0x00) {}
}
2. hpet 修改
搜索If (_OSI ("Windows 2006")) 修改:
原有语句
If (_OSI ("Windows 2006")) {
Store (0x15, Local0)
}
改为:
If (_OSI ("Windows 2006"))
{
Store (0x15, Local0)
}
If (_OSI ("Darwin"))
{
Store (0x15, Local0)
}
3. RTC modified -去除红色代码
搜素 Device (RTC0)
原有:
Device (RTC0)
{
Name (_HID, EisaId ("PNP0B00"))
Name (CRS0, ResourceTemplate ()
{
IO (Decode16,
0x0070, // Range Minimum
0x0070, // Range Maximum
0x00, // Alignment
0x02, // Length
)
IRQNoFlags () <-- Remove
{8} <-- Remove
})
4. Search and Replace _T_ with T_
5. Search and Replace Acquire (MUTE, 0x03E8) with Acquire (MUTE, 0xFFFF)
6. Search and Replace Acquire (MUTE, 0x0FFF) with Acquire (MUTE, 0xFFFF)
7. Compile with iasl
--- 注意到这里就可以可以将dsdt.dsl 编译成 dsdt.aml 正常启动了 这前面的修改是通用的,相当于 威廉三世提供的acpipatcher
程序中cpufix ,hpetfix ,rtcfix 三个的功能。下面就是专用的了。 ----
1. HDEF
a. Search and Replace HDAC with HDEF
2. USB
a. Search and Replace USB0 with OHC1
b. Search and Replace US15 with OHC2
c. Search and Replace USB2 with EHC1
d. Search and Replace US12 with EHC2
目的好像是让leopard 将cpu识别成内置usb集线器 ,解决识别成外部usb的唤醒问题
3. SATA
a. Search and Replace ATA0 with SATA
b. Will need to add dev id to AppleAHCIPort.kext - MCP79AHCI - IOPrimaryPCIMatch
<string>0x0ab810de</string>
让leopard 识别mcp7a的ahci 为 mcp79
4. SBUS
a. Search and Replace SMB0 with SBUS
5. TRIM
a. Search and Replace TRM0 with TRIM
6. P4MI, NVPM
These don't have a matching entry in the default DSDT
We add stubs so they are recognized.
Place the following above Device (OHC1)
Device (P4MI)
{
Name (_ADR, 0x00030003)
}
Device (NVPM)
{
Name (_ADR, 0x00030005)
}
7. GIGE
a. Search and Replace NMAC with GIGE
这是p5n7a 的设备,我的n7as 中没有,用于解决 nvidia 网卡的问题。
8. RP04
a. Search and Replace P0P6 with RP04
(that's P zero P6 and RP zero 4)
9. LPC
a. Search and Replace SBRG with LPCB
b. Will need to add dev id to AppleLPC.kext
<string>pci10de,aac</string>
10. LPC Devices
a. Search and Replace DMAD with DMAC
b. Search and Replace RTC0 with RTC
c. Search and Replace OMSC with LDRC
d. Search and Replace COPR with MATH
e. Search and Replace (PIC) with (IPIC)
f.Search and Replace TMR with TIMR
11. MCH
a. add the following above RP04 section
Device (MCH2)
{
Name (_ADR, 0x00000001)
}
Device (MCHC)
{
Name (_ADR, Zero)
}
12. DTDG
a. add above Scope (_SB) section
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 (0x01)
{
0x03
}, Arg4)
Return (One)
}
If (LEqual (Arg2, One))
{
Return (One)
}
}
}
Store (Buffer (0x01)
{
0x00
}, Arg4)
Return (Zero)
}
下面就是显卡的inject 了,如果你不是我的mcp7a/9300显卡,你也可以改为自己显卡的参数,参数从你能够正常使用的 EFIsring info文件来
13. 添加显卡 injection
a. Find Scope (_SB.PCI0.IXVE.IGPU)
b. 下滑到 method Method (_DSM, 4, NotSerialized) 结尾。
c. 并列 Return (Zero) at the end of the _DSM method with:
原有代码
method Method (_DSM, 4, NotSerialized)
{ 。。。。。
。。。。。
。。。。。
return(0)
"将下面红色代码加到这儿。“
}}
Store (Package (0x16)
{
"device_type",
Buffer (0x0C)
{
"NVDA,Parent"
},
"model",
Buffer (0x15)
{
"NVIDIA GeForce 9300M" // 根据自己显卡修改
},
"rom-revision",
Buffer (0x06)
{
"OSX86"
},
"NVCAP",
Buffer (0x14)
{
/* 0000 */ 0x05, 0x01, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00,
/* 0008 */ 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
/* 0010 */ 0x00, 0x00, 0x00, 0x00
}, // 根据自己显卡修改
"@0,device_type",
Buffer (0x08)
{
"display"
},
"@0,compatible",
Buffer (0x0B)
{
"NVDA,NVMac"
},
"@0,name",
Buffer (0x0F)
{
"NVDA,Display-A"
},
"@0,fboffset",
Buffer (0x04)
{
0x00, 0x00, 0x01, 0x00
},
"@1,device_type",
Buffer (0x08)
{
"display"
},
"@1,compatible",
Buffer (0x0B)
{
"NVDA,NVMac"
},
"@1,name",
Buffer (0x0F)
{
"NVDA,Display-B"
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
14. 添加声卡 injection
a. Find Device (HDEF)
b. Add the folowing at the end after Method (_PRW...} :
CODE
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x06)
{
"layout-id",
Buffer (0x04)
{
0x78, 0x03, 0x00, 0x00 // the hex layout ID (reverse order )// 根据自己可用的 hdaenabler 中
//info.plist 填写
// 0x40, 0x00, 0x00, 0x00 // the hex layout ID (reverse order)
// al883 应该是 0x73, 0x03, 0x00, 0x00
},
"model",
Buffer (0x10) // the hex count + 1 for null terminated ascii string
{
"Realtek ALC1200" // the string identifier
},
"PinConfigurations",
Buffer (0x34) // the actual hex count
{
// the PinConfigurations data as it appears.
/* 0000 */ 0x10, 0x40, 0x11, 0x01, 0x20, 0x10, 0x01, 0x01,
/* 0008 */ 0x30, 0x60, 0x01, 0x01, 0x40, 0x20, 0x01, 0x01,
/* 0010 */ 0x80, 0x90, 0xa1, 0x01, 0x90, 0x30, 0x81, 0x01,
/* 0018 */ 0x50, 0x40, 0x21, 0x02, 0xa0, 0x90, 0xa1, 0x02,
/* 0020 */ 0x60, 0x61, 0x45, 0x01, 0x70, 0x11, 0x43, 0x19,
/* 0028 */ 0xf0, 0x11, 0x33, 0x19, 0xf0, 0x01, 0xff, 0x50,
/* 0030 */ 0xf0, 0x01, 0xc0, 0x50
}) // 根据自己可用的 hdaenabler 中 //info.plist 填写
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
好了 dsdt.dsl 修改完毕,iasl dsdt.dsl编译成 dsdt.aml 放到 变色龙 的extra 目录下。
启动leopard
我的mac 不需要 任何显卡破解,声卡不使用 hdaenabler 了
现在剩下的问题是;
原版leopard 实现 speedstep
原版leopard 睡眠和唤醒
果然是长帖,辛苦了 我晕,那还是需要第三方软件参与安装。 恩,非常有意思的文章,很多有用的东西,免得我去insanelymac爬楼了,谢谢楼主,
另外几个tip,首先HPET不是那样修改的,你的那个修改只是让darwin走预置的vista的acpi路径,因为厂商会对vista做特殊的优化,vista系统里执行的ACPI路径和其他系统是不一样的,一部分是厂商偏心,另一部分是windows从来都不完全遵循ACPI标准,以至于厂商要区别对待,所以那样修改让darwin走vista的路径,但不代表这样的acpi符合darwin的要求,比如HPET里就要判断是否走vista路径,但是那个路径不一定对,还不如直接指定,所以我没有去做这一步,真正的的HPET修改以我的dsdt为例,
修改前
Device (HPET)
{
Name (_HID, EisaId ("PNP0103"))
Name (ATT3, ResourceTemplate ()
{
IRQNoFlags ()
{0}
IRQNoFlags ()
{8}
Memory32Fixed (ReadWrite,
0xFED00000, // Address Base
0x00000400, // Address Length
)
})
Name (ATT4, ResourceTemplate ()
{
})
Method (_STA, 0, NotSerialized)
{
If (LGreaterEqual (OSFX, 0x03))
{
If (HPTF)
{
Return (0x0F)
}
Else
{
Return (Zero)
}
}
Else
{
Return (Zero)
}
}
Method (_CRS, 0, NotSerialized)
{
If (LGreaterEqual (OSFX, 0x03))
{
If (HPTF)
{
Return (ATT3)
}
Else
{
Return (ATT4)
}
}
Else
{
Return (ATT4)
}
}
}
修改后
Device (HPET)
{
Name (_HID, EisaId ("PNP0103"))
Name (ATT3, ResourceTemplate ()
{
IRQNoFlags ()
{0}
IRQNoFlags ()
{8}
Memory32Fixed (ReadWrite,
0xFED00000, // Address Base
0x00000400, // Address Length
)
})
Name (ATT4, ResourceTemplate ()
{
})
Method (_STA, 0, NotSerialized)
{
Return (0x0F)
}
Method (_CRS, 0, NotSerialized)
{
Return (ATT3)
}
}
你可以看到我忽略了OSFX的判断,直接指定返回值,这里的OSFX就是用来判断系统走不同ACPI路径的,经过这样的修改应该就能使用原版AppleIntelCPUPowerManagement.kext了
其次原版leopard 实现 speedstep这个需要第三方powermanagement参与,建议使用voodoopower,可以放在extra里,同时还修复了关机重启的问题
4# 威廉第三
感谢指点。 这个帖子很不错啊,不过你的主板是不是还有别的选择啊,???是不是用p5n7a-vm就可以直接安装了? 6# wfandch
p5n7a-vm 也要打补丁,不过补丁文件 dsdt.aml 是现成的。 4# 威廉第三
我的这样修改,还是无法使用原版的电源管理pb57
Device (HPET)
{
Name (_HID, EisaId ("PNP0103"))
Name (ATT3, ResourceTemplate ()
{
IRQNoFlags ()
{0}
IRQNoFlags ()
{8}
Memory32Fixed (ReadWrite,
0xFED00000, // Address Base
0x00000400, // Address Length
)
})
Name (ATT4, ResourceTemplate ()
{
})
Method (_STA, 0, NotSerialized)
{
Return (0x0F)
}
Method (_CRS, 0, NotSerialized)
{
Return (ATT3)
}
}
4# 威廉第三
我的这样修改,还是无法使用原版的电源管理pb57
Device (HPET)
{
Name (_HID, EisaId ("PNP0103"))
Name (ATT3, R ...
bluesj 发表于 2009-5-23 00:34 https://bbs.pcbeta.com/images/common/back.gif
你的 disab.kext 或则 intelpmdiable.kext 去掉了吗 我根本就没有使用disabler.kext,把你原始的dsdt.aml发上来,我帮忙看下,还有种可能就是原版kext只要mcp79的id,没有mcp7a的id 9# yanjin 放入dadt补丁 ,删掉dis*.kext(),我就是这样做的,但是会四国,原因根据显示是电源管理 很多牛人~
我也用这板,就声卡驱动不了。。。 本帖最后由 yanjin 于 2009-5-23 17:47 编辑
12# karons
放到变色龙 /Extra/Extensions目录下
先放 hda.kext 如果不行,在加入 hdaenabler.kext.
如果你已经安了其他驱动,到System/library/Extensions 目录 下删除其他驱动,避免冲突。
顶,支持 13# yanjin
我没装变色龙呢?我是用光驱直接安装单系统的。
是不是放了这两个文件进去就可以发声了?不用磁盘验证? 13# yanjin
我/Extra目录下没有任何东西的? 这篇文章有很高的参考价值,一下子琢磨不透,先收藏。 都是高手,认真学习一下 这个看的偶头大呀 羡慕中
等待中...
学习中...