本帖最后由 a2295926 于 2018-2-14 07:46 编辑
之前的dsdt,ssdt 说明解释 https://bbs.pcbeta.com/viewthread-1571455-1-1.html https://bbs.pcbeta.com/viewthread-1020621-1-1.html (2楼) 提取dsdt,ssdt 1. 四叶草,启动菜单 按 f4 提取即可 因为:四叶草启动过程,就算你不提供dsdt,ssdt!自动提取dsdt,ssdt!(如果没dsdt,ssdt无法启动系统)所以,四叶草获取是没问题的
2.反编译 dsdt,ssdt (首先 dsdt 加 ssdt才完整的APCI ,所以单dsdt反编译是不正确的! 就c++一样编程,ssdt 就是dsdt分卷!) 终端的反编译命令:
cd “你存放DSDT和SSDT的文件夹名”
iasl -da -dl DSDT.aml SSDT*.aml 注意:有些acpi,-da 参数,会导致无法反编译的,那就把此参数删除就即可 请使用Rehab Man 的 最新版的iasl 和MaciASL!可以减少错误出现!但是有些错误!无法修复,需要手动修复!( iasl 和 MaciASL是开源的!我想是,Rehab Man 针对我们常用dsdt,ssdt改修代码的,测试过官方版!也是出现不少的错误)
修复前,应该了解字段对象类型(重要的)
1.字段对象 IntObj Name (OOXX, Zero) 外部声明 External (OOXX, IntObj)
2.字段对象 FieldUnitObj OperationRegion (GNVS, SystemMemory, 0x100, Zero) Field (GNVS,AnyAcc, Lock, Preserve) { Offset(0x1E), OOXX, 16, //0x1e OOX1, 8, //0x20 …………. } 注意: GNVS,这个是不重要的,就算改其他名称,只要”0x100, Zero”这两位参数不变,读出来数据都一样的 ”0x100,Zero”这两位参数此 指向地址范围 Offset(0x1E) 指向OOXX 字段的偏移量地址!(可以地址偏移量0x1E代替OOXX一样是可以的,字段的偏移量值才重要的,如果OOXX和OOX1互换,就他们的数据就一样跟着互换) 16 不是数据来,而是字段OOXX的占用地址16位 空间 偏移量 以字节做单位,一字节等于 8位 就所以OOX1是偏移量为0x20 制作 电池补丁 oem ssdt 版 需要了解的 外部声明 External (OOXX, FieldUnitObj)
3.字段类型 MutexObj Mutex (OOXX, 0x00) 外部声明 External(OOXX,MutexObj) 4字段类型 PkgObj Name (OOXX, Buffer (0x07) { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 、 }) 外部声明 External(OOXX,PkgObj) 5字段类型 DeviceObj Device (OOXX) 外部声明 External(OOXX,DeviceObj)
6字段类型 MethodObj Method (OOXX, 1, Serialized) { 。。。。。。。 。。。。。。。。。 } 注意: Method,类似dos 批处理 的 子程序一样 Method 的 1 指有一个参数,如果为 3就有三个参数 只要 \OOXX(参数1)即可执行Method下代码了(函数就一样使用) 外部声明 External(OOXX,MethodObj) 以上为字段对象说明(基本常用 6字段对象) 以下重点说明 dsdt ,ssdt !一些,并没声明字段的也没有外部声明!(没声明的字段无法正常执行,但是黑苹果启动时,dsdt和ssdt合一个apci加载,那是读取在其他文件中字段了) Iasl 反编译时,对没声明字段的也没有外部声明,强行添加外部声明!(External)但是时常将MethodObj,IntObj,FieldUnitObj 搞乱了所以导致错误出现(IntObj,FieldUnitObj搞错并不会出现错误,和MethodObj一定会出现错误的) 提示:(自行测试) Iasl –ldsdt.aml(生成文本与文件2进制的16进制码对照表,aml文件明码没加密的) 通过对External范围搜索,字段的16进制码,发现中一些字段并没进行外部声明的,只是 Iasl 反编译时,强行加上去的!(因为,不声明,一样出现的错误),声明的对象不对,就会导致程序逻辑错误 字段路径外部是示范 从 MaciASL获取
\_SB.PCI0.LPCB.PWBW 为PWBW路径(_SB.PCI0.LPCB下使用就PWBW即可) 在为非_SB.PCI0.LPCB下使用 就要 \_SB.PCI0.LPCB.PWBW 才能该字段
|