Większość dystrybucji instaluje dodatkowy moduł ładujący w systemie UEFI. Sam UEFI jest programem ładującym, oferuje menu do wyboru różnych systemów operacyjnych lub poszczególnych jąder. Ponadto ustawienia UEFI można łatwo zmienić za pomocą narzędzi przestrzeni użytkownika, takich jak efibootmgr
.
Jądra od wersji 3.3 obsługują EFI_STUB, co oznacza, że jądro można załadować bezpośrednio z UEFI. Z jakiego powodu dystrybucje decydują się na użycie dodatkowego modułu ładującego? Większość samouczków na temat Linux / UEFI koncentruje się głównie na tym, jak skonfigurować dodatkowy moduł ładujący (rEFInd, grub2, ELILO itp.) Zamiast uruchamiania Linuksa za pomocą EFI_STUB.
Jedyne, czego brakuje w dystrybucjach, to wsparcie. Ponieważ większość dystrybucji zawiera drugi moduł ładujący, jądro nie jest dodawane do menu rozruchowego UEFI ani kopiowane na partycję systemową EFI.
Trzy skrypty są wystarczające, aby wykonać całą magię. Jeden, który kopiuje initramfs do ESP. Drugi kopiuje jądro do ESP i tworzy nowy wpis w menu rozruchowym UEFI. Trzeci skrypt usuwa stare jądro i initramfs z ESP i usuwa pozycję menu rozruchowego UEFI. Umożliwia to w pełni zautomatyzowane aktualizacje / czyszczenie jądra / initramfs bez interakcji użytkownika. Korzystam z tego podejścia od ponad roku i zadziałało bezbłędnie.
Dlaczego większość dystrybucji używa grub zamiast EFI_STUB?
Spinki do mankietów:
EDYCJA: Nie mówię o całkowitym usunięciu obsługi gruba, ale aby zaoferować wybór dla tych, którzy chcą go używać z różnych powodów. Dystrybucje mogłyby dostarczyć pakiet grub-efi
dla tych, którzy chcą połączyć UEFI i Grub oraz pakiet efistub-boot
zawierający skrypty, o których wspomniałem powyżej.
źródło
Odpowiedzi:
Biorąc pod uwagę, że UEFI został zdefiniowany dopiero w 2005 r., Istnieje wiele starszych urządzeń, które nie obsługują specyfikacji. Dodanie UEFI do standardowej dystrybucji wymagałoby przetestowania dwóch ścieżek kodu zamiast jednej, a kod rozruchowy jest nie tylko bardzo wybredny, ale jest to jeden z najbardziej irytująco czasochłonnych fragmentów kodu do przetestowania.
źródło
Dystrybutorzy mają ograniczone zasoby i nie może być żadnych innych przyczyn. Może być dość prosty i bezpieczny, ale bez względu na to , co będzie wymagało więcej prac konserwacyjnych, ponieważ opcja grub musi zostać zachowana, nawet jeśli dotyczy to systemów innych niż UEFI.
Jestem pewien, że każdy ma listę funkcji i opcji, które chcieliby, aby dystrybucje przyjęły (dam ci kilka stron, lol) i bez wątpienia wiele z nich byłoby „całkowicie łatwe, bez kłopotów, szczerze mówiąc. .. ”. Jednak nie ma nieskończonej liczby osobogodzin na ich wdrożenie. W obliczu takich decyzji („Czy wkładamy pracę w tę funkcję, a niektóre inne?”) Podstawowe pytania powinny brzmieć:
Powodem, dla którego ludzie w ogóle korzystają z dystrybucji, jest to, że wszyscy podlegają ograniczeniom zasobów (w przeciwnym razie po prostu zatrudnij drużynę, kup im trochę miejsca i sprzętu, i każ im robić wszystko dokładnie tak, jak chcesz). Tak więc rzeczywistość jest taka, że dystrybucje odzwierciedlają ogólne potrzeby ich użytkowników.
To powiedziawszy, myślę, że z czasem zostanie to przyjęte jako opcja, i głosowałem za tym pytaniem.
źródło
Celowanie w bootloadery UEFI oprócz gruba skomplikowałoby kontrolę jakości i wsparcie. Dystrybucje są ukierunkowane raczej na GRUB niż na specyfikację UEFI, ponieważ GRUB jest wolnym oprogramowaniem, można go zhakować, jest bardziej elastyczny i wysokiej jakości. Nadal można uzyskać rozruch z czystego UEFI, postępując zgodnie z samouczkiem i instalując partycję UEFI na
/boot
, ponieważ jeśli to zrobisz, utrzymanie będzie na tobie.źródło
Prawdziwy problem polega na tym, że ludzie nie rozumieją, jak to działa. Na przykład w swoim pytaniu wspominasz, że trzy skrypty to wszystko, co jest konieczne, a większość odpowiedzi tutaj dotyczy wszystkich / wszelkich dodatkowych czynności konserwacyjnych, które byłyby wymagane, aby działało - ale prawda jest taka, że nie potrzebujesz tych skryptów lub jakakolwiek dodatkowa praca.
Wszystko, czego potrzebujesz, to powiązanie zamontowania ESP - lub gdziekolwiek chcesz zachować jądro -
/boot
co możesz zrobić za pomocą jednej linii/etc/fstab
. Zrób to, a wszystkie obecne skrypty aktualizacji jądra będą po prostu nadal działać.Mój `/ etc / fstab 'wygląda następująco:
Warto tu jednak wspomnieć o ustawieniach specyficznych dla producenta. UEFI wyraźnie nie nie podać interfejs do menu startowego. To jest do zgarnięcia i nie będzie spójne między maszynami. To denerwujące, ale prawdziwe.
I tak, podczas gdy moduł ładujący taki jak
grub
tylko wymaga więcej pracy, aplikacja menu - taka jak rEFInd - wyrównuje różnice i upraszcza wszystko.źródło
efobootmgr
do aktualizacji kolejności rozruchu i zmiany domyślnego jądra).\EFI\BOOT\BOOTX64.efi
i dlatego można ją nazwać. UEFI nie może (według specyfikacji) obsługiwać argumentów do jądra w pierwszej kolejności - tak więc obraz initramfs / jądro musi być w tym przypadku powiązany. ale nie wiem, co masz na myśli nazywanie wersji - myślę, że robią to tylko debianie i i tak uważam to za nieproduktywne. konwencjonalna nazwa twojego jądra tovmlinuz
. W każdym razie właściwym sposobem na to jest menedżer rozruchu, a nie moduł ładujący . Użyj aplikacji EFI, która znajduje jądro i przekazuje swoją nazwę do EFI w celu uruchomienia - tak jak robi to rEFInd.vmlinuz-4.2.0-1-amd64
Które zostawiam bez zmian, a następnie używam,efibootmgr
aby dodać to do listy startowej i ustawić jako domyślną. Widzę, że nazewnictwo jądraBOOTX64.efi
może być rozwiązaniem. Ale w jakikolwiek sposób musiałbym mieć skrypt, aby to zrobić, a ponadto nie pozwala to łatwo zachować wielu jąder, jeśli wszystkie mają takie same nazwy.Łączą UEFI i GRUB jako tymczasowe rozwiązanie implementacyjne.
Gdy wsparcie UEFI i towarzyszące mu problemy (np. Bezpieczny rozruch) zostaną rozwiązane, coraz więcej dystrybucji będzie z niego korzystać bezpośrednio. Tymczasem jest to wciąż bardzo nowe: Google Trends pokazuje raczej ograniczone przyjęcie: http://www.google.com/trends/explore?q=cannot+boot+uefi#q=uefi%2C%20%20efi%2C % 20% 20bios i cmpt = q
Inni wspominali o potencjalnych pułapkach przejścia na rozwiązanie czysto UEFI i / lub jednoczesną obsługę zarówno systemów nieużywających UEFI, jak i czystego UEFI. Jądro UEFI może działać w systemie innym niż UEFY, ale narzędzia do aktualizacji jądra muszą aktualizować albo menu GRUB LUB menu rozruchowe UEFI LUB oba itd. Itd.
W rzeczywistości chodzi o kontrolę jakości, jak wspomniano: ważne problemy z tym kodem mają duży wpływ: gdy komputer nie uruchomi nowych użytkowników, tj. Potencjalna konwersja Linuksa, porzuci go jako śmieci i wróci do czegoś „bezpiecznego”.
Ale, jak powiedziałem, gdy technologia będzie coraz częściej stosowana, stanie się standardem.
źródło
Dodatkowy kod jest niezbędny do obejścia błędów oprogramowania układowego
Gdy nie łączy łańcuchowego gruba, dystrybucja polega bardziej na oprogramowaniu układowym, aby poprawnie uruchomić. Ponieważ każde oprogramowanie będzie miało problemy, oprogramowanie układowe również jest na to podatne. Teraz dystrybucje Linuksa będą musiały napisać, aby obejść te błędy oprogramowania.
Przykład prawdziwego życia. Płyta główna Asrock H81 pro BTC P1.80 umożliwia tworzenie pozycji menu rozruchu za pomocą
efibootmgr
. Można utworzyć wiele pozycji menu rozruchu, a kolejność rozruchu można zmienić za pomocąefibootmgr --bootorder XXXX,YYYY,ZZZZ
lub tymczasową opcję następnego rozruchu można ustawić za pomocąefibootmgr --bootnext XXXX
. Obie te komendy zwracają dane wyjściowe, co daje pogląd, że kolejność rozruchu uległa zmianie lub na przykład uruchomi się następny rozruchBootNext: XXXX
. Jednak przy ponownym uruchomieniu uparte oprogramowanie wewnętrzne ignoruje nowo wybraną opcję rozruchu i restartuje się do poprzedniejBootCurrent:
wartości. Trwałej zmiany kolejności rozruchu można dokonać tylko za pomocą narzędzia do konfiguracji oprogramowania układowego. A niestała zmiana nie jest w ogóle dostępna.źródło
Myślę, że jeśli rozruch jest obsługiwany tylko przez EFI i usuniemy program ładujący, będzie to trudne zarówno dla dostawcy sprzętu, jak i twórców systemów operacyjnych. Sprzedawca HW będzie miał więcej jąder do przetestowania, podczas gdy dla firm tworzących system operacyjny będzie tak, jakby ich jądro było ładowane przez inną FW.
Co więcej, w przypadku bezpośredniego uruchamiania jądra z EFI, gdzie w stosie zmieści się bezpieczny rozruch? W bieżącym scenariuszu, gdy kontrola przejdzie do bootloadera systemu operacyjnego, bootloader sprawdza, czy jądro jest poprawnie podpisane, czy nie. W przypadku, gdy ładujemy jądro bezpośrednio z EFI, myślę, że spowoduje to bałagan tylko wtedy, gdy cały stos zostanie zakłócony. Tylko opinia z tego, co rozumiem.
źródło