Czytam kilka samouczków, w jaki sposób EFI stub (efistub) ładuje jądro Linuksa. Te instrukcje często używają parametru rozruchu jądra add_efi_memmap
. Zamierzonym sprzętem jest Intel x64 z 8 GB pamięci RAM. W mojej bieżącej konfiguracji jest uruchomiony program grub-efi
ładujący i jądro v3.13.
GRUB bagażnika bez tej add_efi_memmap
argumentu startowego:
23
Linie BIOS-E820 zliczane przezdmesg | grep BIOS-e820: | wc -l
243
Linie pamięci EFI zliczone przezdmesg | grep efi:\ mem | wc -l
- Strefa DMA:
24
strony zastrzeżone - Pamięć: 7840568 K / 8283384 K. Dostępne
- 442816K zastrzeżone
GRUB bagażnika z add_efi_memmap
a pamięć EFI wielkość map wydaje się różnią:
23
Linie BIOS-e82057
Linie pamięci EFI- Strefa DMA:
22
strony zastrzeżone - Pamięć: 7885076K / 8283384K dostępna
- 398308K zastrzeżone
Korek rozruchowy EFI bez add_efi_memmap
:
22
Linie BIOS-e82060
Linie pamięci EFI- Strefa DMA:
21
strony zastrzeżone - Pamięć: 7885012K / 8283384K dostępna
Korek rozruchowy EFI z add_efi_memmap
:
22
Linie BIOS-e82066
Linie pamięci EFI- Strefa DMA:
21
strony zastrzeżone - Pamięć: 7882124K / 8283384K dostępna
Po przeczytaniu dodatkowych informacji - jak podkreślono poniżej - nie mogę się zdecydować, czy dodać, add_efi_memmap
czy nie. Robi coś ekstra, co nie wydaje się absolutnie konieczne do uruchomienia. Z drugiej strony może dać lepszy (pełniejszy) obraz użytecznej pamięci.
W jakich przypadkach należy użyć tego argumentu rozruchowego add_efi_memmap do uruchamiania kodu pośredniczącego EFI? Czy to zwiększy / zmniejszy szybkość rozruchu kodu EFI i zwiększy lub zmniejszy wolną pamięć dostępną dla aplikacji? Jak (lepiej) sprawdzić, czy moja mapa pamięci EFI zawiera więcej wpisów niż moja mapa E820?
Niektóre dokumenty add_efi_memmep, z którymi się już zapoznałem:
add_efi_memmap : dołącz mapę pamięci EFI dostępnej fizycznej pamięci RAM.
Jeśli mapa pamięci EFI zawiera dodatkowe wpisy, których nie ma w mapie E820, można je uwzględnić w mapie pamięci jądra dostępnej fizycznej pamięci RAM, używając następującego parametru wiersza polecenia jądra. - https://www.kernel.org/doc/Documentation/x86/x86_64/uefi.txt
Zamiast zawsze dodawać wpisy mapy pamięci EFI (jeśli są obecne) do mapy pamięci po początkowym znalezieniu pozycji mapy pamięci BIOS systemu E820 i / lub pozycji mapowania wiersza poleceń jądra, zamiast tego należy dodawać takie dodatkowe wpisy mapy pamięci EFI, jeśli opcja rozruchu jądra :
add_efi_memmap
jest określony. - http://www.gossamer-threads.com/lists/linux/kernel/937817
Boot zawiesza się - jeśli bootowanie blokuje się bez żadnego komunikatu o błędzie po załadowaniu jądra i początkowego ramdysku przez GRUB, spróbuj usunąć parametr jądra add_efi_memmap. - https://wiki.archlinux.org/index.php/GRUB#Boot_freezes
Ta poprawka zmienia zachowanie modułu ładującego kexec, gdy w
add_efi_memmap
wierszu komend jądra jest dostępna opcja odczytywania mapy pamięci jądra/proc/iomem
zamiast/sys/firmware/memmap
.W systemach EFI czasami brakuje tabeli e820 lub jest ona niekompletna. Systemy takie jak te wykorzystują
add_efi_memmap
opcję dodania pozycji tabeli pamięci EFI do tabeli pamięci jądra, aby zbudować pełny obraz pamięci systemu; jednak użycie tej opcji nie dodaje tych wpisów do tabeli używanej do zapełniania/sys/firmware/memmap
, która ma być nieskazitelną oryginalną kopią.Moduł ładujący kexec domyślnie używa nieskazitelnej mapy pamięci, co powoduje problemy, gdy moduł ładujący nie ma pełnego obrazu systemu i niepoprawnie ładuje jądro lub ramdysk w miejscach, które w rzeczywistości nie są użyteczne. Ta zmiana powoduje, że moduł ładujący kexec sprawdza wiersz poleceń uruchomionego jądra pod kątem
add_efi_memmap
opcji i jeśli go znajdzie, użyje zmodyfikowanej mapy zamiast oryginalnej mapy. - http://lists.infradead.org/pipermail/kexec/2011-April/005014.html
Rozwiązaniem (włamaniem), do którego doszli twórcy jądra systemu Linux w 2009 r. Po wielu fałszywych uruchomieniach, było dodanie opcji wiersza polecenia jądra,
add_efi_memmap
- poinformowanie jądra o spojrzeniu na mapę pamięci EFI i użycie jej do naprawy różnych wpisów w mapie pamięci E820. - http://blog.fpmurphy.com/2012/08/uefi-memory-v-e820-memory.html