啃苹果

花了两个礼拜的时间研究了下黑苹果的安装,总算是基本搞定了,其实安装并不难,只要照着pcbeta上的这篇贴子一步步来就可以了。说下原理:以前装黑苹果的时候如果想绕过苹果的硬件检测(就是测一下你是不是苹果电脑)必须要有DSMOS.kext这个东西,而且还要配合刷BIOS才能进入到安装画面。现在DSMOS被FakeSMC取代了,只要在启动苹果前加载FakeSMC就可以绕过系统检测,成功安装苹果了。 chameleon——一个漂亮的boot loader可以在加载苹果内核前加载FakeSMC这个虚拟环境,让苹果的检测工具以为这就是台苹果机,于是你就可以顺利的进入下一步进行安装了。

DSMOS 和FAKESMC的由来:dsmos是解密用的。苹果为了不让OSX安装在非苹果机的PC,而将系统加密。系统正常运行的时候,需要加载Don't Steal Mac OS X.kext来解密,而Don't Steal Mac OS X.kext,会检查苹果机上面特有,而PC没有的SMC部件存在才会启动。因此,破解有两种方法,第一,了解原来的解密工作原理后,禁用原来的 Don't Steal Mac OS X.kext,使用黑客自己制作的不会检查SMC芯片的dsmos.kext(Don't Steal Mac OS X的首字母缩写)取而代之;第二,使用模拟SMC部件的FakeSMC,欺骗苹果本来的Don't Steal Mac OS X.kext达到解密效果。在此向黑苹果大师级前辈们致敬~

我是用原版的10.6进行安装的,在这里务必在自行安装中选择roseta,让苹果的程序顺利地跑在X86架构下,否则安装到一半的时候会报错。

不出意外,安装到最后是安装失败,别着急,看一下安装器日志(在最上面的导航栏——>窗口——>安装器日志)看一下有没有END--INSTALL这样的描述。如果有的话就直接重启好了,可能会出现死不掉电,具体的方法在那篇pcbeta的帖子上已经给出了。

说点儿那篇帖子上没有的东西:DSDT的制作。

DSDT.aml 是DSDT.dsl编译之后生成的一个可执行文件,具体作用就是告诉苹果我这台计算机有哪些硬件,在某条总线(如:pci)的某某位置上,以及硬件的各种属性(如:我叫nVidia GeForce GT 330M,我的显存是1024M)。内核在加载的时候先是读取这个文件,于是就知道计算机硬件的各种信息了,只要再有驱动咱们就可以使用各个硬件了。于是安装完成之后,如果你发现自己的某个设备不能用,可以从以下两点找原因:

1、苹果是否认识我的硬件

2、苹果是否含有相应的驱动

驱动的话不多说了,kexts上涵盖了各种第三方驱动,可以去下载然后用kext helper b7安装到位,重启看有没有效果,如果还是没有,十有八九苹果是没找到这个硬件,那么现在就是DSDT上场的时候了。

windows上弄DSDT请看这篇帖子,我是在linux进行配置的(建议在linux下配置自己的DSDT,方便快捷,比起windows好用的多),直接将/proc/acpi/dsdt文件拷贝到一个干净的文件夹里,注意要用sudo。看看有没有iasl这个软件,8成没有,各种包管理装。然后chmod 777 dsdt让这个文件可读写,iasl -d dsdt就可以将这个文件反编译了。看看是不是得到了一个dsdt.dsl的文件,好了,再试试用iasl -tc dsdt.dsl能不能编译出dsdt.aml,肯定不行了吧。我的报出了9个错误。vim dsdt.dsl首先将第一行删掉dd,再编译变成8个错误。一个个来~

dsdt.dsl  3899:                     0x00000000,         // Length

Error    4122 -                              ^ Invalid combination of Length and Min/Max fixed flags



dsdt.dsl  3906:                     0x00000000,         // Length

Error    4122 -                              ^ Invalid combination of Length and Min/Max fixed flags



首先是这两个,好办,看到那个length吗?明显是大小不对:

0xFEAFFFFF-0x0000000+1 = 0xFEB0000

0xFED44FFF-0xFED4000+1 = 0x0005000



改好之后再来变成6个错误了。

再看Invalid object type for reserved name ^  (found BUFFER, requires Package)这个错误原因,明显人家要求用Package,这里却是BUFFER,换过来就好了。



换好再来,终于发现Errors为0了~~至此编译通过。剩下的工作就只能靠你自己了,比如加显卡的信息,声卡的信息,网卡的信息,开双核等等等等,网上都有DSDT的详解,我就不多说了。



10.6.4升级的问题

就我自己的情况来说,因为显卡一直没有驱动起来,修改EFI-STRING和DSDT的方法都用过了,不能调节分辨率,开特效,但是分辨率已经是 1366*768,可惜我是完美主义。。。所以一直在查找解决的方法,看网上说10.6.4中已经自动识别了GT330M,于是自己下载了官方的 combo升级包准备升级,但是到最后一点的时候死机了。。。就结合这个谈谈DSDT的应用吧。

升级的时候(使用了combo update)意外的碰到了kernel panic(其实也是情理之中的事情,人家苹果出个更新都是针对苹果机,你PC装上了苹果还想升级,这不是折腾么,但是PC装苹果本来就是件很折腾的事情,这就叫不见风雨怎么见彩虹,就当玩儿游戏了~~)仔细看了下panic的原因,发现是一个设备没有被识别,看看10.6.4的更新中是不是比10.6 多了啥硬件设备的更新或者调动。嘿嘿终于被我找到了——10.6.4的ACPI_SMC_PlatformPlugin.kext支持了下面的设备 (lspci显示结果的第一项)

00:00.0 Host bridge: Intel Corporation Core Processor DRAM Controller,其VendorID:设备ID为8086:0044,使得在升级10.6.4的过程中出现无法识别的设备,从而出现KP,其解决方法就是通过DSDT中用函数_DSM修改DRAM Controller的设备ID,只要它不是0044,就可以正常升级10.6.4,在DSDT中加上这个设备的描述如下:



Device (IDMI)

{

    Name (_ADR, 0x00000000)

    Method (_DSM, 4, NotSerialized)

    {

        Store (Package (0x04)

            {

                "name",

                "pci8086,d131",

                "device-id",

                Buffer (0x04)

                {

                    0x31, 0xd1, 0x00, 0x00

                }

            }, Local0)

        DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))

        Return (Local0)

    }

}



将这个放在PCI0节点下,和USB1平级,我是放在了USB1节点上方,试试iasl -tc DSDT.dsl,0 Errors之后赶紧将DSDT.aml复制到Darwin -x进苹果发现一切顺利,重启-v进苹果,看看dashboard已经有水波纹特效了~~终于满意了,终于折腾好了。



下一个系统。。。莫非是。。。LFS。。。

猜你喜欢

转载自buaacss.iteye.com/blog/792117