Estou lendo alguns tutoriais sobre como o EFI stub (efistub) carrega o kernel do Linux. Essas instruções geralmente usam o parâmetro de inicialização do kernel add_efi_memmap
. O hardware pretendido é Intel x64 com 8 GB de RAM. Minha configuração atual está executando o grub-efi
gerenciador de inicialização e o kernel v3.13.
Inicialização do GRUB sem o add_efi_memmap
argumento de inicialização:
23
Linhas BIOS-e820 contadas pordmesg | grep BIOS-e820: | wc -l
243
Linhas de memória EFI contadas pordmesg | grep efi:\ mem | wc -l
- Zona DMA:
24
páginas reservadas - Memória: 7840568K / 8283384K disponível
- 442816K reservados
GRUB de inicialização com add_efi_memmap
e o tamanho do mapa de memória EFI parece diferir:
23
Linhas BIOS-e82057
Linhas de memória EFI- Zona DMA:
22
páginas reservadas - Memória: 7885076K / 8283384K disponível
- 398308K reservados
Inicialização de stub EFI sem add_efi_memmap
:
22
Linhas BIOS-e82060
Linhas de memória EFI- Zona DMA:
21
páginas reservadas - Memória: 7885012K / 8283384K disponível
Inicialização de stub EFI com add_efi_memmap
:
22
Linhas BIOS-e82066
Linhas de memória EFI- Zona DMA:
21
páginas reservadas - Memória: 7882124K / 8283384K disponível
Depois de ler mais informações - conforme descrito abaixo - não consigo descobrir se devo adicionar add_efi_memmap
ou não. Faz algo extra que não parece absolutamente necessário para inicializar. 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 de 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 meu mapa de memória EFI inclui mais entradas que meu mapa E820?
Alguma documentação add_efi_memmep já foi consultada:
add_efi_memmap : inclua o mapa de memória EFI da RAM física disponível.
Se o mapa de memória EFI tiver entradas adicionais que não estão no mapa E820, você poderá incluir essas entradas no mapa de memória de kernels da RAM física disponível usando o seguinte parâmetro de linha de comando do kernel. - https://www.kernel.org/doc/Documentation/x86/x86_64/uefi.txt
Em vez de sempre adicionar entradas do mapa de memória EFI (se houver) ao mapa de memória depois de localizar inicialmente as entradas do mapa de memória E820 BIOS e / ou as entradas do memmap da linha de comando do kernel, -instead- adicione apenas essas entradas adicionais do mapa de memória EFI se a opção de inicialização do kernel :
add_efi_memmap
está especificado. - http://www.gossamer-threads.com/lists/linux/kernel/937817
Congela a inicialização - Se a inicialização travar sem nenhuma mensagem de erro após o GRUB carregar o kernel e o ramdisk inicial, tente remover o parâmetro do kernel add_efi_memmap. - https://wiki.archlinux.org/index.php/GRUB#Boot_freezes
Este patch altera o comportamento do carregador kexec quando a
add_efi_memmap
opção está presente na linha de comando do kernel atualmente em execução, para ler o mapa de memória do kernel em/proc/iomem
vez de/sys/firmware/memmap
.Nos sistemas EFI, às vezes a tabela e820 está ausente ou incompleta. Sistemas como esses usam a
add_efi_memmap
opção de adicionar entradas da tabela de memória do EFI à tabela de memória do kernel para criar uma imagem completa da memória do sistema; no entanto, o uso da opção não adiciona essas entradas à tabela usada para preencher/sys/firmware/memmap
, que deve ser uma cópia original intocada.O carregador kexec usa o mapa de memória original por padrão, o que causa problemas quando o carregador não possui uma imagem completa do sistema e carrega incorretamente o kernel ou o ramdisk em locais que não são realmente utilizáveis. Essa alteração faz com que o carregador kexec verifique a linha de comando do kernel em execução quanto à
add_efi_memmap
opção e, se a encontrar, usará o mapa modificado em vez do mapa original. - http://lists.infradead.org/pipermail/kexec/2011-April/005014.html
A solução (hack), alcançada pelos desenvolvedores do kernel do Linux em 2009 após várias partidas falsas, foi adicionar uma opção de linha de comando do kernel,
add_efi_memmap
- dizer ao kernel para examinar o mapa de memória EFI e usá-lo para corrigir várias entradas no mapa de memória do E820. - http://blog.fpmurphy.com/2012/08/uefi-memory-v-e820-memory.html