เมื่อใดที่ฉันต้องระบุ add_efi_memmap เป็นอาร์กิวเมนต์เคอร์เนลในการบูต UEFI / EFI


29

ฉันอ่านบทเรียนบางส่วนเกี่ยวกับวิธีการ EFI stub (efistub) โหลดเคอร์เนลลินุกซ์ add_efi_memmapคำแนะนำเหล่านี้มักจะใช้เคอร์เนลบูตพารามิเตอร์ ฮาร์ดแวร์ที่ต้องการคือ Intel x64 มี RAM 8GB การตั้งค่าปัจจุบันของฉันกำลังใช้grub-efibootloader และเคอร์เนล 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-e820
  • 57 สายหน่วยความจำ EFI
  • เขต DMA: 22หน้าที่สงวนไว้
  • หน่วยความจำ: 7885076K / 8283384K ใช้ได้
  • 398308K ลิขสิทธิ์

EFI stub boot โดยไม่มี add_efi_memmap :

  • 22 BIOS-e820
  • 60 สายหน่วยความจำ EFI
  • เขต DMA: 21หน้าที่สงวนไว้
  • หน่วยความจำ: 7885012K / 8283384K ใช้ได้

EFI stub boot ด้วย 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 ของ 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

คำตอบ:


1

Boot loader หรือ Grub สำหรับเรื่องนั้นสร้างแผนที่หน่วยความจำเช่น e820 ขึ้นมาใหม่ฉันคิดว่านี่คือเหตุผลที่คุณเห็นค่าต่าง ๆ ระหว่าง GRUB และ EFI stub loader

มีความคิดเห็นในซอร์สโค้ด Linux ซึ่งระบุว่า EFI อนุญาตให้ "มากกว่า 128 รายการสูงสุดที่สามารถพอดีกับแผนที่หน่วยความจำ e820 legacy (zeropage)" ดูเหมือนว่าจะไม่เป็นไปตามตัวเลขที่คุณโพสต์ดังนั้นฉันสงสัยว่าการเพิ่ม add_efi_memmap นั้นมีประโยชน์ ...


1

หากการแจกจ่าย Linux ของคุณสำเร็จบูท EFI STUB ไม่จำเป็นต้องใช้ add_efi_memmap ตัวเลือกบรรทัดคำสั่งเคอร์เนลนี้ไม่ค่อยมีความจำเป็นในปัจจุบัน - เฟิร์มแวร์ UEFI และการสนับสนุนเคอร์เนล Linux เดียวกันได้รับการปรับปรุงอย่างมีนัยสำคัญตั้งแต่ยุค 2009

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.