Çekirdeği yeniden derlemenin basit bir yolu nedir?


41

Ubuntu 12.04 x86 64 bit altında yeni bir çekirdek derlemekle ilgileniyorum.

Temelde bu blog için bir ayna olan bu wiki sayfasını buldum ve bana işe yaramaz görünen birçok adım ( git , vb.) Var.

Daha önceki sürümlerde / dağıtımlarda, bir .configdosya oluşturup Makefilegerektiğinde değiştirirdim, sonra çalıştırır makeve bitirdim.

Bunu Ubuntu altında yapmanın basit bir yolu var mı?


1
Kontrol etmeye
Colin Ian King

Yanıtlar:


39

1. apt-get sourceÇekirdeğin Ubuntu sürümünü indirmek için kullanın .

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

örneğin içeren bir klasör verir:

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

Kalın yazı, tüm Ubuntu / Debian uyarlamalarını içerir.

2. Kendinize ait bir hisse senedi çekirdeği oluşturmak .configiçin "eski moda" Debian make-kpkgyöntemini kullanın

Bu, wiki'de açıklanan alternatif eski moda yöntemdir :

sudo apt-get install kernel-package

İlk defa bir çekirdeği derliyorsanız:

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

Daha cdsonra kaynak dizine (burada linux-3.2.0) gidin ve çalışan çekirdeğin yapılandırmasıyla dosya make oldconfigoluşturmak .configiçin çalıştırın veya .configbu dizine üçüncü bir parça kopyalayın .

Metin mi yoksa grafiksel yapılandırma mı istediğinize bağlı olarak, yükleyin:

(Metin)

sudo apt-get install libncurses5 libncurses5-dev

(Grafik)

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

Ve sonra koş:

(Metin)

make menuconfig

(Grafik)

make xconfig

Tamamlandığında, sadece koş:

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

nerede Nparalel (sahip CPU genellikle sayısı) çalıştırmak için kaç iş olduğunu ve my-very-own-kernelbu yapı tanımlamak için özel bir dizedir.

İşlem tamamlandığında, çekirdek görüntüsü ve başlık dosyaları üst dizinde debs hazır olacak; sudo dpkg -iGRUB girişleri ekleme vb. ile de ilgilenecek şekilde bunları kurabilirsiniz .


neden bu fark hakkında hiçbir şey söylemiyorlar, bana göre bir fark sadece bir fark, her şeyi içerebiliyor.
user827992

Bilmiyorum, onlara sormanız gerekecek (Canonical Kernel Team için google). Sadece nasıl yapılacağını anlattım;)
ish

1
tamam, son soru, bu sıkıştırılmış farkın nasıl uygulanacağı? : DI linux-3.2.0dizine girmeli ve çalıştırılmalı patch -p1 <../patch.diffmı?
user827992

1
Orada gerek diff uygulamak; apt-get source ...Bunu zaten senin için yaptım!
ish

2
-1 Sen buna "eski moda" diyorsun, ben modası geçmiş. fakeroot debian/rules editconfigs, fakeroot debian/rules clean, fakeroot debian/rules binaryDoğru, sorunsuz bir yoldur.
Aleksandr Dubinsky

19

İşte adımlar. Bu prosedür dayanmaktadır nixCraft 's Linux derleme 2.6 Çekirdeğin: Nasıl ölçüde modernize --Ama.

Oluşturmak istediğiniz çekirdeğin kaynak kodunu indirin ve çıkarın.

Sen alabilirsiniz memba de çekirdek kaynak kodunu kernel.org . Versiyon 3.16.1 (bu yazıdaki en son kararlı çekirdek) burada kullanılacaktır. Dolayısıyla, farklı bir sürüm kullanıyorsanız bu komutları değiştirmeniz gerekebilir.

Şu anda çekirdek kaynak kodu verilmiştir. katran . xz arşivleri, istediğiniz sürüme göre "tar.xz" bağlantısını tıklayın:

kernel.org'dan ekran görüntüsü, çekirdek kaynak arşivlerini indirmeye hazır

cdArşivi indirdiğiniz dizine girdikten sonra , çıkartın tar:

tar xf linux-3.16.1.tar.xz

Gerekli yapı araçlarını kurun ve çekirdek konfigürasyonunu gerçekleştirin.

Ubuntu'nun almak için toolchain ( gcc, makeve benzeri) yükleyin birikmesi gerekliBuild-essential yükleyin meta pakettir:

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

Çekirdeğinize neyin girdiğini yapılandırmanın kullanıcı dostu iki yolu makehedefler xconfigve tarafından sağlanır menuconfig.

xconfigmenuconfigmetin tabanlıyken bir grafiksel yapılandırma yardımcı programını çalıştırır (yani arayüzü tamamen terminalinizde görünür). Her bazı ek yazılım gerektirir değil tarafından sağlanan build-essentialBuild-essential yükleyin .

Grafik olarak yapılandırmak için libqt4-devLibqt4-dev yükle ve pkg-config Pkg-config'i yüklekomutunu kurunve çalıştırınmake xconfig:

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

Terminalde konfigüre etmek için kurunlibncurses5-dev(bu bilgiiçin Hannu'ya teşekkürler) ve çalıştırınmake menuconfig:

sudo apt-get install libncurses5-dev
make menuconfig

Yapılandırılmış çekirdeği oluşturun.

İlk önce çekirdeği derlemek ve yaratmak için şunu çalıştırın vmlinuz:

make

vmlinuz"çekirdek" dir. Özellikle, GRUB veya kullandığınız diğer önyükleme yükleyicileri tarafından sıkıştırılmamış ve belleğe yüklenecek olan çekirdek görüntüdür .

Sonra yüklenebilir çekirdek modülleri oluşturun :

make modules

Yeni inşa ettiğiniz çekirdeği takın.

Bu makekomutların başarıyla tamamlandığını varsayarsak , yeni çekirdeği kurma zamanı geldi. İlk önce modülleri kurun:

sudo make modules_install

Sonra çekirdeği kurun :

sudo make install

Bu vmlinuz-3.16.1(bir kopyasını vmlinuz), config-3.16.1(çekirdek yapılandırma parametrelerini saklayan bir metin dosyası) ve System.map-3.16.1( çekirdek sembolü arama tablosunu ) içine koyar /boot. Daha fazla ayrıntı için, bu comp.os.linux.misc yazısına Hadron ve man installkernel.

Son kurulum, böylece çekirdek başlatılabilir ve sistemi önyükleyebilirsiniz:

Bu bölüm kısmen Çekirdek / Derleme'deki bilgilere dayanmaktadır .

Şimdi olması gereken çekirdeğe ihtiyaç duyulduğunda:

İnitramfs'inizi şununla oluşturunmkinitramfs :

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

9.10'dan beri Ubuntu'da varsayılan olan GRUB2 önyükleyici yapılandırmasını güncellediğinizde, yeni çekirdeği otomatik olarak algılamalı ve önyükleme için bir seçenek eklemelidir.

sudo update-grub

Çekirdeğini dene.

Şimdi yeni çekirdeğinizi test etmek için yeniden başlatabilirsiniz. Kurulu olan farklı çekirdekler arasında seçim yapabileceğiniz GRUB açılış menüsünü görmek için önyükleme sırasında basılı tutmanız Shiftveya basmanız gerekebilir Esc.

Çekirdeğinizi (veya başka bir tanesini) varsayılan yapmak için GRUB açılış sırasını nasıl değiştiririm?


Adım 3, make menuconfiggerektirirapt get install libncurses5-dev
Hannu

@Hannu teşekkür ederim, sadece bundan bahsetmeyi unuttum. 64 bit sistem kullanıcıları, 32 bit programların çalışması için de "ia32-libs" gerektirebilir.
Acemi

Versiyondan bağımsız bir paket bulmak da daha iyi olabilir ... Herhangi bir şey olduğundan emin değilim.
Hannu

@EliahKagan Teşekkürler. Şimdi tamam mı yoksa tamamen silmeli miyim? Bunu yaparken hiçbir sorunum yok.
Acemi

1
-1 Bu bir Ubuntu çekirdeği üretmez . .Deb dosyaları bile üretmiyor. Bu sorunlar için bir reçetedir.
Aleksandr Dubinsky

3

Bir Ubuntu çekirdeği (vanilya yerine) oluşturmak için kısa talimatlar burada bulunabilir: https://wiki.ubuntu.com/Kernel/BuildYourOwnKernel .

Wiki'nin tamamını kopyalamam, ancak şu anda yüklediğiniz Ubuntu çekirdeğinin sürümünü derlemek için gereken minimum adımları listeleyeceğim. (En yeni sürümü edinmek için, yaklaşmakta olan Ubuntu sürümünün çekirdek git deposunu klonlayın.) Ubuntu 16.04'te test edildi.

# 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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.