Kendi linux çekirdeğinizi derlemenin faydası nedir?


101

Bir Linux çekirdeğini kendim derleyerek ne yararı olabilirim? Donanımınıza göre özelleştirerek üretebileceğiniz bir verimlilik var mı?


basit bir soru yararı nedir olduğu hale belirsiz ya da çok hızlı bir şekilde bağlam dışında alınan. What are the pros and cons of compiling your own kernel? Eksileri sormak daha iyi olurdu = kolay değil, birçok durumda katma değer yok. Artıları = güvenlik, performans, ne yaptığınızı biliyorsanız, örneğin NAS cihazları, bazı donanımların çalışmasını sağlamak ve ağ oluşturma ve grafik yeteneğine sahip olmak için linux kullanma.
ron

Yanıtlar:


73

Aklımda, kendi linux çekirdeğinizi derlemekten elde edeceğiniz tek yarar şudur:

Kendi linux çekirdeğinizi nasıl derleyeceğinizi öğrenirsiniz.

Daha fazla hız / bellek / xxx için yapman gereken bir şey değil . Gelişiminizde olduğunuzu düşündüğünüz aşama bu ise yapılması gereken değerli bir şeydir. Bütün bu "açık kaynak" olayının ne hakkında olduğu, çekirdeğin farklı kısımlarının ne olduğu ve ne olduğu hakkında daha derin bir anlayışa sahip olmak istiyorsanız, bir adım atmalısınız. Önyükleme sürenizi 3 saniye kadar hızlandırmak istiyorsanız, o zaman ... anlamı ne ... git bir SSD al. Merak ediyorsanız, öğrenmek istiyorsanız, kendi çekirdeğinizi derlemek harika bir fikir ve muhtemelen bundan çok şey kurtulacaksınız.

Bununla birlikte, kendi çekirdeğinizi derlemenin uygun olacağının bazı nedenleri vardır (birkaç kişi diğer cevaplarda belirtildiği gibi). Genellikle bunlar, belirli bir sonuç için sahip olduğunuz özel bir ihtiyaçtan kaynaklanır, örneğin:

  • Sistemin sınırlı kaynaklarla donanıma açılmasını / çalışmasını sağlamalıyım
  • Bir yamayı test etmem ve geliştiricilere geri bildirimde bulunmam gerekiyor
  • Bir çatışmaya neden olan bir şeyi devre dışı bırakmam gerekiyor
  • Linux çekirdeğini geliştirmem gerekiyor
  • Desteklenmeyen donanımım için desteği etkinleştirmem gerekiyor
  • X'in performansını arttırmam gerekiyor çünkü sistemin mevcut sınırlarını aşıyorum (ve ne yaptığımı biliyorum)

Mesele, her şey olması gerektiği gibi çalıştığı zaman kendi çekirdeğinizi derlemenin kendine özgü bir yararı olduğunu düşünmemize dayanıyor ve bunun olduğunu sanmıyorum. Gereksinim duymadığınız şeyleri etkisiz hale getirmek ve tweakable şeyleri ince ayarlamak için sayısız saat harcayabilseniz de, gerçek şu ki linux çekirdeği çoğu kullanıcı durumu için (dağıtımınız tarafından) zaten oldukça iyi ayarlanmış durumda.


25
Basitçe öğrenme deneyimi için kendi çekirdeğinizi oluşturmak istiyorsanız, Gentoo veya Linux From Scratch gibi kaynak tabanlı bir Linux dağıtımı ile yaptığınızı iddia ediyorum. Gentoo Aşama 2 kurulum belgeleri, Linux'u çekirdekten kurmanın ne demek olduğunu anlamak için mükemmel bir rehberdir.
Sandy

Kabul edildi ... bu iki proje bu tür bir şey için inşa edildi.
gabe.

Elbette biliyorsunuz, cevabınızla kendinizle çelişiyorsunuz. Çekirdeği derlemenin tek faydası nasıl yapılacağını öğrenmek olsaydı, o zaman işe yaramaz olurdu - değeri yoktur. Ama sonra birkaç kelime sonra bunun değerli bir şey olduğunu söylersiniz ...
rozcietrzewiacz

@ rozcietrzewiacz Bilgi en yüksek değere sahip. Çekirdeği derlemek bilginizi genişletmenize yardımcı olur. Bunu satın almazsanız, o zaman işte bu - bilgi güçtür ve insanlar güç elde etmek için iyi para ödüyorlar ve para bugünün dünyasında değer taşıyor, yani geçişli mülk tarafından ....: P
lunchmeat317

Katılıyorum, sadece kazanılan bilgi için buna değer.
1100110

35

Çoğu kullanıcının kendi çekirdeğini derlemesi gerekmez, dağıtımları bu işi kendileri için yapar. Genellikle dağıtımlar, dağıtımın çalışma şeklinin belirli bölümleriyle, aygıt sürücülerinin desteklerini ve çekirdeğin daha yeni, ancak yayımlanmamış sürümlerinin düzeltmelerini veya kullanıcılarına öncülük ettikleri özellikleri içeren bir dizi ek içerir.

Kendi çekirdeğinizi derlerken, birkaç seçeneğiniz vardır, resmi bir Linus Torvalds çekirdeğini derleyebilirsiniz, bu, dağıtımınız tarafından eklenen (iyi veya kötü olabilir) herhangi bir düzeltme ekini veya özelleştirmeyi içermez. Kendi çekirdek oluşturmak için dağıtım yeniden aracınızı kullanın.

Çekirdeğinizi yeniden oluşturmak isteyebileceğiniz nedenler arasında şunlar vardır:

  • Tek bir düzeltme için çekirdeğin tamamını yükseltme riskini alamayacağınız bir üretim sistemine hata ayıklamak veya belirli bir özellik eklemek.
  • Belirli bir aygıt sürücüsünü veya yeni bir özelliği denemek için
  • Çekirdeği uzatmak için üzerinde çalışın
  • "Alpha" modüllerinin veya özelliklerinin bazılarının test edilmesi.

Birçok geliştirici, özel aygıt sürücülerine ihtiyaç duydukları gömülü sistemler ya da set üstü kutuları için özel çekirdeği sürümleri oluşturmak için de kullanır ya da ihtiyaç duymadıkları işlevleri kaldırmak isterler.


8
+1. Bu günlerde çocuklar, 'menuconfig' yapmanın ne anlama geldiğini bile bilmiyorlar ve senaryo çocuklarının merak etmesini önlemek için çekirdek ağ kodlarını yamalamak zorunda kalmıyorlardı. Neyse ki o günler çoğunlukla gitti.
axel_c

2
bisectbir hatanın nerede ortaya
çıktığını

1
OP'nin sorusu ile ilgisi olmadığı zaman bu yorumun nasıl yapıldığına şaşırtıcı geliyor. "Çoğu kullanıcı yapmaz ...." hadi şimdi. OP'nin sorusu faydaları bilmek isteme konusunda çok açık; "çoğu kullanıcının" burada ve orada ne yaptığına dair fikriniz değil.
Eric

30

Çekirdeği kendiniz derlemeniz, yalnızca bilgisayarınızla ilgili kısımları eklemenizi sağlar; bu, özellikle önyükleme sırasında daha küçük ve potansiyel olarak daha hızlı olmasını sağlar. Genel çekirdeklerin mümkün olduğunca fazla donanım için destek içermesi gerekir; önyükleme sırasında, bilgisayarınıza hangi donanımın takılı olduğunu algılar ve uygun modülleri yükler, ancak bunların hepsini yapmak zaman alır ve kodun doğrudan çekirdeğe doldurulması yerine dinamik modüller yüklemeleri gerekir. Bilgisayarınızda yalnızca bir tane olduğunda çekirdeğinizin 400 farklı CPU'yu desteklemesi veya bir tane yoksa bluetooth fareleri desteklemesi için hiçbir neden yok, hepsi boşa harcayabileceğiniz


15
Cevabınızın çoğuna katılıyorum, ancak "çok daha hızlı" hakkında bazı katı gerçekleri merak ediyorum. Yeni bir kullanıcıya, masaüstünün el yapımı bir çekirdekle genellikle daha hızlı çalışacağı izlenimini vermek istemem (Gentoo ile olan deneyimimden dolayı, bu doğru değil). Önyükleme hızındaki kazancı ölçebilir misiniz?
Sandy

2
Bu cevap 15 yıl önce doğruydu, ancak bugünlerde pek alakalı değil. Sürücülerin çoğu yine de modüllerle geliyor, bu yüzden bellekte değil sadece diskte yer alıyorlar. (Veya bazı dağıtımlar hala initrd olmadan mı geliyor? Bir initrd olmadan çekirdeğin önyüklemesi gerekebilecek tüm sürücüleri içermesi gerekir.) Önyükleme süresi için, var olmayan donanımları algılamaya çalışırken bir milisaniyeden fazla harcayan az sayıda sürücü devre dışı bırakılabilir. bir çekirdek önyükleme seçeneği ile.
Gilles,

1
@Michael, doğrulanmamış bir varsayımsa, cevabınızdaki "oldukça hızlı" ifadesini "potansiyel olarak hızlı" ile değiştirmenin iyi bir fikir olmadığını düşünüyorum. :-)
Sandy

3
@Sandy Anlaştık, sanırım n00bs'den biriyim :). Sabit
Michael Mrozek

2
Bence "önemli ölçüde" daha hızlı önyükleme zamanlarından bahsettiğimiz ihtirasla haklı çıktı. Stok dağıtım çekirdeklerinin, kullanmayı planlamadığım herhangi bir donanımı aramamak için sıyrtığım öğenin başlatılması için kolayca 5 - 10 saniye daha uzun sürebilir. Çalışma zamanı hızı muhtemelen göz ardı edilebilir, aslında güvenilir bir şekilde ölçemiyorum.
Caleb,

24

Burada kabul edilen cevabın "Bu daha fazla hız / bellek / xxx için yapmanız gereken bir şey değil" diyerek başladığına inanamıyorum.

Bu tamamen yanlıştır. Gereksiz kodu kaldırmak için Çekirdeklerimi özel olarak oluşturuyorum ve çoğunlukla donanıma ilişkin performans artırıcı kodları da dahil ediyorum. Örneğin, bazı eski donanımları çalıştırıyorum ve HPT36x yonga seti desteği gibi nadiren etkinleştirilmiş Çekirdek sürücüleri gibi bazı yerleşik MoBos'larda bu yerleşik olan bazı MoBos'larda etkin kılmayı sağlayabilirim.

Başka bir örnek, Slackware altındaki BIG SMP varsayılandır ve bir Dell 2800'de, örneğin, GFSD (çekirdek modülü olarak değil) gibi şeyleri çalıştırmak için oldukça fazla bir ayak izi tüketir; gerek yok. Aynı şekilde, NFSD ve diğer her şey için, sadece bir kutuya Linux alıp çalıştırmaya çalışıyorsanız, ancak "hız / bellek / xxx ne olursa olsun" ile ilgileniyorsanız, o zaman önemli olan şey .

Tüm üretim kutuları özel çekirdekler. Dell serisi (2800, 2850, 2900, vb.) Donanımları gibi ortak bir donanım kullanıyorsam, çekirdeğin .config dosyasını her kutuya kopyalayıp çekirdeği derlemek ve yüklemek meselesidir.


3
Bence kabul edilen cevabın asıl amacı, çoğu donanım için, kendi çekirdeğinizi derleyerek kazandığınız performansın, bunun nasıl yapılacağını öğrenmek için gereken zamana değmeyeceği (ve seçeneklerin ne anlama geldiğini öğrenmek) olduğunu düşünüyorum. Muhtemelen deneyimseldir: Bu konuda bazı rakamlar bulmak harika olurdu.
Andres Riofrio

Öyleyse bunu orijinal soruda ifade etmemek utanç vericidir ve sonra iddia ettiğiniz gerekçelerle yanıtı kabul etmelisiniz.
Eric

2
Cevabım kabullenmek benim suçum değil. Ve evet, çekirdeğinizi derlemenizin "bazı performanslar sergilemenize" ya da düşük güçte bir makineye başlamanıza yardımcı olacağı durumlar varken, asıl sorunun belirli bir kişi tarafından sorulmadığını sordum. vaktinden önce ihtiyaç var ve genel anlamda bir çekirdeği derlemenin faydasının ne olduğunu merak ediyordum. Sadece akılda tutulması gereken belirli kişilerin çekirdeğin ince meyvelerinden faydalandığını iddia ediyorum. Cevabım kabul edildiğinden beri, özel çekirdeklerin daha güçlü kullanıcı sebeplerini ele almak için geliştireceğim
gabe.

14

İşte kendi çekirdeğinizi derlemenin size fayda sağlayacağı bazı durumlar:

  • Modül yüklemesi devre dışı bırakılmış bir çekirdek daha güvenlidir. Bu, ihtiyacınız olan modülleri seçmenizi ve bunları modüller olarak derlemenin aksine, çekirdeğin bir parçası olarak eklemenizi gerektirir.

  • / Dev / kmem desteğinin devre dışı bırakılması veya uygun derleyici seçeneğiyle kapatılması güvenlik için iyi bir şeydir. Sanırım çoğu dağıtım bunu varsayılan olarak yapıyor.

  • Mümkün olduğunda initrd's kullanmamayı tercih ederim. Çekirdeğinizi önyüklediği donanıma göre özelleştirmek, initrd'yi ortadan kaldırır.

  • Bazen daha sonraki bir çekirdek sürümü ihtiyacınız olan özelliklere sahip olabilir, ancak bu bugün çok nadir görülür. Debian'ı ilk kullanmaya başladığımda 2.4 çekirdek kullandığımı hatırlıyorum, ancak udev desteği için 2.6 çekirdeğe ihtiyacım vardı.

  • İhtiyacınız olmayan ağ protokollerini / seçeneklerini devre dışı bırakmak TCP / IP performansınızı hızlandırabilir.

  • İhtiyacınız olmayan seçenekleri devre dışı bırakmak, düşük RAM ortamlarında önemli olan çekirdeğin bellek alanını düşürür. Yönlendirici olarak 256 MB RAM sistem kullanıyorsanız, bu yardımcı olur.

  • Genel olarak sadece seri veya ssh ile giriş yaptığım sistemlerde rahatsız edici tüm "tty" aygıtlarını bulurum.


Hepsi doğru. Bununla birlikte, modül yüklemesini kaldırmak önyüklemede sorunlara yol açabilir: çoğu, hepsi olmasa da, bugün yapılan dağıtımlar, modüllerin yüklenmesi gerektiğini varsayar. Modülleri en son kapattığımda, Red Hat önyükleme işlemi sırasında hata mesajlarının ortaya çıkmasına neden oldu.
Mei,

7

Kendi çekirdeğinizi derlemek, daha yeni bir aygıtın çalışmasını sağlayabilecek varolan bir sürücüye PCI / USB aygıt kimlikleri sağlama, çekirdeğin derinliklerine dahil olma gibi, mevcut bir sürücüye PCI / USB aygıt kimlikleri sağlama gibi basit bir şey olup olmadığı gibi çekirdek geliştirme sürecine katılmanıza olanak tanır. çekirdek gelişimi.

Ayrıca donanımınızdaki geliştirme çekirdeklerini test etmenize ve herhangi bir gerileme fark ederseniz geri bildirimde bulunmanıza olanak sağlar. Çok nadir bir donanım parçanız varsa, bu size ve diğerlerine özellikle yardımcı olabilir. Bir dağıtım çekirdeğini beklerseniz, sorun raporlarınızdaki düzeltmelerin yeni bir dağıtım çekirdeği sürümüne filtrelenmesi biraz zaman alabilir.

Şahsen, yalnızca sahip olduğum donanıma destek vermek için kendi çekirdeğimi derlemeyi de seviyorum. Distro çekirdekleri çalıştırdığınızda ve çıktılarına baktığınızda, lsmod(8)sahip olmadığınız donanım için yüklü olan birçok modül göreceksiniz. Bu, modül listesi, / proc, / sys ve loglarınızı kirletebilir, öyle ki bir şeyi ararken gürültünün arasında gizlenebilir; Ayrıca, bu modüllerin teşhis etmeye çalıştığınız bir soruna katkıda bulunmadığından% 100 emin olamazsınız.


6

Ben ikinci cevap veriyorum (yorumum çok uzun, bu yüzden cevap olarak gönderiyorum).

Çok özel bir amacınız olmadığı sürece (örneğin gömülü makineler, sıkı güvenlik profili), kendi çekirdeğinizi derlemenin nasıl yapıldığını görmek dışında pratik bir fayda görmüyorum. Seçenekleri düzenli olarak gözden geçirerek, sistemi oluşturmak için birbirleriyle nasıl etkileşime girdiklerini görmek, sisteminizin nasıl çalıştığını anlamak için harika bir yoldur. Gerçekleştirmeye çalıştığınız görevler için herhangi bir amacı bulunmayan bileşenleri kaldırmaya çalıştığınızda bulduğunuz şey şaşırtıcı.

Ancak, tavşan deliğinden atlamak neden şüphesiz canlandırıcıdır ki, düşündüğünüzden daha fazla gece ve hafta sonları geri çekilir!


3

İş yerindeyken, vserver ve unionfs gibi ağaç dışı yamalar uygulamak için elle yuvarlanmış çekirdekler kullanıyoruz.

Evde, hangi uygulamanın karşılaştığım bir hatayı getirdiğini bulmak için elle yuvarlanmış çekirdekleri derliyorum. Bunu bitirdikten sonra, muhtemelen dağıtımımda (Debian) hata giderilinceye kadar elle haddelenmiş bir çekirdeğe sadık kalacağım, bu noktada yine çekirdeklerine geri döneceğim.


2

Bu konu eski ve henüz soru sorulduğunda olduğu gibi bugün hala geçerli!

Cevap: İhtiyacınız ve gereksinimlerinize göre seçtiğiniz linux çekirdeğini derlersiniz.

Birçok senaryo geçerlidir:

  1. Siz bir mühendissiniz ve tesisinizin sisteminiz için performans ve güvenlik gereksinimlerini / taleplerini karşılamasını gerektirir, belirtilen kriterleri karşılamayı ve / veya aşmayı yeniden derlersiniz.

  2. Siz normal bir kullanıcısınız ve mümkün olduğu kadar uzun süre devam etmek istediğiniz eski bir sisteminiz varsa, eski sisteminizi optimize etmek için bileşen ekleyip / kaldırmayı yeniden derlersiniz.

  3. En hızlı donanıma sahip normal bir kullanıcısınız ve yeterli bellek / RAM'e sahip. Yeniden derlemeye gerek yok, ancak sisteminiz hakkında biraz daha fazla bilgi edinmek istiyorsanız, hala yapabilirsiniz.

  4. Her gün bir Microsoft ve / veya Mac gibi olmak istersiniz, yeniden derlemeyin ve yalnızca dağıtımınızdaki güncellemelere devam edin.

  5. Senaryoların devam etmesini sağla :-)

Mac / Windows kullanıcılarının aksine, Linux'un sağladığı seçimdir. Kolaylaştırma veya sistemi gereksinimlerinize göre optimize etme seçeneği.


1

Çoğu kullanım için jenerik çekirdekler hemen hemen her donanım için iyidir. Ek olarak, genellikle dağıtıma özgü yamaları içerirler, böylece kendi çekirdeğinizi derlemek sorunlara neden olabilir.

Kendi çekirdeğinizi derlemeniz gereken cevap:

  • Kaynak tabanlı dağıtım kullanıyorsunuz, bu nedenle 'jenerik' çekirdek yok
  • Siz çekirdek geliştiricisiniz ve çekirdek geliştiriyorsunuz
  • Örneğin, çok sınırlı bir sabit diske sahip gömülü aygıtlar için çekirdeği özelleştirmelisiniz
  • Bazı sürücüler derlenmedi (çok nadir durumlarda)
  • Çekirdeği yamalamak istiyorsun VE ne yaptığını biliyorsun
  • Çekirdeği nasıl derleyeceğinizi öğrenmek istiyorsunuz

Kaynak tabanlı dağıtım kullanmasaydım çekirdeği hiç derlemeyecektim.


1

Özel olarak derlenmiş çekirdeklere sahip olmak için burada belirtilenlerin yanı sıra, modül yüklemesinin mümkün olmadığı ve belirli işler için belirli makinelere tam olarak çalışan çekirdeği çıkarmak zorunda olduğunuz özel ağ önyükleme ortamları ayarlamaktır.


1

Özel bir çekirdeği derlemek için hiç kimsenin bu nedenden bahsetmemesine şaşırdım:

çünkü farklı bir C / c ++ derleyicisi kullanmak istiyorsunuz. GCC, linux çekirdeğini derlemek için oldukça iyidir. Ama orada çok üstün derleyiciler var! GCC'nin optimizasyonları Intel'in C / C ++ derleyicisinin biraz gerisindedir. Intel, performans ilkel kitaplıklarını ve her ikisi de yüksek performanslı bir linux çekirdeği üretmek için vazgeçilmez olan vtune aracını sunmaktadır. GCC ve G ++ ile sadece şimdiye kadar elde edebilirsiniz. Pratik olarak ne yaparsanız yapın sonuç derleyici tarafından sınırlandırılacaktır. Bu yüzden, Intel derleyicisini ve performans kitaplıklarını kullanıyorum. Bu biraz büyük - 1.5GB indir, ancak bu, iyi bir derleyicide bulunanların ne olduğu hakkında biraz fikir veriyor.

Intel'in C / C ++ derleyicisi ticari olmayan kullanım için ücretsizdir. Ancak, Intel web sitesinde arama yapmak için ticari olmayan lisans Intel c ++ derleyici indirme sayfasını google ile değiştirmek daha kolaydır. Genellikle bir şey için GCC / G ++ kullanmıyorum. Ve programcı olmanıza gerek yok. Siz sadece ortamınızı ayarlayın ve make dosyasındaki iki satırı Intel'in derleyicisine işaret edecek şekilde değiştirin.

O zaman ciddi bir hız kazanabilirsiniz!


-1

Linux'u çok özel bir donanıma kurmak istiyorsanız, bir DS'den daha egzotik olduğunu söyleyin , kendi çekirdeğinizi çapraz derlemeniz gerekir.

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.