OnWorks Linux ve Windows Çevrimiçi İş İstasyonları

Logo

İş İstasyonları için Çevrimiçi Ücretsiz Barındırma

<Önceki | İçerik | Sonraki>

5.2. Takım Zinciri Teknik Notları‌

Bu bölüm, genel oluşturma yönteminin arkasındaki bazı mantık ve teknik ayrıntıları açıklamaktadır. Bu bölümdeki her şeyi hemen anlamak şart değildir. Bu bilgilerin çoğu, gerçek bir derleme gerçekleştirdikten sonra daha net olacaktır. Bu bölüme işlem sırasında herhangi bir zamanda başvurulabilir.

görüntü

Bölüm 5'in genel amacı, ana bilgisayar sisteminden izole edilebilecek, iyi olduğu bilinen bir dizi araç içeren geçici bir alan oluşturmaktır. Kullanarak chroot, kalan bölümlerdeki komutlar bu ortamda tutulacak ve hedef LFS sisteminin temiz ve sorunsuz bir şekilde oluşturulmasını sağlayacaktır. Oluşturma süreci, yeni okuyucular için riskleri en aza indirecek ve aynı zamanda en eğitici değeri sağlayacak şekilde tasarlanmıştır.


not

Devam etmeden önce, genellikle hedef üçlü olarak adlandırılan çalışma platformunun adının farkında olun. Hedef üçlünün adını belirlemenin basit bir yolu, yapılandırma.tahmin birçok paket için kaynakla birlikte gelen komut dosyası. Binutils kaynaklarını paketinden çıkarın ve komut dosyasını çalıştırın: ./config.tahmin ve çıktıyı not edin. Örneğin, 32 bit Intel işlemci için çıktı şöyle olacaktır: i686-pc-linux-gnu. 64 bit sistemde olacak x86_64-pc-linux-gnu.

Ayrıca, genellikle dinamik yükleyici olarak adlandırılan platformun dinamik bağlayıcısının adını da unutmayın (standart bağlayıcı ile karıştırılmamalıdır). ld Bu, Binutils'in bir parçasıdır). Glibc tarafından sağlanan dinamik bağlayıcı, bir programın ihtiyaç duyduğu paylaşılan kitaplıkları bulur ve yükler, programı çalışmaya hazırlar ve ardından çalıştırır. 32 bit Intel makinesi için dinamik bağlayıcının adı ld-linux.so.2 (ld-linux-x86-64.so.2 64 bit sistemler için). Dinamik bağlayıcının adını belirlemenin kesin bir yolu, aşağıdakileri çalıştırarak ana bilgisayar sisteminden rastgele bir ikili dosyayı incelemektir: okuma -l | grep yorumlayıcı ve çıktıyı not edin. Tüm platformları kapsayan yetkili referans, shlib sürümleri Glibc kaynak ağacının kökündeki dosya.

not

Devam etmeden önce, genellikle hedef üçlü olarak adlandırılan çalışma platformunun adının farkında olun. Hedef üçlünün adını belirlemenin basit bir yolu, yapılandırma.tahmin birçok paket için kaynakla birlikte gelen komut dosyası. Binutils kaynaklarını paketinden çıkarın ve komut dosyasını çalıştırın: ./config.tahmin ve çıktıyı not edin. Örneğin, 32 bit Intel işlemci için çıktı şöyle olacaktır: i686-pc-linux-gnu. 64 bit sistemde olacak x86_64-pc-linux-gnu.

Ayrıca, genellikle dinamik yükleyici olarak adlandırılan platformun dinamik bağlayıcısının adını da unutmayın (standart bağlayıcı ile karıştırılmamalıdır). ld Bu, Binutils'in bir parçasıdır). Glibc tarafından sağlanan dinamik bağlayıcı, bir programın ihtiyaç duyduğu paylaşılan kitaplıkları bulur ve yükler, programı çalışmaya hazırlar ve ardından çalıştırır. 32 bit Intel makinesi için dinamik bağlayıcının adı ld-linux.so.2 (ld-linux-x86-64.so.2 64 bit sistemler için). Dinamik bağlayıcının adını belirlemenin kesin bir yolu, aşağıdakileri çalıştırarak ana bilgisayar sisteminden rastgele bir ikili dosyayı incelemektir: okuma -l | grep yorumlayıcı ve çıktıyı not edin. Tüm platformları kapsayan yetkili referans, shlib sürümleri Glibc kaynak ağacının kökündeki dosya.

Bölüm 5 oluşturma yönteminin nasıl çalıştığına dair bazı önemli teknik noktalar:

• "Satıcı" alan hedefi üçlüsünü şu şekilde değiştirerek, çalışma platformunun adını hafifçe ayarlayın. LFS_TGT değişken, Binutils ve GCC'nin ilk yapısının uyumlu bir çapraz bağlayıcı ve çapraz derleyici üretmesini sağlar. Başka bir mimari için ikili dosyalar üretmek yerine, çapraz bağlayıcı ve çapraz derleyici mevcut donanımla uyumlu ikili dosyalar üretecektir.


• Geçici kitaplıklar çapraz derlenmiştir. Bir çapraz derleyici doğası gereği ana bilgisayar sisteminden hiçbir şeye güvenemeyeceğinden, bu yöntem ana bilgisayardan yeni araçlara dahil edilen başlık veya kitaplık olasılığını azaltarak hedef sistemin olası kirlenmesini ortadan kaldırır. Çapraz derleme aynı zamanda 32-bit özellikli donanım üzerinde hem 64-bit hem de 64-bit kitaplıklar oluşturma olanağı sağlar.

• GCC kaynağının dikkatli bir şekilde değiştirilmesi, derleyiciye hangi hedef dinamik bağlayıcının kullanılacağını söyler.

Binutils önce yüklenir çünkü yapılandırmak hem GCC hem de Glibc çalıştırmaları, hangi yazılım özelliklerinin etkinleştirileceğini veya devre dışı bırakılacağını belirlemek için birleştirici ve bağlayıcı üzerinde çeşitli özellik testleri gerçekleştirir. Bu, kişinin ilk fark edebileceğinden daha önemlidir. Yanlış yapılandırılmış bir GCC veya Glibc, bu tür bir kırılmanın etkisinin tüm bir dağıtımın oluşturulmasının sonuna kadar görünmeyebileceği, ustaca kırılmış bir takım zincirine neden olabilir. Bir test paketi hatası, genellikle çok fazla ek çalışma yapılmadan önce bu hatayı vurgulayacaktır.

Binutils, derleyicisini ve bağlayıcısını iki konuma kurar, /araçlar/bin ve /araçlar/$LFS_TGT/bin. Bir konumdaki araçlar diğerine sıkı bir şekilde bağlıdır. Bağlayıcının önemli bir yönü, kütüphane arama sırasıdır. Ayrıntılı bilgi adresinden alınabilir. ld onu geçirerek --ayrıntılı bayrak. Örneğin, bir ld -- ayrıntılı | grep ARAMA mevcut arama yollarını ve sıralarını gösterecektir. Hangi dosyaların bağlı olduğunu gösterir. ld kukla bir program derleyerek ve --ayrıntılı bağlayıcıya geçin. Örneğin, gcc dummy.c -Wl,--ayrıntılı 2>&1

| grep başarılı, bağlantı sırasında başarıyla açılan tüm dosyaları gösterir.

Kurulan bir sonraki paket GCC'dir. Çalışması sırasında görülebileceklere bir örnek yapılandırmak olduğu:


hangi montajcının kullanılacağını kontrol etmek... /tools/i686-lfs-linux-gnu/bin/as hangi bağlayıcının kullanılacağını kontrol etmek... /tools/i686-lfs-linux-gnu/bin/ld

hangi montajcının kullanılacağını kontrol etmek... /tools/i686-lfs-linux-gnu/bin/as hangi bağlayıcının kullanılacağını kontrol etmek... /tools/i686-lfs-linux-gnu/bin/ld

Bu, yukarıda belirtilen nedenlerden dolayı önemlidir. Ayrıca, GCC'nin yapılandırma komut dosyasının, hangi araçların kullanılacağını bulmak için PATH dizinlerini aramadığını da gösterir. Ancak, fiili çalışma sırasında gcc kendisi, aynı arama yolları mutlaka kullanılmaz. Hangi standart bağlayıcıyı bulmak için gcc kullanacak, çalıştır: gcc -baskı-prog-adı=ld.

Ayrıntılı bilgi adresinden alınabilir. gcc onu geçirerek -v kukla bir program derlerken komut satırı seçeneği. Örneğin, gcc -v kukla.c dahil olmak üzere önişlemci, derleme ve montaj aşamaları hakkında ayrıntılı bilgi gösterecektir. gcc' arama yolları ve sıralarını içerir.

Sonraki yüklenenler, sterilize edilmiş Linux API başlıklarıdır. Bunlar, standart C kitaplığının (Glibc) Linux çekirdeğinin sağlayacağı özelliklerle arabirim oluşturmasını sağlar.

Kurulan bir sonraki paket Glibc'dir. Glibc oluşturmak için en önemli hususlar derleyici, ikili araçlar ve çekirdek başlıklarıdır. Derleyici genellikle bir sorun değildir, çünkü Glibc her zaman aşağıdakilerle ilgili derleyiciyi kullanır. --ev sahibi yapılandırma komut dosyasına geçirilen parametre; örneğin bizim durumumuzda derleyici i686-lfs-linux-gnu-gcc. İkili araçlar ve çekirdek başlıkları biraz daha karmaşık olabilir. Bu nedenle, risk almayın ve doğru seçimleri uygulamak için mevcut yapılandırma anahtarlarını kullanın. çalıştırıldıktan sonra yapılandırmak, içeriğini kontrol edin yapılandırma.make içindeki dosyayı glibc-inşa tüm önemli ayrıntılar için dizin. kullanımına dikkat edin CC="i686-lfs-gnu-gcc" hangi ikili araçların kullanıldığını ve -nostdinc ve -isistem derleyicinin içerme arama yolunu kontrol etmek için bayraklar. Bu öğeler, Glibc paketinin önemli bir yönünü vurgular - yapı makineleri açısından kendi kendine yeterlidir ve genellikle araç zinciri varsayılanlarına dayanmaz.

Binutils'in ikinci geçişi sırasında, --with-lib-yolu kontrol etmek için anahtarı yapılandır ld'nin kitaplık arama yolu.

GCC'nin ikinci geçişi için, GCC'ye yeni dinamik bağlayıcıyı kullanmasını söylemek için kaynaklarının da değiştirilmesi gerekir. Bunun yapılmaması, GCC programlarının kendilerinin, ana bilgisayar sisteminden dinamik bağlayıcının adına sahip olmalarına neden olacaktır. / lib onlara gömülü dizin, bu da ana bilgisayardan uzaklaşma hedefini ortadan kaldırır. Bu noktadan itibaren, çekirdek araç zinciri bağımsızdır ve kendi kendine barındırılır. Bölüm 5 paketlerinin geri kalanı, tümü yeni Glibc'ye karşı inşa edilmiştir. /aletler.


Bölüm 6'da chroot ortamına girdikten sonra, kurulacak ilk büyük paket, yukarıda bahsedilen kendi kendine yeterli doğası nedeniyle Glibc'dir. Bu Glibc yüklendikten sonra / usr, araç zinciri varsayılanlarının hızlı bir değişimini gerçekleştireceğiz ve ardından hedef LFS sisteminin geri kalanını oluşturmaya devam edeceğiz.


OnWorks'te En İyi OS Bulut Bilişimi: