Bir çekirdek kaynak ağacı ne içerir? Bu Linux çekirdek başlıklarıyla mı ilgili?


25

Kitaplarda, ben genellikle Linux Kaynak Ağacı başvurular okumak /usr/src/linuxalt dizin olağan seti ile ( arch, block, crypto, ...).

Bu ağacın çekirdeği oluşturan ikili dosyaları içermesini bekliyordum. Sistemimde (Ubuntu 10.04) ...

  1. Sahip olduğum farklı çekirdekler için (otomatik yazılım yüklemeleri kullanarak, manuel olarak yüklenmemiş), bu konumda her bir çekirdek için iki alt dizini aşağıdaki şekilde buldum:

    /usr/src/linux-headers-2.6.32-22
    /usr/src/linux-headers-2.6.32-22-generic
    
  2. Alt dizinlerde diğerlerinin yanı sıra ikili dosyaları beklerdim. Ancak, ağaç miktarını oldukça kontrol ettim ve buradaki son alt dizinde her zaman bir tane var Makefile(okurken, genellikle bir yapılandırma dosyası daha sonra bir yükleme dosyası gibi geliyor) ve bazen de birkaç izole edilmiş başka dosya gibi görünüyor. (çoğunlukla Kconfig).

Sorum saf olabilir ama biraz kafam karıştı. (2) Çekirdek Kaynak Ağacında görmeyi beklemeliyim; ve neden 'başlıklara' açık bir referansım var? linux-generic-headersBir süre önce başka bir yazılım için yüklemem gerekiyordu ve bunun bir sorun olup olmadığından emin değilim. Makefiles (örneğin, / driver alt dizinine modüller kurmak için) için iyi bir neden olduğunu biliyorum, fakat (hemen hemen) sadece makefiles?

Yanıtlar:


30

Dağıtım kernel-headerpaketleri, adından da anlaşılacağı gibi, yalnızca çekirdek modülleri gibi yazılımlar oluşturmak için gereken çekirdek başlık dosyalarını (ayrıca gerekli tesisat) içerir.

İkili dosyaları derleme çıktısı dışında bir çekirdek kaynak dizininde bulmayı beklememelisiniz . (Bir çekirdeği kendiniz yapılandırır ve derlerseniz, çekirdek kaynak dizini, derlenmiş nesneleri, modülleri, yerleşik çekirdeğin kendisini ve çalışmasını sağlayan birkaç başka ikili bit ve parçayı da içerecektir.)
KConfigDosyaları, çekirdek yapılandırma seçeneklerinin açıklamasıdır. (ve onların bağımlılıkları) verilen bir dizin / modül için mevcut.
Bunun dışında, hepsi (çoğunlukla) C kaynak kodu, başlık dosyaları ve Makefiles. Burada ve orada birkaç yardımcı komut dosyası ve ayrıca montaj kaynağı var.

Başlık paketleri (yükledikleriniz) yalnızca yukarıdakilerin başlık bölümünü içerir (bunların tümünü değil - yalnızca "dışa aktarılan" başlıkları) ve bazı yapı altyapısını içerir. Yani ne görüyorsun bekleniyor. Başlık paketleri yok (bazı kütüklerden ve yapı altyapı kodu hariç) C kaynak kodunu içerir. Bu tür bir pakete sahip olmanın asıl amacı yerden (ve bant genişliğinden) tasarruf sağlamaktır - tüm Linux çekirdeği kaynak ağacı oldukça büyüktür ve çekirdeği kendiniz hazırlamak istemiyorsanız tamamen gereksizdir. Başlık paketleri, modüller oluşturmak için gereken doğru şeyleri sağlamak için dağıtımlar tarafından üretilir ve gönderilir, ancak daha fazlası yoktur. (Derlenmiş çekirdeği kesinlikle içermezler.)

Yorumunuzu ele almak: başlık paketleri hiçbir yere taşınmaz. Belirli bir dizinde paketlenmiş çekirdeğin belirli sürümleri için üretilirler, işte bu kadar. Bu sadece bir dosya seti. (Başlık paketlerinin mutlaka geçerli çekirdek ikili paketleriyle aynı sürümde olmadıklarını unutmayın - başlık paketleri geneldir ve çalıştırmakta olduğunuz asıl çekirdeğin gerisinde kalabilir. Ancak, bunlar bir çekirdekten olmamalıdır) Geçerli yüklü (veya hedef) çekirdekten daha yeni olan sürüm.)

Yüklenen çekirdek ikili dosyaları genellikle /bootönyükleyici ikili dosyaları ve yapılandırma dosyalarıyla birlikte dizine yüklenir . (Bu bazen varsayılan olarak monte edilmeyen bağımsız bir dosya sistemidir.) Dosyaların tam adı çekirdeğe ve dağılıma bağlıdır. (Önyükleyici de öyle.)

Yüklü çekirdek modülleri aşağıdaki alt dizinlerde bulunur:

/lib/modules/`uname -r`/

Mesela benim sistemimde şu anda

/lib/modules/3.1.4-gentoo/

Tam çekirdek kaynak kodu : Tam çekirdek kaynakları bir çekirdeğe kendini inşa etmek istiyorsanız Açık Ubuntu, buradaki talimatları uygulayarak yüklemelisiniz burada .

Ayrıca bir kaynak arşivini indirecek olabilir kernel.orgve (do yere paketten değil bu tarball kullanırsanız, kişisel eşyalarını ve RPM ayrı tarafından yönetilen şeyler tutmak üzerine yazma Ubuntu yüklü dosyaları).

/usr/src/linuxçekirdek kaynaklarını koymak için geleneksel bir yerdir, ancak hiçbir şey çekirdek kaynaklarını başka bir yere koymanızı engellemez. Bu yol aynı zamanda genellikle sadece bir dizine sembolik bir bağlantıdır. örneğin, makinemde bu var:

 $ ls -l /usr/src/linux
lrwxrwxrwx 1 root root 18 Dec  7 17:03 /usr/src/linux -> linux-3.1.4-gentoo

Sembolik bağlantı, çekirdek kaynağına bağlı olan bina uygulamalarını basitleştirmek için vardır. Bu yolu çalışan (veya hedef) çekirdeğinize bağlarsınız, böylece bir ağaç dışı modül oluştururken tam sürüm veya yol bilgisi belirtmeniz gerekmez. En azından kaynak tabanlı dağıtımlar için bir demet yardımcı olur.


Bu ayrıntılı ve tam cevap için çok teşekkür ederim. Bu beni bir süredir rahatsız ediyordu. Eğer karşılamamı fazlasıyla uzatamazsam ve zamanı bulursanız, aşağıdakileri ekleyerek nazikçe ekleyebilir miyim: (a) benim durumumda (kendi kendine yüklenen çekirdeği olmayan) alttan bazılarını (biri) yukarıdakileri okudum Dizinler çekirdek (C) ve Assembler kaynak kodunu içermelidir. Bu nerede olur - tam bir liste değil, yalnızca alt dizinlerin belki 20 - 30'una göz attığımda olduğu gibi, hiç karşılaşmadım mı? Çekirdek kaynak dosyalarını kernel.org adresinden indirdim; Sadece sistemimi daha iyi anlamak için. (b) ...
gnometorule

... peki benim durumumda olduğu gibi, çekirdeği kendiniz kurmadığınızda çekirdek ikili dosyaları nerede (genel olarak) bulunur? (c) 'linux-generic-headers' olarak aldığım "başlık paketlerine" bakın. Bu paketlerden gördüğüm ağaç mı? Eğer evet ise, kurulumdan önce kaynak ağacın bulunduğu yere taşınırlar mı? Tekrar çok teşekkürler.
gnometorule

(Cevap verirseniz, 'answer'not comment'i kullanın, böylece en azından yardımınız için sizi tekrar
oylayabilirim

Biraz genişledi. Başlık paketleri, başlıklar içindir. Tam kaynak paketleri tam kaynak kodu sağlar. İkili paketler yalnızca ikili dosyaları sağlar.
Mat

5
linux-sourceyukarı akış kaynağını içerir, apt-get source linux-image-$(uname -r)çekirdeğin kaynağını Ubuntu 'yamalarıyla birlikte alır.
Lekensteyn
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.