14

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

4

4 回答 4

5

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

架构的粗略分类是

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

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

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

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

参考:

于 2019-11-06T19:32:32.683 回答
4

不完全正确:

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

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

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

我的强烈建议:尽可能获得 ACPI。

于 2019-05-21T09:40:26.227 回答
2

恕我直言

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

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

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

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

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

于 2017-10-30T15:43:23.953 回答
0

ACPI 和 DT 用于不同的架构。

  1. 英特尔架构中的 ACPI 使用,例如:x86 架构
  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
于 2021-09-08T07:39:01.420 回答