[Guide] ACPI error:No handler for Region分析
本帖最后由 一半的人 于 2019-3-4 21:36 编辑整理后:
1.ACPI Error :Region EmbeddedControl (ID=3) has no handler
2.No Local Variables are initialized for method
3.Initialized Arguments for Method
Arg0 : ****** Name LSTE RegionField *****
4.Method parse/execution failed [\_SB.PIC0.LPCB.H_EC.ECR2]
解析:
1. EmbeddedControl 是一个Operation Region 在ACPI规范中它的ID值为3,
根据ACPI规范中提到,在一个Scope或者Device中的方法不能访问EC等操作域中的字段,
除非在一个固有方法_REG中,指明了EC域中的字段可以使用。
2.方法 ECR2 没有参数
3.ECR2方法的参数LSTE初始化失败,因为这个LSTE是EC域中的字段。还不能访问。
4 .[\_SB.PIC0.LPCB.H_EC.ECR2] 方法的全路径。
修复:
_REG方法上添加如下的内容,OS就会在EmbeddedControl Handler准备好后,调用_REG方法
来暗指EC域可以访问了。
OperationRegion (ECF3, EmbeddedControl, Zero, 0xFF)
Method (_REG, 2, NotSerialized)
{
// Arg0 方法的第一个参数,指示Operation Region 的类型,EC域的为ID=3
//Arg1 方法的第二个参数,指示Operation Region Handler是否准备好
//1为准备好了 0 没有
}
所以我们在_REG方法所在的作用域内,添加一个字段如:ISAB,用来指示某个字段的可用性。
可以将ISAB添加到_REG方法前面:
Name (ISAB, Zero)//IASB=0
OperationRegion (ECF3, EmbeddedControl, Zero, 0xFF)
Method (_REG, 2, NotSerialized)
{
If (LAnd (LEqual (Arg0, 0x03), LEqual (Arg1, One)))
{
//这个花括号内表示EC域已经可用了,我们改变ISAB的值
Store (1, ISAB)
}
}
在其他的用到LSTE的地方做个判断如:
If (LEqual (IASB, 0x1))
楼主可否把你的DSDT在修改了代码的地方加上注释发我参考一下? 我按你以上说的修改了, 仍然报同样的错误, 或许是我改的不对?
谢谢! gintan1899 发表于 2020-1-14 14:48
楼主可否把你的DSDT在修改了代码的地方加上注释发我参考一下? 我按你以上说的修改了, 仍然报同样的错误, 或 ...
可能方法不通用吧,我好久没玩黑苹果了,东西已经没了,GitHub上应该有拯救者15的efi 这样修改后,会报错 namespace lookup failure AE_ALREADY_EXISTS,请问楼主有遇到过吗。另外可以分享下DSDT,看看怎么修改的吗
页:
[1]