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-efi
bootloader và kernel v3.13.
GRUB khởi động mà không cần các add_efi_memmap
đối số khởi động:
23
Các dòng BIOS-e820 được tính bởidmesg | grep BIOS-e820: | wc -l
243
Các dòng bộ nhớ EFI được tính bởidmesg | grep efi:\ mem | wc -l
- Vùng DMA:
24
cá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-e82057
Dòng bộ nhớ EFI- Vùng DMA:
22
cá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-e82060
Dòng bộ nhớ EFI- Vùng DMA:
21
cá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-e82066
Dòng bộ nhớ EFI- Vùng DMA:
21
cá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_memmap
hay 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_memmap
tù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/iomem
thay 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_memmap
tù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_memmap
tù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