Sto leggendo alcuni tutorial su come stub EFI (efistub) caricare il kernel Linux. Queste istruzioni usano spesso il parametro di avvio del kernel add_efi_memmap
. L'hardware previsto è Intel x64 con 8 GB di RAM. La mia configurazione attuale esegue grub-efi
bootloader e kernel v3.13.
GRUB di avvio , senza l' add_efi_memmap
argomento di avvio:
23
Linee BIOS-e820 contate dadmesg | grep BIOS-e820: | wc -l
243
Linee di memoria EFI contate dadmesg | grep efi:\ mem | wc -l
- Zona DMA:
24
pagine riservate - Memoria: 7840568K / 8283384K disponibile
- 442816K riservato
L' avvio di GRUB con add_efi_memmap
e la dimensione della mappa di memoria EFI sembra differire:
23
Linee BIOS-e82057
Linee di memoria EFI- Zona DMA:
22
pagine riservate - Memoria: 7885076K / 8283384K disponibile
- 398308K riservato
Avvio stub EFI senza add_efi_memmap
:
22
Linee BIOS-e82060
Linee di memoria EFI- Zona DMA:
21
pagine riservate - Memoria: 7885012K / 8283384K disponibili
Avvio stub EFI con add_efi_memmap
:
22
Linee BIOS-e82066
Linee di memoria EFI- Zona DMA:
21
pagine riservate - Memoria: 7882124K / 8283384K disponibili
Dopo aver letto ulteriori informazioni, come indicato di seguito, non riesco a capire se aggiungere add_efi_memmap
o meno. Fa qualcosa in più che non sembra assolutamente necessario per l'avvio. D'altra parte può dare per dare una visione migliore (più completa) della memoria utilizzabile.
In quali casi questo argomento di avvio add_efi_memmap deve essere utilizzato per l'avvio di stub EFI? Ciò aumenterebbe / ridurrebbe la velocità di avvio dello stub EFI e aumenterebbe o ridurrebbe la memoria libera disponibile per le applicazioni? Come (meglio) verificare se la mia mappa di memoria EFI include più voci della mia mappa E820?
Alcuni documenti add_efi_memmep già consultati:
add_efi_memmap : include la mappa di memoria EFI della RAM fisica disponibile.
Se la mappa di memoria EFI ha voci aggiuntive non presenti nella mappa E820, è possibile includere tali voci nella mappa di memoria dei kernel della RAM fisica disponibile utilizzando il seguente parametro della riga di comando del kernel. - https://www.kernel.org/doc/Documentation/x86/x86_64/uefi.txt
Invece di aggiungere sempre voci della mappa di memoria EFI (se presenti) alla mappa di memoria dopo aver trovato inizialmente le voci della mappa di memoria E820 BIOS e / o le voci memmap della riga di comando del kernel, -investe- aggiungere solo tali voci aggiuntive della mappa di memoria EFI se l'opzione di avvio del kernel :
add_efi_memmap
è specificato. - http://www.gossamer-threads.com/lists/linux/kernel/937817
Il boot si blocca - Se l'avvio si blocca senza alcun messaggio di errore dopo che GRUB ha caricato il kernel e il ramdisk iniziale, prova a rimuovere il parametro del kernel add_efi_memmap. - https://wiki.archlinux.org/index.php/GRUB#Boot_freezes
Questa patch cambia il comportamento del caricatore kexec quando l'
add_efi_memmap
opzione è presente sulla riga di comando del kernel attualmente in esecuzione, per leggere la mappa di memoria del kernel/proc/iomem
invece di/sys/firmware/memmap
.Sui sistemi EFI, a volte la tabella e820 è mancante o incompleta. Sistemi come questi usano l'
add_efi_memmap
opzione per aggiungere le voci della tabella di memoria di EFI alla tabella di memoria del kernel per creare un quadro completo della memoria del sistema; tuttavia, l'utilizzo dell'opzione non aggiunge queste voci alla tabella utilizzata per popolare/sys/firmware/memmap
, che deve essere una copia originale incontaminata.Il caricatore kexec usa la mappa di memoria incontaminata per impostazione predefinita, il che causa problemi quando il caricatore non ha un quadro completo del sistema e carica in modo errato il kernel o il ramdisk in luoghi che non sono effettivamente utilizzabili. Questa modifica fa in modo che il caricatore kexec verifichi la riga di comando del kernel in esecuzione per l'
add_efi_memmap
opzione e, se la trova, utilizzerà la mappa modificata invece della mappa originale. - http://lists.infradead.org/pipermail/kexec/2011-April/005014.html
La soluzione (hack), raggiunta dagli sviluppatori del kernel Linux nel 2009 dopo una serie di false partenze, era quella di aggiungere un'opzione della riga di comando del kernel,
add_efi_memmap
- per dire al kernel di guardare la mappa di memoria EFI e usarla per correggere varie voci nella mappa di memoria E820. - http://blog.fpmurphy.com/2012/08/uefi-memory-v-e820-memory.html