Коли мені потрібно вказати add_efi_memmap як аргумент ядра у завантажувачі UEFI / EFI?


29

Я читаю кілька підручників, як 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сторінки зарезервовані
  • Пам'ять: 7840568K / 8283384K доступно
  • 442816K зарезервовано

GRUB завантаження з add_efi_memmap і карта пам'яті розміром EFI, схоже, відрізняються:

  • 23 Лінії BIOS-e820
  • 57 Лінії пам'яті EFI
  • Зона DMA: 22сторінки зарезервовані
  • Пам'ять: 7885076K / 8283384K доступно
  • 398308K зарезервовано

EFI заглушки завантаження без add_efi_memmap :

  • 22 Лінії BIOS-e820
  • 60 Лінії пам'яті EFI
  • Зона DMA: 21сторінки зарезервовані
  • Пам'ять: 7885012K / 8283384K доступно

EFI заглушки завантаження з add_efi_memmap :

  • 22 Лінії BIOS-e820
  • 66 Лінії пам'яті EFI
  • Зона DMA: 21сторінки зарезервовані
  • Пам'ять: 7882124K / 8283384K доступно

Прочитавши додаткову інформацію - як зазначено нижче - я не можу зрозуміти, додавати 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 та / або записи пам'яті командного рядка ядра, -instead- додайте такі додаткові записи карти пам'яті EFI, якщо параметр завантаження ядра : add_efi_memmapвказано. - http://www.gossamer-threads.com/lists/linux/kernel/937817


Завантаження заморожується - якщо завантаження застрягло без повідомлення про помилку після завантаження GRUB ядра та початкового ramdisk, спробуйте видалити параметр ядра 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

Відповіді:


1

З цього приводу завантажувачі завантажувачів або Grub відновлюють карту пам’яті як e820, я думаю, це причина, через яку ви бачите різні значення між GRUB та EFI-накопичувачем.

У вихідному коді Linux є коментар, в якому йдеться про те, що EFI дозволяє "більше, ніж максимум 128 записів, які можуть вміститися в карту пам'яті e820 (застаріла нульова сторінка)." Здається, це не так у відповідності з числами, які ви опублікували, отже, я сумніваюся, що додавання add_efi_memmap є корисним ... Однак, для розбору цієї таблиці, звичайно, не завадить ...


1

Якщо ваш дистрибутив Linux успішно завантажується, не потрібно використовувати add_efi_memmap. Ця опція командного рядка ядра в наш час рідко потрібна - підтримка програмного забезпечення UEFI та Linux для ядра для них значно покращилася з епохи 2009 року.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.