ACPI和设备树(DTS)的区别

时间:2025-03-25 08:27:39

都用于声明平台设备信息:
dts(设备树)用于arm架构。开发人员可以修改。是独立存在的文件。
acpi表用于x86架构。ACPI 表是位于闪存芯片上的 UEFI 固件的一部分。在 x86 上,内核从固件提供的 ACPI 表中获取所有平台信息(对于 x86,这通常称为 BIOS)。开发人员无法修改,只能由主板供应商修改BIOS固件,如果缺少任何内容,则意味着这个 BIOS 不够好。

不同的目的:
DTS 的目的是将设备驱动代码和设备信息相分离。
ACPI 的目的是提高电源效率。

不同的加载时刻:
ACPI 通常在 linux 内核启动时加载。
DTS通常在启动之前传递给 linux 内核。

Linux内核源码中,某个硬件设备XXX的驱动中,在进行名称XXX匹配时,使用不同的结构体成员调用:
DTS使用.of_match_table。
ACPI使用.acpi_match_table。
Linux内核源码include\linux\中结构体如下:

struct device_driver {
....
	const struct of_device_id	*of_match_table;
	const struct acpi_device_id	*acpi_match_table;
....
  • 1
  • 2
  • 3
  • 4
  • 5

硬件设备的驱动内可同时填写ACPI和DTS,这样就可以兼容,也可只写其中一个。

参考:/questions/32310935/difference-between-dts-and-acpi