如何卸载使用 ACPI_CONFIG_SYSFS 加载的叠加层

How to unload an overlay loaded using ACPI_CONFIG_SYSFS

https://www.kernel.org/doc/html/latest/admin-guide/acpi/ssdt-overlays.html给出了下面的方法来加载一个overlay

cd /config/acpi/table
mkdir my_ssdt
cat ~/ssdt.aml > my_ssdt/aml

此方法只能使用一次。一旦我加载了 aml 文件,我就无法重新加载它。

[ 1901.153829] ACPI configfs: table already loaded

有没有办法卸载aml文件?目前,我正在尝试使用 ACPI 加载枚举设备。 作为 ACPI 和 Overlays 的新手,我正在更新 asl 文件以修复问题,并重新编译并尝试加载。

但是一旦加载模块,内核似乎不会再次应用覆盖,迫使我重新加载然后重新检查。

那么有没有办法重新加载重新生成的 aml 文件?

ACPI ConfigFS 支持的内核 documentation indeed doesn't describe this moment. However, if you look into the source code 您可能会看到它支持丢弃项目。它是 ConfigFS API 的基本内容,即对 rmdir() 系统调用的反应。因此,这意味着您只需简单地删除文件夹即可卸载 table:

rm -rf /sys/kernel/config/acpi/table/my_ssdt

请注意,这是一项调试功能,不能保证在所有可能的 table 类型上都能正常工作。在内核中只有 SPI、I2C 和平台设备可以解除绑定。

另请注意,在提交 Unload SSDT on configfs entry removal 出现之前,卸载 tables 不在内核中。