Quando eu preciso especificar o add_efi_memmap como argumento do kernel na inicialização UEFI / EFI?

27

Eu estou lendo alguns tutoriais como EFI stub (efistub) carregar o kernel do Linux. Essas instruções geralmente usam o parâmetro de inicialização do kernel add_efi_memmap . O hardware pretendido é o Intel x64 com 8 GB de RAM. Minha configuração atual está executando grub-efi bootloader e kernel v3.13.

GRUB inicializa sem o argumento add_efi_memmap boot:

  • 23 BIOS-e820 linhas contadas por dmesg | grep BIOS-e820: | wc -l
  • 243 Linhas de memória EFI contadas por dmesg | grep efi:\ mem | wc -l
  • Zona de DMA: 24 páginas reservadas
  • Memória: 7840568K / 8283384K disponível
  • 442816K reservados
GRUB inicializa com add_efi_memmap e o tamanho do mapa de memória EFI parece diferir:

  • 23 linhas BIOS-e820
  • 57 linhas de memória EFI
  • Zona de DMA: 22 páginas reservadas
  • Memória: 7885076K / 8283384K disponível
  • 398308K reservados

Inicialização EFI de inicialização sem add_efi_memmap :

  • 22 linhas BIOS-e820
  • 60 linhas de memória EFI
  • Zona de DMA: 21 páginas reservadas
  • Memória: 7885012K / 8283384K disponível

Inicialização EFI de inicialização com add_efi_memmap :

  • 22 linhas BIOS-e820
  • 66 linhas de memória EFI
  • Zona de DMA: 21 páginas reservadas
  • Memória: 7882124K / 8283384K disponível

Depois de ler mais informações, conforme descrito abaixo, não consigo adicionar add_efi_memmap ou não. Faz algo extra que não parece absolutamente necessário para arrancar. Por outro lado, pode dar uma visão melhor (mais completa) da memória utilizável.

Em quais casos esse argumento de inicialização add_efi_memmap deve ser usado para a inicialização via stub do EFI? Isso aumentaria / diminuiria a velocidade de inicialização do stub EFI e aumentaria ou diminuiria a memória livre disponível para aplicativos? Como (melhor) verificar se o meu mapa de memória EFI inclui mais entradas do que o meu mapa E820?

Alguma documentação do add_efi_memmep já consultada:

add_efi_memmap : include EFI memory map of available physical RAM.
If the EFI memory map has additional entries not in the E820 map, you can include those entries in the kernels memory map of available physical RAM by using the following kernel command line parameter. - https://www.kernel.org/doc/Documentation/x86/x86_64/uefi.txt


Instead of always adding EFI memory map entries (if present) to the memory map after initially finding either E820 BIOS memory map entries and/or kernel command line memmap entries, -instead- only add such additional EFI memory map entries if the kernel boot option: add_efi_memmap is specified. - http://www.gossamer-threads.com/lists/linux/kernel/937817


Boot freezes - If booting gets stuck without any error message after GRUB loading the kernel and the initial ramdisk, try removing the add_efi_memmap kernel parameter. - https://wiki.archlinux.org/index.php/GRUB#Boot_freezes


This patch changes the behavior of the kexec loader when the add_efi_memmap option is present on the currently running kernel's command line, to read the kernel memory map from /proc/iomem instead of /sys/firmware/memmap.

On EFI systems, sometimes the e820 table is missing or incomplete. Systems like these use the add_efi_memmap option to add EFI's memory table entries to the kernel's memory table to build a complete picture of the system's memory; however, using the option does not add these entries to the table used to populate /sys/firmware/memmap, which is meant to be a pristine original copy.

The kexec loader uses the pristine memory map by default, which causes problems when the loader doesn't have a complete picture of the system and incorrectly loads the kernel or ramdisk in places that aren't actually usable. This change makes the kexec loader check the running kernel's command line for the add_efi_memmap option and if it finds it, will use the modified map instead of the original map. - http://lists.infradead.org/pipermail/kexec/2011-April/005014.html


The solution (hack), arrived at by the Linux kernel developers in 2009 after a number of false starts was to add a kernel command line option, add_efi_memmap – to tell the kernel to look at the EFI memory map and use it to fix up various entries in the E820 memory map. - http://blog.fpmurphy.com/2012/08/uefi-memory-v-e820-memory.html

    
por Pro Backup 13.08.2014 / 18:45

2 respostas

1

Carregadores de inicialização, ou Grub, reconstrói o mapa de memória como e820, eu acho que esta é a razão pela qual você está vendo valores diferentes entre o GRUB e o carregador de stubs EFI.

Há um comentário no código-fonte do Linux que diz que o EFI permite "mais do que o máximo de 128 entradas que podem caber no mapa de memória legado do e820 (zeropage)." Este não parece ser o caso de acordo com os números que você postou, por isso duvido que adicionar add_efi_memmap seja útil ... No entanto, certamente não faz mal analisar também essa tabela ...

    
por 11.12.2015 / 08:58
1

Se sua distribuição do Linux for bem-sucedida, o EFI STUB será inicializado, não há necessidade de usar o add_efi_memmap. Esta opção de linha de comando do kernel raramente é necessária hoje em dia - o firmware UEFI e o suporte ao kernel Linux para o mesmo melhoraram significativamente desde 2009.

    
por 11.01.2016 / 05:28