一半的人 发表于 2019-3-4 19:51

[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))



gintan1899 发表于 2020-1-14 14:48

楼主可否把你的DSDT在修改了代码的地方加上注释发我参考一下? 我按你以上说的修改了, 仍然报同样的错误, 或许是我改的不对?
谢谢!

一半的人 发表于 2020-1-17 23:20

gintan1899 发表于 2020-1-14 14:48
楼主可否把你的DSDT在修改了代码的地方加上注释发我参考一下? 我按你以上说的修改了, 仍然报同样的错误, 或 ...

可能方法不通用吧,我好久没玩黑苹果了,东西已经没了,GitHub上应该有拯救者15的efi

黯夜怪盗win 发表于 2022-8-31 22:56

这样修改后,会报错 namespace lookup failure AE_ALREADY_EXISTS,请问楼主有遇到过吗。另外可以分享下DSDT,看看怎么修改的吗
页: [1]
查看完整版本: [Guide] ACPI error:No handler for Region分析