ฉันอ่านบทเรียนบางส่วนเกี่ยวกับวิธีการ EFI stub (efistub) โหลดเคอร์เนลลินุกซ์ add_efi_memmap
คำแนะนำเหล่านี้มักจะใช้เคอร์เนลบูตพารามิเตอร์ ฮาร์ดแวร์ที่ต้องการคือ Intel x64 มี RAM 8GB การตั้งค่าปัจจุบันของฉันกำลังใช้grub-efi
bootloader และเคอร์เนล v3.13
ด้วงบูตโดยไม่ต้อง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
การบูตด้วย GRUBadd_efi_memmap
และขนาดแผนที่หน่วยความจำ EFI นั้นแตกต่างกัน:
23
BIOS-e82057
สายหน่วยความจำ EFI- เขต DMA:
22
หน้าที่สงวนไว้ - หน่วยความจำ: 7885076K / 8283384K ใช้ได้
- 398308K ลิขสิทธิ์
EFI stub boot โดยไม่มี add_efi_memmap
:
22
BIOS-e82060
สายหน่วยความจำ EFI- เขต DMA:
21
หน้าที่สงวนไว้ - หน่วยความจำ: 7885012K / 8283384K ใช้ได้
EFI stub boot ด้วย add_efi_memmap
:
22
BIOS-e82066
สายหน่วยความจำ EFI- เขต DMA:
21
หน้าที่สงวนไว้ - หน่วยความจำ: 7882124K / 8283384K ใช้ได้
หลังจากอ่านข้อมูลเพิ่มเติม - ตามที่ระบุไว้ด้านล่าง - ฉันไม่สามารถทราบได้ว่าจะเพิ่มadd_efi_memmap
หรือไม่ มันทำสิ่งที่พิเศษซึ่งดูเหมือนจะไม่จำเป็นในการบูต ในทางกลับกันก็สามารถให้มุมมองที่ดีขึ้น (สมบูรณ์มากขึ้น) ของหน่วยความจำที่ใช้งานได้
อาร์กิวเมนต์การบู๊ตadd_efi_memmapนี้ควรใช้กับการบูตบูท EFI ในกรณีใด นั่นจะเป็นการเพิ่ม / ลดความเร็วการบูตของ EFI หรือไม่และเพิ่มหรือลดหน่วยความจำว่างสำหรับแอปพลิเคชัน วิธี (ดีกว่า) ตรวจสอบว่าแผนที่หน่วยความจำ EFI ของฉันมีรายการมากกว่านั้นแผนที่ E820 ของฉันหรือไม่
เอกสารบางส่วนของ add_efi_memmep ดูแล้ว:
add_efi_memmap : รวมแผนที่หน่วยความจำ EFI ของ RAM ที่มีอยู่จริง
หากแมปหน่วยความจำ EFI มีรายการเพิ่มเติมที่ไม่ได้อยู่ในแผนที่ E820 คุณสามารถรวมรายการเหล่านั้นลงในแผนที่หน่วยความจำเมล็ดของ RAM จริงที่มีอยู่โดยใช้พารามิเตอร์บรรทัดคำสั่งเคอร์เนลต่อไปนี้ - https://www.kernel.org/doc/Documentation/x86/x86_64/uefi.txt
แทนที่จะเพิ่มรายการแผนที่หน่วยความจำ EFI (ถ้ามี) ลงในแผนที่หน่วยความจำเสมอหลังจากเริ่มค้นหารายการแผนที่หน่วยความจำ BIOS E820 และ / หรือรายการบันทึกคำสั่งเคอร์เนลบรรทัดคำสั่ง - แทน - เพิ่มเฉพาะรายการแผนที่หน่วยความจำ 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 ใช้การแม็พหน่วยความจำดั้งเดิมโดยปริยายซึ่งทำให้เกิดปัญหาเมื่อตัวโหลดไม่มีรูปภาพที่สมบูรณ์ของระบบและโหลดเคอร์เนลหรือ ramdisk ในตำแหน่งที่ไม่สามารถใช้งานได้จริง การเปลี่ยนแปลงนี้ทำให้ตัวโหลด 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