it-swarm-tr.com

Kendi linux çekirdeğinizi derlemenin yararı nedir?

Bir Linux çekirdeğini kendim derleyerek ne fayda görebilirim? Donanımınıza göre özelleştirerek oluşturabileceğiniz bir verimlilik var mı?

107
jjclarkson

Zihnimde, kendi linux çekirdeğinizi derlemekten elde edebileceğiniz tek fayda:

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

Ne olursa olsun daha fazla hız/bellek/xxx için yapmanız gereken bir şey değildir. Gelişiminizde olduğunuzu hissettiğiniz aşama buysa, yapmak değerli bir şeydir. Tüm bu "açık kaynak" şeyin ne hakkında, çekirdeğin farklı bölümlerinin nasıl ve ne hakkında olduğu hakkında daha derin bir anlayışa sahip olmak istiyorsanız, o zaman bir şans vermelisiniz. Eğer önyükleme sürenizi sadece 3 saniye hızlandırmak istiyorsanız, o zaman ... amaç nedir ... gidin bir SSD satın alın. Merak ediyorsanız, öğrenmek istiyorsanız, kendi çekirdeğinizi derlemek harika bir fikirdir ve muhtemelen çok şey alacaksınız.

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

  • Sistemi sınırlı kaynaklarla donanımda önyükleme/çalıştırma için almam gerekiyor
  • Bir yamayı test etmem ve geliştiricilere geri bildirim sağlamam gerekiyor
  • Çakış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ı artırmam gerekiyor çünkü sistemin mevcut sınırlarına ulaşıyorum (ve ne yaptığımı biliyorum)

Mesele, her şey olması gerektiği gibi çalıştığında kendi çekirdeğinizi derlemenin bazı yararları olduğunu düşünmekte yatıyor ve öyle olduğunu düşünmüyorum. İhtiyacınız olmayan şeyleri devre dışı bırakarak ve tweakable şeyleri ayarlayarak sayısız saat harcayabilirsiniz, ancak linux çekirdeği zaten (dağılımınızla) çoğu için oldukça iyi ayarlanmış kullanıcı durumları.

75
gabe.

Çoğu kullanıcının kendi çekirdeğini derlemesi gerekmez, dağıtımları bu işi onlar için yapmıştır. Genellikle dağıtımlar, dağıtımın çalışma bölümlerinin belirli bölümleriyle, aygıt sürücülerinin backport'larıyla ve daha yeni ama yayınlanmamış çekirdekli sürümlerinden veya kullanıcılarıyla öncülük ettikleri özelliklerden gelen düzeltmelerle entegre etmek için bir dizi yama içerir.

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

Çekirdeğinizi yeniden oluşturmak isteyebileceğiniz nedenler şunlardır:

  • Tek bir düzeltme veya iki düzeltme için tüm çekirdeği yükseltmeyi gerçekten riske edemeyeceğiniz bir üretim sistemine hatalar yamalamak veya belirli bir özellik eklemek.
  • Belirli bir aygıt sürücüsünü veya yeni bir özelliği denemek için
  • Çekirdeği genişletmek için üzerinde çalışın
  • bazı "Alfa" modüllerinin veya özelliklerinin test edilmesi.

Birçok geliştirici, gömülü sistemler veya settop kutuları için özel aygıt sürücülerine ihtiyaç duydukları veya ihtiyaç duymadıkları işlevleri kaldırmak istedikleri için çekirdeğin özel sürümlerini oluşturmak için bunu kullanır.

36
miguel.de.icaza

Çekirdeği kendiniz derlemek, yalnızca bilgisayarınızla ilgili kısımları eklemenize izin verir, bu da özellikle önyükleme zamanında daha küçük ve potansiyel olarak daha hızlı olmasını sağlar. Genel çekirdeklerin mümkün olduğunca fazla donanım desteği içermesi gerekir; önyükleme sırasında bilgisayarınıza hangi donanımın bağlı olduğunu algılar ve uygun modülleri yükler, ancak bunların tümünü yapmak zaman alır ve kodu doğrudan çekirdeğe dönüştürmek yerine dinamik modülleri yüklemeleri gerekir. Bilgisayarınızda yalnızca bir tane olduğunda çekirdeğinizin 400 farklı CPU'yu desteklemesinin veya eğer yoksa Bluetooth farelerini desteklemenizin bir nedeni yoktur, boş alanınız boşa harcanır

30
Michael Mrozek

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

Bu tamamen yanlış. Gereksiz kod kaldırmak, hem de çoğunlukla donanım ile ilgili performans arttırıcı kod dahil olmak üzere rutin olarak çekirdeklerimi özel olarak inşa ediyorum. Örneğin, bazı eski donanımları çalıştırıyorum ve bu yerleşik olan bazı eski MoBoslarda HPT36x yonga seti desteği gibi nadiren etkinleştirilen Çekirdek sürücülerini etkinleştirerek bazı performans kazançları elde edebiliyorum.

Başka bir örnek olarak, Slackware altında BIG SMP varsayılan değerdir ve örneğin bir Dell 2800'de GFSD (çekirdek modülü olarak değil) gibi şeyleri çalıştırmak için büyük bir ayak izi tüketir, bu arada bu da bir şey için CPU keneleri tüketir gerek yok. Aynı şekilde NFSD ve diğer tüm alıcılar için sadece bir kutuya bir Linux almaya çalışıyorsanız ve koşuyorsanız, ancak "hız/bellek/xxx ne olursa olsun" ilgileniyorsanız iyi olan tüm zihniyetleri memnun edecekler. .

Tüm üretim kutularım özel çekirdekler. Dell serisi (2800, 2850, 2900, vb.) Donanım gibi yaygın bir donanımdaysam, çekirdeğin .config dosyasını her bir kutuya kopyalayıp çekirdeği derlemek ve yüklemek basit bir iştir.

24
Eric

Kendi çekirdeğinizi derlemenin size fayda sağlayacağı bazı durumlar şunlardır:

  • Modül yükleme devre dışı olan bir çekirdek daha güvenlidir. Bu, ihtiyacınız olduğunu bildiğiniz modülleri seçmenizi ve bunları modül 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 sakatlanması 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'leri kullanmamayı tercih ederim. Çekirdeğini önyükleme yaptığı donanıma özelleştirmek initrd'i ortadan kaldırır.

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

  • Ağ protokollerini/ihtiyacınız olmayan seçenekleri devre dışı bırakmak TCP/IP performansınızı hızlandırabilir.

  • İhtiyacınız olmayan seçenekleri devre dışı bırakmak çekirdeğin bellek alanını azaltır, bu da düşük RAM ortamlarda önemlidir. 256MB RAM sistem bir yönlendirici, bu yardımcı olur.

  • Genelde sadece seri veya ssh ile giriş yaptığım sistemlerde/dev'de tüm "tty" aygıtlarını rahatsız edici buluyorum.

14
LawrenceC

Çekirdeğinizi derlemek, yeni bir aygıtın sizin için çalışmasını sağlayabilecek mevcut bir sürücü için PCI/USB aygıt kimlikleri sağlamak, çekirdeğe daha fazla dahil olmak için çekirdek geliştirme sürecine katılmanıza izin verir. ç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 tanır. Bu, nadir bir donanımınız varsa, size ve diğerlerine özellikle yardımcı olabilir. Bir dağıtım çekirdeği için beklerseniz, sorun raporlarınızdaki düzeltmelerin yeni bir dağıtım çekirdeği sürümüne süzülmesi biraz zaman alabilir.

Ayrıca şahsen kendi donanımlarımı sadece sahip olduğum donanıma destek verecek şekilde derlemeyi seviyorum. Dağıtım çekirdeklerini çalıştırıp lsmod(8) çıkışına baktığınızda, sahip olmadığınız donanımlar için yüklü birçok modül görürsünüz. Bu, modül listesini,/proc,/sys ve günlüklerinizi kirletebilir, böylece bir şey ararken gürültü 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.

7
camh

İkinci gabe.'nin cevabını (yorumum çok uzun, bu yüzden cevap olarak gönderiyorum).

Çok özel bir amacınız yoksa (örn. Gömülü makineler, katı güvenlik profili), kendi çekirdeğinizi derlemenin nasıl yapıldığını görmek dışında pratik bir fayda görmüyorum. Seçenekleri yöntemsel olarak inceleyerek, sistemi oluşturmak için birbirleriyle nasıl etkileşime girdiklerini görmek, sisteminizin nasıl çalıştığını anlamanın harika bir yoludur. Gerçekleştirmeye çalıştığınız görevler için herhangi bir amacı olmadığı anlaşılan bileşenleri kaldırmaya çalıştığınızda öğrendikleriniz şaşırtıcı.

Ancak uyarılmalıdır - neden tavşan deliğinden aşağı atlamak şüphesiz canlandırıcı, mümkün olduğunu düşündüğünüzden daha fazla gece ve hafta sonu emecek!

6
gvkv

İş yerinde, vserver ve unionfs gibi ağaç dışı yamaları uygulamak için elle haddelenmiş çekirdekleri kullanıyoruz.

Evde, hangi taahhüdün yaşadığım bir hatayı getirdiğini bulmak için elle haddelenmiş çekirdekleri derliyorum. Bunu bitirdikten sonra, muhtemelen dağıtımımdaki (Debian) hata düzeltilene kadar elle haddelenmiş bir çekirdeğe yapışacağım, bu noktada tekrar çekirdeklerine geri döneceğim.

3
jmtd

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

Cevap: İstediğiniz linux çekirdeğini ihtiyacınıza ve gereksinimlerinize göre derlersiniz.

Birçok senaryo geçerlidir:

  1. Siz bir mühendissiniz ve sisteminizin performans ve güvenlik gereksinimlerini/taleplerini karşılaması için derlemenizi gerektirir, belirtilen kriterleri karşılamak ve/veya aşmak için yeniden derlersiniz.

  2. Normal bir kullanıcısınız ve olabildiğince uzun süre devam etmek istediğiniz eski bir sisteminiz var, eski sisteminizi optimize etmek için bileşenler eklemek/kaldırmak için yeniden derlersiniz.

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

  4. Sadece bir Microsoft ve/veya Mac günlük kullanıcısı gibi olmak istiyorsunuz, yeniden derlemeyin ve yukarı akış dağıtımınızdaki güncellemelerle devam edin.

  5. Senaryoların gelmesini sağlayın :-)

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

2
user4565

Özel derlenmiş çekirdeklere sahip olmak için burada bahsedilenlerin yanında başka bir durum da, modül yüklemesinin mümkün olmadığı özel ağ önyükleme ortamları oluşturmak ve belirli işler için tam çalışan çekirdekleri belirli makinelere aktarmak zorunda kalmanızdır.

1
Caleb

Kimsenin özel bir çekirdek derlemek için bu nedenden bahsetmediğine ş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. Ve Intel, her ikisi de yüksek performanslı bir linux çekirdeği üretmek için vazgeçilmez olan performans ilkel kütüphanelerini ve vtune aracını sağlar. Şimdiye kadar sadece GCC ve G ++ ile gidebilirsiniz. Pratik olarak ne yaparsanız yapın sonuç derleyici tarafından sınırlandırılacaktır. Bu yüzden, Intel derleyici ve performans kitaplıklarını kullanıyorum Biraz büyük - 1.5GB indirme, ancak bu iyi bir derleyicide neler olduğu hakkında biraz fikir veriyor.

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

O zaman ciddi bir hız elde edebilirsiniz!

1
SwanSword

Çoğu kullanım için genel çekirdekler neredeyse tüm donanımlar için iyidir. Ek olarak, genellikle (ed) dağılıma özgü yamalar içerirler, böylece kendi çekirdeğinizi derlemek sorunlara neden olabilir (olabilir).

Kendi çekirdeğinizi derlemek için rezon:

  • Kaynak tabanlı dağıtım kullanıyorsunuz, böylece 'jenerik' çekirdek yok
  • Siz çekirdek geliştiricisiniz ve çekirdek geliştiriyorsunuz
  • Çekirdeği, örneğin çok sınırlı sabit sürücüye sahip yerleşik aygıt için özelleştirmelisiniz
  • Bazı sürücüler derlenmemiş (çok nadir bir durum)
  • Çekirdeği düzeltmek istiyorsunuz VE ne yaptığınızı biliyorsunuz
  • Çekirdeği nasıl derleyeceğinizi öğrenmek istiyorsunuz

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

1
Maciej Piechotka