Khi nào tôi cần chỉ định add_efi_memmap làm đối số kernel trong khởi động UEFI / EFI?


29

Tôi đang đọc một số hướng dẫn về cách để EFI stub (efistub) tải kernel Linux. Các hướng dẫn này thường sử dụng tham số khởi động kernel add_efi_memmap. Phần cứng dự định là Intel x64 có 8GB RAM. Thiết lập hiện tại của tôi đang chạy grub-efibootloader và kernel v3.13.

GRUB khởi động mà không cần các add_efi_memmapđối số khởi động:

  • 23Các dòng BIOS-e820 được tính bởidmesg | grep BIOS-e820: | wc -l
  • 243Các dòng bộ nhớ EFI được tính bởidmesg | grep efi:\ mem | wc -l
  • Vùng DMA: 24các trang dành riêng
  • Bộ nhớ: 7840568K / 8283384K khả dụng
  • Bảo lưu 438816K

Khởi động GRUB với add_efi_memmap và kích thước bản đồ bộ nhớ EFI dường như khác nhau:

  • 23 Dòng BIOS-e820
  • 57 Dòng bộ nhớ EFI
  • Vùng DMA: 22các trang dành riêng
  • Bộ nhớ: 7885076K / 8283384K khả dụng
  • Dành riêng 398308K

Khởi động sơ khai EFI không có add_efi_memmap :

  • 22 Dòng BIOS-e820
  • 60 Dòng bộ nhớ EFI
  • Vùng DMA: 21các trang dành riêng
  • Bộ nhớ: 7885012K / 8283384K khả dụng

Khởi động sơ khai EFI với add_efi_memmap :

  • 22 Dòng BIOS-e820
  • 66 Dòng bộ nhớ EFI
  • Vùng DMA: 21các trang dành riêng
  • Bộ nhớ: 7882124K / 8283384K khả dụng

Sau khi đọc thêm thông tin - như được nêu dưới đây - tôi không thể biết có nên thêm add_efi_memmaphay không. Nó làm một cái gì đó thêm mà dường như không thực sự cần thiết để khởi động. Mặt khác, nó có thể cung cấp cho một cái nhìn tốt hơn (đầy đủ hơn) về bộ nhớ có thể sử dụng.

Trong trường hợp nào thì nên sử dụng đối số khởi động add_efi_memmap này để khởi động sơ khai EFI? Điều đó có làm tăng / giảm tốc độ khởi động EFI và tăng hoặc giảm bộ nhớ trống, có sẵn cho các ứng dụng không? Làm cách nào để (tốt hơn) kiểm tra xem bản đồ bộ nhớ EFI của tôi có bao gồm nhiều mục nhập hơn bản đồ E820 của tôi không?


Một số tài liệu add_efi_memmep đã được tư vấn:

add_efi_memmap : bao gồm bản đồ bộ nhớ EFI của RAM vật lý khả dụng.
Nếu bản đồ bộ nhớ EFI có các mục bổ sung không có trong bản đồ E820, bạn có thể đưa các mục đó vào bản đồ bộ nhớ hạt nhân của RAM vật lý có sẵn bằng cách sử dụng tham số dòng lệnh hạt nhân sau. - https://www.kernel.org/doc/Documentation/x86/x86_64/uefi.txt


Thay vì luôn luôn thêm các mục nhập bản đồ bộ nhớ EFI (nếu có) vào bản đồ bộ nhớ sau khi ban đầu tìm thấy các mục nhập bản đồ bộ nhớ BIOS E820 và / hoặc các mục nhập bản đồ dòng lệnh kernel, -instead- chỉ thêm các mục nhập bản đồ bộ nhớ EFI bổ sung như vậy nếu tùy chọn khởi động kernel : add_efi_memmapđược chỉ định. - http://www.gossamer-threads.com/lists/linux/kernel/937817


Khởi động đóng băng - Nếu quá trình khởi động bị kẹt mà không có bất kỳ thông báo lỗi nào sau khi GRUB tải kernel và ramdisk ban đầu, hãy thử xóa tham số kernel add_efi_memmap. - https://wiki.archlinux.org/index.php/GRUB#Boot_freeze


Bản vá này thay đổi hành vi của trình tải kexec khi add_efi_memmaptùy chọn có mặt trên dòng lệnh của kernel hiện đang chạy, để đọc bản đồ bộ nhớ kernel /proc/iomemthay vì /sys/firmware/memmap.

Trên các hệ thống EFI, đôi khi bảng e820 bị thiếu hoặc không đầy đủ. Các hệ thống như thế này sử dụng add_efi_memmaptùy chọn để thêm các mục trong bảng bộ nhớ của EFI vào bảng bộ nhớ của kernel để tạo một bức tranh hoàn chỉnh về bộ nhớ của hệ thống; tuy nhiên, sử dụng tùy chọn không thêm các mục này vào bảng được sử dụng để điền /sys/firmware/memmap, có nghĩa là bản sao gốc nguyên sơ.

Trình tải kexec theo mặc định sử dụng bản đồ bộ nhớ nguyên sơ, điều này gây ra sự cố khi trình tải không có hình ảnh hoàn chỉnh của hệ thống và tải không đúng kernel hoặc ramdisk ở những nơi không thực sự sử dụng được. Thay đổi này làm cho trình tải kexec kiểm tra dòng lệnh của kernel đang chạy để biết add_efi_memmaptùy chọn và nếu tìm thấy nó, sẽ sử dụng bản đồ đã sửa đổi thay vì bản đồ gốc. - http://lists.infradead.org/pipermail/kexec/2011-April/005014.html


Giải pháp (hack), được các nhà phát triển nhân Linux đưa ra vào năm 2009 sau khi một số khởi động sai là thêm tùy chọn dòng lệnh kernel, add_efi_memmap- để bảo kernel xem bản đồ bộ nhớ EFI và sử dụng nó để sửa các mục khác nhau trong bản đồ bộ nhớ E820. - http://blog.fpmurphy.com/2012/08/uefi-memory-v-e820-memory.html

Câu trả lời:


1

Bộ tải khởi động, hoặc Grub cho vấn đề đó, xây dựng lại bản đồ bộ nhớ như e820, tôi đoán đây là lý do tại sao bạn thấy các giá trị khác nhau giữa GRUB và trình tải sơ khai EFI.

Có một nhận xét trong mã nguồn Linux nói rằng EFI cho phép "nhiều hơn 128 mục nhập tối đa có thể phù hợp với bản đồ bộ nhớ di sản e820 (zeropage).". Điều này dường như không phải là trường hợp theo những con số bạn đã đăng, do đó tôi nghi ngờ rằng việc thêm add_efi_memmap là hữu ích ... Tuy nhiên, chắc chắn cũng không đau khi phân tích bảng này ...


1

Nếu bản phân phối Linux của bạn khởi động thành công EFI STUB, không cần sử dụng add_efi_memmap. Tùy chọn dòng lệnh kernel này hiếm khi cần thiết hiện nay - phần mềm UEFI và hỗ trợ kernel Linux cho cùng đã được cải thiện đáng kể kể từ thời đại 2009.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.