折腾我的小机器。碰到一个问题。
先记录下DSDT.AML的获取
linux启动
sudo cat /proc/acpi/dsdt > dsdt.dat
直接改名dsdt.dat 为 dsdt.aml
反编译(需要<a href="http://www.acpica.org/download/iasl-win-20091214.zip">iasl</a> 支持):
iasl.exe -d dsdt.aml
mac的仿冒驱动需要dsdt支持。直接反编译后编译报错:
Intel ACPI Component Architecture
ASL Optimizing Compiler version 20091214 [Dec 14 2009]
Copyright (C) 2000 - 2009 Intel Corporation
Supports ACPI Specification Revision 4.0
dsdt.dsl 520: LNKC,
Error 4064 - ^ Object does not exist (LNKC)
dsdt.dsl 528: LNKD,
Error 4064 - ^ Object does not exist (LNKD)
dsdt.dsl 536: LNKA,
Error 4064 - ^ Object does not exist (LNKA)
dsdt.dsl 544: LNKB,
Error 4064 - ^ Object does not exist (LNKB)
dsdt.dsl 552: LNKD,
Error 4064 - ^ Object does not exist (LNKD)
dsdt.dsl 560: LNKA,
Error 4064 - ^ Object does not exist (LNKA)
dsdt.dsl 568: LNKB,
Error 4064 - ^ Object does not exist (LNKB)
dsdt.dsl 576: LNKC,
Error 4064 - ^ Object does not exist (LNKC)
dsdt.dsl 584: LNKA,
Error 4064 - ^ Object does not exist (LNKA)
dsdt.dsl 592: LNKB,
Error 4064 - ^ Object does not exist (LNKB)
dsdt.dsl 600: LNKC,
Error 4064 - ^ Object does not exist (LNKC)
dsdt.dsl 608: LNKD,
Error 4064 - ^ Object does not exist (LNKD)
dsdt.dsl 616: LNKB,
Error 4064 - ^ Object does not exist (LNKB)
dsdt.dsl 624: LNKC,
Error 4064 - ^ Object does not exist (LNKC)
dsdt.dsl 632: LNKD,
Error 4064 - ^ Object does not exist (LNKD)
dsdt.dsl 640: LNKA,
Error 4064 - ^ Object does not exist (LNKA)
dsdt.dsl 648: LNKC,
Error 4064 - ^ Object does not exist (LNKC)
dsdt.dsl 656: LNKD,
Error 4064 - ^ Object does not exist (LNKD)
dsdt.dsl 664: LNKA,
Error 4064 - ^ Object does not exist (LNKA)
dsdt.dsl 672: LNKB,
Error 4064 - ^ Object does not exist (LNKB)
dsdt.dsl 680: LNKD,
Error 4064 - ^ Object does not exist (LNKD)
dsdt.dsl 688: LNKA,
Error 4064 - ^ Object does not exist (LNKA)
dsdt.dsl 696: LNKB,
Error 4064 - ^ Object does not exist (LNKB)
dsdt.dsl 704: LNKC,
Error 4064 - ^ Object does not exist (LNKC)
dsdt.dsl 712: LNKB,
Error 4064 - ^ Object does not exist (LNKB)
dsdt.dsl 720: LNKC,
Error 4064 - ^ Object does not exist (LNKC)
dsdt.dsl 728: LNKD,
Error 4064 - ^ Object does not exist (LNKD)
dsdt.dsl 736: LNKA,
Error 4064 - ^ Object does not exist (LNKA)
dsdt.dsl 744: LNKC,
Error 4064 - ^ Object does not exist (LNKC)
dsdt.dsl 752: LNKD,
Error 4064 - ^ Object does not exist (LNKD)
dsdt.dsl 760: LNKA,
Error 4064 - ^ Object does not exist (LNKA)
dsdt.dsl 768: LNKB,
Error 4064 - ^ Object does not exist (LNKB)
dsdt.dsl 776: LNKD,
Error 4064 - ^ Object does not exist (LNKD)
dsdt.dsl 784: LNKA,
Error 4064 - ^ Object does not exist (LNKA)
dsdt.dsl 792: LNKB,
Error 4064 - ^ Object does not exist (LNKB)
dsdt.dsl 800: LNKC,
Error 4064 - ^ Object does not exist (LNKC)
dsdt.dsl 808: LNKA,
Error 4064 - ^ Object does not exist (LNKA)
dsdt.dsl 816: LNKB,
Error 4064 - ^ Object does not exist (LNKB)
dsdt.dsl 824: LNKC,
Error 4064 - ^ Object does not exist (LNKC)
dsdt.dsl 832: LNKD,
Error 4064 - ^ Object does not exist (LNKD)
dsdt.dsl 840: LNKA,
Error 4064 - ^ Object does not exist (LNKA)
dsdt.dsl 848: LNKB,
Error 4064 - ^ Object does not exist (LNKB)
dsdt.dsl 856: LNKC,
Error 4064 - ^ Object does not exist (LNKC)
dsdt.dsl 864: LNKD,
Error 4064 - ^ Object does not exist (LNKD)
dsdt.dsl 872: LNKA,
Error 4064 - ^ Object does not exist (LNKA)
dsdt.dsl 880: LNKB,
Error 4064 - ^ Object does not exist (LNKB)
dsdt.dsl 888: LNKC,
Error 4064 - ^ Object does not exist (LNKC)
dsdt.dsl 896: LNKD,
Error 4064 - ^ Object does not exist (LNKD)
dsdt.dsl 904: LNKC,
Error 4064 - ^ Object does not exist (LNKC)
dsdt.dsl 912: LNKD,
Error 4064 - ^ Object does not exist (LNKD)
dsdt.dsl 920: LNKA,
Error 4064 - ^ Object does not exist (LNKA)
dsdt.dsl 928: LNKB,
Error 4064 - ^ Object does not exist (LNKB)
dsdt.dsl 936: LNKG,
Error 4064 - ^ Object does not exist (LNKG)
dsdt.dsl 1372: LNKC,
Error 4064 - ^ Object does not exist (LNKC)
dsdt.dsl 1380: LNKD,
Error 4064 - ^ Object does not exist (LNKD)
dsdt.dsl 1388: LNKA,
Error 4064 - ^ Object does not exist (LNKA)
dsdt.dsl 1396: LNKB,
Error 4064 - ^ Object does not exist (LNKB)
dsdt.dsl 1440: LNKC,
Error 4064 - ^ Object does not exist (LNKC)
dsdt.dsl 1448: LNKD,
Error 4064 - ^ Object does not exist (LNKD)
dsdt.dsl 1456: LNKA,
Error 4064 - ^ Object does not exist (LNKA)
dsdt.dsl 1464: LNKB,
Error 4064 - ^ Object does not exist (LNKB)
dsdt.dsl 1508: LNKD,
Error 4064 - ^ Object does not exist (LNKD)
dsdt.dsl 1516: LNKA,
Error 4064 - ^ Object does not exist (LNKA)
dsdt.dsl 1524: LNKB,
Error 4064 - ^ Object does not exist (LNKB)
dsdt.dsl 1532: LNKC,
Error 4064 - ^ Object does not exist (LNKC)
dsdt.dsl 1576: LNKC,
Error 4064 - ^ Object does not exist (LNKC)
dsdt.dsl 1584: LNKD,
Error 4064 - ^ Object does not exist (LNKD)
dsdt.dsl 1592: LNKA,
Error 4064 - ^ Object does not exist (LNKA)
dsdt.dsl 1600: LNKB,
Error 4064 - ^ Object does not exist (LNKB)
dsdt.dsl 1644: LNKE,
Error 4064 - ^ Object does not exist (LNKE)
dsdt.dsl 1652: LNKF,
Error 4064 - ^ Object does not exist (LNKF)
dsdt.dsl 1660: LNKG,
Error 4064 - ^ Object does not exist (LNKG)
dsdt.dsl 1668: LNKH,
Error 4064 - ^ Object does not exist (LNKH)
dsdt.dsl 1676: LNKF,
Error 4064 - ^ Object does not exist (LNKF)
dsdt.dsl 1684: LNKG,
Error 4064 - ^ Object does not exist (LNKG)
dsdt.dsl 1692: LNKH,
Error 4064 - ^ Object does not exist (LNKH)
dsdt.dsl 1700: LNKE,
Error 4064 - ^ Object does not exist (LNKE)
dsdt.dsl 1708: LNKG,
Error 4064 - ^ Object does not exist (LNKG)
dsdt.dsl 1716: LNKH,
Error 4064 - ^ Object does not exist (LNKH)
dsdt.dsl 1724: LNKE,
Error 4064 - ^ Object does not exist (LNKE)
dsdt.dsl 1732: LNKF,
Error 4064 - ^ Object does not exist (LNKF)
dsdt.dsl 2628: If (ECEN)
Error 4096 - parse error ^
dsdt.dsl 2631: OperationRegion (ECBP, SystemIO, ECIN, 0x02)
Error 4064 - Object does not exist ^ (ECIN)
dsdt.dsl 2637: OperationRegion (ECIO, SystemIO, ECIN, 0x02)
Error 4064 - Object does not exist ^ (ECIN)
dsdt.dsl 2673: Acquire (ECMU, 0x5000)
Error 4064 - Object does not exist ^ (ECMU)
dsdt.dsl 2673: Acquire (ECMU, 0x5000)
Warning 1105 - Possible operator timeout is ignored ^
dsdt.dsl 2687: Release (ECMU)
Error 4064 - Object does not exist ^ (ECMU)
dsdt.dsl 2693: Acquire (ECMU, 0x1388)
Error 4064 - Object does not exist ^ (ECMU)
dsdt.dsl 2693: Acquire (ECMU, 0x1388)
Warning 1105 - Possible operator timeout is ignored ^
dsdt.dsl 2694: Acquire (MLMU, 0x1388)
Error 4064 - Object does not exist ^ (MLMU)
dsdt.dsl 2694: Acquire (MLMU, 0x1388)
Warning 1105 - Possible operator timeout is ignored ^
dsdt.dsl 2709: Release (MLMU)
Error 4064 - Object does not exist ^ (MLMU)
dsdt.dsl 2709: Release (MLMU)
Warning 1100 - Statement is unreachable ^
dsdt.dsl 2710: Release (ECMU)
Error 4064 - Object does not exist ^ (ECMU)
dsdt.dsl 2715: Acquire (ECMU, 0x1388)
Error 4064 - Object does not exist ^ (ECMU)
dsdt.dsl 2715: Acquire (ECMU, 0x1388)
Warning 1105 - Possible operator timeout is ignored ^
dsdt.dsl 2716: Acquire (MLMU, 0x1388)
Error 4064 - Object does not exist ^ (MLMU)
dsdt.dsl 2716: Acquire (MLMU, 0x1388)
Warning 1105 - Possible operator timeout is ignored ^
dsdt.dsl 2731: Release (MLMU)
Error 4064 - Object does not exist ^ (MLMU)
dsdt.dsl 2732: Release (ECMU)
Error 4064 - Object does not exist ^ (ECMU)
dsdt.dsl 2882: Acquire (ECMU, 0x1388)
Error 4064 - Object does not exist ^ (ECMU)
dsdt.dsl 2882: Acquire (ECMU, 0x1388)
Warning 1105 - Possible operator timeout is ignored ^
dsdt.dsl 2895: Release (ECMU)
Error 4064 - Object does not exist ^ (ECMU)
dsdt.dsl 2952: Acquire (ECMU, 0x1388)
Error 4064 - Object does not exist ^ (ECMU)
dsdt.dsl 2952: Acquire (ECMU, 0x1388)
Warning 1105 - Possible operator timeout is ignored ^
dsdt.dsl 2960: Release (ECMU)
Error 4064 - Object does not exist ^ (ECMU)
dsdt.dsl 3075: If (ECEN)
Error 4064 - Object does not exist ^ (ECEN)
dsdt.dsl 3077: PPTS (Arg0)
Error 4068 - ^ Object is not accessible from this scope (PPTS)
dsdt.dsl 3083: If (ECEN)
Error 4064 - Object does not exist ^ (ECEN)
dsdt.dsl 3085: WWAK (Arg0)
Error 4068 - ^ Object is not accessible from this scope (WWAK)
dsdt.dsl 3816: CreateDWordField (CRS, _SB.PCI0.SBRG.HPET._Y04._BAS, HPT)
Error 4064 - Object does not exist ^ (_SB.PCI0.SBRG.HPET._Y04._BAS)
dsdt.dsl 3835: CreateDWordField (CRS, _SB.PCI0.PCIE._Y05._BAS, BAS1)
Error 4064 - Object does not exist ^ (_SB.PCI0.PCIE._Y05._BAS)
dsdt.dsl 3836: CreateDWordField (CRS, _SB.PCI0.PCIE._Y05._LEN, LEN1)
Error 4064 - Object does not exist ^ (_SB.PCI0.PCIE._Y05._LEN)
dsdt.dsl 3862: CreateDWordField (CRS, _SB.PCI0.SBRG.OMSC._Y06._LEN, ML01)
Error 4064 - Object does not exist ^ (_SB.PCI0.SBRG.OMSC._Y06._LEN)
dsdt.dsl 3863: CreateDWordField (CRS, _SB.PCI0.SBRG.OMSC._Y06._BAS, MB01)
Error 4064 - Object does not exist ^ (_SB.PCI0.SBRG.OMSC._Y06._BAS)
dsdt.dsl 3864: CreateDWordField (CRS, _SB.PCI0.SBRG.OMSC._Y07._LEN, ML02)
Error 4064 - Object does not exist ^ (_SB.PCI0.SBRG.OMSC._Y07._LEN)
dsdt.dsl 3865: CreateDWordField (CRS, _SB.PCI0.SBRG.OMSC._Y07._BAS, MB02)
Error 4064 - Object does not exist ^ (_SB.PCI0.SBRG.OMSC._Y07._BAS)
dsdt.dsl 3905: CreateDWordField (CRS, _SB.RMEM._Y08._BAS, BAS1)
Error 4064 - Object does not exist ^ (_SB.RMEM._Y08._BAS)
dsdt.dsl 3906: CreateDWordField (CRS, _SB.RMEM._Y08._LEN, LEN1)
Error 4064 - Object does not exist ^ (_SB.RMEM._Y08._LEN)
dsdt.dsl 3907: CreateDWordField (CRS, _SB.RMEM._Y09._BAS, BAS2)
Error 4064 - Object does not exist ^ (_SB.RMEM._Y09._BAS)
dsdt.dsl 3908: CreateDWordField (CRS, _SB.RMEM._Y09._LEN, LEN2)
Error 4064 - Object does not exist ^ (_SB.RMEM._Y09._LEN)
dsdt.dsl 3909: CreateDWordField (CRS, _SB.RMEM._Y0A._LEN, LEN3)
Error 4064 - Object does not exist ^ (_SB.RMEM._Y0A._LEN)
dsdt.dsl 3910: CreateDWordField (CRS, _SB.RMEM._Y0B._BAS, BAS4)
Error 4064 - Object does not exist ^ (_SB.RMEM._Y0B._BAS)
dsdt.dsl 3911: CreateDWordField (CRS, _SB.RMEM._Y0B._LEN, LEN4)
Error 4064 - Object does not exist ^ (_SB.RMEM._Y0B._LEN)
dsdt.dsl 4164: CreateWordField (CRS, _SB.PCI0.SBRG.RMSC._Y0C._MIN, GP00)
Error 4064 - Object does not exist ^ (_SB.PCI0.SBRG.RMSC._Y0C._MIN)
dsdt.dsl 4165: CreateWordField (CRS, _SB.PCI0.SBRG.RMSC._Y0C._MAX, GP01)
Error 4064 - Object does not exist ^ (_SB.PCI0.SBRG.RMSC._Y0C._MAX)
dsdt.dsl 4166: CreateByteField (CRS, _SB.PCI0.SBRG.RMSC._Y0C._LEN, GP0L)
Error 4064 - Object does not exist ^ (_SB.PCI0.SBRG.RMSC._Y0C._LEN)
dsdt.dsl 4172: CreateWordField (CRS, _SB.PCI0.SBRG.RMSC._Y0D._MIN, GP10)
Error 4064 - Object does not exist ^ (_SB.PCI0.SBRG.RMSC._Y0D._MIN)
dsdt.dsl 4173: CreateWordField (CRS, _SB.PCI0.SBRG.RMSC._Y0D._MAX, GP11)
Error 4064 - Object does not exist ^ (_SB.PCI0.SBRG.RMSC._Y0D._MAX)
dsdt.dsl 4174: CreateByteField (CRS, _SB.PCI0.SBRG.RMSC._Y0D._LEN, GP1L)
Error 4064 - Object does not exist ^ (_SB.PCI0.SBRG.RMSC._Y0D._LEN)
dsdt.dsl 4178: CreateWordField (CRS, _SB.PCI0.SBRG.RMSC._Y0E._MIN, GPB0)
Error 4064 - Object does not exist ^ (_SB.PCI0.SBRG.RMSC._Y0E._MIN)
dsdt.dsl 4179: CreateWordField (CRS, _SB.PCI0.SBRG.RMSC._Y0E._MAX, GPB1)
Error 4064 - Object does not exist ^ (_SB.PCI0.SBRG.RMSC._Y0E._MAX)
dsdt.dsl 4180: CreateByteField (CRS, _SB.PCI0.SBRG.RMSC._Y0E._LEN, GPBL)
Error 4064 - Object does not exist ^ (_SB.PCI0.SBRG.RMSC._Y0E._LEN)
dsdt.dsl 4188: CreateWordField (CRS, _SB.PCI0.SBRG.RMSC._Y0F._MIN, GP20)
Error 4064 - Object does not exist ^ (_SB.PCI0.SBRG.RMSC._Y0F._MIN)
dsdt.dsl 4189: CreateWordField (CRS, _SB.PCI0.SBRG.RMSC._Y0F._MAX, GP21)
Error 4064 - Object does not exist ^ (_SB.PCI0.SBRG.RMSC._Y0F._MAX)
dsdt.dsl 4190: CreateByteField (CRS, _SB.PCI0.SBRG.RMSC._Y0F._LEN, GP2L)
Error 4064 - Object does not exist ^ (_SB.PCI0.SBRG.RMSC._Y0F._LEN)
dsdt.dsl 4299: CreateWordField (CRS, _SB.PCI0.SBRG.SIOR._Y10._MIN, GP10)
Error 4064 - Object does not exist ^ (_SB.PCI0.SBRG.SIOR._Y10._MIN)
dsdt.dsl 4300: CreateWordField (CRS, _SB.PCI0.SBRG.SIOR._Y10._MAX, GP11)
Error 4064 - Object does not exist ^ (_SB.PCI0.SBRG.SIOR._Y10._MAX)
dsdt.dsl 4301: CreateByteField (CRS, _SB.PCI0.SBRG.SIOR._Y10._LEN, GPL1)
Error 4064 - Object does not exist ^ (_SB.PCI0.SBRG.SIOR._Y10._LEN)
dsdt.dsl 4309: CreateWordField (CRS, _SB.PCI0.SBRG.SIOR._Y11._MIN, GP20)
Error 4064 - Object does not exist ^ (_SB.PCI0.SBRG.SIOR._Y11._MIN)
dsdt.dsl 4310: CreateWordField (CRS, _SB.PCI0.SBRG.SIOR._Y11._MAX, GP21)
Error 4064 - Object does not exist ^ (_SB.PCI0.SBRG.SIOR._Y11._MAX)
dsdt.dsl 4311: CreateByteField (CRS, _SB.PCI0.SBRG.SIOR._Y11._LEN, GPL2)
Error 4064 - Object does not exist ^ (_SB.PCI0.SBRG.SIOR._Y11._LEN)
dsdt.dsl 4319: CreateWordField (CRS, _SB.PCI0.SBRG.SIOR._Y12._MIN, GP30)
Error 4064 - Object does not exist ^ (_SB.PCI0.SBRG.SIOR._Y12._MIN)
dsdt.dsl 4320: CreateWordField (CRS, _SB.PCI0.SBRG.SIOR._Y12._MAX, GP31)
Error 4064 - Object does not exist ^ (_SB.PCI0.SBRG.SIOR._Y12._MAX)
dsdt.dsl 4321: CreateByteField (CRS, _SB.PCI0.SBRG.SIOR._Y12._LEN, GPL3)
Error 4064 - Object does not exist ^ (_SB.PCI0.SBRG.SIOR._Y12._LEN)
dsdt.dsl 4639: CreateWordField (CRS1, _SB.PCI0.SBRG._Y13._INT, IRQM)
Error 4064 - Object does not exist ^ (_SB.PCI0.SBRG._Y13._INT)
dsdt.dsl 4640: CreateByteField (CRS1, _SB.PCI0.SBRG._Y14._DMA, DMAM)
Error 4064 - Object does not exist ^ (_SB.PCI0.SBRG._Y14._DMA)
dsdt.dsl 4641: CreateWordField (CRS1, _SB.PCI0.SBRG._Y15._MIN, IO11)
Error 4064 - Object does not exist ^ (_SB.PCI0.SBRG._Y15._MIN)
dsdt.dsl 4642: CreateWordField (CRS1, _SB.PCI0.SBRG._Y15._MAX, IO12)
Error 4064 - Object does not exist ^ (_SB.PCI0.SBRG._Y15._MAX)
dsdt.dsl 4643: CreateByteField (CRS1, _SB.PCI0.SBRG._Y15._LEN, LEN1)
Error 4064 - Object does not exist ^ (_SB.PCI0.SBRG._Y15._LEN)
dsdt.dsl 4663: CreateWordField (CRS2, _SB.PCI0.SBRG._Y16._INT, IRQE)
Error 4064 - Object does not exist ^ (_SB.PCI0.SBRG._Y16._INT)
dsdt.dsl 4664: CreateByteField (CRS2, _SB.PCI0.SBRG._Y17._DMA, DMAE)
Error 4064 - Object does not exist ^ (_SB.PCI0.SBRG._Y17._DMA)
dsdt.dsl 4665: CreateWordField (CRS2, _SB.PCI0.SBRG._Y18._MIN, IO21)
Error 4064 - Object does not exist ^ (_SB.PCI0.SBRG._Y18._MIN)
dsdt.dsl 4666: CreateWordField (CRS2, _SB.PCI0.SBRG._Y18._MAX, IO22)
Error 4064 - Object does not exist ^ (_SB.PCI0.SBRG._Y18._MAX)
dsdt.dsl 4667: CreateByteField (CRS2, _SB.PCI0.SBRG._Y18._LEN, LEN2)
Error 4064 - Object does not exist ^ (_SB.PCI0.SBRG._Y18._LEN)
dsdt.dsl 4668: CreateWordField (CRS2, _SB.PCI0.SBRG._Y19._MIN, IO31)
Error 4064 - Object does not exist ^ (_SB.PCI0.SBRG._Y19._MIN)
dsdt.dsl 4669: CreateWordField (CRS2, _SB.PCI0.SBRG._Y19._MAX, IO32)
Error 4064 - Object does not exist ^ (_SB.PCI0.SBRG._Y19._MAX)
dsdt.dsl 4670: CreateByteField (CRS2, _SB.PCI0.SBRG._Y19._LEN, LEN3)
Error 4064 - Object does not exist ^ (_SB.PCI0.SBRG._Y19._LEN)
dsdt.dsl 4824: If (LEqual (STCL, 0x0101))
Error 4096 - parse error ^
dsdt.dsl 5215: Scope )
Error 4096 - ^ parse error, expecting `$'
ASL Input: dsdt.dsl - 5991 lines, 189874 bytes, 1479 keywords
Compilation complete. 152 Errors, 8 Warnings, 0 Remarks, 7 Optimizations
大致分析了一下。多数的Object does not exist是因为定义的地方编译失败。具体为类似如下的地方:
dsdt.dsl 3083: If (ECEN)
Error 4064 - Object does not exist ^ (ECEN)
原文程序段如下:
Method (EWAK, 1, NotSerialized)
{
If (ECEN)
{
WWAK (Arg0)
}
}
前后查看了几遍,折腾不出来,这语法怎么看都是对的。不了了。
最后才在<a href="http://www.insanelymac.com/forum/index.php?showtopic=191731&pid=1345549&mode=threaded&start=#entry1345549">www.insanelymac.com</a>上找到另外的一个解决方法:
对mac打上防止bios重置补丁<a href="http://www.kexts.com/view/151-cmos_reset_fix_(via_kext).html">CMOS reset fix (via kext)</a>
重启,进入DSDT_Patcher1.0.1e文件夹,使用如下命令从bios中提取并编译
./DSDT Patcher -f
OK 得到 dsdt.aml 放入Darwin目录,重启。没有五国。
收工,可以继续搞声卡驱动了。
