Как добавить параметры загрузки в ядро с помощью bcfg из оболочки EFI?

efibootmgr создает недопустимые записи в меню загрузки EFI. Например,efibootmgr -c -d /dev/sdX -p Y -l /EFI/refind/refind_x64.efi -L "rEFInd Boot Manager" добавляет не загружаемые японские символы в меню загрузки.

С другой стороны bcfg boot add 3 fs0:EFIrefindrefind_x64.efi "rEFInd" работает просто отлично.

теперь я хотел бы загрузиться непосредственно на vmlinuz-linux вместо того, чтобы проходить через refind. Кто-нибудь знает, как передать параметры ядру ? Без разгона это : bcfg boot add 3 fs0:vmlinuz-linux "linux" но какой вариант мне нужно использовать, чтобы добавить initrd=initramfs-linux.img root=/dev/sda2 ?

спасибо

6
задан ChiseledAbs
29.01.2023 11:51 Количество просмотров материала 2533
Распечатать страницу

4 ответа

Я сталкиваюсь с той же ситуацией. Я считаю, что решение будет включать использование параметра-opt либо в строке с add, либо в качестве дополнительной команды. До сих пор, хотя у меня не было успеха выставив все параметры в кавычках. Моя следующая попытка будет создать файл с помощью edit и передать имя файла с помощью-opt.

Если вам это удастся, пожалуйста, обновите эту ветку.

Итак, в оболочке uefi я использовал edit для создания файла opt на носителе в то же место, что и ядро. В нем я поместил параметры ядра в одну строку. Затем я использовал команду bcfg boot-opt 0 FS0:\filename вам может понадобиться использовать другой номер FS, -opt номер и имя файла, чтобы соответствовать вашей конфигурации.

1
отвечен steve 2023-01-30 19:39

у меня были похожие проблемы на одной конкретной материнской плате (Supermicro), и, хотя предложение Стива использовать текстовый файл работает, есть немного больше нюансов. Я попытался документировать процесс ниже:

  1. если у вас нет bcfg доступно, сначала вам нужно получить копию EFI 2.X оболочка. Прошивка материнской платы, вероятно, имеет 1.x. The Arch wiki имеет больше деталей, но для большинство 64-разрядные современные системы Shell.efi С здесь и переименовать его shellx64.efi и поместите его непосредственно в корень системного раздела EFI. Если ваша материнская плата обеспечивает Launch EFI Shell from filesystem device, использовать его. В противном случае можно использовать встроенную оболочку для запуска обновленной оболочки. Смотрите wiki для получения дополнительной информации.

  2. после того, как вы в 2.X shell, вы хотите, чтобы убедиться, что ваш вариант загрузки существует. Вы можете перечислить варианты с bcfg boot dump -b (том -b включает пейджер, например more). Если он не существует, вам нужно добавить его, предпочтительно в начало списка. Вы можете просматривать список файловых систем с помощью map -b, искать записи, начиная с fs как fs0:, а затем использовать ls как ls fs0:\,ls fs0:\EFI\ и т. д. изучить каталоги.

    как только вы найдете путь загрузчика (и правильный fs устройство), добавьте его (как в исходном вопросе):

    bcfg boot add 3 fs0:\EFI\refind\refind_x64.efi "rEFInd"
    

    это добавляет его в качестве 4-й загрузочной записи (считая от 0, 1, 2, 3)

  3. после добавления опции загрузки (проверьте с помощью bcfg boot dump -b) необходимо добавить необязательные данные (параметры загрузки). Как кратко упомянул Стив, самый надежный способ сделать это-сохранить эти параметры в файл, а затем импортировать их с помощью bcfg -opt. Однако, насколько я могу судить, это добавляет варианты, так что вам лучше всего bcfg boot rming вариант загрузки первого и считывания его в соответствии с шагом 2. Если у вас есть чистая запись, вы можете добавить дополнительные данные. Например:

    edit fs0:\EFI\refind\options.txt
    

    откроется редактор файла. Введите параметры (в одной строке) и нажмите клавишу F2 для сохранения. Нажмите F3 для выхода. Вы также можете редактировать этот файл из ОС, но вы должны сохранить как UTF-16 (Le, little-endian). Редактор оболочки EFI делает это автоматически.

    следующий шаг, чтобы импортировать параметры:

    bcfg boot -opt 3 fs0:\EFI\refind\options.txt
    

    опять 3 указывает загрузочную запись. Это должно соответствовать добавил его как. Не запускайте эту команду несколько раз-вы должныrm и re -add запись, прежде чем вы можете изменить параметры.

  4. проверьте параметры загрузки и дополнительные данные с помощью bcfg boot dump -v -b.

1
отвечен Bob 2023-01-30 21:56

первая введенная команда верна. Параметры добавляются с помощью другой команды. Для вашего конкретного случая, это:

Shell> bcfg boot -opt 3 "initrd=\initramfs-linux.img root=/dev/sda2"
0
отвечен Andrew Nutter 2023-01-31 00:13

моя документация efibootmgr видно, что -p для указания номера раздела, но в вашем вопросе это выглядит так, как будто вы используете Y для значения. Если это не опечатка, это могло бы объяснить, почему вы получаете странные символы в меню и проблемы с загрузкой.

что касается передачи параметров, то есть переключатель -@, который ускользнул от моего внимания первые пару раз прочитал документы. Если вы укажете имя файла, он прочитает строку параметров папка.

врачи говорят, что вы можете использовать - в качестве имени файла, но когда я попытался это сделать, я не смог заставить его продолжить после ввода текста; нажатие enter или ^D казалось, не имеют никакого эффекта, в то время как ^C завершил работу программы без внесения изменений.


если вы хотите поэкспериментировать в виртуальной машине, прежде чем возиться с вашим оборудованием, может быть полезно следующее-Хотя вам нужно будет настроить пути OVMF для вашего дистрибутив:

  • установить qemu и пакет прошивки ovmf.
  • скопировать /usr/share/edk2-ovmf/OVMF_VARS.fd в текущую директорию - QEMU запишет изменения конфигурации efi в этот файл.
  • создать директорию для использования qemu в качестве виртуального VFAT (vvfat). Я буду называть его hda отныне.
  • скопируйте ядро с заглушкой EFI в hda.
  • если это ядро не имеет встроенного initrd с оболочкой и efibootmgr, найдите или создайте оно что делает, и поместите его в hda. (Универсальный initrd может работать, так как они обычно позволяют войти в аварийный режим, если они не могут найти корневой том.)
  • запустить qemu; я использую следующую команду:

    qemu-system-x86_64 -drive if=pflash,format=raw,unit=0,readonly=on,file=/usr/share/edk2-ovmf/OVMF_CODE.fd -drive if=pflash,format=raw,unit=1,readonly=off,file=OVMF_VARS.fd -enable-kvm -cpu host -m 1024 -usb -device usb-tablet -netdev user,id=mynet -device virtio-net-pci,netdev=mynet -hda fat:rw:hda -boot menu=on
    
    • после загрузки, не изменяйте hda dir извне виртуальной машины - см. предупреждение здесь.
    • Примечание -boot menu=on часть. При необходимости можно нажать ESC в то время как он загружается, и вы получите в конфигурация uefi. Оттуда вы можете загружать определенные записи или создавать/удалять/редактировать.
  • вы попадете в оболочку EFI, если она не найдет файл для загрузки.

    • оттуда, вы могли бы использовать bcfg для просмотра / редактирования записей.
    • или вы можете загрузить ядро linux:

      fs0:
      bzImage.efi initrd=\absolute\path\to\initrd arg arg arg
      
    • ...и в этот момент ядро загрузки и загрузки с initrd и аргументы. Обратите внимание, что абсолютный путь обязательно при использовании initrd-см. efi-stub.txt
    • теперь вы можете покопаться в файлах efi под /sys/firmware/ попробовать efibootmgr, etc... все без риска для вашего реального оборудования. Наслаждайтесь!
0
отвечен Mark 2023-01-31 02:30

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх