rEFInd и ядро ​​Linux EFISTUB, загружающееся на оборудование Apple, как это реализовать?

Хорошо, теперь следует несколько более сложная тема. Я хочу спросить, как проще всего реализовать чистую загрузку ядра EFISTUB Linux с помощью диспетчера загрузки rEFInd?

Самым лучшим методом будет дистрибутив Linux, который изначально включает параметр установки для EFISTUB через rEFInd . К сожалению, этого не существует. Даже установщик Manjaro Linux, поддерживающий rEFInd, использует для загрузки ядра Linux файл grubx64.efi (который загружается с помощью rEFInd). В этом действительно нет большого смысла. (По сути, это абсолютно бессмысленно.)

Во многих случаях встроенная загрузка EFI через GRUB отлично работает и на оборудовании Apple. Однако бывают ситуации, когда это невозможно . Я имею в виду, в частности, все модели Apple, которые не открывают видео BIOS постоянно в собственном режиме EFI. Например, это верно для всех моделей, не основанных на MXM (более ранних и поздних), которые не содержат графического процессора Intel, но имеют отдельный чип графического процессора. На таком оборудовании Apple видеобиос встроен в основную прошивку EFI, а не в отдельный флеш-чип (как в видеокартах MXM GPU). Хотя информация vBIOS всегда присутствует и доступна в устаревшем режиме эмуляции CSM BIOS (он же загрузочный лагерь Apple), она НЕ находится в собственном EFI.Таким образом, когда Linux загружается в EFI через GRUB, ядро ​​не может получить информацию о vBIOS и не может продолжить работу с KMS (настройка режима ядра). В системах на базе Radeon GPU это приводит к * Ошибка * Нет поддержки UMS в модуле Radeon! сообщение. Источник: Проблемы Linux на iMac11,2

Подтвержденный (неполный) список моделей Apple, затронутых «vBIOS, не представленной в EFI»:

  • iMac4,1 и iMac5,1 (Radeon X1600)
  • Macmini4 , 1 (GeForce 320M)
  • iMac11,2 (Radeon HD 4670)

Решением этой проблемы является загрузка «чистого» ядра Linux непосредственно из EFI через встроенную функцию EFISTUB. Это позволяет ядру Linux получить необходимую информацию vBIOS и правильно инициализировать настройку режима ядра.

На данный момент я планирую следующие шаги:

  • Подготовить желаемую схему разбиения на разделы в Mac OS. В моем случае это будет: sda1 (EFI ESP), sda2 (Macintosh HD), sda3 (Apple Recovery HD), sda4 (Linux HD) Обратите внимание, что раздел восстановления не отображается в дисковой утилите Apple.

  • Установите Ubuntu через эмуляцию CSM BIOS (с MBR) в раздел sda4 . (в этом примере не используется дополнительная загрузка, свопинг или раздел данных!)

После этих пунктов эта тема становится несколько более сложной из-за специфических ограничений Apple EFI. В обычной среде UEFI шаги, описанные здесь Как загрузить, загрузить ядро ​​с помощью загрузчика EFI-заглушки (efistub)? (См. ВТОРОЙ ответ) позволит перейти на загрузку ядра EFISTUB.

Однако в системах на основе прошивки Apple EFI необходимы некоторые модификации. Еще одним ограничением является то, что Linux работает на первом этапе в режиме CSM BIOS . Как следствие, шаг «Добавить загрузочную запись» (с помощью efibootmgr)не может быть применен. Это необходимо сделать позже через EFI Shell (вне Linux).

  1. Когда Ubuntu будет полностью установлен, смонтируйте раздел efi esp в / boot / esp . (Имейте в виду, что при обычной загрузке EFI установка Ubuntu использует точку монтирования в / boot / efi . Поэтому следующие команды должны быть скорректированы, если точка монтирования отличается.) Поскольку Ubuntu в нашем случае был установлен через CSM BIOS при эмуляции каталог ubuntu отсутствует в ESP. Сначала его нужно создать:

     mkdir / boot / esp / EFI / ubuntu
    
  2. Создайте новый файл sudo nano /etc/kernel/postinst.d/zz-update-efistub со следующим содержимым:

     #! / Bin / sh
    rm / загрузка / esp / EFI / ubuntu / *
    cp / vmlinuz /vmlinuz.efi
    cp / vmlinuz * /initrd.img / загрузка / esp / EFI / ubuntu /
    rm /boot/esp/EFI/ubuntu/vmlinuz.old
    

    Это называется крючком. Он синхронизирует файлы ядра ESP с файлами в корневом разделе. Сделайте его исполняемым с помощью:

     sudo chmod + x /etc/kernel/postinst.d/zz-update-efistub
    судо /etc/kernel/postinst.d/zz-update-efistub
    

    Загрузчик ядра vmlinuz.efi необходим в более старых версиях прошивки Apple EFI. На них обычный файл vmlinuz не распознается как загрузочный.

  3. Как упоминалось, загрузочная запись не может быть установлена, потому что Linux не находится в режиме UEFI. Это должно быть сделано в последнюю очередь для EFI Shell . Однако следующую команду можно использовать позже для настройки загрузочной записи, когда Linux работает в собственном EFI.

     sudo efibootmgr -c -d / dev / sda -p 1 -L "Ubuntu (efistub)" -l /EFI/ubuntu/vmlinuz.efi -u "root = / dev / sda4 rw initrd = / EFI / ubuntu /initrd.img тихий всплеск "
    

    Синтаксис правильный для этого примера здесь. В противном случае аргументы -d и -p должны быть изменены в соответствии с используемой структурой разделов. EFI ESP - это / dev / sda1 , а раздел root = - sda4 .

Следующие шаги требуют, чтобы Apple Защита целостности системы (SIP) была отключена. Эта функция является обязательной, начиная с Mac OS 10.11 (и выше). Это можно легко сделать на уровне прошивки EFI с помощью загрузочного компакт-диска rEFInd. После этого:

  • Загрузитесь в Mac OS и установите инструмент GPT fdisk. http://www.rodsbooks.com/gdisk/ Запустите его в Терминале как root sudo gdisk / dev / disk0 и преобразуйте гибридную схему MBR GPT в стандартную защитную схему GPT. Полезную информацию можно найти здесь: https://discussions.apple.com/thread/6095828

  • Загрузите и установите rEFInd (загрузите новейший файл pkg с веб-сайта). Откройте терминал и установите rEFInd в EFI ESP. Руководство можно найти здесь: Установка rEFInd в Mac OS Следует отметить, что rEFInd должен быть установлен после Linux. В противном случае драйвер rEFInd ext4fs (и поддержка Linux) не будет установлен. В качестве альтернативы также можно пропустить этот шаг и загрузить rEFInd с компакт-диска.

Наконец, перезагрузите только что установленный менеджер загрузки rEFInd и запустите оболочку EFI .В качестве последнего шага необходимо добавить загрузочную запись. В этом примере команда будет выглядеть так:

vmlinuz.efi root=/dev/sda4 ro initrd=\EFI\ubuntu\initrd.img

Это приводит к конфигурации, в которой две vmlinuz.efi опции загрузки существуют в rEFInd. Первый расположен в разделе esp sda1 и может быть загружен непосредственно из стандартного загрузчика EFI от Apple. Другой находится в корневом разделе sda4 (или в его загрузочной папке ). Второй vmlinuz.efi можно загрузить из rEFInd, но не из стандартного загрузчика Apple. И наоборот, похоже, что rEFInd не может загрузить первый файл vmlinuz.efi без дополнительной информации о корневом разделе. (Процесс загрузки зависнет и отобразится оболочка BusyBox.)

Ну, как упоминалось в начале, иногда необходимо запускать голое ядро ​​Linux непосредственно из rEFInd, чтобы избежать таких серьезных проблем, как проблема "vBIOS не отображается в EFI". В этом случае ядро ​​также должно иметь расширение efi. Это требует ручной настройки, потому что имя ядра меняется с каждым обновлением ядра. Синтаксис может выглядеть так:

sudo cp /boot/vmlinuz-5.4.0-65-generic /boot/vmlinuz-5.4.0-65-generic.efi

В некоторых ситуациях может потребоваться удалить ранее созданный файл vmlinuz.efi . Но я рекомендую сначала попробовать, не удаляя.

sudo rm /boot/vmlinuz.efi

Наконец, если все работает должным образом, раздел esp можно автоматически смонтировать в fstab с помощью следующей команды. (Это необходимо для автоматического обновления файлов загрузчика ядра.)

/dev/sda1   /boot/esp   vfat   rw,auto,user,uid=1000,gid=1000,utf8   0   0

или

/dev/sda1   /boot/efi   vfat   rw,auto,user,uid=1000,gid=1000,utf8   0   0

Все предложения по дальнейшим улучшениям приветствуются! ; -)

Картинки: enter image description here

enter image description here

1
задан 6 February 2021 в 20:46

0 ответов

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

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