Я читаю некоторые уроки, как заглушки EFI (efistub) загружать ядро Linux. В этих инструкциях часто используется параметр загрузки ядра add_efi_memmap
. Предполагаемое оборудование - Intel x64 с 8 ГБ оперативной памяти. Моя текущая установка работает под управлением grub-efi
загрузчика и ядра v3.13.
GRUB загрузки без в add_efi_memmap
параметре загрузки:
23
Строки BIOS-e820 подсчитываютсяdmesg | grep BIOS-e820: | wc -l
243
Строки памяти EFI подсчитываютсяdmesg | grep efi:\ mem | wc -l
- Зона DMA:
24
страницы защищены - Память: 7840568К / 8283384К доступно
- 442816K зарезервировано
GRUB загружается с add_efi_memmap
и размер карты памяти EFI, кажется, отличается:
23
Линии BIOS-e82057
Линии памяти EFI- Зона DMA:
22
страницы защищены - Память: 7885076K / 8283384K доступно
- 398308K защищены
EFI заглушка загрузки без add_efi_memmap
:
22
Линии BIOS-e82060
Линии памяти EFI- Зона DMA:
21
страницы защищены - Память: 7885012K / 8283384K доступно
EFI заглушки загрузки с add_efi_memmap
:
22
Линии BIOS-e82066
Линии памяти EFI- Зона DMA:
21
страницы защищены - Память: 7882124К / 8283384К доступно
После прочтения дополнительной информации - как указано ниже - я не могу понять, добавлять ли add_efi_memmap
или нет. Он делает что-то дополнительное, что не кажется абсолютно необходимым для загрузки. С другой стороны, это может дать лучшее (более полное) представление о полезной памяти.
В каких случаях этот загрузочный аргумент add_efi_memmap должен использоваться для загрузки заглушки EFI? Будет ли это увеличивать / уменьшать скорость загрузки заглушки EFI, а также увеличивать или уменьшать объем свободной памяти, доступной для приложений? Как (лучше) проверить, содержит ли моя карта памяти EFI больше записей, чем моя карта E820?
Некоторая документация add_efi_memmep уже рассмотрена:
add_efi_memmap : включает карту памяти EFI доступной физической памяти.
Если в карте памяти EFI есть дополнительные записи, которых нет в карте E820, вы можете включить эти записи в карту памяти ядра доступной физической ОЗУ, используя следующий параметр командной строки ядра. - https://www.kernel.org/doc/Documentation/x86/x86_64/uefi.txt
Вместо того, чтобы всегда добавлять записи карты памяти EFI (если они есть) в карту памяти после первоначального поиска записей карты памяти BIOS E820 и / или записей memmap командной строки ядра, -instead- добавляйте только такие дополнительные записи карты памяти EFI, если опция загрузки ядра :
add_efi_memmap
указано. - http://www.gossamer-threads.com/lists/linux/kernel/937817
Загрузка зависает - если загрузка застревает без каких-либо сообщений об ошибках после загрузки ядра GRUB и начального виртуального диска, попробуйте удалить параметр ядра add_efi_memmap. - https://wiki.archlinux.org/index.php/GRUB#Boot_freezes
Этот патч изменяет поведение загрузчика kexec, когда
add_efi_memmap
опция присутствует в командной строке запущенного в данный момент ядра, чтобы/proc/iomem
вместо карты считывать карту памяти ядра/sys/firmware/memmap
.В системах EFI иногда таблица e820 отсутствует или неполна. Подобные системы используют
add_efi_memmap
опцию добавления записей таблицы памяти EFI в таблицу памяти ядра, чтобы построить полную картину памяти системы; однако использование этой опции не добавляет эти записи в таблицу, используемую для заполнения/sys/firmware/memmap
, которая должна быть первичной оригинальной копией.Загрузчик kexec по умолчанию использует нетронутую карту памяти, что вызывает проблемы, когда загрузчик не имеет полной картины системы и неправильно загружает ядро или виртуальный диск в местах, которые на самом деле не используются. Это изменение заставляет загрузчик kexec проверять наличие параметра в командной строке работающего ядра
add_efi_memmap
и, если он его находит, будет использовать измененную карту вместо исходной карты. - http://lists.infradead.org/pipermail/kexec/2011-April/005014.html
Решение (взлом), к которому разработчики ядра Linux пришли в 2009 году после нескольких неудачных попыток, заключалось в добавлении параметра командной строки ядра
add_efi_memmap
- чтобы ядро посмотрело на карту памяти EFI и использовало ее для исправления различных записей. в карте памяти E820. - http://blog.fpmurphy.com/2012/08/uefi-memory-v-e820-memory.html