Documentation/admin-guide/acpi/initrd_table_override.rst
.. SPDX-License-Identifier: GPL-2.0
If the ACPI_TABLE_UPGRADE compile option is true, it is possible to upgrade the ACPI execution environment that is defined by the ACPI tables via upgrading the ACPI tables provided by the BIOS with an instrumented, modified, more recent version one, or installing brand new ACPI tables.
When building initrd with kernel in a single image, option ACPI_TABLE_OVERRIDE_VIA_BUILTIN_INITRD should also be true for this feature to work.
For a full list of ACPI tables that can be upgraded/installed, take a look
at the char *table_sigs[MAX_ACPI_SIGNATURE]; definition in
drivers/acpi/tables.c.
All ACPI tables iasl (Intel's ACPI compiler and disassembler) knows should be overridable, except:
Both could get implemented as well.
Complain to your platform/BIOS vendor if you find a bug which is so severe that a workaround is not accepted in the Linux kernel. And this facility allows you to upgrade the buggy tables before your platform/BIOS vendor releases an upgraded BIOS binary.
This facility can be used by platform/BIOS vendors to provide a Linux compatible environment without modifying the underlying platform firmware.
This facility also provides a powerful feature to easily debug and test ACPI BIOS table compatibility with the Linux kernel by modifying old platform provided ACPI tables or inserting new ACPI tables.
It can and should be enabled in any kernel because there is no functional change with not instrumented initrds.
::
cd /tmp acpidump >acpidump acpixtract -a acpidump
iasl -d *.dat
Store("HELLO WORLD", debug)
DefinitionBlock ("DSDT.aml", "DSDT", 2, "INTEL ", "TEMPLATE", 0x00000000)
DefinitionBlock ("DSDT.aml", "DSDT", 2, "INTEL ", "TEMPLATE", 0x00000001) iasl -sa dsdt.dsl
mkdir -p kernel/firmware/acpi cp dsdt.aml kernel/firmware/acpi
iasl -sa facp.dsl iasl -sa ssdt1.dsl cp facp.aml kernel/firmware/acpi cp ssdt1.aml kernel/firmware/acpi
find kernel | cpio -H newc --create > /boot/instrumented_initrd cat /boot/initrd >>/boot/instrumented_initrd
acpi.debug_level=0x2 acpi.debug_layer=0xFFFFFFFF
[ 1.268089] ACPI: PCI Interrupt Routing Table [_SB_.PCI0._PRT] [ 1.272091] [ACPI Debug] String [0x0B] "HELLO WORLD"
iasl is able to disassemble and recompile quite a lot different, also static ACPI tables.
iasl and acpixtract are part of Intel's ACPICA project: https://acpica.org/
and should be packaged by distributions (for example in the acpica package on SUSE).
acpidump can be found in Len Browns pmtools: ftp://kernel.org/pub/linux/kernel/people/lenb/acpi/utils/pmtools/acpidump
This tool is also part of the acpica package on SUSE. Alternatively, used ACPI tables can be retrieved via sysfs in latest kernels: /sys/firmware/acpi/tables