Linux çekirdek oluşturma işleminin her aşamasında ne olur?


27

Özel çekirdeklerin nasıl oluşturulacağı ve Ubuntu'nun bu çekirdekleri kullanarak önyüklenmesi hakkında birçok öğretici kitap okudum ve kılavuzları ve önyüklenmiş çekirdekleri başarıyla takip ettim, ancak kılavuzlardaki komutların her birinin ne yaptığını ve gerçekte neler olup bittiğini anlamadım Her komut

Açıklanan prosedür Ubuntu'nun sitesinde ile çok iş yapar fakeroot, dpkg, make-kpkg, bazı initramfs ve diğer korkunç şeyler eserler olduğunu ancak sadece beni ne olup bittiğini anlamaya yardımcı olmuyor.

  • makeLinux çekirdek dizinindeki çıktısı nedir ?
  • "Sıkıştırılmış çekirdek görüntüsü" mü oluşturuyor?
  • "Sıkıştırılmış çekirdek görüntüsü" dosyasının adı nedir ve nereye yerleştirilir?
  • Ne yapar make modules?
  • Should make modulesönce veya sonra yapılabilir make?
  • makeModüllerimi otomatik olarak oluşturmuyor mu ?
  • Önyüklenebilir çekirdekler listesine yeni oluşturulmuş çekirdekleri ekleme işlemi (yalnızca komut listesinde değil İngilizce olarak) nedir?
  • Ne yapar make install?
  • Will make installDaha bir şey yapmak zorunda kalmamak için önyüklenebilir çekirdeklerin benim listesine eklemek?
  • Bir eşdeğeri var make modules_installmı?

Bu birden fazla soruya bölünmelidir.
Ciro Santilli,

Yanıtlar:


34

Üstten...

  • makeçekirdek görüntüyü derler ve bağlar. Bu adlı tek bir dosya vmlinuz.
  • make modulesMçekirdek config sırasında cevapladığınız her soru için ayrı ayrı dosyalar derler . Nesne kodu, yeni oluşturulmuş çekirdeğinize karşı bağlanır. (Yanıtlanan sorular için Ybunlar zaten bir parçasıdır vmlinuzve cevaplanan sorular Niçin atlanırlar).
  • make installyerleşik çekirdeğinizi kurar /vmlinuz.
  • make modules_installçekirdek modüllerini /lib/modulesveya konumuna yükler /lib/modules/<version>.

Kullanılabilir çekirdekleri listesine eklemek ise, önyükleyici tarafından halledilir. Her önyükleyici için farklı, ancak grubx86 ve amd64'te en yaygın olanı bu yüzden bunu açıklayacağım. Aslında oldukça basit. Grub görünüyor /, /bootve /lib/modulesbunun gibi görünüyor çalışan bir çekirdek olabilir ve ekler olabileceği herhangi bir şey için. Ve evet, bu basitleştirilmiş bir tanımdır.

Ubuntu belgelerinde bu ekstra "korkunç şeyler" bir debpaket oluşturmak için ekstra şeylerdir . Sizden daha fazlası için yaparken paketlemek çok daha iyidir. Zaman içinde geçeceksiniz.

Çekirdeği ve modülleri inşa etmek ayrı tutulur çünkü buna ihtiyaç duyan insanlar için (yani çekirdek geliştiricileri) çoğu zaman sadece bir modülde değişiklikler yaparlar. Değişiklikleri uygulayabilir, sadece modülleri yeniden kurabilir ve kurabilirler. Günde 20 kez yapılması gerektiğinde bu çok zaman kazandırır. Tek bir make everythingkomut için hiçbir zaman güncellenmeyecektir . Bunun yerine, make && make modules && make install && make modules_install belgelerin dediği gibi çalıştırın . Yapım süreci, çekirdek geliştiricilerini tercih eder, siz değil. Ve olması gereken de bu.

Gerçekte, çekirdek geliştiricileri veya dağıtıcı paketleyiciler dışındaki hiç kimsenin bir çekirdeği derlemesi için hiçbir neden yoktur. Hemen hemen her durumda, istediğiniz çekirdek özelliği zaten sizin için oluşturulmuştur ve önceden paketlenmiş çekirdeklerden birinde bulunur. İstisnalar var, ancak bugünlerde fazlasıyla nadirdir.

Seni kendi çekirdeğini inşa etmekten caydırdığımdan değil, aslında bunu yapmanı tavsiye ediyorum. Çekirdeğinizi sıfırdan inşa etmenin, her şeyin orada nasıl çalıştığını öğrenmek için paha biçilemez bir uygulama olduğunu düşünüyorum. Kısmen, belki bir gün , ihtiyacı olan istisna olacaksın çünkü . Ancak, genel olarak çekirdek ve önyükleme işlemi hakkında da size çok şey öğretir. Bunu yaptığın için daha iyi bir insan olacaksın.


1
Sürecin insan tarafından okunabilir açıklaması için çok teşekkür ederim. Birkaç şüphem var. Çekirdek derlemem vmlinux üretmedi, vmlinux üretmedi. Farkın sıkıştırma olduğunu düşünüyorum. Görüntüyü manuel olarak sıkıştırmalı mıyım? /vmlinuzKök klasörde bir dizin var mı ? make install yaptığımda bu dizin oluşturulacak ve yeni çekirdek oraya yerleştirilecek mi? Will make modules_installbenim şu anda yüklü modülleri yerine? Vmlinux'umu / boot dizinine yerleştirdiğimi varsayalım, başka bir şey yapmam gerekir mi (grub yapılandırma dosyalarını düzenlemek ve grub güncellemesi yapmak ya da daha sonra bir şey yapmak gibi mi?)
AnkurVj 16:11

3
Haklısın, fark sıkıştırma. Komut make bzimagebunu yapan şey. /vmlinuzİkili dosya, bir dizin değil. Yaklaşık 5 yıldır sadece paketlenmiş çekirdekler yapıyorum, bu yüzden modules_installdoğrudan kurulu bir çekirdek için tam olarak davranışını hatırlamıyorum . Grub, çekirdeğini /bootyardımsız bulacak . Evet, her zaman grub-updateyeni bir çekirdek yükledikten sonra çalıştırmalısınız .
bahamat

bu yüzden make bzimageyerine yapmalıydım make? DO Bir yapmanız gereken make cleanve make bzimagetekrar? By /vmlinuzdosyayı demek kök dizininde veya Linux çekirdek kaynak dizininde oluşturulur?
AnkurVj 16:11

1
Çekirdeğinizin sıkıştırılıp sıkıştırılmadığı önemli değil. Sıkıştırılmamış, sadece biraz daha fazla disk alanı kaplar. Önceden yazılmış herhangi bir şey /mutlak bir yoldur, bu yüzden evet bu kökte bir dosyadır.
bahamat

1
@GuyAvraham Modülleri cevaplandı Y(yani, vmlinuz'un bir parçası). Yanıtlanan Mmodüller yüklenebilir modüller olarak derlenir. Yanıtlanan modüller Nderlenmedi. make modules_installsadece cevaplananlar için geçerlidir M.
bahamat
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.