ไฟล์ kernel.img
เมื่อใช้ลินุกซ์เคอร์เนลไฟล์เป็นเพียงการเปลี่ยนชื่อkernel.img
linux/arch/arm/boot/Image
มันก็ควรจะเป็นไปได้ (หรืออย่างน้อยมันเป็นไปได้ครั้งสุดท้ายที่ผมตรวจสอบ) ที่จะใช้เวอร์ชันบีบอัดไฟล์นี้ zImage
- มันสามารถมีแบบบูรณาการinitramfs
(ramdisk) แต่มันไม่จำเป็น ตัวอย่างเช่นkernel.img
ไฟล์หุ้นไม่มีinitramfs
ในขณะที่kernel_emergency.img
ทำ
หมายเหตุ:คู่มือการรวบรวมเคอร์เนลอย่างเป็นทางการในeLinux wikiแนะนำให้คุณใช้imagetool-uncompressed.py
เครื่องมือในการเตรียมkernel.img
ไฟล์ มันจำเป็นในช่วงแรก ๆ ของ RaspberyPi แต่ปัจจุบัน bootloader สามารถจัดการไฟล์ปกติImage
และzImage
ไฟล์ต่างๆได้
ปัญหาที่มาของเคอร์เนล
สิ่งสำคัญคือเมื่อสร้างเคอร์เนลสำหรับ RaspberryPi คุณไม่สามารถใช้รุ่นใด ๆ ได้เลย เฉพาะเวอร์ชันพิเศษที่พอร์ตไปยัง RaspberryPi จะทำงานได้ น่าเสียดายที่เวอร์ชันอัปสตรีมปัจจุบัน (พบในkernel.org
ไซต์) เข้ากันไม่ได้กับ RaspberryPi นอกจากนี้versatil_config
ไม่ดีสำหรับ RaspberryPi คุณควรใช้bcmrpi_defconfig
แทน (ที่พบในแหล่ง RaspberryPi เคอร์เนลเข้ากันได้) หรือbcmrpi_emergency_defconfig
ถ้าแผนของคุณเกี่ยวกับการใช้ initramfs
Buildin
คำแนะนำในการสร้างเคอร์เนล
สถานที่ที่ดีที่สุดที่จะคว้าแหล่งเคอร์เนลสำหรับ RaspberryPi อยู่บนรากฐาน GitHub นอกจากนี้คุณยังสามารถหาคำอธิบายที่มีประโยชน์บางอย่างเกี่ยวกับวิธีการที่จะได้รับมันและวิธีการรวบรวมไว้ในวิกิพีเดีย RasbperryPi อย่างเป็นทางการ ต่อไปนี้เป็นขั้นตอนที่เกี่ยวข้องกับเวอร์ชันที่เรียบง่ายเล็กน้อยของฉัน (หมายเหตุ: ฉันถือว่าคุณต้องการคอมไพล์เคอร์เนลมันเร็วกว่ามากและควรสร้างผลลัพธ์เดียวกัน
ดาวน์โหลด toolchain อย่างเป็นทางการในการสร้างของคุณเอง ฉันคิดว่ามันติดตั้งมา/usr/bin/arm-linux-gnueabi-*
แล้ว หากคุณมีที่อื่นคุณควรเปลี่ยนตัวCROSS_COMPILE
เลือกในmake
คำสั่งทั้งหมดของคุณ
ไปที่https://github.com/raspberrypi/linuxไซต์ที่คุณสามารถค้นหา RapsberryPi kernel อย่างเป็นทางการ คุณสามารถดาวน์โหลดรหัสได้สองวิธี:
- ในฐานะที่เป็นไฟล์บีบอัด (เพื่อใช้ตัวเลือกนี้คุณไม่จำเป็นต้องติดตั้ง
git
ยูทิลิตี้และคุณสามารถทำได้แม้ใน RapsberryPi เอง): คลิกที่ZIP
ไอคอนCode
แท็บด้านล่างเล็กน้อยที่ด้านบนของเว็บไซต์ สิ่งนี้จะช่วยให้คุณสามารถดาวน์โหลดไฟล์ต้นทางเป็นzip
ไฟล์ คุณสามารถใช้คอมไพล์เพื่อทำสิ่งนี้แทน แต่ (ตามที่อธิบายไว้ในวิกิ) จะต้องใช้พื้นที่และเวลามากขึ้น จากนั้นขยายขนาดไฟล์เพื่อรับแผนผังต้นกำเนิด
การใช้git
ยูทิลิตี้ (สิ่งนี้ไม่ได้ผลสำหรับฉันบน RaspberryPi เนื่องจากมี RAM อยู่เล็กน้อย แต่น่าจะทำงานได้ดีบนระบบเดสก์ท็อป ( --depth 1
อาร์กิวเมนต์สำหรับบันทึกซึ่งป้องกันไม่ให้ git ดาวน์โหลดประวัติการพัฒนาทั้งหมด (ซึ่งมีขนาดใหญ่มาก):
git clone --depth 1 git://github.com/raspberrypi/linux.git
ใช้การกำหนดค่าเริ่มต้นที่จัดทำโดยมูลนิธิ:
cp arch/arm/configs/bcmrpi_defconfig .config
เรียกใช้make oldconfig
และตอบคำถามบางข้อ (ควรกด Enter ในแต่ละคำถามโดยเว้นคำตอบเริ่มต้น):
make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- oldconfig
รวบรวมเคอร์เนล:
make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi-
คัดลอกโมดูลเคอร์เนลไปที่/tmp/modules
:
make ARCH=arm modules_install INSTALL_MOD_PATH=/tmp/modules
ใช้Image
ไฟล์เป็นkernel.img
อัปโหลดโมดูลทั้งหมดไปยังจาก/tmp/modules/lib/modules/
ในคอมพิวเตอร์ของคุณไปยัง/lib/modules/
ไดเรกทอรีบนรูต RaspberryPi ของคุณ
การเพิ่ม initramfs
นี้ไม่ได้ให้คำแนะนำเกี่ยวกับวิธีการสร้างinitramfs
อย่างไร เนื่องจากนี่เป็นหัวข้อที่กว้างมาก (โดยทั่วไปคุณต้องสร้างสภาพแวดล้อม Linux userspace ที่ทำงานได้จริงไม่มีข้อ จำกัด ว่ามันซับซ้อนแค่ไหน) ฉันจะไม่พูดถึงเรื่องนี้ในตอนนี้ ฉันจะทราบว่าinitramfs
สามารถใช้ในสองรูปแบบที่แตกต่างกัน - แบบสแตนด์อโลนที่มันเป็นไฟล์แยกและ buildin ที่มันถูกรวมเข้ากับไฟล์ภาพเคอร์เนล (เหมือนในkernel_emergency.img
) ตัวเลือกที่สองควรได้รับการสนับสนุนโดย bootloader RaspberryPi แต่มีข่าวลือบางอย่างว่ามันเสียในเวอร์ชั่นเฟิร์มแวร์ปัจจุบันดังนั้นคุณควรใช้เวอร์ชั่น buildin
วิธีที่ดีที่สุดในการเริ่มต้นคือการใช้เนื้อหา initramfs ที่ใช้งานได้ (ซึ่งถูกใช้สำหรับ kernel_emergency.img) โดยการดาวน์โหลดจากที่เก็บ gitub พื้นฐานอื่นและหลังจากคุณสามารถบูตเคอร์เนลโดยใช้iniramfs
อิมเมจนี้ลองสร้างของคุณเอง สิ่งที่ควรจำเป็นสำหรับสิ่งนี้คือให้ชี้ไปที่CONFIG_INITRAMFS_SOURCE
ตัวเลือกการกำหนดค่าเคอร์เนลไดเรกทอรีที่ดาวน์โหลด
หมายเหตุสุดท้าย
ดังนั้นคุณควรทำใน 3 ขั้นตอน:
- ลองสร้างและบูทเคอร์เนลโดยไม่มี
initramfs
ไฟล์
- ลองเพิ่ม
initramfs
เนื้อหาที่พร้อมในเคอร์เนลของคุณ
- เปลี่ยน
initramfs
เนื้อหานี้เพื่อให้เหมาะกับความต้องการของคุณ