总之,我的问题是:如何在 Windows 上修改 ACPI 表?
更多详细信息:我在新的 hp envy x360 Ryzen 3700U 上以双启动方式安装 ubuntu 18.04 时遇到问题。我在这里找到了答案: https://askubuntu.com/questions/1162746/why-wont-my-hp-envy-x360-laptop-with-ryzen-7-3700u-boot-ubuntu-live-cd;这涉及修改 ACPI 配置。
我做了以下事情(正如“justin”在https://bugzilla.kernel.org/show_bug.cgi?id=203431):
1. run "acpidump -o tables" to create a file with the currently running tables
2. "acpixtract -a tables" to extract the individual tables (we only care about the FACP table)
3. "iasl -d facp.dat" to disassemble the FACP table
4. edit facp.dsl with your prefered text editor.
set the "Oem Revision" field at the top to a larger number
set the "Hardware Reduced (V5)" field to 0
5. "iasl -sa facp.dsl" to assemble your modified table
6. install the produced facp.aml file like you did before
我认为前 5 个步骤进展顺利。我被困在最后一部分,因为我不明白我应该做什么(安装生成的 facp.aml):
从我在第一个线程中收集到的信息来看,我必须使用 FACP.aml 文件创建一个 CPIO 存档并将其提供给 initrd 内核。我不知道该怎么做,因为我找到的所有资源都是针对 Linux 的,而不是针对 Windows 的。有人能用更简单的话解释一下吗?
根据教程https://acpica.org/,我必须运行“acpiexec facp.aml”。我这样做了,但得到了以下结果:
Intel ACPI Component Architecture
AML Execution/Debug Utility version 20190816
Copyright (c) 2000 - 2019 Intel Corporation
Input file facp.aml, Length 0x114 (276) bytes
ACPI: RSDP 0x000000000041C7B8 000024 (v02 Intel )
ACPI: XSDT 0x00000000004714A8 000034 (v00 Intel AcpiExec 00001001 INTL 20190816)
ACPI: FACP 0x0000000000472490 000114 (v06 HPQOEM SLIC-MPC 01072009 INTL 20190816)
ACPI: DSDT 0x000000000041A378 000024 (v02 Intel Local 00000001 INTL 20090730)
ACPI: FACS 0x000000000041C918 000040
ACPI table initialization:
Table [DSDT: Local ] (id 01) - 0 Objects with 0 Devices, 0 Regions,
0 Methods (0/0/0 Serial/Non/Cvt)
ACPI: 1 ACPI AML tables successfully acquired and loaded
Final data object initialization:
Namespace contains 9 (0x9) objects
Initializing General Purpose Events (GPEs):
Initialized GPE 00 to 1F [_GPE] 4 regs on interrupt 0x9 (SCI)
Initializing Device/Processor/Thermal objects and executing _INI/_STA methods:
Executed 0 _INI methods requiring 0 _STA executions (examined 2 objects)
Unexpected AE_BAD_ADDRESS from AcpiWriteBitRegister (aetests-550)
Unexpected AE_BAD_ADDRESS from AcpiReadBitRegister (aetests-563)
Unexpected AE_BAD_PARAMETER from AcpiInstallGpeHandler (aetests-412)
Unexpected AE_BAD_PARAMETER from AcpiEnableGpe (aetests-415)
Unexpected AE_BAD_PARAMETER from AcpiDisableGpe (aetests-418)
即使我在未修改的 .aml 文件上运行此命令,它也不起作用,尽管在这种情况下我没有得到意外的 AE_BAD_ADDRESS 和意外的 AE_BAD_PARAMETER 行。
因为我是一个完全的初学者,我不知道自己在做什么,所以非常感谢一个易于理解的解释!
答案1
我已经成功启动了 Ubuntu Budgie(Live 系统,未安装),使用相同的 Envy 型号和处理器,键盘、触控板和触摸功能均正常。
像你一样提取 ACPI 表,但在第 4 步中,你需要编辑一行,你想更改
8042 Present on ports 60/64 (V2) : 0
到
8042 Present on ports 60/64 (V2) : 1
这是为了让触控板和触摸屏工作。然后按照下一步编译您的 FACP.dsl 文件。
为了安装它,您需要将其放入 Linux 可启动闪存驱动器内的 initrd 中。
为了做到这一点,您需要执行下面的 Linux 命令,我使用 Windows Subsystem for Linux (WSL) 来方便地实现该目的。
创建 Linux 可启动闪存驱动器(在 ISO 模式下)。将 initrd(在 ubuntu 中位于 /casper)复制到计算机上新创建的文件夹,您还需要将 facp.aml 文件移动到同一文件夹。
在该文件夹中打开 Linux shell 并执行这些命令;
# mkdir -p kernel/firmware/acpi
# mv facp.aml kernel/firmware/acpi
# find kernel | cpio -H newc --create > instrumented_initrd
最后
cat initrd >>instrumented_initrd
现在将此文件(instrumented_initrd)移动到可启动驱动器内的 /casper 文件夹中,将其重命名为 initrd(删除已检测)并单击“是”进行替换。
就我而言,这使得我的计算机成功启动 Ubuntu Budgie,并且键盘、触控板和触摸屏都可以工作。
答案2
您可以按照此线程中的说明安装 Ubuntu 的全新副本:
接受答案中的方法 1 应该允许您启动新安装。方法 2 应该允许您使其完全正常运行。
您可以使用此处的工具转储 Windows 中的 ACPI 表:
要从 CLI 使用它们:
$ acpidump -b
$ iasl -d facp.dat
现在用文本编辑器修改 facp.dsl。将“减少硬件支持”从 1 更改为 0。
重新编译 facp.dsl
$ iasl -sa facp.dsl
请参阅此帖子:在 Linux 中加载自定义 ACPI 表
要创建 cpio 档案,请按照下列步骤操作:
# mkdir -p kernel/firmware/acpi
# mv facp.aml kernel/firmware/acpi
# find kernel | cpio -H newc --create > my_tables.cpio
编辑 /boot/grub/grub.cfg。其中显示:
initrd <kernel>
您需要添加一行引用 cpio 存档。您可以尝试启动高级模式并添加 echo 行,以便验证它是否正在加载修改后的表:
echo 'Loading custom ACPI table ...'
initrd /my_tables.cpio
initrd <kernel>
我还没有时间在新笔记本电脑上安装 Ubuntu,因此我无法亲自验证这些说明是否对我有用。一旦有时间进行安装,我将发布更新。