การแก้ไข uefi จาก windows 7 ทำอย่างไรจะไม่ทำ คุณสมบัติ UEFI ที่เป็นประโยชน์

  • บทช่วยสอน

ฉันสัญญาไว้มากที่สุด คำแนะนำฉบับย่อ" นี่คือ:

  1. สร้างตารางพาร์ติชัน GPT บนดิสก์
  2. สร้างพาร์ติชัน FAT32 ขนาดสองสามร้อยเมกะไบต์
  3. ดาวน์โหลด UEFI bootloader ใด ๆ จากอินเทอร์เน็ต
    (เราต้องการตัวโหลดบูตเอง มันเป็นไฟล์ไบนารีไฟล์เดียว!)
  4. เปลี่ยนชื่อและวางไฟล์นี้บนพาร์ติชันที่สร้างขึ้นที่ /EFI/Boot/bootx64.efi
  5. เราสร้างการกำหนดค่าข้อความโดยวางไว้ในตำแหน่งที่ bootloader คาดว่าจะเห็น
    (การกำหนดค่าและตำแหน่งของการกำหนดค่าขึ้นอยู่กับการใช้งานเฉพาะของ bootloader ข้อมูลนี้มีอยู่บนอินเทอร์เน็ต)
  6. หลังจากรีบูตเราจะเห็นเมนู bootloader
    (หากติดตั้ง Windows 8 หรือ 10 บนดิสก์ คำแนะนำนี้มักจะลดลงเหลือจุดที่ 3 - 5)

TL; DR คุณไม่จำเป็นต้องระบุเส้นทางไปยัง bootloader ในบันทึกการบูต UEFI ใหม่ - คุณต้องวางไฟล์ bootloader ไปตาม "เส้นทางเริ่มต้น" มาตรฐานโดยที่ UEFI จะค้นหามันและแทนที่จะเป็น bootloader เมนู UEFIใช้เมนู bootloader ซึ่งกำหนดค่าได้ง่ายและปลอดภัยกว่ามาก

อะไรไม่ควรทำ

จริงๆ แล้วมีหลายวิธีในการกำหนดค่าการบูต UEFI ฉันจะเริ่มต้นด้วยการอธิบายตัวเลือกอื่น ๆ เพื่อให้ชัดเจนว่าจะไม่ทำอย่างไร (และทำไม) หากคุณมาเพื่อขอคำแนะนำ ให้เลื่อนลงไปด้านล่างสุด

ไม่จำเป็นต้องเข้าไปใน NVRAM และสัมผัส efivars

ขั้นตอนที่ "ยอดนิยม" ที่สุดในการติดตั้งบูตโหลดเดอร์เข้าสู่ระบบมีดังนี้: ตัวติดตั้งระบบปฏิบัติการสร้างขึ้น ส่วนพิเศษเป็นโครงสร้างไดเร็กทอรีและวางไฟล์ bootloader หลังจากนั้นการใช้ยูทิลิตี้พิเศษ (efibootmgr ใน Linux, bcdedit ใน Windows) จะโต้ตอบกับเฟิร์มแวร์ของชิป UEFI โดยเพิ่มบันทึกการบูตเข้าไป รายการนี้ระบุเส้นทางไปยังไฟล์ bootloader (เริ่มจาก root ระบบไฟล์) และพารามิเตอร์หากจำเป็น หลังจากนั้น ตัวเลือกในการโหลด OS จะปรากฏในเมนูการบู๊ตของคอมพิวเตอร์ สำหรับ Linux สามารถทำได้โดยไม่ต้องใช้โปรแกรมโหลดบูตเลย ใน รายการบูตเส้นทางไปยังเคอร์เนลโดยตรงจะถูกระบุพร้อมกับพารามิเตอร์ทั้งหมด เคอร์เนลจะต้องได้รับการคอมไพล์ด้วยตัวเลือก EFISTUB (ซึ่งเป็นมาตรฐานสำหรับการแจกแจงส่วนใหญ่มานานแล้ว) ซึ่งในกรณีนี้จะมีส่วนหัว "ปฏิบัติการ EFI" ซึ่งทำให้เฟิร์มแวร์สามารถทำงานได้โดยไม่ต้องใช้บูตโหลดเดอร์ภายนอก


เมื่อระบบเริ่มทำงาน เมื่อผู้ใช้เลือกรายการบูตที่ต้องการ เฟิร์มแวร์ UEFIขั้นแรก ให้ค้นหาพาร์ติชัน EFI พิเศษบนดิสก์ที่ลงทะเบียนไว้ในรายการนี้ เข้าถึงระบบไฟล์บนพาร์ติชันนี้ (ต้องใช้ FAT หรือ FAT32) และเรียกใช้โปรแกรมโหลดบูต bootloader อ่านการกำหนดค่าจากไฟล์การตั้งค่าและโหลดระบบปฏิบัติการหรือจัดเตรียมให้ เมนูบูต- ไม่สังเกตเห็นอะไรเลย? ใช่ เรามีเมนูการบู๊ตสองเมนู เมนูหนึ่งอยู่ที่ระดับเฟิร์มแวร์ชิป UEFI และอีกเมนูหนึ่งอยู่ที่ระดับบูตโหลดเดอร์ ในความเป็นจริงผู้ใช้อาจไม่ได้ตระหนักถึงการมีอยู่ของรายการที่สอง - หากมีเพียงรายการเดียวในเมนู ตัวโหลดบูต Windowsเริ่มโหลดโดยไม่ต้องถามคำถามใด ๆ คุณสามารถเห็นหน้าจอด้วยเมนูนี้หากใส่อันที่สอง สำเนาของ Windowsหรือเพียงแค่ติดตั้งใหม่คดเคี้ยว


โดยทั่วไป ในการจัดการบันทึกการบูต คู่มือบนอินเทอร์เน็ตแนะนำให้โต้ตอบกับเฟิร์มแวร์ UEFI มีตัวเลือกหลักมากถึงห้าตัวเลือกในการทำเช่นนี้: efibootmgr สำหรับ Linux, bcdedit บน Windows, ซอฟต์แวร์บางประเภทบน Mac, คำสั่ง bcfg ของยูทิลิตี้เชลล์ uefi (ทำงานจากภายใต้ UEFI, "บนโลหะเปลือย" และไม่มี ระบบปฏิบัติการเนื่องจากรวบรวมในรูปแบบพิเศษนั้น) และสำหรับเฟิร์มแวร์คุณภาพสูงโดยเฉพาะ - หมายถึงกราฟิก UEFI (พูด ภาษายอดนิยม, "วี การตั้งค่าไบออส").


สำหรับ "หนังสือหลายเล่ม" ทั้งหมดที่เขียนไว้ข้างต้น คุณอาจพลาดแนวคิดนี้ไปได้ง่ายๆ: ผู้ใช้จะถูกบังคับให้เขียนหน่วยความจำแฟลชใหม่เพื่อเปลี่ยนการตั้งค่าของส่วนซอฟต์แวร์ (เช่น เพิ่มพารามิเตอร์การเริ่มต้นระบบปฏิบัติการ) ชิปบนกระดาน มีข้อผิดพลาดที่นี่หรือไม่? โอ้ใช่! บางครั้ง Windows ก็สามารถสร้างอิฐจากแล็ปท็อปและ Linux ได้เช่นกันและในรูปแบบต่างๆ คุณภาพของเฟิร์มแวร์มักจะไม่เป็นที่ต้องการมากนัก - มาตรฐาน UEFI นั้นมีการใช้งานที่คดโกงหรือไม่ได้ใช้งานเลย ตามตรรกะแล้ว เฟิร์มแวร์จะต้องรอดพ้นจากการลบตัวแปร efivars ทั้งหมดโดยสมบูรณ์โดยไม่มีผลกระทบใดๆ ไม่จัดเก็บข้อมูลสำคัญไว้ในตัวแปรเหล่านั้น และกู้คืนค่าเริ่มต้นอย่างอิสระ - เพียงเพราะผู้ใช้สามารถเข้าถึงตัวแปรเหล่านั้นและโอกาสที่จะเป็นเช่นนั้น การกำจัดที่สมบูรณ์ห่างไกลจากศูนย์ ในกระบวนการทดลองฉันเอง "ปิดกั้น" Lenovo ของฉันซ้ำแล้วซ้ำเล่า (โชคดีที่พลิกกลับได้) - รายการทั้งหมดหายไปจากเมนูบู๊ตรวมถึงตัวเลือก "ไปที่การตั้งค่า"


การทำงานกับบันทึกการบูต UEFI นั้นไม่ใช่เรื่องง่ายเช่นกัน ตัวอย่างเช่น ยูทิลิตี efibootmgr ไม่มีตัวเลือก "แก้ไข" รายการที่มีอยู่" หากคุณต้องการเปลี่ยนพารามิเตอร์เคอร์เนลเพียงเล็กน้อย คุณต้องลบรายการทั้งหมดและเพิ่มอีกครั้ง ซึ่งได้เปลี่ยนแปลงไปแล้ว ในกรณีนี้ บรรทัด ประกอบด้วยดับเบิ้ลและ คำพูดเดียวเช่นเดียวกับการส่งต่อและแบ็กสแลชตามลำดับที่ไม่ชัดเจนนัก ในที่สุดเมื่อฉันใช้เวทย์มนตร์นี้ได้ ฉันก็บันทึกมันไว้ในรูปแบบของสคริปต์ทุบตี ซึ่งยังคงอยู่ในระบบไฟล์รูทของฉัน:


efibootmgr -c -L "Archlinux (ดีบัก)" -l "\EFI\archlinux\vmlinuz-linux" -u "root=/dev/mapper/vg1-lvroot rw initrd=\EFI\archlinux\initramfs-linux.img systemd .log_level=debug systemd.log_target=kmsg log_buf_len=1M การบังคับใช้=0"

ไม่จำเป็นต้องใช้ด้วง

นี่คือมาสโตดอนที่น่ารังเกียจ 90% ของฟังก์ชันการทำงานมีไว้สำหรับไดรฟ์ MBR ในการกำหนดค่า คุณต้องแก้ไขไฟล์จำนวนหนึ่ง จากนั้นรันคำสั่งการสร้างการกำหนดค่า ผลลัพธ์ที่ได้คือกระดาษแผ่นใหญ่ที่คนปกติไม่สามารถเข้าใจได้ มันมีไฟล์ปฏิบัติการมากมาย มันถูกกำหนดโดยคำสั่งที่คุณไม่สามารถเอาออกจากหัวได้ - คุณต้องดูเอกสารประกอบอย่างแน่นอน


ติดตั้งด้วง --target=x86_64-efi --efi-directory=esp_mount --bootloader-id=grub

สำหรับการเปรียบเทียบ UEFI-bootloader ที่ง่ายที่สุดซึ่งเป็นส่วนหนึ่งของแพ็คเกจ systemd จะถูกติดตั้งด้วยคำสั่ง


ติดตั้ง bootctl --path=/boot

คำสั่งนี้ทำหน้าที่สองอย่างอย่างแน่นอน: คัดลอก ไฟล์ปฏิบัติการ bootloader ไปยังพาร์ติชัน EFI และเพิ่มรายการบูตลงในเฟิร์มแวร์ และการกำหนดค่านั้นต้องใช้เจ็ดบรรทัดพอดี

"The Brief Guide" - รายละเอียดเพิ่มเติมเล็กน้อย

เมนูการบูตจะต้องใช้งานในระดับ bootloader- การแก้ไขการกำหนดค่าข้อความนั้นง่ายและปลอดภัยยิ่งขึ้น


เราไม่ต้องการบันทึกการบูต - ความจริงก็คือเมื่อตั้งค่าในการตั้งค่า บูตไบออสจากดิสก์เฟิร์มแวร์ UEFI จะค้นหาพาร์ติชัน EFI บนนั้นก่อนแล้วจึงพยายามเรียกใช้งานไฟล์ตามที่เข้มงวด ที่อยู่คงที่บนพาร์ติชั่นนี้: /EFI/Boot/BOOTX64.EFI


"พาร์ติชัน EFI" คืออะไร ตามทฤษฎีแล้ว ควรเป็นแบบพิเศษ "ระบบ EFI" (ef00) ในทางปฏิบัติ พาร์ติชันแรกบนดิสก์ GPT ที่ฟอร์แมตเป็น FAT32 และมีพื้นที่เพียงพอนั้นเหมาะสมเพื่อวาง bootloader และไฟล์ที่รองรับ (ถ้ามี)


จุดที่ 3: "ดาวน์โหลด UEFI bootloader ใด ๆ จากอินเทอร์เน็ต"- มันหมายความว่าอะไร? bootloader เป็นเพียงไฟล์ปฏิบัติการในรูปแบบเฉพาะซึ่ง รวมอยู่ด้วยกำหนดค่า เช่น หากคุณมีอยู่ในมือ แพ็คเกจที่ติดตั้งด้วย systemd - ไฟล์ bootloader สามารถพบได้ที่ /usr/lib/systemd/boot/efi/systemd-bootx64.efi เปลี่ยนชื่อเป็น bootx64.efi และคัดลอกไปที่ /EFI/Boot/ บนพาร์ติชัน EFI ไม่มี systemd อยู่ในมือเหรอ? ดาวน์โหลดไฟล์เก็บถาวรจากเว็บไซต์ Archlinux หรือจากที่เก็บ Ubuntu หรือเดเบียน คุณมีระบบ Windows อยู่ในมือหรือไม่? นำ bootloader ของ Windows ไปจากนั้นก็จะใช้งานได้)) หากคุณสามารถตั้งค่าได้ ฉันยังไม่ได้ลองเลย


จุดที่ 4: "ตั้งค่าคอนฟิก"- ชอบ โปรแกรมปกติเมื่อ bootloader เริ่มทำงาน คาดว่าจะพบไฟล์การกำหนดค่าในบางเส้นทาง ข้อมูลนี้มักจะหาได้ง่ายบนอินเทอร์เน็ต สำหรับบูตเดอร์ systemd-boot เราจำเป็นต้องสร้างไดเร็กทอรี "loader" ในรูทของพาร์ติชัน EFI และในไฟล์ "loader.conf" ที่มีสามบรรทัด (ฉันจะให้เอง):


ค่าเริ่มต้นของ Archlinux หมดเวลา 10 ตัวแก้ไข 1

พารามิเตอร์ตัวแก้ไขมีหน้าที่รับผิดชอบในการแก้ไขรายการเมนูการบู๊ตก่อนที่จะเริ่ม


ถัดจาก loader.conf คุณต้องสร้างไดเรกทอรีรายการ - ไฟล์หนึ่งในนั้นจะรับผิดชอบรายการบูตรายการเดียวในเมนูการบูต ฉันมีไฟล์ arch.conf หนึ่งไฟล์ซึ่งมีเนื้อหาดังต่อไปนี้:


ชื่อ Arch Linux linux /efi/archlinux/vmlinuz-linux initrd /efi/archlinux/initramfs-linux.img ตัวเลือก root=/dev/mapper/vg1-lvroot rw initrd=\EFI\archlinux\intel-ucode.img

ฉันไม่ได้พูดถึงมัน แต่มันค่อนข้างชัดเจน - เคอร์เนลและ initramfs ต้องอยู่ในระบบไฟล์เดียวกันกับ bootloader นั่นคือบนพาร์ติชัน EFI เส้นทางไปยังสิ่งเหล่านั้นในการกำหนดค่าจะนับจากรากของระบบไฟล์นี้

บูตโหลดเดอร์อื่นๆ

systemd-boot นั้นง่ายมากและมีเมนูขาวดำที่ดูเรียบง่าย มีตัวเลือกที่สวยงามกว่านี้ถ้าวิญญาณขอความงาม


rEFind เป็นตัวดาวน์โหลดที่สวยงามมาก สามารถพบได้ที่นี่เป็นแพ็คเกจ deb ฉันใช้มันบนแล็ปท็อปของฉัน สามารถสร้างเมนูการบู๊ตได้โดยอัตโนมัติ โดยไม่ต้องตั้งค่าใดๆ เพียงแค่สแกนไฟล์

bootloader เพิ่มแท็ก

  • การเขียนโปรแกรมระบบ
    • บทช่วยสอน

    ซ่อนอยู่เบื้องหลัง "ความปลอดภัย" และ "การป้องกัน" กึ่งตำนาน ผู้ใช้ที่เรียบง่ายจากบูทคิท” ผู้ผลิต UEFI กำลังขันสกรูให้แน่นมากขึ้นเรื่อยๆ กับผลิตภัณฑ์รุ่นใหม่แต่ละรุ่น ในขณะเดียวกัน การสนับสนุนสำหรับรุ่นก่อนๆ ก็หายไปอย่างรวดเร็ว และผู้ใช้ก็ไม่มีทางเลือกอื่นนอกจากรับการสนับสนุนแบบเดียวกันนี้ไปไว้ในมือของพวกเขาเอง แน่นอนว่าหากไม่มีซอร์สโค้ดการเปลี่ยนแปลงใด ๆ เป็นเรื่องยากมาก แต่ถึงแม้จะไม่มีซอร์สโค้ดคุณก็ทำอะไรได้มากมาย
    ในเรื่องเกี่ยวกับ UEFI ฉันวางแผนที่จะอธิบายต่างๆ การปรับเปลี่ยนที่เป็นประโยชน์ซึ่งช่วยในการเอาชนะข้อจำกัดบางประการที่ผู้ผลิตกำหนดไว้ แต่แล้วพวกเขาก็ไม่สามารถแก้ไขได้ แต่ตอนนี้ถึงเวลาแล้ว
    ในส่วนแรกของบทความนี้ ฉันจะอธิบายการทำงานกับเครื่องมือที่ฉันเขียนเพื่อแก้ไขรูปภาพ UEFI และส่วนที่สองจะเน้นไปที่การแก้ไขด้วยตนเอง

    บทนำข้อจำกัดความรับผิดชอบ

    เปิดเฟิร์มแวร์ UEFI BIOS บอร์ดที่ทันสมัยแม้จะมีเทคโนโลยีต่างๆ เช่น USB ก็ตาม แฟลชไบออสกลับ, Dual BIOS, การกู้คืนแฟลช ฯลฯ - ยังคงเป็นลอตเตอรี่ เฟิร์มแวร์ของภาพที่แก้ไขนั้นเป็นลอตเตอรีสองเท่า
    นั่นคือเหตุผลที่ฉันขอให้คุณทำโดยใช้โปรแกรมเมอร์ฮาร์ดแวร์ SPI ก่อนที่จะเริ่มการทดลองกับเฟิร์มแวร์ การถ่ายโอนข้อมูลเต็มเนื้อหาของชิป มิฉะนั้นจะกู้คืนหลังจากนั้น เฟิร์มแวร์ที่ไม่สำเร็จ(และมันจะเกิดขึ้นไม่ช้าก็เร็ว) จะยาวนาน มีราคาแพง และเจ็บปวด
    โปรแกรมเมอร์ SPI ใน ในขณะนี้สามารถประกอบที่บ้านได้จากอะไรก็ได้ตั้งแต่ตัวต้านทานและตัวเก็บประจุ (SPIPGM) ไปจนถึง Arduino หรือ Raspberry Pi มีการอธิบายเวอร์ชันของโปรแกรมเมอร์ SPI ราคาถูกและรวดเร็วของฉัน ฉันแนะนำให้ผู้ที่ชื่นชอบการแกะสลักบอร์ดสองสามตัวเพื่อให้ความสนใจกับโปรเจ็กต์นี้และสำหรับแฟน ๆ ของอุปกรณ์ออลอินวัน - สำหรับสิ่งนี้
    นอกจากนี้ในข้อความ ฉันคิดว่าคุณมีโปรแกรมเมอร์ ความสามารถในการกู้คืนจากความล้มเหลวของเฟิร์มแวร์ และความพร้อมที่จะทดลอง แน่นอนว่าเพลงก็ร้องถึงความบ้าคลั่งของผู้กล้าได้เช่นกัน แต่อย่ามาพูดทีหลังว่าฉันไม่ได้เตือน
    ตามเนื้อผ้า ทุกสิ่งที่คุณกำลังจะอ่านที่นี่เขียนขึ้นเพื่อการศึกษา ผู้เขียนจะไม่รับผิดชอบต่อความเสียหายที่อาจเกิดขึ้นกับอุปกรณ์ของคุณ การสูญเสียผลกำไร การสูญเสียเวลา และศรัทธาในมนุษยชาติ คุณใช้ซอฟต์แวร์ที่ให้มาด้วยความเสี่ยงและอันตรายเอง และอื่นๆ

    UEFIเครื่องมือ

    เบื่อกับข้อ จำกัด ของยูทิลิตี้ที่มีอยู่สำหรับการทำงานกับอิมเมจ UEFI (ซึ่งเกิดขึ้นที่แกนหลักโดยซินโดรม NIH) ฉันเขียนยูทิลิตี้ข้ามแพลตฟอร์มพร้อมเปิด ซอร์สโค้ด- เครื่องมือ UEFI
    นี่คือโปรแกรมแก้ไขรูปภาพ UEFI ซึ่งเขียนด้วยภาษา C++\Qt เผยแพร่ภายใต้ใบอนุญาต BSD ชุดประกอบสำเร็จรูปมีการโพสต์ที่นี่
    โครงการอยู่ระหว่างการพัฒนา ดังนั้นโค้ดจึงไม่สวยงามมากนักและมีข้อบกพร่อง หากคุณบังเอิญเจอมัน ฉันยินดีที่จะได้ยินรายงานของคุณ
    สำหรับ การทำงานปกติด้วยยูทิลิตี้นี้ควรอ่านบทความก่อนหน้าเกี่ยวกับโครงสร้างของอิมเมจ UEFI ไม่เช่นนั้นจะไม่ชัดเจนว่าเกิดอะไรขึ้น แต่ฉันจะยังคงพยายามอธิบายบางประเด็น เราจะถือว่านี่คือการเตรียมการสำหรับเอกสารในอนาคต
    ตามตัวอย่างในทั้งสองส่วนของบทความ ฉันจะใช้การถ่ายโอนข้อมูลแบบเต็มจาก Zotac Z77-ITX WiFi (AMI Aptio4) และ เดลล์ วอสโตร 3360 (ฟีนิกซ์ SCT 2.3) น่าเสียดายที่ฉันไม่มี ม้านั่งทดสอบบนแพลตฟอร์ม Insyde H2O ดังนั้นฉันจึงไม่มีอะไรจะพูดเกี่ยวกับเรื่องนี้มากนัก บางที Falseclock อาจรู้เพิ่มเติมเกี่ยวกับพวกเขาอีกเล็กน้อย
    จากมุมมองของ UEFITool ความแตกต่างระหว่างรูปภาพ UEFI ผู้ผลิตที่แตกต่างกันในทางปฏิบัติไม่มีเลย ดังนั้นฉันจะเน้นไปที่มันเมื่ออธิบายแพตช์
    ดังนั้น ให้เปิด UEFITool เปิดรูปภาพ (Ctrl+O) แล้วดูดังนี้:

    โครงสร้างจะแสดงทางด้านซ้ายของหน้าต่าง เปิดภาพในรูปแบบของต้นไม้ทางด้านขวา - ข้อมูลเกี่ยวกับองค์ประกอบต้นไม้ที่เลือกที่ด้านล่าง - ข้อความที่ระบุข้อผิดพลาดในรูปแบบไฟล์ใน ในกรณีนี้- ใช้โดยนักพัฒนา Phoenix ของส่วนประเภท 0xF0 ซึ่งวัตถุประสงค์ไม่ได้อธิบายไว้ในข้อกำหนด UEFI PI ดับเบิลคลิกตามข้อความ จะขยายแผนผังเพื่อให้มองเห็นองค์ประกอบที่ทำให้เกิดข้อความนี้หรือองค์ประกอบหลักได้ ผลลัพธ์การค้นหาจะแสดงในหน้าต่างเดียวกัน ซึ่งสามารถเรียกได้โดยการกด Ctrl+F (ทั้งสองตัวเลือกที่มีรูปภาพเดียว):


    ที่นี่เราควรชี้แจงคำศัพท์เล็กน้อย เกือบทุกอย่าง องค์ประกอบโครงสร้างในอิมเมจ UEFI มีส่วนหัวซึ่งจัดเก็บข้อมูลบริการ เช่น GUID คุณลักษณะ เช็คซัม ฯลฯ และเนื้อหาซึ่งเก็บข้อมูลจริง ข้อความในส่วนหัวจะไม่ถูกจัดเก็บ ดังนั้นจึงไม่จำเป็นต้องเลือกตัวเลือกนี้
    ที่ระดับแรกของแผนผังจะมีขอบเขตของ Flash ในกรณีนี้คือ Descriptor, ME และ BIOS:


    เมื่อคุณเลือกภูมิภาค Descriptor คุณจะพบการตั้งค่าการเข้าถึงสำหรับภูมิภาคในกรณีนี้ การเข้าถึงแบบเต็ม แต่การตั้งค่าดังกล่าวพบได้น้อยมาก Intel แนะนำให้ผู้ผลิตอุปกรณ์ปิดกั้นการเข้าถึงภูมิภาค ME สำหรับการอ่าน/การเขียน และภูมิภาค Descriptor สำหรับการเขียน ซึ่งเป็นเหตุผลว่าทำไมบนบอร์ดส่วนใหญ่จึงแทบจะเป็นไปไม่ได้เลยที่จะถ่ายโอนข้อมูลทั้งหมดโดยไม่ต้อง "เต้นรำกับแทมบูรีน" โดยใช้เครื่องมือในตัว เมื่อคุณเลือกภูมิภาค ME คุณสามารถค้นหาเวอร์ชันเฟิร์มแวร์ ME ได้ แต่หากไม่ปรากฏขึ้นแสดงว่าไม่ดีและเป็นการดีกว่าที่จะไม่เย็บภาพดังกล่าว
    เลื่อนลงหนึ่งระดับไปยังเนื้อหาของภูมิภาค BIOS:


    ในระดับนี้สามารถพบองค์ประกอบสองประเภท: ปริมาณและ พื้นที่ว่าง- ฟรีในกรณีนี้ไม่จำเป็นต้องว่างเปล่า ตัวอย่างเช่น ในภาพนี้ที่จุดเริ่มต้นของ Padding เฟิร์มแวร์ EC จะถูกจัดเก็บ
    ไดรฟ์ข้อมูลแบ่งออกเป็นแบบธรรมดา (ทราบรูปแบบระบบไฟล์) บูต (ทราบรูปแบบ FS มี Security Core ควรเปลี่ยนด้วยความระมัดระวังอย่างยิ่ง) และไม่ทราบ (ไม่ทราบรูปแบบ FS หรือการแยกวิเคราะห์ยังไม่ได้ ได้ถูกนำไปปฏิบัติ) ในกรณีของเรา เล่มแรกหลังจากนั้น พื้นที่ว่างที่จุดเริ่มต้น - แบบปกติจากนั้นสองอันที่ไม่รู้จัก (อันที่จริงอันแรกเก็บ NVRAM และอันที่สองเก็บคีย์และฐานข้อมูลสำหรับ SecureBoot แต่ฉันยังไม่ได้อธิบายสิ่งนี้ให้โปรแกรมฟัง) เล่มสุดท้าย สามารถบูตได้
    ตอนนี้เรามาเปิดวอลลุ่มปกติกันดีกว่า ในกรณีนี้ จะเก็บไฟล์ที่โหลดในเฟส DXE


    โครงสร้างนี้ (ปริมาตรหลักภายในส่วนที่บีบอัด) ถูกใช้ค่อนข้างบ่อย ช่วยให้คุณประหยัดพื้นที่บนชิปได้อย่างเหมาะสม นอกจากนี้ยังมีตัวเลือกในการบีบอัดไม่ใช่โวลุ่มทั้งหมด แต่แต่ละไฟล์แยกกันซึ่งค่อนข้างประหยัดน้อยกว่าในแง่ของพื้นที่ แต่ UEFI ดังกล่าวจะเริ่มทำงาน ไบออสเร็วขึ้น, เพราะ ไม่มีประโยชน์ในการคลายไฟล์ที่ไม่ได้รับการเข้าถึง
    ตอนนี้เรามาดูภายในไฟล์กัน:


    ข้อมูลทั้งหมดในนั้นจะถูกเก็บไว้ภายในส่วนที่กำหนด GUID (ส่วนหัวของส่วนดังกล่าวมักจะเก็บลายเซ็นดิจิทัลหรือผลรวมตรวจสอบในกรณีนี้ - 4 ไบต์ซึ่งคล้ายกับ CS ซึ่งไม่มีใครตรวจสอบ) และเป็น แบ่งออกเป็น 4 ส่วน: อิมเมจ PE32 - ไฟล์ปฏิบัติการจริงในรูปแบบ PE/COFF, ส่วนการพึ่งพา DXE - กำหนดลำดับในการโหลดไดรเวอร์ DXE, ส่วน UI - เก็บข้อความ “SystemCapsuleRt.efi” ในรูปแบบ Unicode และ ส่วนที่ไม่รู้จัก เช่น 0xF0 (เป็นไปได้มากว่าเนื้อหามีความเกี่ยวข้องกับ CS ข้างต้นในทางใดทางหนึ่ง)
    แน่นอนว่าทั้งหมดนี้เป็นสิ่งที่ดี แต่ยังไม่เห็นการแก้ไข ไม่มีปัญหา เรียกธาตุอะไรก็ได้ เมนูบริบทซึ่งแสดงสิ่งที่สามารถทำได้ด้วยองค์ประกอบนี้


    และคุณสามารถทำสิ่งต่อไปนี้:

    • บันทึกองค์ประกอบลงในไฟล์ทั้งหมด (แยกตามสภาพ) หรือเฉพาะข้อมูลโดยไม่มีส่วนหัว (แยกเนื้อหา)
    • สร้างองค์ประกอบใหม่ (สร้างใหม่) ในกรณีนี้ในขณะที่บันทึกรูปภาพที่แก้ไขไว้ (และองค์ประกอบทั้งหมด) องค์ประกอบหลัก) มิติข้อมูลจะถูกคำนวณใหม่ เช็คซัม, การจัดตำแหน่งได้รับการแก้ไขแล้ว เช่น โครงสร้างภาพจะถูกนำมาใช้ให้สอดคล้องกับข้อกำหนด UEFI PI
    • แทรกองค์ประกอบจากไฟล์ ไม่ว่าจะก่อนองค์ประกอบที่เลือก (แทรกก่อน) หรือหลัง (แทรกหลัง) หรือภายในนั้น (แทรกเข้าไป ในกรณีนี้ ไม่สามารถแทรกสิ่งใดภายในส่วน PE32 ได้)
    • แทนที่องค์ประกอบด้วยองค์ประกอบอื่นจากไฟล์ ไม่ว่าจะทั้งหมด (แทนที่ตามสภาพ) หรือเพียงเนื้อหา (แทนที่เนื้อหา)
    การกระทำสุดท้ายจะมีประโยชน์ที่สุดเพราะ... ช่วยให้คุณสามารถแก้ไขส่วนใดส่วนหนึ่งของ UEFI โดยไม่กระทบต่อโครงสร้างของภาพทั้งหมด

    ตัวอย่างการใช้งาน

    มาดูตัวอย่างการแก้ไขที่เป็นประโยชน์สำหรับผู้ใช้ MacOS X บนพีซี: ข้ามการตั้งค่าของบิต LOCK (0x0F) ในการลงทะเบียน MSR_PMG_CST_CONFIG_CONTROL (0xE2) บิตนี้ตั้งค่าโดยไดรเวอร์ PowerManagement DXE เพื่อป้องกันไม่ให้ระบบปฏิบัติการจัดการตัวคูณ CPU โดยการเขียนลงในรีจิสเตอร์นี้ สำหรับ Windows และ Linux มันไม่ใช่ ปัญหาใหญ่แต่ MacOS X ไม่สามารถทนต่อความหยิ่งผยองดังกล่าวจาก UEFI ได้ แน่นอนคุณสามารถแก้ไขไดรเวอร์ AICPM.kext (ใน 10.8) หรือเคอร์เนล (ใน 10.9) ได้ แต่จะเป็นการดีกว่าที่จะแก้ไขไดรเวอร์ DXE และอย่ากลัวว่าครั้งต่อไป อัปเดตอัตโนมัติจะทำลายการดาวน์โหลด โปรแกรมปรับปรุงนี้จำเป็นสำหรับระบบที่ใช้เท่านั้น โปรเซสเซอร์อินเทล SandyBridge, IvyBridge และ Haswell และตัวแปร *-E ของพวกเขา และดำเนินการดังนี้:


    เราฉายภาพที่ได้โดยใช้โปรแกรมเมอร์ SPI เดียวกับที่ใช้สร้างภาพนั้น และเราจะไม่เกิดอาการตื่นตระหนกกับเคอร์เนลเมื่อใด กำลังโหลด MacOSเอ็กซ์

    รายละเอียด การแก้ไขอื่นๆ สรุป

    หากคุณสงสัยว่ารูปแบบเวทย์มนตร์ “75080FBAE80F” มาจากไหน และมีแพทช์อื่นๆ ใดบ้างที่ควรให้ความสนใจ โปรดอ่านส่วนที่สองของบทความนี้ ซึ่งจะเผยแพร่ในภายหลังเล็กน้อย ในนั้นฉันจะพยายามเตรียมตัว ตัวอย่างเพิ่มเติมในรูปแบบ “เป็นการดัดแปลงแบบไหน ทำไมจึงต้องทำ ทำอย่างไร โดยใคร และค้นพบได้อย่างไร” โดยไม่ได้ลงลึกในแต่ละครั้งว่าจะถอดองค์ประกอบที่จะแก้ไขอย่างไร และจะแทรกเข้าไปอย่างไร กลับ.
    ฉันหวังว่าบทความนี้จะไม่ดูน่าเบื่อและน่าเบื่อเกินไป หากคุณมีคำถามหรือข้อเสนอแนะฉันยินดีที่จะรับฟังและตอบอย่างสุดความสามารถ ฉันจะขอบคุณมากยิ่งขึ้นสำหรับรายงานข้อผิดพลาด ขอขอบคุณล่วงหน้าและขอให้โชคดีกับเฟิร์มแวร์

    ป.ล. เรียนฝ่ายบริหารและ UFO เป็นการส่วนตัว โปรดสร้างศูนย์กลาง UEFI สำหรับโพสต์ลักษณะนี้

    • บทช่วยสอน

    ผู้ผลิต UEFI ซ่อนอยู่เบื้องหลัง "ความปลอดภัย" กึ่งตำนานและ "การปกป้องผู้ใช้ทั่วไปจากบูทคิท" และกำลังขันสกรูให้แน่นมากขึ้นเรื่อยๆ สำหรับผลิตภัณฑ์รุ่นใหม่แต่ละรุ่น ในขณะเดียวกัน การสนับสนุนสำหรับรุ่นก่อนๆ ก็หายไปอย่างรวดเร็ว และผู้ใช้ก็ไม่มีทางเลือกนอกจากต้องรับการสนับสนุนนี้มาไว้ในมือของพวกเขาเอง แน่นอนว่าหากไม่มีซอร์สโค้ดการเปลี่ยนแปลงใด ๆ เป็นเรื่องยากมาก แต่ถึงแม้จะไม่มีซอร์สโค้ดคุณก็ทำอะไรได้มากมาย
    ในครั้งก่อน ๆ ของฉันเกี่ยวกับ UEFI ฉันวางแผนที่จะอธิบายการดัดแปลงที่มีประโยชน์ต่าง ๆ ที่ช่วยเอาชนะข้อ จำกัด บางประการที่กำหนดโดยผู้ผลิต แต่แล้วฉันก็ไม่ได้แก้ไขมัน แต่ตอนนี้ถึงเวลาแล้ว
    ในส่วนแรกของบทความนี้ ฉันจะอธิบายการทำงานกับเครื่องมือที่ฉันเขียนเพื่อแก้ไขรูปภาพ UEFI และส่วนที่สองจะเน้นไปที่การแก้ไขด้วยตนเอง

    บทนำข้อจำกัดความรับผิดชอบ

    เฟิร์มแวร์ UEFI BIOS บนบอร์ดสมัยใหม่ แม้ว่าจะมีเทคโนโลยีต่างๆ เช่น USB BIOS Flashback, Dual BIOS, Flash Recovery เป็นต้น - ยังคงเป็นลอตเตอรี่ เฟิร์มแวร์ของภาพที่แก้ไขนั้นเป็นลอตเตอรีสองเท่า
    นั่นคือเหตุผลที่ฉันถามก่อนที่จะเริ่มการทดลองกับเฟิร์มแวร์ให้ใช้โปรแกรมเมอร์ SPI ฮาร์ดแวร์เพื่อถ่ายโอนเนื้อหาของชิปโดยสมบูรณ์ ไม่เช่นนั้นการกู้คืนจากเฟิร์มแวร์ที่ไม่สำเร็จ (และมันจะเกิดขึ้นไม่ช้าก็เร็ว) จะใช้เวลานานมีราคาแพงและ เจ็บปวด.
    ปัจจุบันโปรแกรมเมอร์ SPI สามารถประกอบที่บ้านได้จากอะไรก็ได้ตั้งแต่ตัวต้านทานและตัวเก็บประจุ (SPIPGM) ไปจนถึง Arduino หรือ Raspberry Pi มีการอธิบายเวอร์ชันของโปรแกรมเมอร์ SPI ราคาถูกและรวดเร็วของฉัน ฉันแนะนำให้ผู้ที่ชื่นชอบการแกะสลักบอร์ดสองสามตัวเพื่อให้ความสนใจกับโปรเจ็กต์นี้และสำหรับแฟน ๆ ของอุปกรณ์ออลอินวัน - สำหรับสิ่งนี้
    นอกจากนี้ในข้อความ ฉันคิดว่าคุณมีโปรแกรมเมอร์ ความสามารถในการกู้คืนจากความล้มเหลวของเฟิร์มแวร์ และความพร้อมที่จะทดลอง แน่นอนว่าเพลงก็ร้องถึงความบ้าคลั่งของผู้กล้าได้เช่นกัน แต่อย่ามาพูดทีหลังว่าฉันไม่ได้เตือน
    ตามเนื้อผ้า ทุกสิ่งที่คุณกำลังจะอ่านที่นี่เขียนขึ้นเพื่อการศึกษา ผู้เขียนจะไม่รับผิดชอบต่อความเสียหายที่อาจเกิดขึ้นกับอุปกรณ์ของคุณ การสูญเสียผลกำไร การสูญเสียเวลา และศรัทธาในมนุษยชาติ คุณใช้ซอฟต์แวร์ที่ให้มาด้วยความเสี่ยงและอันตรายเอง และอื่นๆ

    UEFIเครื่องมือ

    เบื่อกับข้อ จำกัด ของยูทิลิตี้ที่มีอยู่สำหรับการทำงานกับอิมเมจ UEFI (ซึ่งถูกโจมตีโดยกลุ่มอาการ NIH) ฉันเขียนยูทิลิตี้โอเพ่นซอร์สข้ามแพลตฟอร์ม - UEFITool
    นี่คือโปรแกรมแก้ไขรูปภาพ UEFI ซึ่งเขียนด้วยภาษา C++\Qt ซึ่งเผยแพร่ภายใต้ใบอนุญาต BSD แอสเซมบลีที่เสร็จแล้วจะถูกโพสต์ที่นี่
    โครงการอยู่ระหว่างการพัฒนา ดังนั้นโค้ดจึงไม่สวยงามมากนักและมีข้อบกพร่อง หากคุณบังเอิญเจอมัน ฉันยินดีที่จะได้ยินรายงานของคุณ
    หากต้องการทำงานกับยูทิลิตี้นี้ตามปกติคุณควรอ่านบทความก่อนหน้าเกี่ยวกับโครงสร้างของอิมเมจ UEFI มิฉะนั้นจะไม่ชัดเจนว่าเกิดอะไรขึ้น แต่ฉันจะยังคงพยายามอธิบายบางประเด็น เราจะถือว่านี่คือการเตรียมการสำหรับเอกสารในอนาคต
    ตามตัวอย่างในทั้งสองส่วนของบทความ ฉันจะใช้การถ่ายโอนข้อมูลแบบเต็มจาก Zotac Z77-ITX WiFi (AMI Aptio4) และ Dell Vostro 3360 (Phoenix SCT 2.3) น่าเสียดายที่ฉันไม่มีม้านั่งทดสอบบนแพลตฟอร์ม Insyde H2O ดังนั้นฉันจึงไม่มีอะไรจะพูดเกี่ยวกับเรื่องนี้ บางทีอาจรู้เพิ่มเติมเกี่ยวกับพวกเขาอีกเล็กน้อย
    จากมุมมองของ UEFITool ไม่มีความแตกต่างระหว่างอิมเมจ UEFI จากผู้ผลิตหลายราย ดังนั้นฉันจะเน้นไปที่มันเมื่ออธิบายแพตช์
    ดังนั้น ให้เปิด UEFITool เปิดรูปภาพ (Ctrl+O) แล้วดูดังนี้:

    ทางด้านซ้ายของหน้าต่างโครงสร้างของรูปภาพที่เปิดอยู่จะแสดงในรูปแบบของต้นไม้ทางด้านขวา - ข้อมูลเกี่ยวกับองค์ประกอบต้นไม้ที่เลือกที่ด้านล่าง - ข้อความที่ระบุข้อผิดพลาดในรูปแบบไฟล์ในกรณีนี้ - ใช้โดยนักพัฒนา Phoenix ของส่วนประเภท 0xF0 ซึ่งวัตถุประสงค์ไม่ได้อธิบายไว้ในข้อกำหนด UEFI P.I การดับเบิลคลิกที่ข้อความจะขยายแผนผังเพื่อให้มองเห็นองค์ประกอบที่ทำให้เกิดข้อความหรือองค์ประกอบหลักได้ ผลลัพธ์การค้นหาจะแสดงในหน้าต่างเดียวกัน ซึ่งสามารถเรียกได้โดยการกด Ctrl+F (ทั้งสองตัวเลือกที่มีรูปภาพเดียว):


    ที่นี่เราควรชี้แจงคำศัพท์เล็กน้อย องค์ประกอบโครงสร้างเกือบทั้งหมดในอิมเมจ UEFI มีส่วนหัวซึ่งจัดเก็บข้อมูลบริการ เช่น GUID คุณลักษณะ เช็คซัม ฯลฯ และเนื้อหาซึ่งจัดเก็บข้อมูลจริง ข้อความในส่วนหัวจะไม่ถูกจัดเก็บ ดังนั้นจึงไม่จำเป็นต้องเลือกตัวเลือกนี้
    ที่ระดับแรกของแผนผังจะมีขอบเขตของ Flash ในกรณีนี้คือ Descriptor, ME และ BIOS:


    เมื่อคุณเลือกภูมิภาค Descriptor คุณจะพบการตั้งค่าการเข้าถึงสำหรับภูมิภาคในกรณีนี้ การเข้าถึงแบบเต็ม แต่การตั้งค่าดังกล่าวพบได้น้อยมาก Intel แนะนำให้ผู้ผลิตอุปกรณ์ปิดกั้นการเข้าถึงภูมิภาค ME สำหรับการอ่าน/การเขียน และภูมิภาค Descriptor สำหรับการเขียน ซึ่งเป็นเหตุผลว่าทำไมบนบอร์ดส่วนใหญ่จึงแทบจะเป็นไปไม่ได้เลยที่จะถ่ายโอนข้อมูลทั้งหมดโดยไม่ต้อง "เต้นรำกับแทมบูรีน" โดยใช้เครื่องมือในตัว เมื่อคุณเลือกภูมิภาค ME คุณสามารถค้นหาเวอร์ชันเฟิร์มแวร์ ME ได้ แต่หากไม่ปรากฏขึ้นแสดงว่าไม่ดีและเป็นการดีกว่าที่จะไม่เย็บภาพดังกล่าว
    เลื่อนลงหนึ่งระดับไปยังเนื้อหาของภูมิภาค BIOS:


    มีรายการสองประเภทที่สามารถพบได้ในระดับนี้: ไดรฟ์ข้อมูลและพื้นที่ว่าง ฟรีในกรณีนี้ไม่จำเป็นต้องว่างเปล่า ตัวอย่างเช่น ในภาพนี้ที่จุดเริ่มต้นของ Padding เฟิร์มแวร์ EC จะถูกจัดเก็บ
    ไดรฟ์ข้อมูลแบ่งออกเป็นแบบธรรมดา (ทราบรูปแบบระบบไฟล์) บูต (ทราบรูปแบบ FS มี Security Core ควรเปลี่ยนด้วยความระมัดระวังอย่างยิ่ง) และไม่ทราบ (ไม่ทราบรูปแบบ FS หรือการแยกวิเคราะห์ยังไม่ได้ ได้ถูกนำไปปฏิบัติ) ในกรณีของเรา โวลุ่มแรกหลังจากพื้นที่ว่างที่จุดเริ่มต้นเป็นเรื่องปกติ จากนั้นสองอันที่ไม่รู้จัก (อันที่จริงอันแรกเก็บ NVRAM และอันที่สองเก็บคีย์และฐานข้อมูลสำหรับ SecureBoot แต่ฉันไม่ได้อธิบายสิ่งนี้ ไปยังโปรแกรม) โวลุ่มสุดท้ายสามารถบู๊ตได้
    ตอนนี้เรามาเปิดวอลลุ่มปกติกันดีกว่า ในกรณีนี้ จะเก็บไฟล์ที่โหลดในเฟส DXE


    โครงสร้างนี้ (ปริมาตรหลักภายในส่วนที่บีบอัด) ถูกใช้ค่อนข้างบ่อย ช่วยให้คุณประหยัดพื้นที่บนชิปได้อย่างเหมาะสม มีอีกทางเลือกหนึ่งในการบีบอัดไม่ใช่ทั้งโวลุ่ม แต่แต่ละไฟล์แยกกัน - ซึ่งค่อนข้างประหยัดน้อยกว่าในแง่ของพื้นที่ แต่ UEFI BIOS นี้เริ่มทำงานเร็วขึ้นเพราะ ไม่มีประโยชน์ในการคลายไฟล์ที่ไม่ได้รับการเข้าถึง
    ตอนนี้เรามาดูภายในไฟล์กัน:


    ข้อมูลทั้งหมดในนั้นจะถูกเก็บไว้ภายในส่วนที่กำหนด GUID (ส่วนหัวของส่วนดังกล่าวมักจะเก็บลายเซ็นดิจิทัลหรือผลรวมตรวจสอบในกรณีนี้ - 4 ไบต์ซึ่งคล้ายกับ CS ซึ่งไม่มีใครตรวจสอบ) และเป็น แบ่งออกเป็น 4 ส่วน: อิมเมจ PE32 - ไฟล์ปฏิบัติการจริงในรูปแบบ PE/COFF, ส่วนการพึ่งพา DXE - กำหนดลำดับในการโหลดไดรเวอร์ DXE, ส่วน UI - เก็บข้อความ “SystemCapsuleRt.efi” ในรูปแบบ Unicode และ ส่วนที่ไม่รู้จัก เช่น 0xF0 (เป็นไปได้มากว่าเนื้อหามีความเกี่ยวข้องกับ CS ข้างต้นในทางใดทางหนึ่ง)
    แน่นอนว่าทั้งหมดนี้เป็นสิ่งที่ดี แต่ยังไม่เห็นการแก้ไข ไม่มีปัญหา เราจะเรียกเมนูบริบทสำหรับองค์ประกอบใดๆ ซึ่งจะแสดงสิ่งที่สามารถทำได้ด้วยองค์ประกอบนี้


    และคุณสามารถทำสิ่งต่อไปนี้:

    • บันทึกองค์ประกอบลงในไฟล์ทั้งหมด (แยกตามสภาพ) หรือเฉพาะข้อมูลโดยไม่มีส่วนหัว (แยกเนื้อหา)
    • สร้างองค์ประกอบใหม่ (สร้างใหม่) ในกรณีนี้เมื่อบันทึกรูปภาพที่เปลี่ยนแปลง (และองค์ประกอบหลักทั้งหมด) ขนาดและเช็คซัมจะถูกคำนวณใหม่ การจัดตำแหน่งจะได้รับการแก้ไข เช่น โครงสร้างภาพจะถูกนำมาใช้ให้สอดคล้องกับข้อกำหนด UEFI PI
    • แทรกองค์ประกอบจากไฟล์ ไม่ว่าจะก่อนองค์ประกอบที่เลือก (แทรกก่อน) หรือหลัง (แทรกหลัง) หรือภายในนั้น (แทรกเข้าไป ในกรณีนี้ ไม่สามารถแทรกสิ่งใดภายในส่วน PE32 ได้)
    • แทนที่องค์ประกอบด้วยองค์ประกอบอื่นจากไฟล์ ไม่ว่าจะทั้งหมด (แทนที่ตามสภาพ) หรือเพียงเนื้อหา (แทนที่เนื้อหา)
    การกระทำสุดท้ายจะมีประโยชน์ที่สุดเพราะ... ช่วยให้คุณสามารถแก้ไขส่วนใดส่วนหนึ่งของ UEFI โดยไม่กระทบต่อโครงสร้างของภาพทั้งหมด

    ตัวอย่างการใช้งาน

    มาดูตัวอย่างการแก้ไขที่เป็นประโยชน์สำหรับผู้ใช้ MacOS X บนพีซี: ข้ามการตั้งค่าของบิต LOCK (0x0F) ในการลงทะเบียน MSR_PMG_CST_CONFIG_CONTROL (0xE2) บิตนี้ตั้งค่าโดยไดรเวอร์ PowerManagement DXE เพื่อป้องกันไม่ให้ระบบปฏิบัติการจัดการตัวคูณ CPU โดยการเขียนลงในรีจิสเตอร์นี้ สำหรับ Windows และ Linux นี่ไม่ใช่ปัญหาใหญ่ แต่ MacOS X ไม่สามารถทนต่อ UEFI ที่ไม่สุภาพดังกล่าวได้ แน่นอนคุณสามารถแก้ไขไดรเวอร์ AICPM.kext (ใน 10.8) หรือเคอร์เนล (ใน 10.9) ได้ แต่จะเป็นการดีกว่าถ้าแก้ไขไดรเวอร์ DXE และอย่ากลัวว่าการอัปเดตอัตโนมัติครั้งถัดไปจะทำให้การบูตเสียหาย แพทช์นี้จำเป็นสำหรับระบบที่ใช้โปรเซสเซอร์ Intel SandyBridge, IvyBridge และ Haswell และตัวแปร *-E เท่านั้น และดำเนินการดังนี้:


    เราฉายภาพที่ได้โดยใช้โปรแกรมเมอร์ SPI เดียวกับที่ใช้สร้างภาพนั้น และเราไม่ได้รับความตื่นตระหนกของเคอร์เนลเมื่อโหลด MacOS X

    รายละเอียด การแก้ไขอื่นๆ สรุป

    หากคุณสงสัยว่ารูปแบบเวทย์มนตร์ “75080FBAE80F” มาจากไหน และมีแพทช์อื่นๆ ใดบ้างที่ควรให้ความสนใจ โปรดอ่านส่วนที่สองของบทความนี้ ซึ่งจะเผยแพร่ในภายหลังเล็กน้อย ในนั้นฉันจะพยายามเตรียมตัวอย่างเพิ่มเติมในรูปแบบ “เป็นการดัดแปลงแบบไหน ทำไมจึงต้องทำ ทำอย่างไร โดยใคร และค้นพบได้อย่างไร” โดยไม่ได้เจาะลึกในแต่ละครั้งว่าจะลบอย่างไร องค์ประกอบที่จะแก้ไขและวิธีแทรกกลับ
    ฉันหวังว่าบทความนี้จะไม่ดูน่าเบื่อและน่าเบื่อเกินไป หากคุณมีคำถามหรือข้อเสนอแนะฉันยินดีที่จะรับฟังและตอบอย่างสุดความสามารถ ฉันจะขอบคุณมากยิ่งขึ้นสำหรับรายงานข้อผิดพลาด ขอขอบคุณล่วงหน้าและขอให้โชคดีกับเฟิร์มแวร์

    ป.ล. เรียนฝ่ายบริหารและ UFO เป็นการส่วนตัว โปรดสร้างศูนย์กลาง UEFI สำหรับโพสต์ลักษณะนี้

    อินเตอร์เฟซระหว่าง ระบบปฏิบัติการและไมโครโปรแกรมที่ควบคุมฟังก์ชันฮาร์ดแวร์ระดับต่ำ จุดประสงค์หลักคือเพื่อเตรียมใช้งานฮาร์ดแวร์อย่างถูกต้องเมื่อระบบเปิดอยู่ และถ่ายโอนการควบคุมไปยังตัวโหลดระบบปฏิบัติการ EFI มีวัตถุประสงค์เพื่อแทนที่ BIOS ซึ่งเป็นอินเทอร์เฟซที่ทุกคนใช้กันทั่วไป เข้ากันได้กับไอบีเอ็มพีซีคอมพิวเตอร์ส่วนบุคคล

    มันหมายความว่าอะไร? ซึ่งหมายความว่าวิธีการที่อธิบายไว้ในการติดตั้ง Ubuntu อาจไม่ได้ผล นอกจาก, ขอบล้อใหญ่ต้องใช้ GPT (แทน รุ่นเก่าตารางพาร์ติชันใน MBR ซึ่งมีขีดจำกัดพื้นที่ดิสก์ที่สามารถกำหนดแอดเดรสได้ที่ 2.2 TB = 2.2 × 10¹² ไบต์)

    ไม่สามารถรับประกันความเป็นสากลของคำแนะนำด้านล่างได้ แต่ผู้เขียนบทความนี้อ่านหัวข้อฟอรัมภาษารัสเซียและอังกฤษหลายหัวข้อและสามารถติดตั้ง Ubuntu 12.04.1 บน Lenovo B570 ได้ในวันที่สอง หวังว่าบทความนี้จะช่วยคุณได้เช่นกัน

    เนื่องจาก EFI เป็น bootloader เฉพาะจึงต้องเก็บไว้ที่ไหนสักแห่ง ในกรณีของเรา จึงมีการจัดสรรพื้นที่แยกต่างหากในฮาร์ดไดรฟ์ด้วย ตาราง GPTส่วนต่างๆ เมื่อคอมพิวเตอร์ผ่าน ขั้นตอนการโพสต์ BIOS ตรวจพบพาร์ติชันที่ติดตั้ง bootloader บนสื่อ EFI ที่เชื่อมต่อ เป็นผลให้ใน BIOS เองในเมนู BOOT (ของคุณอาจมีชื่ออื่นลำดับการบูตของอุปกรณ์อยู่ที่นั่น) ชุดการแจกจ่ายจะปรากฏขึ้นพร้อมกับอุปกรณ์

    วิธีการติดตั้ง

    A. ก่อนอื่นเราต้องมี LiveCD (ทำไมต้อง LiveCD ดูด้านล่าง) ภาพการติดตั้งวิธีการเขียนที่นี่ getting_ubuntu หากคุณมีดิสก์/แฟลชไดรฟ์สำหรับการติดตั้งอยู่แล้ว รายการด้านล่างนี้เหมาะสำหรับคุณ

    B. เราบู๊ตทุกอย่างเหมือนเดิม การติดตั้งปกติ→ Load_from_livecd . แล้วถ้าใครสบายดีและ โหมดกราฟิกด้วยการเลือกภาษาที่ใช้งานได้ดีบางคนอาจพบสิ่งที่ไม่รู้จัก (หน้าจอเป็นพิกเซลคุณสามารถดูได้ว่าแถบเลือกเลื่อนเพื่อเลือกตัวเลือกการดาวน์โหลดอย่างไร)

    ป.ล. //โดยส่วนตัวแล้ว เมื่อโหลดจากรูปภาพทางเลือกที่เป็นข้อความ เหตุการณ์นี้เกิดขึ้นตลอดเวลา แม้ในระหว่างการพยายามติดตั้ง//

    ลำดับการจารึกมีดังนี้:

    ลองโดยไม่ต้องติดตั้ง ติดตั้ง ตรวจสอบดิสก์เพื่อหาข้อผิดพลาด

    ด้วยเหตุนี้ ให้เลือกอันแรกและโหลดในโหมดกราฟิก

    C. เปิดศูนย์แอปพลิเคชัน ค้นหา grub-pc ลบออก ค้นหา grub-efi ที่มีความลึกบิตที่ต้องการ (64 หรือ 32) แล้วทำการติดตั้ง
    รปภ. คุณสามารถเหลือเพียงด้วงธรรมดา ส่วนที่เหลือของฮอร์นบีมจะถูกโหลดด้วยตัวเองระหว่างการติดตั้ง (มันใช้ได้กับฉันทั้งหมด (12.04-12.10 อัลฟา 3), 12.10 เบต้า 1 "ไม่สามารถติดตั้ง bootloader ได้.... ")\\ ตัวเลือกนี้ไม่จำเป็น และอาจเป็นอันตรายต่อการติดตั้งใน 12.04.1 และ 12.10 เบต้า 2 และเก่ากว่าด้วยซ้ำ

    E. เริ่มการติดตั้งเอง เลือก “ตัวเลือกอื่น” และแบ่งพาร์ติชันดิสก์ “disk_partition” ด้วยตนเอง ทุกอย่างเป็นไปตามแผน:

    พาร์ติชันแรก "tyk" กำลังบู๊ต ส่วนอีเอฟไอ- หากคุณมีเพียงระบบเดียว 100 MiB ก็เพียงพอแล้ว

    ext4 ที่สอง, รูปแบบ, จุดเมานต์ "/" - เราสร้างระบบตามขนาดที่เราชอบ

    linux-swap ตัวที่สาม (สลับพาร์ติชั่น) ~ RAM + MiB หลายอันที่สี่, FS อะไรก็ได้ที่คุณต้องการ (ฉันมี ext4), จุดเมานต์ "/ home"

    เยี่ยมเลย เรื่องตลกใกล้จะจบลงแล้ว ที่ด้านล่างสุดคุณเลือกเส้นทางการติดตั้ง bootloader (ควรมีบางอย่างเช่น /dev/sda/

    เลือกพาร์ติชันแรกด้วย efi เช่น ในกรณีของฉัน /dev/sda1/

    เราติดตั้งรีบูทเมื่อเสร็จแล้วไปที่ BIOS มีเมนูบู๊ต รายการ “Linux” “Ubuntu” ใหม่ควรปรากฏขึ้น สามารถติดตั้ง Ubuntu ก่อนได้ ดาวน์โหลดการจัดการรายการวิธีการนี้เหมาะสำหรับการแก้ไขตั้งแต่ระบบที่ติดตั้ง และด้วย LiveCDเราต้องการสิ่งต่อไปนี้

    ยูทิลิตี้คอนโซล

    bootmgr. Sudo apt-get ติดตั้ง efibootmgr bootmgr คือ แอปพลิเคชันที่กำหนดเองสำหรับการแก้ไข Intel Extensible Firmware Interface (EFI)
    ตัวจัดการการบูต

    - ช่วยให้คุณสามารถเพิ่ม เปลี่ยนแปลง และลบตัวเลือกการบูตได้

    หลังการติดตั้ง ให้เปิด Terminal แล้วพิมพ์:

    ซูโด้ efibootmgr นี่คือสิ่งที่จะให้คุณ (พร้อมความคิดเห็นของฉัน) BootCurrent: 000A # รายการที่โหลดในปัจจุบัน หมดเวลา: 1 วินาที #pause เพื่อแสดงเมนูการเลือกก่อนที่จะโหลดตามลำดับ BootOrder: 000A, 0002,0009,000B, 0003,0004,0005,0006,0007,0008 # คิวการบูตปัจจุบัน การตั้งค่า Boot0000 #don อย่าแตะแท็บการเปลี่ยน BIOS Boot0001 เมนูบูต#เราไม่แตะเมนูเลือกเช่นกัน BootXXXX คือส่วน Boot0002* USB FDD: #เราสนใจตัวเลข เช่น 0003 ฯลฯ

    อย่างที่คุณเห็นจากนี้ ฉันมี 2 รายการที่ไม่จำเป็น (Windows, Linux) เรามาดูคำแนะนำอย่างเป็นทางการกัน
    อืม.. ฉันไม่เข้าใจอะไรเลย แต่หลังจากดูเพิ่มเติมอีกเล็กน้อย นี่คือสิ่งที่ฉันได้รับ: หากต้องการลบรายการใด ๆ คุณต้องป้อนคำสั่งดังนี้:

    Sudo efibootmgr --bootnum xxxx --delete-bootnum

    การลบรายการ Windows Boot Manager

    โดยที่ xxxx นี่คือเลขฐานสิบหกของบูตเรคคอร์ด ซึ่งสามารถย่อได้ เช่น ในกรณีของฉัน ถอนการติดตั้ง Windowsคุณต้องป้อน:

    Sudo efibootmgr --bootnum 9 --delete-bootnum

    หลังจากนี้คอนโซลจะรายงานผลลัพธ์ทันที:

    BootNext: 0009 BootCurrent: 000A หมดเวลา: 1 วินาที BootOrder: 000A,0002,000B,0003,0004,0005,0006,0007,0008 Boot0000 ตั้งค่า Boot0001 เมนูบูต Boot0002* USB FDD: Boot0003* ATA SSD: Boot0004* ATA HDD W: DC WD5000BPVT-24HXZT3 Boot0005* ซีดี ATAPI: TSSTcorp CDDVDW TS-L633F Boot0006* USB HDD: Kingston DT 101 G2 Boot0007* ซีดี USB: Boot0008* PCI LAN: Realtek PXE B03 D00 Boot000A* Ubuntu Boot000B* Linux

    การลบรายการ Linux

    ตอนนี้เราลบรายการ Linux

    Sudo efibootmgr --bootnum B --delete-bootnum

    หลังจากรีบูตเราได้รับความสวยงามนี้:

    BootCurrent: 0009 หมดเวลา: 1 วินาที BootOrder: 0009,0004,0005,0008,0002,0003,0006,0007 Boot0000 ตั้งค่า Boot0001 เมนูบูต Boot0002* USB FDD: Boot0003* ATA SSD: Boot0004* ATA HDD: WDC WD5000BPVT-24HXZ T3 Boot00 05 * ซีดี ATAPI: TSSTcorp CDDVDW TS-L633F Boot0006* USB HDD: Boot0007* ซีดี USB: Boot0008* PCI LAN: Realtek PXE B03 D00 Boot0009* ubuntu

    แก้ไขการหยุดชั่วคราว

    หากคุณต้องการแก้ไขการหยุดชั่วคราว ให้ทำดังต่อไปนี้:

    ซูโด้ efibootmgr -t 5

    ในผลลัพธ์:

    BootNext: 0009 BootCurrent: 000A หมดเวลา: 5 วินาที #ตามที่คุณเห็นว่าค่ามีการเปลี่ยนแปลง BootOrder: 000A,0002,000B,0003,0004,0005,0006,0007,0008 Boot0000 การตั้งค่า Boot0001 เมนูการบูต Boot0002* USB FDD: Boot0003* ATA SSD: Boot0004 * ATA HDD: WDC WD5000BPVT-24HXZT3 Boot0005* ซีดี ATAPI: TSSTcorp CDDVDW TS-L633F Boot0006* USB HDD: Kingston DT 101 G2 Boot0007* ซีดี USB: Boot0008* PCI LAN: Realtek PXE B03 D00 Boot0009* ubuntu

    บทความนี้ยังไม่เสร็จสิ้น โปรดหากคุณมีความรู้ที่เกี่ยวข้องและมีเวลาว่างลองปรับปรุงบทความนี้ * grub-efi ควรติดตั้งโดยอัตโนมัติ แต่อาจมีข้อผิดพลาดกับมันและ 12.10 เบต้า 1 ฉันไม่สามารถติดตั้งได้เลย (ไม่สามารถติดตั้ง bootloader ได้) ดังนั้นโดยทั่วไปแล้ว จะเป็นการดีกว่าถ้าติดตั้งด้วยตนเองผ่านศูนย์แอปพลิเคชัน *