แก้ไข:เมื่อฉันเขียนคำตอบนี้การกระจายน้อยมากมาพร้อมกับ EFI_STUB กำหนดค่าเคอร์เนลดังนั้นหนึ่งต้องสร้างหนึ่งที่กำหนดเอง ทุกวันนี้ดิสทริบิวชันส่วนใหญ่มีเคอร์เนลที่ตั้งค่าไว้อย่างเหมาะสมและบิลด์ที่กำหนดเองไม่จำเป็นต้องใช้อีกต่อไป ในกรณีนี้ส่วน"ตั้งค่าพาร์ติชันของคุณ"และ"การตั้งค่าสิ่งต่าง ๆ "เป็นสิ่งที่น่าสนใจ "ข้อกำหนด" และ "รวบรวมเคอร์เนล" สามารถข้ามได้
ฉันไม่ทราบว่า Windows จัดการกับ UEFI ได้อย่างไร แต่จากด้านเดเบียนแล้วมันค่อนข้างตรงไปตรงมา
ตั้งค่าพาร์ติชันของคุณ
ใช้ชุดรูปแบบพาร์ติชัน GPT ไม่ใช่ MBR
ในการบูตจากพาร์ติชัน GPT ที่มี UEFI จะมีการกำหนดพาร์ติชันสำหรับบูตเฉพาะซึ่งเรียกว่าEFI SYSTEM PARTITION (ESP) ไม่บังคับ แต่วิธีที่เข้ากันได้มากที่สุดคือการใช้พาร์ติชัน FAT32 ขนาด 200 MiB ควรจะดีสำหรับกรณีส่วนใหญ่
ในการลงทะเบียนพาร์ติชั่นเป็น ESP จะต้องทำการตั้งค่าสถานะด้วยboot
แฟล็ก ตรงกันข้ามกับโครงร่าง MBR แฟล็กการบูตใช้เพื่อระบุ ESP เท่านั้นไม่ใช่พาร์ติชันที่จะสามารถบูตได้
UEFI ใช้โครงสร้างไดเรกทอรี\EFI\<vendor>\<application>.efi
ในการจัดเก็บการใช้งาน UEFI ตัวคั่นไดเรกทอรีถูกแสดงด้วยแบ็กสแลชแม้กระทั่งบน Linux อาจเป็นชื่อการแจกจ่ายค่าจริงไม่เกี่ยวข้องกับ UEFI
แอปพลิเคชันอาจเป็นระบบสาธารณูปโภคเช่นตัวตรวจสอบหน่วยความจำหรือเชลล์ UEFI นอกจากนี้ยังสามารถเป็นตัวโหลดระบบปฏิบัติการหรือระบบปฏิบัติการของตัวเอง แอปพลิเคชันเหล่านี้ต้องลงทะเบียนใน UEFI เพื่อให้สามารถเปิดใช้งานในเวลาบูต
ความต้องการ
UEFI สามารถโหลดเคอร์เนลเวอร์ชัน> = 3.3 ได้โดยตรง เคอร์เนลสามารถทำหน้าที่เป็นตัวโหลดของตัวเอง นี้เรียกว่าEFISTUB ต้องการการกำหนดค่าเคอร์เนลต่อไปนี้
CONFIG_EFI y =
CONFIG_EFI_PARTITION y =
CONFIG_EFI_STUB y =
CONFIG_RELOCATABLE y =
CONFIG_FB_EFI y =
CONFIG_FRAMEBUFFER_CONSOLE y =
CONFIG_EFI_VARS = m
เคอร์เนลที่มีการกำหนดค่านี้ไม่ได้อยู่ในเดเบียนเสถียร คุณสามารถอบเคอร์เนลของคุณเองหรือใช้จากต้นการทดลองในกรณีนั้นคุณสามารถข้ามย่อหน้าถัดไป
รวบรวมเคอร์เนล
(อาจไม่จำเป็นอีกต่อไปดูการแก้ไข)
หากคุณตัดสินใจที่จะรวบรวมเคอร์เนลนี่คือคำแนะนำสั้น ๆ ว่าจะทำอย่างไร หากคุณพบปัญหามีข้อมูลมากมายเกี่ยวกับวิธีการรวบรวมเคอร์เนล
รับแหล่งที่มา
git clone git: //git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
ลองดูรุ่นหนึ่ง ๆ
git checkout v3.6
การกำหนดค่าเคอร์เนล
ทำให้ menuconfig
ทำการตั้งค่าที่จำเป็นสำหรับระบบของคุณหรือปล่อยให้มันเป็นเช่นนั้นถ้าคุณไม่มีอะไรจะปรับแต่ง นี้เขียนการตั้งค่า kernel .config
ไปยังแฟ้ม
ตรวจสอบให้แน่ใจว่ามีการตั้งค่าจากย่อหน้าก่อนหน้า CONFIG_INPUT_EVBUG=n
นอกจากนี้ยังทำให้ความรู้สึกที่จะเลือก มิฉะนั้นบันทึกของคุณจะถูกเติมด้วยขยะ GiB
สร้างเคอร์เนล
INSTALL_MOD_STRIP = 1 make-kpkg --uc - เป็นไบนารีอาร์ค
แพ็คเกจถูกสร้างขึ้นในไดเรกทอรีหลัก
กำลังติดตั้งเคอร์เนล
dpkg -i linux-image-3.5.0_Custom.deb linux-headers-3.5.0_Custom.deb
อาคาร initramfs
mkinitramfs -o /boot/initrd.img-3.6.0-amd64 3.6.0
3.6.0 เป็นรุ่นเคอร์เนล เป็นค่าเริ่มต้นสำหรับเคอร์เนลที่ใช้งานซึ่งไม่ใช่ตัวเลือกที่ดีเนื่องจากคุณยังคงใช้เคอร์เนลเก่าอยู่
การตั้งค่าต่างๆ
เพื่อให้สามารถบูตเคอร์เนล Linux ได้จะต้องคัดลอกไปยัง ESP พร้อมกับ initramfs ระบุว่า ESP ติดตั้งที่/boot/efi
/boot/efi/EFI/debian/vmlinuz-3.6.0.efi
/boot/efi/EFI/debian/initrd.img-3.6.0
หมายเหตุ:เพื่อให้มั่นใจในความเข้ากันได้กับระบบส่วนใหญ่efi
จะต้องเพิ่มส่วนขยายในเคอร์เนล
ตอนนี้เคอร์เนลสามารถลงทะเบียนใน UEFI เราใช้เครื่องมือefibootmgr
สำหรับสิ่งนั้น
echo "root = UUID = 3a4287b6-b3a7-4721-da38-acc38a928278 ro rootfstype = ext4 add_efi_memmap initrd = \\ EFI \\ debian \\ initrd.img-3.6.0" |
iconv -f ascii -t ucs2 |
efibootmgr \
- สร้าง \
- gpt \
- ดิสก์ / dev / sda \
- ส่วนที่ 4 \
--label "เคอร์เนล Debian Linux 3.6.0" \
- ตัวโหลด "\\ EFI \\ debian \\ vmlinuz-3.6.0" \
- เขียนลายเซ็น \
- ผนวก - ไบนารี-args -
อาร์กิวเมนต์ของ--disk
คืออุปกรณ์ที่เคอร์เนลอยู่ไม่ใช่ ESP
--part
คือหมายเลขพาร์ติชันที่เคอร์เนลตั้งอยู่ --label
เป็นรายการในเมนูการบู๊ต UEFI
หากต้องการดูรายการของรายการที่มีให้เพียงแค่เรียกใช้efibootmgr
โดยไม่มีอาร์กิวเมนต์ ไวยากรณ์เพื่อลบรายการเฉพาะ
รายการ efibootmgr -b (ฐานสิบหก) -B
ตัวอย่างเช่น:
efibootmgr -b 001a -B
คำแนะนำเหล่านี้ไม่ได้จัดการกรณีของการปรับปรุงเคอร์เนล เคอร์เนลและ initramfs จะไม่ถูกคัดลอกไปยัง ESP โดยอัตโนมัติ ซึ่งสามารถทำได้โดยใช้สคริปต์สั้นซึ่งสำเนาเคอร์เนลและ initramfs กับ ESP efibootmgr
และวิ่ง สคริปต์นี้สามารถวางไว้ใน/etc/kernel/postinst.d
การเปิดตัวโดยอัตโนมัติหลังจากเคอร์เนลได้รับการปรับปรุง
หมายเหตุ: ไม่จำเป็นต้องใช้ตัวจัดการการบูตเช่น GRUB ตัว UEFI จะทำหน้าที่เป็นตัวจัดการการบูต
นั่นคือทั้งหมดที่คุณต้องการจากด้านลินุกซ์ฉันไม่รู้ว่าจะเพิ่ม Windows ได้อย่างไร