У меня новая 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"
}
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) ]---
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"
}
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
})
Разделы ручной загрузки 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 (/
), для разделения элементов каталога.