繁体   English   中英

dts 和 ACPI 的区别

[英]Difference between dts and ACPI

我们可以在 dts 文件中声明平台设备信息,而不是将每个数据硬编码到操作系统中。 以“arm”架构为例。 它支持 dts,我们将从 arch/arm/boot/dts/xx.dts 获取 dts。 将此 xx.dts 转换为 xx.dtb 并加载内核映像。 我最近遇到了 ACPI,当我遇到 x86 架构时,从文档中,我了解到 ACPI 类似于设备树。 我们可以在 ACPI 表中声明平台设备信息信息,我怀疑这些 ACPI 表到底在哪里。 我如何将这些信息加载到 linux。 与 dts 相比,使用 ACPI 有什么优势。 如果我错了,请纠正我。 提前致谢

用肺呼吸还是用鳃呼吸? 取决于你住在哪儿。

架构的粗略分类是

x86 - Server/PC - ACPI table 
ARM - embedded systems - Device Tree

在服务器/PC 主板上,ACPI 表是驻留在闪存芯片上的 UEFI 固件的一部分。 稍后将在其他地方(硬盘驱动器左右)安装操作系统。 操作系统解析 ACPI 表,但操作系统开发人员无法控制固件中已经写入的内容; 或者他们甚至不知道电路板的内部设计。 主板供应商(固件供应商)需要支持要安装的任何操作系统,而不仅仅是 Linux,因此他们必须遵循标准 (UEFI),而不是专注于 Linux 事物,例如设备树。

在嵌入式系统上,操作系统和其他一切都由供应商编程一次,用户再也不会编程。 操作系统是固件的一部分。 因此无需担心操作系统支持矩阵,只需在主板和您的操作系统映像之间建立一对一的关系即可。 U-Boot、内核、initramfs、设备树 blob 驻留在同一个闪存存储(即 NAND)上。 因此,开发人员可以访问和控制要部署为设备树的内容(但必须与实际硬件匹配)。

硬件设计人员应该能够提供 ACPI 表和设备树。 根据接收器的不同,将首选一个。

参考:

不完全正确:

  • ACPI 最初是作为固件(以前的 BIOS)和操作系统之间的接口,用于诸如电源管理之类的事情,还有诸如平台设备探测之类的事情
  • DT 总是(甚至早在 ACPI 存在之前)关于声明性平台设备描述(探测和配置),因此操作系统可以正确初始化所有驱动程序,配置操作点等。

ACPI 的范围总是非常有限并且依赖于固件,而 DT 则独立存在(只需要引导加载程序将正确的 dtb 传递给内核)。

ACPI 是 bios 和主板供应商为了解决 DT 很久以前已经解决的一小部分问题而进行的不专业、骇人听闻的尝试。 对于那些戴着绞刑架的人来说,一个主要的专业论点可能是 ACPI/BIOS 在固件 blob 中隐藏了许多低级配置内容(直到运行时设备编程,例如用于电源管理),从而阻止操作系统内核完全控制在机器上。 (这最终会导致诸如 BIOS 损坏等损坏机器之类的事情)。 我们,内核开发人员,经常不得不处理蹩脚的 BIOS。

我的强烈建议:尽可能使用 ACPI。

恕我直言

ACPI 和 DT 用于类似的目的,但它们具有独特的功能。 如今在 DT 中定义 ACPI 配置的努力。

ACPI 和 DT 用于解决不同的问题:

  1. ACPI 的目的是提高电源效率。
  2. DT 的目的是删除内核之外的平台文件。

设备树通常在启动之前传递给 linux 内核。 ACPI 通常在 linux 内核启动时加载(查看 Documentation/acpi/enumeration.txt 了解更多信息)

对于任何其他事情只是评论。

ACPI 和 DT 用于不同的架构。

  1. ACPI 在英特尔架构中的使用,例如:x86 arch
  2. DT使用ARM架构

您可以在 linux 内核源代码中手动区分它。

  1. ACPI 使用 .acpi_match_table{..}
  2. ARCH 使用 .of_match_table{..}

参考:

  1. ACPI 与 DT: https : //blog.linuxplumbersconf.org/2013/ocw/proposals/1173

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM