Yazılım geliştirmede, büyük kod havuzları oluşturma ve yönetme süreci kolayca çok karmaşık hale gelebilir.
Bu karmaşıklığı yönetmek ve azaltmak için yazılım geliştiriciler, kodu belirli modüllerle ilişkili küçük dosyalar halinde düzenler. Geliştiriciler, bu dosyaların her birini ayrı ayrı derleyebilir ve ardından çalıştırılabilir son bir program oluşturmak için bunları bir araya getirebilir.
Bunun bir örneği, .c uzantılı kaynak kod dosyalarından ve .h uzantılı yazılım arayüzlerinden oluşan C projeleridir. Her kaynak dosya, oluşturulacak başlık dosyalarıyla derlenir. o Nesneler kitaplıklar kullanılarak birbirine bağlanır ve böylece çalıştırılabilir dosyalar oluşturulur.
Bu işlemi gerçekleştirmek için geliştiriciler, oluşturma sürecini ve gerekli dosya bağımlılıklarını otomatikleştirmek için Make gibi araçları kullanır. Make, derleme işleminin davranışını yönetmek için Makefiles’i kullanır.
GNU Make araçları, Makefile oluşturmadaki karmaşıklığı azaltmak ve verimliliği artırmak için kullanılan bir dizi kural ve uzlaşma sağlar.
Bu öğreticide, özellikle Linux Kernel Makefiles’i tartışacağız. yapılandırma e Kbuild.
Başlamadan önce, bu makalenin size Kernel Yapı Sistemi hakkında her şeyi öğretme iddiasında olmadığına dikkat edilmelidir. Bununla birlikte, bir vmlinux görüntüsü ve modülleri oluşturmaya yönelik üst düzey bir genel bakış sunuyoruz.
Bu eğitimin kapsamı dışında bilgi istiyorsanız, daha iyi bilgi için aşağıdaki kaynağı kullanmanızı öneririz:
Çekirdek dosyalar: genel bakış
Konfigürasyon Sistemi olarak da bilinen Kernel Yapı Sistemi, bir süredir ortalıkta dolaşan, ihtiyaç duyanlar için vazgeçilmez bir araçtır. Ancak bu sistemi herkes kullanmayacak; Sürücüler ve hatta alt düzey yazılım geliştiriciler nadiren kullanır. Artık bunu okuduğunuza göre, temel yapı sistemi hakkında daha fazla bilgi edinmek isteyeceksiniz.
Bu nedenle, Kernel’i nasıl derleyeceğimizi tartışacağız ve daha iyi anlayabilmeniz için Kbuild ve Kconfig sistemini tartışacağız.
Çekirdek Makefile beş ana bileşen içerir:
- makefile: Bu, kaynak kökte bulunan en iyi dosyadır.
- arch/$(ARCH) Makefile: Bu ark dosyasıdır. Üst Makefile için bir eklenti görevi görür.
- .config: Bu, Çekirdek yapılandırma dosyasıdır.
- Komut Dosyaları/Makefile. *: Bu, tüm kbuild Makefiles için kural setini tanımlar.
- Kbuild dosyaları: Yaklaşık 500 kbuild Makefile var ve okuması çok kolay değil. Aşağıdaki gibi bir dosya düşünün:
yapılandırma
Kconfig dosyası, make * config kullanırken yararlı olan modüller içerir. Core, seçici yapılandırmalar oluşturmaya yardımcı olur ve çekirdek oluşturma süreci için modülerlik ve özelleştirilebilirlik oluşturur.
Kconfig sistemi tarafından tanımlanan birçok konfigürasyon hedefi vardır. Mevcut hedefleri görüntülemek için Yardım Sağla’yı kullanabilirsiniz. Bu hedefler, oluşturma işlemi sırasında Çekirdeğin sağladığı çeşitli programlar tarafından gerçekleştirilir.
kconfig’in hedeflerinden bazıları şunlardır:
yapmak Linux windriver.gconfig
yapmak Linux WinDriver
Değil: gconfig ve xconfig’i kullanmak için, ana bilgisayar sisteminde QT geliştirme araçları kurulu olmalıdır.
- yapılandırma: Nconfig özelliği, geçerli yapılandırmayı (Buildtools) çalıştırır ve Ncurses menü uygulamasına uygulanır. Bu, çekirdeği oluştururken CPU, sürücüler ve dosya sistemi gibi oluşturulacak paketleri seçmenize olanak tanır. Şu komutu kullanın: nconfig yapın.
- eski yapılandırma: oldconfig özelliği, daha yeni .config dosyalarını eski çekirdek yapılandırma dosyalarına uygulamanıza izin verir. Örneğin, yapılandırma. eski ve yapılandırma dosyası. Daha yeni (daha yeni çekirdek sürümü) farklılıklar; bu, çekirdeği oluşturmadan önce mevcut yapılandırmanızı güncellemeniz gerektiği anlamına gelir. Eski yapılandırma dosyasındaki eksik seçenekleri uygulayarak eski yapılandırmayı etkileşimli olarak güncellemek için make oldconfig’i kullanabilirsiniz.
- varsayılan yapılandırma: Bu özellik, çekirdek oluşturma sisteminin defconfig tarafından sağlanan yeni bir yapılandırmayı .config dosyasına eklemesine olanak tanır. Daha doğrusu, Kbuild sistemi tüm Kconfig dosyalarını kontrol eder. Defconfig dosyada bir seçenek belirtirse, Kbuild sistemi seçeneği .config dosyasına eklemek için belirtilen değeri kullanır. Defconfig seçeneği belirtmezse Kbuild, .config dosyasındaki varsayılan değerleri kullanır.
Aşağıdakileri göz önünde bulundur:
Aşağıdaki kaynaktan Defconfig kodu ekran görüntüsü:
1. varsayılan yapılandırma: $(Önemli olmak)/asyut
2. ifneq ($(joker karakter $(kaynak ağacı)/Kemer/$(Sarkarş)/yapılandırmalar/$(KUILD_DEFCONFIG))Ve)
3. @$(kız)‘*** Varsayılan yapılandırma,’$(KBUILD_DEFCONFIG)“”
4. $(s)$< $(sakinlik)–defconfig= kemer/$(Sarkarş)/yapılandırmalar/$(KUILD_DEFCONFIG) $(yapılandırma)
5. diğer
6. @$(kız)“*** varsayılan yapılandırma hedefe bağlıdır”$(KBUILD_DEFCONFIG)“”
7. $(s)$(yapmak)-F $(kaynak ağacı)/$ makefile(KUILD_DEFCONFIG)
8. sonlandırmak eğer
9.
10. %_defconfig: $(Önemli olmak)/asyut
11. $(s)$< $(sakinlik)–defconfig= kemer/$(Sarkarş)/yapılandırmalar/$@ $(yapılandırma)
12.
13. yapılandırma dosyaları= dolar(joker karakter $(kaynak ağacı)/çekirdek/yapılandırmalar/$@ $(kaynak ağacı)/Kemer/$(Sarkarş)/yapılandırmalar/$@)
14.
15.. %.config: $(Önemli olmak)/asyut
16. $(eğer $(Çağrı yapılandırma dosyaları)$(Hata Yapılandırma yok için Bu mimaride amaç budur.))
17. $(s)$(CONFIG_SHELL) $(kaynak ağacı)/semboller/kconfig/birleştirme_config.sh M $.config(yapılandırma dosyaları)
18. $(s)$(yapmak)-F $(kaynak ağacı)/dosya eskidefconfig yapmak
Aşağıdaki kaynaktan eski başlatma kodu ekran görüntüsü:
1. dava, davet eskidefconfig:
2. varsayımsal:
3. kırmak;
4. }
5.
6. eğer(input_mode == saveefconfig){
7. eğer(Conf_write_defconfig(defconfig_file)){
8. fprintf(Temel, n*** Defconfig şuraya kaydedilirken hata oluştu: %s\n\n“Ve
9. defconfig_file);
10. dönüş1;
11. }
12. }diğereğer(giriş modu != listeyeniyapılandırma && giriş modu !=helpnewconfig){
13. eğer(!no_conf_write && conf_write(boş)){
14. fprintf(Temel, “\n*** Yapılandırma yazılırken bir hata oluştu.\n\n“);
15.. çıkış(1);
16. }
17.
18. /*
19. * auto.conf oluştur eğer Bu mevcut değil.
20. * Bu, GNU Make’i engeller 4.1 veya yayınlanandan daha erken
21. *“include /config/auto.conf: Böyle bir dosya veya dizin yok”
22. *içeri En yüksek seviye Makefile
23. *
24. * syncconfig her zaman auto.conf’u oluşturur veya günceller çünkü
25. * inşaat sırasında kullanılır.
26. */
27. eğer(Conf_write_autoconf(senkronizasyon_kconfig)&& senkronizasyon_kconfig){
28. fprintf(Temel,
29. “\n*** Yapılandırma eşitlenirken hata oluştu.\n\n“);
30. dönüş1;
31. }
32. }
33. dönüş0;
34. }
- savefconfig: Bu kural, geçerli .config dosyasını, minimum yapılandırma dosyası olarak kabul edilen ./defconfig biçiminde kaydeder. Şu komutu kullanın: saveefconfig
- dinle ve yapılandır: Bu, yeni seçenekleri listelemek için kullanılır.
- kvm yapılandırması: Bu, KVM destek seçeneklerini etkinleştirir. Şu komutu kullanın: make kvm_guest.config
- aliconfig: Bu, tüm seçeneklerin evet olarak ayarlandığı yeni bir çekirdek yapılandırma dosyası oluşturur. allnoconfig’in tam tersidir.
- her mod yapılandırması: Bu, modüllerin varsayılan olarak etkinleştirildiği yeni bir çekirdek yapılandırması oluşturur.
- randconfig: Bu, tüm seçeneklere rastgele yanıtlar veren yeni bir çekirdek yapılandırma dosyası oluşturur.
- minik yapılandırma: Bu, mümkün olan en küçük çekirdeği sağlar.
Kconfig sisteminde birçok hedef vardır. Bazı yaygın olanlar config ve menuconfig içerir.
Bahsedildiği gibi, hedefler, bir GUI veya komut satırı sağlayarak ana sistemlerdeki çeşitli programlar tarafından işlenir. Kconfig araçlarını /scripts/Kconfig adresindeki çekirdek kaynağında bulabilirsiniz.
/ Dosya oluştur
İlk eylem genellikle ilk yapılandırma veritabanını oluşturmak için kullanılan kök dizindeki Kconfig dosyasını okumaktır. İşlem devam ederken, dosyalar aşağıdaki sırayla okunduğu için veritabanı güncellenir:
.config
/Kütüphane/birimler/$(kabuk, uname-r)/.config
/vb/çekirdek başlatma
/bot/yapılandırma-$(kabuk, uname-r)
ARCH_DEFCONFIG
Kemer/$(Kemer)/Defconfig
Ardından .config dosyası, .config dosyasını girdi olarak alan syncconfig’e bırakılır. Dosyayı işler ve ardından aşağıdaki gibi farklı kategorilere ayrılmış dosyaları çıkarır:
- otomatik yapılandırma h: Bu, C kaynak dosyaları için kullanılır.
- auto.conf ve tristate.conf: Bu Makefile dosyaları kelime işleme için kullanılır.
- / içerir / yapılandırma: Bunlar, bağımlılık izlemede kullanılan boş başlık dosyalarıdır.
Kbuild dosyaları
Hemen hemen tüm Çekirdek dosyaları, sık kullanılan bir derleme özelliği olan Kbuild motorunu kullanan Kbuild Makefile dosyalarıdır. Yinelemeli yineleme, Make aracını bir Makefile’da komut olarak kullanmanın bir yoludur. Özyineleme, büyük bir projeyi derlerken çok kullanışlıdır.
Kbuild, yukarıdaki bölümde bahsettiğimiz tüm dosyalara referans vererek çalışır.
Kbuild, yapılandırma dosyalarında arch/$(ARCH)/Makefile adlı Arch Makefiles içeren üst Makefile’yi kullanarak sistem bileşenlerini oluşturur. Betiklerdeki/Makefile’deki eylemleri kullanarak bileşenler üzerinde Make’i çağıran alt dizinlere yinelemeli olarak iner. *. Ardından Kbuild, bitişik nesneyi oluşturur ve bunları vmlinux’u oluşturan nesnelerle ilişkilendirir.
Kbuild Makefiles’de kullanılan sözdizimi hakkında daha fazla bilgi edinmek için belgelere bakın.
Aşağıdaki metni düşünün.
Vmlinux’u var KBUILD_VMLINUX_INIT , MAIN ve LIBS olarak oluşturmak için kullanılan nesne dosyaları, önce birleştirilmiş a dosyalarında paketlenir. Bu, vmlinux’ta yerleşiktir.
çözüm
Bu kılavuzda, Kernel derleme sistemindeki Kbuild ve Kconfig sistemlerine ve nasıl çalıştıklarına baktık. Eğitimin başında da belirttiğimiz gibi, tartışılan konular çok geniştir ve tek bir eğitimde ele alınamaz.
Diğer gönderilerimize göz at
[wpcin-random-posts]
İlk Yorumu Siz Yapın