วิธีง่ายๆในการคอมไพล์เคอร์เนลคืออะไร?


41

ฉันสนใจที่จะรวบรวมเคอร์เนลใหม่ภายใต้ Ubuntu 12.04 x86 64 บิต

ฉันพบหน้า wiki นี้ซึ่งเป็นเสมือนกระจกสำหรับบล็อกนี้และมีขั้นตอนมากมาย ( gitฯลฯ ) ที่ไม่มีประโยชน์สำหรับฉัน

ด้วยรุ่นก่อนหน้า / distros ฉันใช้ในการสร้าง.configไฟล์และแก้ไข a Makefileถ้าฉันต้องการจากนั้นเพียงแค่เรียกใช้makeและมันก็เสร็จแล้ว

มีวิธีง่ายๆในการทำสิ่งนี้ภายใต้ Ubuntu หรือไม่?


1
คุ้มค่าที่จะเช็คเอาท์: wiki.ubuntu.com/Kernel/BuildYourOwnKernel
Colin Ian King

คำตอบ:


39

1. ใช้apt-get sourceเพื่อดาวน์โหลดเคอร์เนลเวอร์ชันอูบุนตู

apt-get source linux-image-$(uname -r)

ให้โฟลเดอร์ที่มีตัวอย่างเช่น:

linux-3.2.0 linux_3.2.0-26.41.dsc
 linux_3.2.0-26.41.diff.gz   linux_3.2.0.orig.tar.gz

ตัวหนาที่แตกต่างรวมถึงการปรับแต่ง Ubuntu / Debian ทั้งหมด

2. ในการสร้างเคอร์เนลหุ้นด้วยตัวคุณเอง.configให้ใช้make-kpkgวิธีDebian "แบบเก่า"

นี่เป็นทางเลือกที่ล้าสมัยที่อธิบายไว้ในวิกิ:

sudo apt-get install kernel-package

หากคุณกำลังรวบรวมเคอร์เนลเป็นครั้งแรก:

sudo apt-get build-dep linux-image-$(uname -r)

จากนั้นcdไปยังไดเรกทอรีต้นทาง (ที่นี่linux-3.2.0) และเรียกใช้make oldconfigเพื่อสร้าง.configไฟล์ด้วยการกำหนดค่าของเคอร์เนลที่ใช้งานอยู่หรือคัดลอกส่วนที่สาม.configไปยังไดเรกทอรีนี้

ขึ้นอยู่กับว่าคุณต้องการข้อความหรือการตั้งค่ากราฟิกติดตั้ง:

(ข้อความ)

sudo apt-get install libncurses5 libncurses5-dev

(Graphical)

sudo apt-get install qt3-dev-tools libqt3-mt-dev

จากนั้นเรียกใช้:

(ข้อความ)

make menuconfig

(Graphical)

make xconfig

เมื่อเสร็จแล้วให้เรียกใช้:

fakeroot make-kpkg -j N --initrd --append-to-version=my-very-own-kernel kernel-image kernel-headers

โดยที่Nจำนวนงานที่ต้องรันขนาน (โดยปกติคือจำนวน CPU ที่คุณมี) และmy-very-own-kernelเป็นสตริงที่กำหนดเองเพื่อระบุงานสร้างนี้

เมื่อเสร็จแล้วเคอร์เนลอิมเมจและไฟล์ส่วนหัวจะพร้อมเป็นเดบิตในไดเรกทอรีหลัก คุณสามารถติดตั้งได้ด้วยsudo dpkg -iซึ่งจะดูแลการเพิ่มรายการ GRUB เป็นต้น


ทำไมพวกเขาถึงไม่บอกอะไรเกี่ยวกับความแตกต่างนี้สำหรับฉันความแตกต่างก็คือความแตกต่างมันมีทุกอย่าง
user827992

ฉันไม่รู้คุณจะต้องถามพวกเขา (google สำหรับทีมเคอร์เนล Canonical) ผมแค่บอกคุณว่าจะสร้างมัน;)
ish

1
ตกลงคำถามสุดท้ายวิธีการใช้ diff ที่ถูกบีบอัดนี้ : DI ต้องไปในlinux-3.2.0ไดเรกทอรีและเรียกใช้patch -p1 <../patch.diff?
user827992

1
มีความจำเป็นต้องนำไปใช้ต่างนั้น apt-get source ...ทำเพื่อคุณแล้ว!
ish

2
-1 คุณเรียกมันว่า "เชย" ฉันเรียกมันว่าล้าสมัย fakeroot debian/rules editconfigs, fakeroot debian/rules clean, fakeroot debian/rules binaryเป็นที่ถูกต้องวิธีที่ปราศจากปัญหา
Aleksandr Dubinsky

19

นี่คือขั้นตอน ขั้นตอนนี้จะขึ้นอยู่กับวิธีการของnixCraft : Compile Linux kernel 2.6 - แต่มีความทันสมัยมาก

ดาวน์โหลดและแตกซอร์สโค้ดของเคอร์เนลที่คุณต้องการสร้าง

คุณจะได้รับต้นน้ำรหัสที่มาเคอร์เนลที่kernel.org เวอร์ชั่น3.16.1 (เคอร์เนลที่เสถียรล่าสุดของการเขียนนี้) จะถูกใช้ที่นี่ ดังนั้นคุณอาจจำเป็นต้องแก้ไขคำสั่งเหล่านี้หากคุณใช้เวอร์ชันอื่น

รหัสแหล่งเคอร์เนลให้ไว้ในปัจจุบัน น้ำมันดิน xz archives ดังนั้นคลิกลิงก์ "tar.xz" ตามเวอร์ชันที่คุณต้องการ:

สกรีนช็อตจาก kernel.org ซึ่งแสดงไฟล์เก็บถาวรเคอร์เนลซอร์สสำหรับดาวน์โหลด

หลังจากcdเข้าสู่ไดเรกทอรีที่คุณดาวน์โหลดไฟล์เก็บถาวรคุณสามารถแตกไฟล์ได้ด้วยtar:

tar xf linux-3.16.1.tar.xz

ติดตั้งเครื่องมือบิลด์ที่จำเป็นและดำเนินการกำหนดค่าเคอร์เนล

ที่จะได้รับของ Ubuntu toolchain ( gcc, makeและอื่น ๆ ) ติดตั้งสร้างจำเป็นติดตั้งการสร้างที่จำเป็น metapackage:

sudo apt-get update
sudo apt-get install build-essential

สองวิธีที่สมควรใช้งานง่ายเพื่อกำหนดค่าสิ่งที่จะเข้าสู่เคอร์เนลของคุณจะถูกจัดให้โดยmakeเป้าหมายและxconfigmenuconfig

xconfigเรียกใช้ยูทิลิตีการกำหนดค่ากราฟิกขณะที่ทำงานกับmenuconfigข้อความ แต่ละคนต้องใช้ซอฟต์แวร์เพิ่มเติมบางอย่างไม่ได้จัดไว้ให้โดยสร้างสิ่งจำเป็นติดตั้งการสร้างที่จำเป็น

ในการกำหนดค่ากราฟิกให้ติดตั้ง libqt4-devติดตั้ง libqt4-devและ pkg-configติดตั้ง pkg-configและเรียกใช้make xconfig:

sudo apt-get install libqt4-dev pkg-config
make xconfig

ในการกำหนดค่าในเทอร์มินัลให้ติดตั้งlibncurses5-dev(ขอบคุณ Hannuสำหรับข้อมูลนี้) และเรียกใช้make menuconfig:

sudo apt-get install libncurses5-dev
make menuconfig

สร้างเคอร์เนลที่กำหนดค่า

เรียกใช้สิ่งนี้ก่อนเพื่อคอมไพล์เคอร์เนลและสร้างvmlinuz:

make

vmlinuzคือ "เคอร์เนล" โดยเฉพาะมันคือเคอร์เนลอิมเมจที่จะไม่ถูกบีบอัดและโหลดลงในหน่วยความจำโดยGRUBหรือบูตโหลดเดอร์อื่น ๆ ที่คุณใช้

จากนั้นสร้างโมดูลเคอร์เนลที่โหลดได้ :

make modules

ติดตั้งเคอร์เนลที่สร้างขึ้นใหม่ของคุณ

สมมติว่าmakeคำสั่งเหล่านี้เสร็จสมบูรณ์แล้วก็ถึงเวลาที่จะติดตั้งเคอร์เนลใหม่ ก่อนติดตั้งโมดูล:

sudo make modules_install

จากนั้นติดตั้งเคอร์เนล :

sudo make install

ที่ทำให้vmlinuz-3.16.1(สำเนาvmlinuz) config-3.16.1(แฟ้มจัดเก็บข้อความพารามิเตอร์การตั้งค่า kernel) และSystem.map-3.16.1(the ตารางเคอร์เนลสัญลักษณ์การค้นหา ) /bootใน สำหรับรายละเอียดเพิ่มเติมโปรดดูที่โพสต์ comp.os.linux.misc นี้โดย Hadronman installkernelและ

การตั้งค่าขั้นสุดท้ายดังนั้นเคอร์เนลจึงสามารถเริ่มต้นและบูตระบบได้:

ส่วนนี้มีส่วนบนพื้นฐานของข้อมูลในเคอร์เนล / คอมไพล์

ด้วยเคอร์เนลในตอนนี้ที่ซึ่งมันจำเป็นต้องมีมันต้องการ:

สร้าง initramfs ของคุณด้วยmkinitramfs:

cd /boot
sudo mkinitramfs -ko initrd.img-3.16.1 3.16.1

เมื่อคุณอัปเดตการกำหนดค่าของตัวโหลดการบูต GRUB2 ซึ่งเป็นค่าเริ่มต้นใน Ubuntuตั้งแต่ 9.10 - ควรตรวจพบเคอร์เนลใหม่โดยอัตโนมัติและเพิ่มตัวเลือกในการบูตจากมัน

sudo update-grub

ลองใช้เคอร์เนลของคุณ

ตอนนี้คุณสามารถรีบูตเพื่อทดสอบเคอร์เนลใหม่ของคุณ คุณอาจต้องShiftกดหรือกดค้างไว้Escในระหว่างการบู๊ตเพื่อดูเมนูการบูต GRUB ซึ่งคุณสามารถเลือกระหว่างเมล็ดที่ติดตั้งไว้ได้

ในการทำให้เคอร์เนลของคุณ (หรืออีกอันหนึ่ง) เป็นค่าเริ่มต้นให้ดูที่ฉันจะเปลี่ยนลำดับการบูตของ GRUB ได้อย่างไร


ขั้นตอนที่ 3 make menuconfigต้องการapt get install libncurses5-dev
Hannu

@ ฮันนุขอบคุณฉันลืมพูดไปหมดแล้ว ผู้ใช้ระบบ 64 บิตอาจต้องการ "ia32-libs" เพื่อให้สามารถใช้งานโปรแกรม 32 บิตได้เช่นกัน
สามเณร

อาจจะดีกว่าที่จะหาแพ็คเกจที่เป็นเวอร์ชันอิสระด้วย ... ฉันไม่แน่ใจว่ามี
Hannu

@EliahKagan ขอบคุณ ตกลงตอนนี้หรือฉันควรลบทั้งหมด? ฉันไม่มีปัญหาในการทำเช่นนั้น
สามเณร

1
-1 สิ่งนี้ไม่ได้สร้างเคอร์เนลUbuntu มันไม่ได้สร้างไฟล์. deb นี่คือสูตรสำหรับปัญหา
Aleksandr Dubinsky

3

คำแนะนำอย่างรวดเร็วสำหรับการสร้างอูบุนตูเคอร์เนล (เมื่อเทียบกับวานิลลา) สามารถพบได้ที่นี่: https://wiki.ubuntu.com/Kernel/BuildYourOwnKernel

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

# Get source code
apt-get source linux-image-$(uname -r)

# Install dependencies
sudo apt-get build-dep linux-image-$(uname -r)

# Compile
cd linux-4.4.0
fakeroot debian/rules clean
fakeroot debian/rules binary

# Install (obviously the versions will be different)
cd ..
sudo dpkg -i linux-image-4.4.0-38-generic_4.4.0-38.57_amd64.deb linux-headers-4.4.0-38_4.4.0-38.57_all.deb linux-headers-4.4.0-38-generic_4.4.0-38.57_amd64.deb
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.