- 积分
- 124
- 最后登录
- 2017-8-1
- 精华
- 1
- 阅读权限
- 0
- 主题
- 8
- UID
- 381962
- 帖子
- 222
- PB币
- 1312
- 威望
- 5
- 贡献
- 3
- 技术
- 30
- 活跃
- 2
折腾一族
- UID
- 381962
- 帖子
- 222
- PB币
- 1312
- 贡献
- 3
- 技术
- 30
- 活跃
- 2
|
楼主
发表于 2009-10-20 20:06:26
IP属地湖南
本帖最后由 mudzone 于 2010-5-18 14:13 编辑
【本人由于工作调动,现事务繁忙,无暇顾及,不得已金盆洗手,再次向帮助过我的高手们致敬】
先深吸一口气,为了这个雪豹,我连续奋斗了一个星期,几乎晚晚都是3、4点钟才睡觉,今天终于搞定,不敢说完美但改由的基本上都有了,没有解决的问题在慢慢的搞了!!
接下来慢慢的把过程详细的介绍一遍,分享一下整个过程,希望能抛砖引玉,给大家一点启示!!(7楼更新最终方法。这只是过程)(16楼提供dsdt源码及编译文件下载)
本人机子配置:
ACER Aspire 4930G
主板:
处理器名称 Mobile DualCore Intel Core 2 Duo T5800, 2000 MHz (10 x 200)
主板名称 Acer Aspire 4930
主板芯片组 Intel Cantiga PM45
系统内存 3072 MB (DDR2-667 DDR2 SDRAM)
DIMM1: Hynix HYMP125S64CP8-Y5 2 GB DDR2-667 DDR2 SDRAM
DIMM3: Nanya NT1GT64U8HB0BN-3C 1 GB DDR2-667 DDR2 SDRAM
BIOS 类型 Insyde (03/11/09)
显示设备:
显示卡 NVIDIA GeForce 9300M GS (256 MB)
显示卡 NVIDIA GeForce 9300M GS (256 MB)
3D 加速器 nVIDIA GeForce 9300M GS
显示器 Samsung LTN141W3-L01 [14.1" LCD]
多媒体:
声卡 nVIDIA HDMI @ Intel 82801IB ICH9 - High Definition Audio Controller [A-3]
声卡 Realtek ALC888/1200 @ Intel 82801IB ICH9 - High Definition Audio Controller [A-3]
存储器:
IDE 控制器 Intel(R) ICH9M/M-E Family 4 Port SATA AHCI Controller - 2929
IDE 控制器 JMB38X MS Host Controller
IDE 控制器 JMB38X SD Host Controller
IDE 控制器 JMB38X SD/MMC Host Controller
IDE 控制器 JMB38X xD Host Controller
硬盘驱动器 WDC WD2500BEVT-22ZCT0 ATA Device (232 GB, IDE)
硬盘驱动器 JMCR SD/MMC SCSI Disk Device (61 MB)
光盘驱动器 HL-DT-ST DVDRAM GSA-T50N ATA Device (DVD+R9:6x, DVD-R9:6x,DVD+RW:8x/8x, DVD-RW:8x/6x, DVD-RAM:5x, DVD-ROM:8x, CD:24x/24x/24x DVD+RW/DVD-RW/DVD-RAM)
硬盘 SMART 状态 OK
网络设备:
网络适配器 Intel(R) WiFi Link 5100 AGN (192.168.1.106)
网络适配器 Realtek RTL8168C(P)/8111C(P) Family PCI-E Gigabit Ethernet NIC (NDIS 6.20)
调制解调器 Agere Systems HDA Modem
一,安装
关于安装,我完全参考了samsonwtsui的置顶帖https://bbs.pcbeta.com/thread-592288-1-1.html
采用bootthink2.3引导,成功安装,但仅仅是安装系统,驱动方面并未完全采用samsonwtsui的方法。另外samsonwtsui安装的分区是主分区,而我安装的逻辑分区,而且不是第一逻辑分区,实践证明是没有任何问题的。
6.5G的分区是安装镜像,17.86G用来安装snow leopard,主系统是windows7.安装过程一切顺利,未出现五国或禁止标志等问题,安装完毕用windows7的安装光盘进入系统修复,回复C盘为活动分区,重启后两个系统均可正常进入。snow leopard显卡不能驱动,声卡不能驱动,无线不用想了,有线直接驱动,接下来就是驱动的安装了。(
这里注意,如果今后重装系统,只要不重新分区,c盘就会一直为活动分区,而不需每次修复
二,驱动安装
这就是重点了,实际上整个一个星期的工作绝大部分都是在如果驱动硬件上做文章了,虽然期间重装了三遍系统,但感觉轻车熟路,玩一样的。
在驱动问题上确实走了很多的弯路,但是这个弯路有时候有事必须的,因为人总想做的完美一些,只有不停地尝试才能找到更好的办法。
1、显卡
装完雪豹第一个想法就是希望能看到华丽的而且和windows不一样的界面,但事实又总是和想象的有所区别,界面是变了,但是连进入系统式欢迎动画都是卡卡卡!!所以第一个想法也是把显卡的驱动装上,于是google,一堆的驱动,一堆的方法,只是没有哪个具体说了怎样驱动9300m gs的,没办法只好一个一个的试了,几乎把所有的驱动都试过了(没找到的,不知道的,不算),NVkushInstaller、NVinstaller v.52、NVIDIA_9000_Series_Driver_v2、NVdarwinInstaller1.2.5、Natit.kext一样的不一样的都试了一遍,统统不行!!然后又试EFI String,用OSX86Tools_1.0.150(这是个好东西),但是顶多就是强制分辨率,驱动的不能。还有人介绍的就是在com.apple.Boot.plist里面加入
- <key>GraphicsEnabler</key>
- <string>y</string>
复制代码 不知是不是人品不好,这个东东在别人那挺好,在我这统统不管用。pcbeta逛了逛才接触到通过dsdt的修改来驱动显卡,让我兴奋的不得了,凭直觉觉得用dsdt来驱动硬件应该是比较完美的方法,于是全身心投入到了dsdt的研究当中,由于之前一点都没有接触过dsdt(java编程还是会的),只能在网上找方法然后依葫芦画瓢,但是开始根本不知道从何入手,比较简单的方法就是威廉的acpi patch,但是又不支持我这个类型的bios,只能手动修改!彷徨中一个大侠的出现让我看到了曙光,xchobits 大侠把他自己的dsdt文件给了我,因为我们的本子都是差不多的,我把他的dsdt.aml放入drawn文件夹下后,奇迹出现了,透明效果一下出来了,高兴的不得了!!!甚至安装了legacyHDA后,声卡也出声了!!!
但问题也接踵而来,就是每次进系统时总是先要五国一次,然后强制重启就能正常进入,郁闷的不得鸟!!我分析,毕竟我的硬件不完全就是他的硬件,是不是某些地方的不同导致了五国,于是我决定自己修改dsdt!!
==========================================================
2、DSDT
首先要把xchobits的aml文件反编译,干吗?学习!!下载了iasl-win-20080729,反编译命令得到dsdt.dsl文件,一开始我一直用写字板编辑,后来发现用UltraEdit-32相当的方便,在视图里面选择查看方式选择perl,
看到左边的加号了,确保了每个{ }都不会错,大大降低了出错的几率。
开始也不知道xchobits到底修改了哪里,就上网找教程,很多,就按教程修改!!
首先提取自己的dsdt,用everestultimate+ACPI Patcher,先用everestultimate导出acpi_dsdt.bin,然后用ACPI Patcher
点D/C按钮就得到dsl文件了。
GTGP 是最基本的一个方法,很多函数都需要它,加入的位置只要不是放在子函数块里就ok了,我插入的位置:- DefinitionBlock ("dsdt.aml", "DSDT", 2, "Intel ", "CANTIGA ", 0x06040000)
- {
- Method (DTGP, 5, NotSerialized) //dtgp函数
- {
- 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)
- }
- .........................................
- External (PDC1)
- External (PDC0)
- External (CFGD)
- External (\_PR_.CPU0._PPC)
复制代码 RTC 听说这个是防止bios重置的,(我到现在也不知道bios重置是个什么东西)-
- Device (RTC)
- {
- Name (_HID, EisaId ("PNP0B00"))
- Name (BUF0, ResourceTemplate ()
- {
- IO (Decode16,
- 0x0070, // Range Minimum
- 0x0070, // Range Maximum
- 0x01, // Alignment
- 0x02, // Length 这里由0x08改成0x02
- )
- })
- Name (BUF1, ResourceTemplate ()
- {
- IO (Decode16,
- 0x0070, // Range Minimum
- 0x0070, // Range Maximum
- 0x01, // Alignment
- 0x08, // Length 这个不知道改不改
- )
- // IRQNoFlags () 直接用"//"屏蔽就是了
- // {8}
- })
- Method (_CRS, 0, Serialized)
- {
- ...................................
- }
- }
复制代码 HPET 听说这个是能解决cpu电源管理的- Device (HPET)
- {
- Name (_HID, EisaId ("PNP0103"))
- Name (_CID, EisaId ("PNP0C01"))
- Name (BUF0, ResourceTemplate ()
- {
- IRQNoFlags () //就是加入这四行的东西
- {0} //
- IRQNoFlags () //
- {8} //
- Memory32Fixed (ReadOnly,
- 0xFED00000, // Address Base
- 0x00000400, // Address Length
- )
- })
- Method (_STA, 0, NotSerialized)
- {
- ..................................//此处略
- }
- Method (_CRS, 0, Serialized)
- {
- .................................... // 此处略
- }
- }
复制代码 至于_WAK里面的两个Return(zero),我的dsdt里面自带了。
显卡的GFX0加入PEGP里面- Device (PEGP)
- {
- Name (_ADR, 0x00010000)
- Device (GFX0)
- {
- Name (_ADR, Zero)
- Name (_SUN, One)
- Method (_DSM, 4, NotSerialized)
- {
- Store (Package (0x1C)
- {
- "AAPL,slot-name",
- Buffer (0x0D)
- {
- "PCI-E Slot-1"
- },
- "@0,compatible",
- Buffer (0x0B)
- {
- "NVDA,NVMac"
- },
- "@0,device_type",
- Buffer (0x08)
- {
- "display"
- },
- "@0,name",
- Buffer (0x0F)
- {
- "NVDA,Display-A"
- },
- "@1,compatible",
- Buffer (0x0B)
- {
- "NVDA,NVMac"
- },
- "@1,device_type",
- Buffer (0x08)
- {
- "display"
- },
- "@1,name",
- Buffer (0x0F)
- {
- "NVDA,Display-B"
- },
- "NVCAP",
- Buffer (0x18)
- {
- /* 0000 */ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00,
- /* 0008 */ 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
- /* 0010 */ 0x00, 0x00, 0x00, 0x00
- },
- "NVPM",
- Buffer (0x20)
- {
- /* 0000 */ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- /* 0008 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- /* 0010 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- /* 0018 */ 0x00, 0x00, 0x00, 0x00
- },
- "VRAM,totalsize",
- Buffer (0x04)
- {
- 0x00, 0x00, 0x00, 0x10 //这里0x10代表256M显存,0x20代表512M
- },
- "device_type",
- Buffer (0x0D)
- {
- "NVDA,GeForce"
- },
- "model",
- Buffer (0x1F) // 0x1F代表了"Nvidia GeForce 9300M GS 256 MB"的字数,一般按字数+空格+1然后在转16进制,Buffer的用法基本相同
- {
- "Nvidia GeForce 9300M GS 256 MB"
- },
- "rom-revision",
- Buffer (0x21)
- {
- "DSDT ROM v1.0 by Echo #OS x86_64"
- },
- "reg",
- Buffer (0x78)
- {
- /* 0000 */ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
- /* 0008 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- /* 0010 */ 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x01, 0x02,
- /* 0018 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- /* 0020 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
- /* 0028 */ 0x14, 0x00, 0x01, 0x42, 0x00, 0x00, 0x00, 0x00,
- /* 0030 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- /* 0038 */ 0x00, 0x00, 0x00, 0x10, 0x1C, 0x00, 0x01, 0x02,
- /* 0040 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- /* 0048 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
- /* 0050 */ 0x24, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
- /* 0058 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- /* 0060 */ 0x80, 0x00, 0x00, 0x00, 0x30, 0x00, 0x01, 0x02,
- /* 0068 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- /* 0070 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00
- }
- }, Local0)
- DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
- Return (Local0)
- }
- Device (VGA)
- {
- .......................... //此处略
- }
- Method (_PRT, 0, NotSerialized)
- {
- ...........................//此处略
- }
- }
- }
复制代码 这里要注意那个device(VGA),本来他是在GFX0之外的,但是我把它放到GFX0之内了,所以就有两个调用到它的地方要由PEGP.VGA改成PEGP.GFX0.VGA ,另外在VGA函数里面要调用之外的函数往往用^^^.LPC等等,此刻就要记得在前面多加个"^"了,前面就成了^^^^.LPC。
网上还看到了加入一下代码让原生AppleLPC加载来实现硬件电源管理的- Device (LPC)
- {
- Name (_ADR, 0x001F0000)
- /* ===加载原生AppleLPC.kext================================================================== */
-
- Method (_DSM, 4, NotSerialized)
- {
- Store (Package (0x02)
- {
- "device-id",
- Buffer (0x04)
- {
- 0x16, 0x29, 0x00, 0x00 //最主要的就是这里
- }
- }, Local0)
- DTGP (Arg0, Arg1, Arg2, Arg3, Refof (Local0))
- Return (Local0)
- }
-
- /* ============================================================================== */
复制代码 0x16,0x29,0x00,0x00这个字符串可以在AppleLPC.kext里面看到,你可以改成里面有的任意一个
据说还要改两个地方,防止声音变形,不懂什么叫声音变形,照改就是了,这里是整个过程
https://bbs.pcbeta.com/viewthread.php?tid=594984&page=1&authorid=215483
顺便把声卡的也加了进去- Method (_DSM, 4, NotSerialized)
- {
- Store (Package (0x08)
- {
- "codec-id",
- Buffer (0x04)
- {
- 0x3e, 0x29, 0xEC, 0x10 //这里在用voodoo驱动时可以再ioreg里看到
- },
- "layout-id",
- Buffer (0x04)
- {
- 0x78, 0x03, 0x00, 0x00
- },
- "device-type",
- Buffer (0x29)
- {
- "Realtek ALC888/1200 @ Intel 82801IB ICH9"
- },
- "PinConfigurations",
- Buffer (0x00)
- { } //这里清空
- }, Local0)
- DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
- Return (Local0)
- }
复制代码 以上代码加入到HDEF中,我的没有只有AZAL,于是就把AZAL改成了HDEF。
好了,编译放入Drawn里面,启动,照样五国,重启,正常进入,显卡声卡驱动,原生电源管理,关机再重启,还是五国,再重启,正常。
7楼更新最终方法。这只是过程 |
-
2
查看全部评分
-
|