Переопределение DSDT с rEFInd (Включение S3 в ACPI)

У меня новая Dell Inspiron 5505 (AMD Ryzen 4500), и, конечно же, состояние сна S3 отключено без опции BIOS (даже после обновления BIOS).

После нескольких недель неудовлетворенности, я научился (успешно) редактировать DSDT и переопределять его через GRUB. Теперь мой ноутбук засыпает, как котенок!

Однако я не знаю, как переопределить DSDT с помощью rEFInd. Кто-нибудь знает, как это сделать?

Моя настройка GRUB (работает):

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash mem_sleep_default=deep"
GRUB_EARLY_INITRD_LINUX_CUSTOM="microcode.cpio acpi_override"

Также, в grub.cfg (работает):

linux   /boot/vmlinuz-5.4.0-47-generic root=UUID=febd7fdb-b56d-482d-bcdf-5b6d472fa950 ro  quiet splash mem_sleep_default=deep 
initrd  /boot/acpi_override /boot/initrd.img-5.4.0-47-generic

Моя (попытка) rEFInd настройка (не работает):

menuentry Ubuntu {
    icon    /EFI/refind/themes/tux-refind-theme/icons/os_ubuntu.png
    volume  "Ubuntu Linux"
    loader  /boot/vmlinuz-5.4.0-47-generic
    initrd  /boot/acpi_override /boot/initrd.img-5.4.0-47-generic
    options "ro root=UUID=febd7fdb-b56d-482d-bcdf-5b6d472fa950 quiet splash mem_sleep_default=deep $vt_handoff"
}
  • Если я загружаюсь через GRUB, переопределение работает, и я могу перевести компьютер в режим сна S3.
  • Если я загружаюсь нормально через rEFIнд автоопределенной записи, загружается Linux, но он не знает, как переопределить DSDT, и мой ноутбук не спит.
  • Если я попробую загрузиться через ручную rEFIнд запись, я получу эту ошибку:
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
CPU: 1 PID: 1 Comm: swapper/0 Not tainted 5.4.0-47-generic #51-Ubuntu
Hardware name: Dell Inc. Inspiron 5505/0MJ6CM, BIOS 1.2.1 07/15/2020
Call Trace:
 dump_stack+0x6d/0x9a
 panic+0x101/0x2e3
 mount_block_root+0x23f/0x2e8
 mount_root+0x38/0x3a
 prepare_namespace+0x13f/0x194
 kernel_init_freeable+0x231/0x255
 ? rest_init+0xb0/0xb0
 kernel_init+0xe/0x100
 ret_from_fork+0x22/0x40
Kernel Offset: 0x1b800000 from 0xffffffff81000000 (relocation range: 0xffffffff80000000-0xffffffffbfffffff)
---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0) ]---
  • Я попробовал разделить строки переопределения и initrd.img. Linux, конечно, загружается без ошибок, но полностью игнорирует переопределение ACPI (DSDT):
menuentry Ubuntu {
    icon    /EFI/refind/themes/tux-refind-theme/icons/os_ubuntu.png
    volume  "Ubuntu Linux"
    loader  /boot/vmlinuz-5.4.0-47-generic
    initrd  /boot/acpi_override
    initrd  /boot/initrd.img-5.4.0-47-generic
    options "root=UUID=febd7fdb-b56d-482d-bcdf-5b6d472fa950 ro quiet splash mem_sleep_default=deep $vt_handoff"
}
  • Есть идеи, что я делаю неправильно, или, возможно, не делаю?
  • Кто-нибудь успешно переопределил DSDT с помощью rEFInd?

SIDENOTE:

Для любопытства, я удалил утверждения "If", окружающие состояние S3 в файле DSDT, что решило проблему сна.

От этого:

If (LEqual (CNSB, Zero))
{
    If (LEqual (DAS3, One))
    {
        Name (_S3, Package (0x04)  // _S3_: S3 System State
        {
            0x03, 
            0x03, 
            Zero, 
            Zero
        })
    }
}

до этого:

Name (_S3, Package (0x04)  // _S3_: S3 System State
{
    0x03, 
    0x03, 
    Zero, 
    Zero
})
0
задан 2 October 2020 в 04:16

1 ответ

Разделы ручной загрузки rEFInd вызывают у многих проблемы — этот тип конфигурации когда-то был обычным явлением, еще во времена GRUB Classic и LILO, но сегодня это в основном забытое искусство, поэтому я вижу много людей, которые пытаются такие конфигурации но они терпят неудачу из-за опечаток или непонимания привередливых деталей, которые им требуются. В случае с показанным вами примером проблема заключается в том, что вы можете указать только один файл initrd в строке initrd в определении строфы ручной загрузки refind.conf. Если вам нужно указать несколько файлов initrd, они должны быть перечислены в строке options. Могут быть и другие проблемы, которые я пропустил.

Вместо этого я рекомендую вам удалить пользовательскую конфигурацию раздела загрузки и вместо этого отредактировать /boot/refind_linux.conf. (Если этот файл отсутствует, вы можете создать его с помощью сценария mkrlconf, который поставляется с rEFInd. Он может быть уже установлен и находиться на вашем пути, в зависимости от того, как вы установили rEFInd. Если нет, вы можете извлеките его из файла rEFInd .zip. Таким образом вы можете добавить дополнительные параметры командной строки ядра; однако, я не уверен в файле /boot/acpi_override в вашей конфигурации GRUB.Похоже, что это дополнительный настраиваемый файл initrd, и в этом случае вы сможете добавить его в качестве дополнительной опции командной строки ядра (initrd=/boot/acpi_override); однако, как только вы это сделаете, вам также потребуется явным образом добавить свой стандартный файл initrd (возможно, используя %v для определения номера версии ядра). Конечная конфигурация будет выглядеть примерно так:

"Boot with ACPI override" "root=UUID=febd7fdb-b56d-482d-bcdf-5b6d472fa950 ro quiet splash mem_sleep_default=deep initrd=\boot\acpi_override initrd=\boot\initrd.img-%v-generic"

Также обратите внимание на использование обратной косой черты (\) в спецификации пути для файлов initrd; это EFI, который используется для загрузки файлов initrd, а EFI использует обратную косую черту, а не прямую косую черту в стиле Linux (/), для разделения элементов каталога.

0
ответ дан 2 October 2020 в 14:49

Другие вопросы по тегам:

Похожие вопросы: