dts和ACPI之间的差异

ani*_*han 9 linux x86 acpi linux-device-driver device-tree

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

Enr*_*elt 10

不完全正确:

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

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

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

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

  • 看看这个:https://events.static.linuxfound.org/sites/events/files/slides/unified_properties_API_0.pdf (2认同)

lqu*_*lqu 5

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

架构的粗略分类是

x86 - Server/PC - ACPI table 
ARM - embedded systems - Device Tree
Run Code Online (Sandbox Code Playgroud)

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

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

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

参考:


Dev*_*das 4

恕我直言

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

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

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

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

对于任何其他事情,请发表评论。