-
威廉第三的
MAC
系列教程(一)
——
使用
ACPI Pa
tcher
制作
DSDT
补丁
很早就开始接触
H
acintosh
了,
也经常出没在各个
hacintosh
论坛,
因此也积累了不少知识,
但是很多东西都是英文的,
却没有人引进到国内,
导致很多人都不了解
Hacintosh
社区最新
的进展,
或者知其然不知其所以然,
因此我在这里
抛砖引玉,
把自己知道的一些知识写出来
和大家分享,也是想引
出更多高手来。
第一篇我想给大家介绍如何使用
ACPI Patcher
p>
制作
DSDT
补丁。
很多人都知道使用
DSDT
p>
补丁可以开双核,但
DSDT
的功能不仅仅
如此,除了开双核,还
可以可以修复
ACPI
< br>缺陷(不需要
,原版
cpupo
wermanagement
正常使用)
,
RTC
,
HPET
缺陷
(
原版
kext
正常工作
)
,显卡(代替
efistring<
/p>
)
,声卡(只是代替了
< br>)
,网卡(包括
TimeMachine
问题)
,此外还可以解决其他很多奇奇怪怪
的问题,<
/p>
因此建议尽可能使用
DSDT
补丁。
p>
但是
DSDT
到底是什么东西,
怎么这么神奇呢?
这个要从
ACPI
说起了,
ACPI
是
Int
el
(
i386
,
x86_64
,
IA64
)平台的
标准固件规范,绝大
部分
OS
需要从<
/p>
BIOS
得到的信息都可以从
ACPI<
/p>
得到,并且现在的趋势是未来的任何新的
特性相关的信息都只能从
ACPI
得到。
ACPI
的信息包括:
配置信息
,这些信息从
legacyPNP
设备的配置,到多处理器,到
NUMA
,比如现
在的
MultipleCore
的信息就只能从
ACPI
得到。
Linux
启
动很多代码就是处理这些配置信息,比
如
APIC
,
IOAPIC
设置等。
ACPI
相关设备
,主要是笔记本电脑
相关的设备,包括电源按钮,电池,外接电源,风扇,
热键等。
底层硬件
,比如
PCI
中断路由,
chipset
(主要是南桥
PCI-to-LPCbridge)
操作等。
<
/p>
电源管理
,
ACPI
定义的电源管理包括
CPU
的电源管理
(调频率
P-state
,
idl
eC-state
,
throtting
T-state
)
,
设备电源管理
(D-state)
,
系统电源管理<
/p>
(
Suspend-to-Ram,Suspend-to-
Disk, power
off
)等。
设备热插拔
,
ACPI
用一种统一的
方式来描述设备的热插拔,
这样的设备从单一的
PCI
设备,
到笔记本电脑的
DockingStat
ion
,
到整个
PCI hierar
chy
,
CPU
,
Memory
,
甚至整个
NUMA
节点。可以说要理解现代
PC
平台必须
了解
ACPI
。
ACPI
主要是由很多表(
Table
)组成
,
而
DSDT(Differentiated
System
Description
Table)
是其中一个最主要的
ACPI
表之一,它
的定义如下
DSDT is an acronym for
DifferentiatedSystem Description
Table
. Thistable contains the
Differentiated
Definition
Block
,
which
supplies
theinformation
and
configuration
information about the base
system.
简单说就是包含了所有和基本系统
(
basesystem
)
不同的设备的信息,
basesystem
每台机
器都是一样的,这个是在
acpispec
里指定
的,但是每台机器都是不相同的,所以不相同的
设备大都是由
D
SDT
表来描述。它包含了很多
AML
代码。大多数
BIOS
是针对
wind
ows
开发的,而
windows
自己
也不完全遵循
acpi
规范,所以因为
BIOS
的
bug
,这些代码本身
p>
可能有错,导致其他的系统,如
linux
,
mac os
出错。我们可以手动修复这些
< br>bug
使之兼容
MAC
系统。<
/p>
DSDT
在
bios
里是以编译后的
aml
文件存在,需要把它解出来,反编译
成
aml
代码形式
(
< br>dsl
文件,
文本文件)
,
p>
代码修改完毕再重新编译,
替换掉
bios
里原来的
dsdt
表。
不过
PC-EFI
,
Cham
eleon
的出现,使得我们不再需要冒险刷
bios
,只要把制作好的
文件放在根目录或者
/Extra
文件夹里,
启动的时候就会自动使
用这个
,
从而达到修复
ACPI
系统
bug
的作用。
但是
DS
DT
补丁怎么制作,却很少有人能详细的介绍,
mac
上的软件基本上只能制作解决
双核,
acpi<
/p>
问题的
,
要想解
决更多的问题,
就必须回到
windows
,
使用
insanelymac
论
坛里的一款软件
ACPIPatcher
,
这个软件相对比较复杂,
今天我们就来了解一下这个软件
的
用法。
软件界面如上图,左上可以指定
bios
和制作补丁,右上是具体选择补丁选项的地方,左下
是输出信息,右下可以看到进度。
先来看左上部分各个标签的具体作用。
BIOSPatch
:选择一个
p>
bios
制作
,选
择
bios
文件和指定输出
目录之后,
选中
,然后按
下
Patch
Bios
按钮即可,输
出目录不可以是
bios
目录,
否则会
出错
DSDTPatch
:对一个已有的
进行
a
cpi
修复,选择
,指定输出目录,<
/p>
按下
PatchAML
即可
ImportDSDT
:
用已有的
对
bios
打补丁,
选择输入
dsl
p>
文件和
bios
,
按下
PatchBios
即可
ExportDSDT
:从
bios
里解出
文件,
选择
bios
文件和输出目录,按下
E
xact
即
可
D/CDSDT
:
< br>DSL
编译成
AML
文件,
p>
或者
AML
文件反编译成
< br>DSL
文件,
取决于选中
Com
pile
还是
Decomplie
,选
中
Compile
的时候如果同时选中
Patchbefore compile
,可以在把
DSL<
/p>
编译成
AML
文件的时候打上
ACPI
补丁。
p>
看完了左上的标签我们来看最重要的部分,右上
bugfix
的详细信息,
General
:
这里有三个最重要的修复,
HPET
Patch
,
RTCPatch
和
p>
AliasesPatch
,前两个可以解决一
些时钟方面的问题,很多机器里如果有
就会四国,
或者不能正常使用,
需要
,
如果你选了前两项,
从此可以扔掉
,
因为
可以正
常工作了,第三个选项也许更加重要,
AliasesPatch
直接对应是否能开双核,
对
asus
,
msi
的主板来说,
这个选项是非常
重要的,
技嘉没有这个问题,选不选都无所谓。
点击<
/p>
Fixes
?可以看到一个新窗口
这里都
是一些针对编译时出现
error
或者
warning
的
fix
,作者的意见
是当出现这些
error
或
者
warning
的时候可以选择,我的意见时全部选择,防止出现
error
或者
warning
,如果还
有问题,就需要去网上搜索解决方案,自己动手修改代码然后再编译
了。
Network
:
这里相对比较复杂,你需要知道硬件位置,这个可以用
ioRegistry
Explorer
来看,
Lan0
应<
/p>
该是百兆网卡而
GIGE
是千兆网卡,<
/p>
FixGP9
指增加一个
GPIO9
p>
的控制项,
UseTime Machine
Fix
修复
Time
Machine
找不到内置网卡的问题,下面是针对技嘉
P43
P45 Realtek
8111c
千兆网卡的设置图,它的硬件位置在
PEX
5
Graphics
:
这里合理设置后完全可以代替
efi-string
,
natit
,
nvin
ject
,
nvdarwin
,
nvkush
等,首先在
model
那里选择显卡型号和显存大小,下面绿色的选项针对
N
< br>卡,红色的针对
A
卡,
N
卡
需要设置
nvcap
值,
A
卡需要设置
Framebuf
fer
和
DevID
,
Hardwarelocation
需要用
ioReg
istryExplorer
看下,
PEGP
< br>和
Use DSDT
GFX
都要选中。
这里以硬件地址
PCI
0
为例,分别给出
nVidia8800 GT
512MB
和
ATI HD3870
512MB
显
卡的示例。
nVidia 8800 GT512MB
ATI HD3870 512MB
Audio
:
通过设置
audio
可以代替
,设置很简单,
Au
dioChipset
里预置了三种,
Realtek
ALC888-0
,
Realtek ALC888-2
,
RealtekALC889a
,
ALC888
分别对应
address
0
和
address
2
,技嘉
P43,
< br>P45
板载的
ALC888
选<
/p>
RealtekALC888-0
,
AL
C889
选
Realtek
ALC889a
,此外还要选中
Use
HDEF Audio
,下面以
889
为例
看完
bug
fix
来看看左下角的两个编译选项,
ForceDSDT C
ompilation
表示强制编译,即便
出现错误,
Stop on compilation Warning
表示出现<
/p>
warning
时停止编译,
追求完美的
人可以
选择此项,因为
0error
,
0warning
的
dsdt
表示没有任何语法错误。
< br>右边还有一个选项是
bios
类型选择,
根据你的
bios
类型选择
A
ward
还是
AMI
,
技嘉的
bios
是
Award
下面我们以技嘉
GIGA EP43-UD3L
为例,
实际操作一次,
显卡是
nVidiaGeforce 9800 GTX
512MB
,声卡是
ALC888
。
设置输入输出路径,
BIOS
类型,
Stopon warning
,
General<
/p>
设置
补丁详细设置
然后按下
Patch Bios
,
p>
运行完毕可以看到成功编译,
而且可以看到编译过程中出现
0Errors,
0 Warnings,
0 Remarks, 660
Optimizations
。
此时到输出目录里可以看到
,此外,
bios
文
件下面还会生成
patch
过的以
ne
w
结
尾的
bios
文件,如
,如果你确认
可以使用,那么这个
bios
也是
可以使用的,有需要的话可以自行刷
bios
,不过刷
机有风险,还请慎重。
的使用非常简单,首先确保你安装了
支持
dsdt
的引导,如
PC-EFI
V9
,
Chameleon1.0.12
或者
Chameleon 2 RC1
,
推荐最新的
Chameleon2 RC1
,
然后把
放在系统盘的根目录或者
Extra
文件夹里,
如果是
ef
i
分区启动,
放在
efi
分区的
Extra
文件
夹里
就可以了。
到此,本次讲座就算是
结束了。全文完整的
doc
档和
acp
i patcher
可以在附件下载到。
一点小更新,如果你用
acpi p
atcher
得不到
DSDT
,比如<
/p>
ASUS,MSI
的部分主板,你可以在
linux
下通过在终端里运行
cat
/proc/acpi/dsdt >
得到,然后用
acpi patcher
把它反编译得到
就可以修改了
p>
如果你可以进入
mac
,
< br>那么用附件里的
getdsdt
脚本也可以得到
,
重命名为
即可
还
可
以
参
考
yanjin
的
帖
子
/?uid=
46240&do=blog&id=1602
此
外
yanjin
另
外
p>
一
个
帖
子
给
手
动
修
改
的
朋
友
< br>提
供
了
很
多
示
例
/
一点小更新,
如果你用
acpi pa
tcher
得不到
DSDT
,
比如
ASUS,MSI
的部分主板,
你可以在
linux
下通过在终端里运行
cat /proc/acpi/dsdt >
得到,然后用
acpi patcher
把它反编译得到
就可以修改了
p>
如果你可以进入
mac
,
< br>那么用附件里的
getdsdt
脚本也可以得到
,
重命名为
即可
还可以参考
yan
jin
的帖子
/?uid=46240&do=blog&id
=1602
此
外
yanjin
另
外
一
个
帖
子
给
手
动
修
改
的
朋
友
提
供
了
很
多
示
例<
/p>
/
修改<
/p>
n7as
主板的
AMI BIOS
解决安装
leopard
问题
1
、
使用<
/p>
MMTool
提取:
做过给
AMI BIOS
添加
SLIC
以激活
VISTA
的用户对
MMTool
应该很熟悉,我们这次的目的和
p>
添加
SLIC
类似,都是要修改
ACPI
,
n7as
的<
/p>
dsdt
表与
其他主板不同,不在
1B
模块,而是
在
10
模块
名
称叫
,独立存在。
< br>因此提取
10
模块
取名叫
。同样提取
10<
/p>
的时候要选中“In uncompressed form”。
用
winhex
打开
< br>
模块文件,
看文件
是否是
dsdt
开头,
w
akh
结尾。
是
,
另存为
2
.
修改
DSDT
这时我们需要
intel
的一个工具――iasl,下载地址为:
/download/
我
<
/p>
们只需要里面的
。
首先反编译
DSDT
,在命令行下
输入:
iasl -d
得到一个
,这是个文本文件,打开找到代码的最前面,把
Scope (
_PR)
后面的大
括号里
Alias<
/p>
开头的那四行删掉,保存。
然后重新
编译:
iasl
生成新的
3
.
用新的
DSDT
替换原
DSDT
同样是用
winhex
来编辑刚才的
10
模块。替换的时候有个问题,
ACPI
里面每个表都对应一
个偏
移量,在替换的时候如果不想带来其它改动,就要保证这个偏移量不变。如果
DSD
T
表的大小变了,就会影响后面的表的偏移量,这是我们要避免的。
由
于新的
DSDT
比老的要小,所以并在结尾补上一些
0
,保证结束地址不变。另外还要把新
的
DSDT<
/p>
紧挨着最后一个“WAKh”右面的一个字节改成
2E
。
修
改方式如下(参考):
用
winhex
打开
,打开新的
1)
< br>全部选中
10
模块中,将其全部置为
0
;
2)
从
文件中全部选中,复制,
3)
粘贴到
10
模块中;
4)
将新粘入的内容
后面的第一个
0
改成
2E
。其他仍然保持为
0
。保存退出。
< br>
最后用
MMTool
p>
把新的
10
模块替换到
BIOS
文件中,刷入。重启,祈祷??
整个过程必须慎之又慎,因为是手动替换
DSDT
表,
如果出错后果自不必说。当然真刷坏了
也不是啥大不了的事,只要有备份,找个修电脑的
再刷回去
就行。
手动修改的例子:
听说苹果新的
mac
和
macbook
都是用的
mcp79
的平台加扣肉。为了追求完美的<
/p>
mac
我
入了一个昂达的
n7as
主板,配合我原有的
扣肉
6300
,开始了我的
mac
历程。
一开始,哇,不要说原版
leopard 10.5.6
就是
ipc 10.5.6 , ideb1.4 ***
10.5.6
没有一个能正常
安装。
ideb1.4
,可以安装但是不能启动
,还不如我原先的七彩虹
975x
主板。怎么办。问
google
.
通过一番搜索,
明白了这是
著名的
CPUS=1
问题是
< br>bios
中
acpi
dsdt
不兼容导致的。
我阅读了如下帖子。
/bbs/
/?showtopic=90505
里面讲述了如何修改
dsdt
解决
cpus=1
的问题,但是我照着做时,发现无法走通,经过研
究发现,我的
bios
与文中的不同,我的
dsdt
是
-
-
-
-
-
-
-
-
-
上一篇:海运专有名词对照表-2
下一篇:最新 AMI Bios 设置全程图解