Обновить

Комментарии 19

Есть ещё один способ, о котором не рассказал автор поста: можно зажать клавишу shift и одновременно кликнуть перезагрузка в Пуск, таким образом попадаем в меню дополнительных параметров загрузки, ну и дальше выбираем загрузку uefi

Автор не знал об этом🤣 Но я проверил, и на Windows действительно работает👍Наверное, самый быстрый способ из всех)

всегда удивляло что производители прошивок за столько лет так и не смогли договориться и стандартизировать какие кнопочки тыкать чтобы попасть в bios/uefi или бутменю.. спасибо хотя бы что с приходом uefi это можно сделать одной командой из системы без попыток успеть в нужный момент нажать клавишу которую не знаешь, но и тут находятся альтернативноодарённые вроде acer у которых в некоторых моделях это не работает.

По boot меню они почти договорились. В 80% случаев работает F8.

В исключениях точно HP. У них F12.

У меня на ASRock F11

Ещё бывает Esc.

F2. На трех имеющихся машинах.

НЛО прилетело и опубликовало эту надпись здесь

Что-то не уверен. Навскидку у Lenovo это Enter или отдельная специальная кнопка, у SuperMicro F11, у Asus, кажется , ESC, ещё точно есть варианты с F8 и F12. И наверняка, это н все варианты. 🤷

А есть команда как перезагрузиться из линукса в другую операционку, в моем случае в винду?

grub-reboot <номер или имя пункта загрузки>

Это подходит, если загрузчик GRUB, у меня GPT. Отыскалась статья https://habr.com/ru/articles/341766/, может такой вариант попробую

GPT – это не загрузчик, а вариант таблицы разделов. grub2 вполне себе работает с GPT

Спасибо! Вы сняли много головной боли!

есть линкусы без systemd (до сих пор есть). какие идеи как это же сделать там ?

Смотреть исходники и использовать strace.

На самом деле, как правило, в линуксе и андроиде всё делается через системный вызов reboot, который далеко не void reboot(void).

На том же андроиде есть возможность загружаться сразу в fastboot (и не только). Делает это архитектурно-специфичный код в ядре (например, в arch/arm64), собственно и реализующий перезагрузку на данном процессоре. Как правило, логика такая, что при передаче в системный вызов хитрого дополнительного аргумента, определённое значение помещается в определённый аппаратный регистр, который сохраняет своё значение при перезагрузке. А дальше уже BIOS или BootROM и/или загрузчик смотрят в этот регистр, и если значение нужное, то заходят в BIOS, fastboot, emergency download mode, recovery mode и т.д.

Итого, дело не в systemd, а в том, что проверяет (или не проверяет) конкретный BIOS/BootROM.

системный вызов reboot

там ничего такого нет. придется смотреть systemd.

https://github.com/systemd/systemd/blob/main/src/systemctl/systemctl.c
про firmware что-то есть. идет вызов halt_parse_argv из:
https://github.com/systemd/systemd/blob/main/src/systemctl/systemctl-compat-halt.c
а там про firmware уже ничего нет.

В итоге всё приходит в функцию efi_set_reboot_to_firmware в файле src/shared/efi-loader.c, которая вызывает efi_set_variable() из файла src/basic/efivars.c. А уже она, похоже, меняет какой-то файл из каталога /sys/firmware/efi/efivars/, который соответствует флагу UEFI EFI_OS_INDICATIONS_BOOT_TO_FW_UI.

Всё равно в итоге имеем некий параметр, чьё значение не обнуляется при перезагрузке, и на что смотрит BIOS.

На системах с устаревшим BIOS прямого аналога команды systemctl нет.

Clover EFI is a boot loader developed to boot macOS (Hackintoshes), Windows and Linux in legacy or UEFI mode.
3.5 systemd-boot на системах BIOS
"Если вам нужен загрузчик для BIOS-систем, соответствующий The Boot Loader Specification, то можно использовать systemd-boot. Загрузчик Clover поддерживает загрузку в режиме BIOS и имитирует среду EFI."
5.6 systemd-boot on BIOS systems

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации