ACPI 表的提取和更新方法
主要介绍DSDT
和SSDT
的提取、反编译、修改、编译和更新的方法。
提取
1 | acpidump > acpidump |
这一步会在当前目录下生成许多dat
文件。
反编译
1 | iasl -d *.dat |
这一步会把上一步生成的dat
文件反编译为dsl
文件。
修改
现在就可以按照需求修改dsl
文件。
注意:修改完后,需要增加版本号。
例如:
修改前:
1 | DefinitionBlock ("DSDT.aml", "DSDT", 2, "INTEL ", "TEMPLATE", 0x00000000) |
修改后应为:
1 | DefinitionBlock ("DSDT.aml", "DSDT", 2, "INTEL ", "TEMPLATE", 0x00000001) |
编译
例如我们修改了dsdt.dsl
文件,可以这样编译:
1 | iasl -sa dsdt.dsl |
此时应该会生成dsdt.aml
如果修改过其他文件,也可以按照上述方法进行编译,生成相应的aml
文件。
应用修改
1 | mkdir -p kernel/firmware/acpi |
然后复制相应的aml
文件到上面新建的目录。
1 | find kernel | cpio -H newc --create > initrd |
再用当前目录下生成的initrd
替换系统原来的initrd
,重启系统。
如果能在demsg
中发现类似
1 | ACPI: DSDT ACPI table found in initrd |
的信息,则说明替换成功。
参考
https://www.kernel.org/doc/html/latest/admin-guide/acpi/initrd_table_override.html
https://wiki.archlinux.org/title/DSDT_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)