РЕДАКТИРОВАТЬ: Когда я писал этот ответ, очень немногие дистрибутивы поставлялись с настроенным ядром EFI_STUB, поэтому нужно было создать собственное. В настоящее время большинство дистрибутивов поставляются с соответствующим образом настроенным ядром, и пользовательская сборка больше не требуется. В этом случае интересны разделы «Настройка разделов» и «Настройка» , «Требования» и «Сборка ядра» можно пропустить.
Я не знаю, как Windows обрабатывает UEFI, но со стороны Debian это довольно просто.
Настройте свои разделы
Используйте схему разделов GPT, а не MBR.
Для загрузки из раздела GPT с UEFI требуется выделенный загрузочный раздел, называемый EFI SYSTEM PARTITION (ESP). Это не обязательно, но наиболее совместимым способом является использование раздела FAT32. Размер 200 МБ должен подойти для большинства случаев.
Чтобы зарегистрировать раздел как ESP, он должен быть помечен boot
флагом. В отличие от схем MBR, флаг загрузки используется только для обозначения ESP, а не разделов, с которых можно загружаться.
UEFI использует структуру каталогов \EFI\<vendor>\<application>.efi
для хранения приложений UEFI. Разделитель каталогов обозначается обратной косой чертой даже в Linux. может быть именем дистрибутива, фактическое значение не относится к UEFI.
Приложениями могут быть системные утилиты, такие как средства проверки памяти или оболочка UEFI. Это также может быть загрузчик ОС или сама операционная система. Эти приложения должны быть зарегистрированы в UEFI, чтобы их можно было запускать во время загрузки.
Требования
Версия ядра Linux> = 3.3 может быть загружена непосредственно UEFI. Ядро может действовать как собственный загрузчик. Это называется EFISTUB . Следующие конфигурации ядра необходимы.
CONFIG_EFI = у
CONFIG_EFI_PARTITION = у
CONFIG_EFI_STUB = у
CONFIG_RELOCATABLE = у
CONFIG_FB_EFI = у
CONFIG_FRAMEBUFFER_CONSOLE = у
CONFIG_EFI_VARS = т
Ядро с такой конфигурацией в настоящее время еще не стабильно в Debian. Вы можете испечь свое собственное ядро или использовать ядро из экспериментального дерева, в этом случае вы можете пропустить следующий абзац.
Компиляция ядра
(вероятно, больше не нужно, см. редактирование)
Если вы решили скомпилировать ядро, здесь приведены короткие инструкции, как это сделать. Если вы столкнетесь с проблемами, есть много информации о том, как скомпилировать ядро.
Получение источника
git clone git: //git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
Проверьте одну конкретную версию
git checkout v3.6
Настройка ядра
сделать menuconfig
Сделайте необходимые настройки в вашей системе или оставьте все как есть, если вам нечего настраивать. Это записывает конфигурацию ядра в файл .config
.
Убедитесь, что настройки из предыдущего абзаца установлены. Также имеет смысл выбирать CONFIG_INPUT_EVBUG=n
. В противном случае ваши журналы будут заполнены ГиБ мусора.
Сборка ядра
INSTALL_MOD_STRIP = 1 make-kpkg --uc --us бинарная арка
Пакеты создаются в родительском каталоге.
Установка ядра
dpkg -i linux-image-3.5.0_Custom.deb linux-headers-3.5.0_Custom.deb
Построение initramfs
mkinitramfs -o /boot/initrd.img-3.6.0-amd64 3.6.0
3.6.0 - версия ядра. По умолчанию используется работающее ядро, что не является хорошим выбором, так как вы все еще работаете со старым ядром.
Настройка вещей
Чтобы иметь возможность загружать ядро Linux, оно должно быть скопировано в ESP вместе с initramfs. Учитывая, что ESP установлен на/boot/efi
/boot/efi/EFI/debian/vmlinuz-3.6.0.efi
/boot/efi/EFI/debian/initrd.img-3.6.0
ПРИМЕЧАНИЕ. Для обеспечения совместимости с большинством систем необходимо добавить расширение efi
в ядро.
Теперь ядро можно зарегистрировать в UEFI. Мы используем инструмент efibootmgr
для этого.
echo "root = UUID = 3a4287b6-b3a7-4721-da38-acc38a928278 ro rootfstype = ext4 add_efi_memmap initrd = \\ EFI \\ debian \\ initrd.img-3.6.0" |
iconv -f ascii -t ucs2 |
efibootmgr \
--Создайте \
--gpt \
--disk / dev / sda \
- часть 4 \
--label "Ядро Debian Linux 3.6.0" \
--loader "\\ EFI \\ debian \\ vmlinuz-3.6.0" \
--write-signature \
--append-binary-args -
Аргументом --disk
является устройство, в котором находится ядро, а не ESP.
--part
номер раздела, в котором находится ядро. --label
это запись в меню загрузки UEFI.
Чтобы увидеть список доступных записей, просто запустите efibootmgr
без аргументов. Синтаксис для удаления конкретной записи
efibootmgr -b запись (hex) -B
например:
efibootmgr -b 001a -B
Эти инструкции не обрабатывают случай обновления ядра. Ядро и initramfs не копируются автоматически в ESP. Это можно сделать с помощью короткого скрипта, который копирует ядро и initramfs в ESP и запускается efibootmgr
. Этот скрипт может быть помещен /etc/kernel/postinst.d
для автоматического запуска после обновления ядра.
Примечание: менеджер загрузки, такой как GRUB, не нужен, сам UEFI действует как менеджер загрузки.
Это все, что вам нужно со стороны Linux, я не знаю, что нужно для добавления Windows.