€•N>Œsphinx.addnodes”Œdocument”“”)”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)”}”(hhh]”(hŒ pending_xref”“”)”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…””}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ:/translations/zh_CN/admin-guide/acpi/initrd_table_override”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)”}”(hhh]”hŒChinese (Traditional)”…””}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ:/translations/zh_TW/admin-guide/acpi/initrd_table_override”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ:/translations/it_IT/admin-guide/acpi/initrd_table_override”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ:/translations/ja_JP/admin-guide/acpi/initrd_table_override”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ:/translations/ko_KR/admin-guide/acpi/initrd_table_override”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒSpanish”…””}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ:/translations/sp_SP/admin-guide/acpi/initrd_table_override”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒcomment”“”)”}”(hŒ SPDX-License-Identifier: GPL-2.0”h]”hŒ SPDX-License-Identifier: GPL-2.0”…””}”hh£sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1h¡hhhžhhŸŒT/var/lib/git/docbuild/linux/Documentation/admin-guide/acpi/initrd_table_override.rst”h KubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒ Upgrading ACPI tables via initrd”h]”hŒ Upgrading ACPI tables via initrd”…””}”(hh»hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hh¶hžhhŸh³h Kubhµ)”}”(hhh]”(hº)”}”(hŒWhat is this about”h]”hŒWhat is this about”…””}”(hhÌhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hhÉhžhhŸh³h KubhŒ paragraph”“”)”}”(hXIf 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.”h]”hXIf 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.”…””}”(hhÜhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h K hhÉhžhubhÛ)”}”(hŒ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.”h]”hŒ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.”…””}”(hhêhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h KhhÉhžhubhÛ)”}”(hŒž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.”h]”(hŒWFor a full list of ACPI tables that can be upgraded/installed, take a look at the char ”…””}”(hhøhžhhŸNh NubhŒtitle_reference”“”)”}”(hŒ"`*table_sigs[MAX_ACPI_SIGNATURE];`”h]”hŒ *table_sigs[MAX_ACPI_SIGNATURE];”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhøubhŒ% definition in drivers/acpi/tables.c.”…””}”(hhøhžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h KhhÉhžhubhÛ)”}”(hŒbAll ACPI tables iasl (Intel's ACPI compiler and disassembler) knows should be overridable, except:”h]”hŒdAll ACPI tables iasl (Intel’s ACPI compiler and disassembler) knows should be overridable, except:”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h KhhÉhžhubhŒ block_quote”“”)”}”(hŒk- ACPI_SIG_RSDP (has a signature of 6 bytes) - ACPI_SIG_FACS (does not have an ordinary ACPI table header) ”h]”hŒ bullet_list”“”)”}”(hhh]”(hŒ list_item”“”)”}”(hŒ*ACPI_SIG_RSDP (has a signature of 6 bytes)”h]”hÛ)”}”(hj7h]”hŒ*ACPI_SIG_RSDP (has a signature of 6 bytes)”…””}”(hj9hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h Khj5ubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj0ubj4)”}”(hŒacpidump acpixtract -a acpidump # Disassemble, modify and recompile them: iasl -d *.dat # For example add this statement into a _PRT (PCI Routing Table) function # of the DSDT: Store("HELLO WORLD", debug) # And increase the OEM Revision. For example, before modification: DefinitionBlock ("DSDT.aml", "DSDT", 2, "INTEL ", "TEMPLATE", 0x00000000) # After modification: DefinitionBlock ("DSDT.aml", "DSDT", 2, "INTEL ", "TEMPLATE", 0x00000001) iasl -sa dsdt.dsl # Add the raw ACPI tables to an uncompressed cpio archive. # They must be put into a /kernel/firmware/acpi directory inside the cpio # archive. Note that if the table put here matches a platform table # (similar Table Signature, and similar OEMID, and similar OEM Table ID) # with a more recent OEM Revision, the platform table will be upgraded by # this table. If the table put here doesn't match a platform table # (dissimilar Table Signature, or dissimilar OEMID, or dissimilar OEM Table # ID), this table will be appended. mkdir -p kernel/firmware/acpi cp dsdt.aml kernel/firmware/acpi # A maximum of "NR_ACPI_INITRD_TABLES (64)" tables are currently allowed # (see osl.c): iasl -sa facp.dsl iasl -sa ssdt1.dsl cp facp.aml kernel/firmware/acpi cp ssdt1.aml kernel/firmware/acpi # The uncompressed cpio archive must be the first. Other, typically # compressed cpio archives, must be concatenated on top of the uncompressed # one. Following command creates the uncompressed cpio archive and # concatenates the original initrd on top: find kernel | cpio -H newc --create > /boot/instrumented_initrd cat /boot/initrd >>/boot/instrumented_initrd # reboot with increased acpi debug level, e.g. boot params: acpi.debug_level=0x2 acpi.debug_layer=0xFFFFFFFF # and check your syslog: [ 1.268089] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT] [ 1.272091] [ACPI Debug] String [0x0B] "HELLO WORLD"”h]”hX}# Extract the machine's ACPI tables: cd /tmp acpidump >acpidump acpixtract -a acpidump # Disassemble, modify and recompile them: iasl -d *.dat # For example add this statement into a _PRT (PCI Routing Table) function # of the DSDT: Store("HELLO WORLD", debug) # And increase the OEM Revision. For example, before modification: DefinitionBlock ("DSDT.aml", "DSDT", 2, "INTEL ", "TEMPLATE", 0x00000000) # After modification: DefinitionBlock ("DSDT.aml", "DSDT", 2, "INTEL ", "TEMPLATE", 0x00000001) iasl -sa dsdt.dsl # Add the raw ACPI tables to an uncompressed cpio archive. # They must be put into a /kernel/firmware/acpi directory inside the cpio # archive. Note that if the table put here matches a platform table # (similar Table Signature, and similar OEMID, and similar OEM Table ID) # with a more recent OEM Revision, the platform table will be upgraded by # this table. If the table put here doesn't match a platform table # (dissimilar Table Signature, or dissimilar OEMID, or dissimilar OEM Table # ID), this table will be appended. mkdir -p kernel/firmware/acpi cp dsdt.aml kernel/firmware/acpi # A maximum of "NR_ACPI_INITRD_TABLES (64)" tables are currently allowed # (see osl.c): iasl -sa facp.dsl iasl -sa ssdt1.dsl cp facp.aml kernel/firmware/acpi cp ssdt1.aml kernel/firmware/acpi # The uncompressed cpio archive must be the first. Other, typically # compressed cpio archives, must be concatenated on top of the uncompressed # one. Following command creates the uncompressed cpio archive and # concatenates the original initrd on top: find kernel | cpio -H newc --create > /boot/instrumented_initrd cat /boot/initrd >>/boot/instrumented_initrd # reboot with increased acpi debug level, e.g. boot params: acpi.debug_level=0x2 acpi.debug_layer=0xFFFFFFFF # and check your syslog: [ 1.268089] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT] [ 1.272091] [ACPI Debug] String [0x0B] "HELLO WORLD"”…””}”hjìsbah}”(h]”h ]”h"]”h$]”h&]”h±h²uh1jêhŸh³h K7hjÙhžhubhÛ)”}”(hŒYiasl is able to disassemble and recompile quite a lot different, also static ACPI tables.”h]”hŒYiasl is able to disassemble and recompile quite a lot different, also static ACPI tables.”…””}”(hjúhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h KahjÙhžhubeh}”(h]”Œhow-does-it-work”ah ]”h"]”Œhow does it work”ah$]”h&]”uh1h´hh¶hžhhŸh³h K4ubhµ)”}”(hhh]”(hº)”}”(hŒ!Where to retrieve userspace tools”h]”hŒ!Where to retrieve userspace tools”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hjhžhhŸh³h KfubhÛ)”}”(hŒKiasl and acpixtract are part of Intel's ACPICA project: https://acpica.org/”h]”(hŒ:iasl and acpixtract are part of Intel’s ACPICA project: ”…””}”(hj!hžhhŸNh NubhŒ reference”“”)”}”(hŒhttps://acpica.org/”h]”hŒhttps://acpica.org/”…””}”(hj+hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”j-uh1j)hj!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h KhhjhžhubhÛ)”}”(hŒTand should be packaged by distributions (for example in the acpica package on SUSE).”h]”hŒTand should be packaged by distributions (for example in the acpica package on SUSE).”…””}”(hj@hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h KkhjhžhubhÛ)”}”(hŒvacpidump can be found in Len Browns pmtools: ftp://kernel.org/pub/linux/kernel/people/lenb/acpi/utils/pmtools/acpidump”h]”(hŒ-acpidump can be found in Len Browns pmtools: ”…””}”(hjNhžhhŸNh Nubj*)”}”(hŒIftp://kernel.org/pub/linux/kernel/people/lenb/acpi/utils/pmtools/acpidump”h]”hŒIftp://kernel.org/pub/linux/kernel/people/lenb/acpi/utils/pmtools/acpidump”…””}”(hjVhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”jXuh1j)hjNubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h KnhjhžhubhÛ)”}”(hŒ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”h]”hŒ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”…””}”(hjkhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÚhŸh³h Kqhjhžhubeh}”(h]”Œ!where-to-retrieve-userspace-tools”ah ]”h"]”Œ!where to retrieve userspace tools”ah$]”h&]”uh1h´hh¶hžhhŸh³h Kfubeh}”(h]”Œ upgrading-acpi-tables-via-initrd”ah ]”h"]”Œ upgrading acpi tables via initrd”ah$]”h&]”uh1h´hhhžhhŸh³h Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”h³uh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)”}”(h¹NŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”j¬Œerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”h³Œ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”(j†jƒj…j‚jÖjÓj j j~j{uŒ nametypes”}”(j†‰j…‰jÖ‰j ‰j~‰uh}”(jƒh¶j‚hÉjÓjˆj jÙj{juŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nhžhub.