【问题标题】:Global variable storage in ACPIACPI 中的全局变量存储
【发布时间】:2021-09-18 00:01:44
【问题描述】:

ACPI 命名空间中的全局变量存储在 RAM 中的什么位置?该区域是否由 BIOS 保留?请参见下面的示例:

Scope (_SB.PC00.LPCB.XYZ_)
{
    Device (ABCD)
    {
        Name (VAR1, "foo")
        Method (BAR_)
        {
            VAR1 = "bar"
        }
    }
}

VAR1 最终存储在哪里,因为我们没有手动为这个变量定义内存操作区域?

【问题讨论】:

  • 操作系统的职责是解析 AML(这是 ASL 源的编译版本,就像您发布的那样)并执行操作码,不是吗?包括 NameOp 和 StoreOp (我认为,不确定,但你明白了)将在 Name= 的编译版本中使用。我不认为涉及BIOS。作为参考,ACPI 表位于 RAM 中,并且当操作系统请求内存映射时,该区域被标记为保留。但这与执行 AML 无关。
  • 内存由操作系统中的 ACPI 解释器或任何消耗它的东西保留(它很可能是引导加载程序或任何其他自定义启动代码)。

标签: x86 uefi acpi


【解决方案1】:

ACPI 命名空间中的全局变量存储在 RAM 中的什么位置?

这取决于 AML 解释器和操作系统。对于单体内核,ACPI 全局命名空间的任何索引(例如,用于从其名称中查找对象的哈希表)、变量的元数据(名称、对象类型)和变量的值都可能最终都在内核的堆中(在由内核的内存管理提供的某种kmalloc() 分配的内存中)。

【讨论】:

  • 您能否提供更多特定于 Linux 内核的详细信息?我想找出有关行为的细节,例如当系统进入睡眠状态并再次唤醒等时,AML 数据会发生什么变化。
  • @Hamzahfrq:抱歉,我不是 Linux 开发人员。对于 Linux;我知道的唯一相关的事情是 Linux 使用 ACPICA(请参阅 acpica.org )并且 ACPICA 要求操作系统在其初始化期间为“OS 服务层”提供函数(例如,Linux 将提供指向 ACPICA 的函数指针,即 ACPICA以后可以使用它的AcpiOsAllocate())。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-24
  • 1970-01-01
  • 2016-01-08
  • 1970-01-01
  • 1970-01-01
  • 2019-05-02
  • 1970-01-01
相关资源
最近更新 更多