EDYCJA: Kiedy napisałem tę odpowiedź, bardzo niewiele dystrybucji dostarczono z jądrem skonfigurowanym przez EFI_STUB, więc trzeba było zbudować niestandardowy. Obecnie większość dystrybucji dostarcza odpowiednio skonfigurowane jądro i niestandardowa kompilacja nie jest już wymagana. W tym przypadku interesujące są sekcje „Konfigurowanie partycji” i „Konfigurowanie rzeczy” , „Wymagania” i „Kompilowanie jądra” można pominąć.
Nie wiem, jak Windows obsługuje UEFI, ale od strony Debiana jest to dość proste.
Skonfiguruj swoje partycje
Użyj schematu partycji GPT, a nie MBR.
Do rozruchu z partycji GPT za pomocą UEFI wymagana jest dedykowana partycja rozruchowa, zwana EFI SYSTEM PARTITION (ESP). Nie jest to obowiązkowe, ale najbardziej kompatybilnym sposobem jest użycie partycji FAT32. W większości przypadków rozmiar 200 MiB powinien być odpowiedni.
Aby zarejestrować partycję jako ESP, należy ją oznaczyć boot
flagą. W przeciwieństwie do schematów MBR, flaga rozruchowa służy tylko do wskazania ESP, a nie partycji, z których można uruchomić system.
UEFI używa struktury katalogów \EFI\<vendor>\<application>.efi
do przechowywania aplikacji UEFI. Separator katalogów jest oznaczony odwrotnym ukośnikiem , nawet w systemie Linux. może być nazwą dystrybucji, rzeczywista wartość nie ma znaczenia dla UEFI.
Aplikacje mogą być narzędziami systemowymi, takimi jak kontrolery pamięci lub powłoka UEFI. Może to być również moduł ładujący system operacyjny lub sam system operacyjny. Aplikacje te muszą być zarejestrowane w UEFI, aby można je było uruchomić podczas rozruchu.
Wymagania
Wersja jądra Linux> = 3.3 może być ładowana bezpośrednio przez UEFI. Jądro może działać jako własny moduł ładujący. Nazywa się to EFISTUB . Potrzebne są następujące konfiguracje jądra.
CONFIG_EFI = y
CONFIG_EFI_PARTITION = y
CONFIG_EFI_STUB = y
CONFIG_RELOCATABLE = y
CONFIG_FB_EFI = y
CONFIG_FRAMEBUFFER_CONSOLE = y
CONFIG_EFI_VARS = m
Jądro z tą konfiguracją nie jest jeszcze stabilne w Debianie. Możesz albo upiec własne jądro, albo użyć drzewa eksperymentalnego. W takim przypadku możesz pominąć następny akapit.
Kompilowanie jądra
(prawdopodobnie już nie jest to konieczne, patrz edycja)
Jeśli zdecydujesz się na kompilację jądra, oto krótkie instrukcje, jak to zrobić. Jeśli napotkasz problemy, dostępnych jest wiele informacji na temat kompilacji jądra.
Uzyskiwanie źródła
git clone git: //git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
Sprawdź jedną konkretną wersję
git checkout v3.6
Konfigurowanie jądra
zrobić menuconfig
Wprowadź ustawienia, które są potrzebne w systemie lub pozostaw takie, jakie są, jeśli nie masz nic do dostosowania. Spowoduje to zapisanie konfiguracji jądra do pliku .config
.
Upewnij się, że ustawienia z poprzedniego akapitu są ustawione. Warto również wybrać CONFIG_INPUT_EVBUG=n
. W przeciwnym razie twoje logi zostaną wypełnione GiB śmieci.
Budowanie jądra
INSTALL_MOD_STRIP = 1 make-kpkg --uc --us binary-arch
Pakiety są tworzone w katalogu nadrzędnym.
Instalowanie jądra
dpkg -i linux-image-3.5.0_Custom.deb linux-headers-3.5.0_Custom.deb
Budowanie initramfs
mkinitramfs -o /boot/initrd.img-3.6.0-amd64 3.6.0
3.6.0 jest wersją jądra. Domyślnie działa na nim uruchomione jądro, co nie jest dobrym wyborem, ponieważ nadal używasz starego jądra.
Konfigurowanie rzeczy
Aby móc uruchomić jądro Linuksa, należy je skopiować do ESP razem z initramfs. Biorąc pod uwagę, że ESP jest zamontowany na/boot/efi
/boot/efi/EFI/debian/vmlinuz-3.6.0.efi
/boot/efi/EFI/debian/initrd.img-3.6.0
UWAGA: Aby zapewnić kompatybilność z większością systemów, rozszerzenie efi
należy dodać do jądra.
Teraz jądro można zarejestrować w UEFI. Używamy do tego narzędzia 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 \
--Stwórz \
--gpt \
--disk / dev / sda \
- część 4 \
--label „Jądro Debiana Linux 3.6.0” \
--loader "\\ EFI \\ debian \\ vmlinuz-3.6.0" \
--write-Signature \
--append-binary-args -
Argumentem --disk
jest urządzenie, w którym znajduje się jądro, a nie ESP.
--part
jest numerem partycji, na której znajduje się jądro. --label
jest pozycją w menu rozruchowym UEFI.
Aby zobaczyć listę dostępnych wpisów, po prostu uruchom efibootmgr
bez argumentów. Składnia do usunięcia określonego wpisu
efibootmgr -b entry (hex) -B
na przykład:
efibootmgr -b 001a -B
Te instrukcje nie obsługują przypadku aktualizacji jądra. Jądro i initramfs nie są automatycznie kopiowane do ESP. Można to zrobić za pomocą krótkiego skryptu, który kopiuje jądro i initramfs do ESP i uruchamia się efibootmgr
. Skrypt ten można umieścić, /etc/kernel/postinst.d
aby był uruchamiany automatycznie po aktualizacji jądra.
Uwaga: Menedżer rozruchu, taki jak GRUB, nie jest potrzebny, sam UEFI działa jako menedżer rozruchu.
To wszystko, czego potrzebujesz od strony Linuksa, nie wiem, co trzeba zrobić, aby dodać Windows.