我们可以在 dts 文件中声明平台设备信息,而不是将每个数据硬编码到操作系统中。以“arm”架构为例。它支持 dts,我们将从 arch/arm/boot/dts/xx.dts 获取 dts。将此 xx.dts 转换为 xx.dtb 并加载内核映像。我最近遇到了ACPI,当我遇到x86架构时,从文档中我了解到ACPI类似于设备树。我们可以在 ACPI 表中声明平台设备信息信息,我怀疑这些 ACPI 表到底在哪里。我如何将此信息加载到 linux。使用 ACPI 比 dts 有什么优势。如果我错了,请纠正我。提前致谢
4 回答
用肺还是用鳃呼吸?取决于你住在哪儿。
架构的粗略分类是
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 用于解决不同的问题:
- ACPI 的目的是提高电源效率。
- DT 的目的是删除内核之外的平台文件。
设备树主要在启动之前传递给 linux 内核。ACPI 通常在 linux 内核启动时加载(查看 Documentation/acpi/enumeration.txt 了解更多信息)
对于任何其他事情只是评论。
ACPI 和 DT 用于不同的架构。
- 英特尔架构中的 ACPI 使用,例如:x86 架构
- DT使用ARM架构
您可以在 linux 内核源代码中手动区分它。
- ACPI 使用 .acpi_match_table{..}
- ARCH 使用 .of_match_table{..}
参考: