Buildroot - bölüm 1. Genel bilgiler, minimal bir sistemin montajı, menü aracılığıyla yapılandırma

Giriş

Bu yazı dizisinde buildroot dağıtım build sistemine bakmak ve onu özelleştirme konusundaki deneyimimi paylaşmak istiyorum. Grafik arayüzlü ve minimum işlevselliğe sahip küçük bir işletim sistemi oluşturma konusunda pratik deneyim olacaktır.

Öncelikle build sistemi ile dağıtımı karıştırmamalısınız. Buildroot, kendisine sunulan bir dizi paketten bir sistem oluşturabilir. Buildroot, makefile dosyaları üzerine kuruludur ve bu nedenle muazzam özelleştirme yeteneklerine sahiptir. Bir paketi başka bir sürümle değiştirmek, kendi paketinizi eklemek, paket oluşturma kurallarını değiştirmek, tüm paketleri yükledikten sonra dosya sistemini özelleştirmek mi istiyorsunuz? buildroot tüm bunları yapabilir.

Rusya'da buildroot kullanılıyor, ancak bence yeni başlayanlar için çok az Rusça bilgi var.

Çalışmanın amacı canlı indirme, icewm arayüzü ve tarayıcı içeren bir dağıtım kiti oluşturmaktır. Hedef platform sanal kutudur.

Neden kendi dağıtımınızı oluşturmalısınız? Genellikle sınırlı kaynaklarla sınırlı işlevselliğe ihtiyaç duyulur. Otomasyonda daha da sıklıkla ürün yazılımı oluşturmanız gerekir. Gereksiz paketleri temizleyip ürün yazılımına dönüştürerek genel amaçlı bir dağıtımı uyarlamak, yeni bir dağıtım oluşturmaktan daha fazla emek gerektirir. Gentoo'yu kullanmanın da sınırlamaları vardır.

Buildroot sistemi çok güçlüdür ancak sizin için hiçbir şey yapmaz. Yalnızca montaj sürecini etkinleştirebilir ve otomatikleştirebilir.

Alternatif yapı sistemleri (yocto, açık yapı sistemi ve diğerleri) dikkate alınmaz veya karşılaştırılmaz.

Nereden alınır ve nasıl başlanır

Proje web sitesi - buildroot.org. Buradan güncel sürümü indirebilir ve kılavuzu okuyabilirsiniz. Orada toplulukla iletişime geçebilirsiniz; bir hata izleyici, e-posta listeleri ve bir irc kanalı var.

Buildroot, yapının hedef panosu için defconfig'leri çalıştırır. Defconfig, yalnızca varsayılan değerleri olmayan seçenekleri saklayan bir yapılandırma dosyasıdır. Neyin nasıl toplanacağını belirleyen odur. Bu durumda, meşgul kutusu, linux çekirdeği, uglibc, u-boot ve barebox önyükleyicilerinin yapılandırmalarını ayrı ayrı yapılandırabilirsiniz, ancak bunların tümü hedef panele bağlanacaktır.
İndirilen arşivi açtıktan veya git'ten klonladıktan sonra kullanıma hazır bir buildroot elde ediyoruz. Kılavuzda dizin yapısı hakkında daha fazla bilgi edinebilirsiniz; size en önemlilerini anlatacağım:

yazı tahtası — her panele özel dosyaların bulunduğu bir dizin. Bunlar, sistem görüntüleri (iso, sdcart, cpio ve diğerleri), bir kaplama dizini, çekirdek yapılandırması vb. oluşturmak için komut dosyaları olabilir.
yapılandırmaları — panonun gerçek yapılandırması. Defconfig tamamlanmamış bir kart yapılandırmasıdır. Yalnızca varsayılan ayarlardan farklı olan parametreleri saklar
dl — montaj için indirilen kaynak kodlarının/dosyaların bulunduğu dizin
çıktı/hedef — ortaya çıkan işletim sisteminin birleştirilmiş dosya sistemi. Daha sonra indirme/kurma için görüntüler oluşturulur.
çıktı/ana bilgisayar - montaj için ana yardımcı programlar
çıktı/oluşturma - birleştirilmiş paketler

Montaj KConfig aracılığıyla yapılandırılır. Linux çekirdeğini oluşturmak için aynı sistem kullanılır. En sık kullanılan komutların listesi (buildroot dizininde çalıştırın):

  • make menuconfig - yapı yapılandırmasını çağırın. Grafiksel arayüzü de kullanabilirsiniz (make nconfig, make xconfig, make gconfig)
  • make linux-menuconfig - çekirdek yapılandırmasını çağırın.
  • make clean - derleme sonuçlarını temizleyin (çıktıda saklanan her şey)
  • yap - bir sistem inşa et. Bu, önceden birleştirilmiş süreçleri yeniden birleştirmez.
  • make defconfig_name - yapılandırmayı belirli bir defconfig olarak değiştirir
  • make list-defconfigs - defconfig'lerin listesini gösterir
  • kaynak oluştur - kurulum dosyalarını oluşturmadan indirmeniz yeterli.
  • yardım yap - olası komutları listele

Önemli notlar ve faydalı ipuçları

Buildroot, önceden oluşturulmuş paketleri yeniden oluşturmaz! Bu nedenle, komple yeniden montajın gerekli olduğu bir durum ortaya çıkabilir.

Komutla ayrı bir paketi yeniden oluşturabilirsiniz. paket adı-yeniden oluştur. Örneğin, Linux çekirdeğini yeniden oluşturabilirsiniz:

make linux-rebuild

Buildroot, çıktı/derleme/$paketadı dizininde .stamp dosyaları oluşturarak herhangi bir paketin durumunu saklar:

Buildroot - bölüm 1. Genel bilgiler, minimal bir sistemin montajı, menü aracılığıyla yapılandırma

Bu nedenle, paketleri yeniden oluşturmadan root-fs'leri ve görüntüleri yeniden oluşturabilirsiniz:

rm output/build/host-gcc-final-*/.stamp_host_installed;rm -rf output/target;find output/ -name ".stamp_target_installed" |xargs rm -rf ; make

Yararlı Değişkenler

buildroot'un kolay yapılandırma için bir dizi değişkeni vardır

  • $TOPDIR - buildroot dizini
  • $BASEDIR - ÇIKIŞ dizini
  • $HOST_DIR, $STAGING_DIR, $TARGET_DIR — ana bilgisayar fs'si, hazırlama fs'si, hedef fs oluşturma dizinleri.
  • $BUILD_DIR - paketlenmemiş ve oluşturulmuş paketlerin bulunduğu dizin

Görüntüleme

buildroot'un görselleştirme özelliği vardır.Son sistemde bir bağımlılık diyagramı, derleme süresi grafiği ve paket boyutları grafiği oluşturabilirsiniz. Sonuçlar çıktı/grafik dizininde pdf dosyaları biçimindedir (svn, png arasından seçim yapabilirsiniz).

Görselleştirme komutlarına örnekler:

  • make graph-depends bağımlılık ağacı oluştur
  • make <pkg>-graph-depends belirli bir paket için bağımlılık ağacı oluşturmak
  • BR2_GRAPH_OUT=png make graph-build PNG çıktısıyla derleme süresini planlayın
  • make graph-size paket boyutu grafiği

Yararlı komut dosyaları

Buildroot dizininde bir alt dizin var utils kullanışlı komut dosyalarıyla. Örneğin paket açıklamalarının doğruluğunu kontrol eden bir script var. Bu, kendi paketlerinizi eklerken faydalı olabilir (bunu daha sonra yapacağım). utils/readme.txt dosyası bu komut dosyalarının açıklamasını içerir.

Bir stok dağılımı oluşturalım

Tüm işlemlerin root değil normal kullanıcı adına yapıldığını unutmamak önemlidir.
Tüm komutlar buildroot'ta yürütülür. Buildroot paketi zaten birçok ortak kart ve sanallaştırma için bir dizi yapılandırma içerir.

Yapılandırma listesine bakalım:

Buildroot - bölüm 1. Genel bilgiler, minimal bir sistemin montajı, menü aracılığıyla yapılandırma

qemu_x86_64_defconfig yapılandırmasına geçin

make qemu_x86_64_defconfig

Ve montaja başlıyoruz

make

Derleme başarıyla tamamlandı, sonuçlara bakın:

Buildroot - bölüm 1. Genel bilgiler, minimal bir sistemin montajı, menü aracılığıyla yapılandırma

Buildroot, Qemu'da çalıştırabileceğiniz ve çalıştıklarını doğrulayabileceğiniz görüntüleri derledi.

qemu-system-x86_64 -kernel output/images/bzImage -hda    output/images/rootfs.ext2 -append "root=/dev/sda rw" -s -S

Sonuç, qemu'da çalışan bir sistemdir:

Buildroot - bölüm 1. Genel bilgiler, minimal bir sistemin montajı, menü aracılığıyla yapılandırma

Kendi pano konfigürasyonunuzu oluşturma

Pano Dosyaları Ekleme

Yapılandırma listesine bakalım:

Buildroot - bölüm 1. Genel bilgiler, minimal bir sistemin montajı, menü aracılığıyla yapılandırma

Listede pc_x86_64_efi_defconfig'i görüyoruz. Yapılandırmadan kopyalayarak kendi panomuzu oluşturacağız:

cp configs/pc_x86_64_bios_defconfig configs/my_x86_board_defconfig

Komut dosyalarımızı, rootfs-overlay'ı ve diğer gerekli dosyalarımızı depolamak için hemen bir pano dizini oluşturalım:

mkdir board/my_x86_board

Bu defconfig'e geçin:

make my_x86_board_defconfig

Böylece, artık build config (buildroot dizininin kökünde .config dosyasında saklanır) x86-64 eski(bios) önyükleme hedef makinesine karşılık gelir.

Linux çekirdeği yapılandırmasını kopyalayalım (ileride faydalı olacaktır):

cp board/pc/linux.config board/my_x86_board/

Yapı parametrelerini KConfig aracılığıyla ayarlama

Kuruluma başlayalım:

make menuconfig 

KConfig penceresi açılacaktır. Grafiksel bir arayüzle yapılandırmak mümkündür (make nconfig, make xconfig, make gconfig):

Buildroot - bölüm 1. Genel bilgiler, minimal bir sistemin montajı, menü aracılığıyla yapılandırma

İlk bölüme Hedef Seçenekleri giriyoruz. Burada yapının gerçekleştirileceği hedef mimariyi seçebilirsiniz.

Buildroot - bölüm 1. Genel bilgiler, minimal bir sistemin montajı, menü aracılığıyla yapılandırma

Oluşturma seçenekleri - burada çeşitli oluşturma ayarları vardır. Kaynak kodlarını, derleme iş parçacığı sayısını, kaynak kodlarını indirmek için aynaları ve diğer ayarları içeren dizinleri belirtebilirsiniz. Ayarları varsayılan olarak bırakalım.

Araç Zinciri – oluşturma araçlarının kendisi burada yapılandırılır. Onun hakkında daha fazlasını okuyun.

Buildroot - bölüm 1. Genel bilgiler, minimal bir sistemin montajı, menü aracılığıyla yapılandırma

Takım zinciri tipi – kullanılan takım zinciri tipi. Bu, buildroot'a yerleştirilmiş bir araç zinciri veya harici bir araç zinciri olabilir (önceden oluşturulmuş olan dizini veya indirilecek URL'yi belirtebilirsiniz). Farklı mimariler için ek seçenekler mevcuttur. Örneğin kol için harici takım zincirinin Linaro versiyonunu seçebilirsiniz.

C kütüphanesi – C kütüphanesinin seçimi Tüm sistemin çalışması buna bağlıdır. Tipik olarak, olası tüm işlevleri destekleyen glibc kullanılır. Ancak gömülü bir sistem için çok büyük olabilir, bu nedenle sıklıkla uglibc veya musl seçilir. Glibc'yi seçeceğiz (bu daha sonra systemd'yi kullanmak için gerekli olacaktır).

Çekirdek Başlıkları ve Özel Çekirdek Başlıkları serisi – birleştirilmiş sistemde yer alacak çekirdek sürümüyle eşleşmelidir. Çekirdek başlıkları için tarball veya git deposunun yolunu da belirtebilirsiniz.

GCC DERLEYİCİ VERSİYONLARI – oluşturma için kullanılacak derleyici sürümünü seçin
C++ desteğini etkinleştir – sistemdeki C++ kitaplıkları desteğiyle oluşturmayı seçin. Bu gelecekte bizim için faydalı olacaktır.

Ek gcc seçenekleri – ek derleyici seçeneklerini ayarlayabilirsiniz. Şimdilik buna ihtiyacımız yok.

Sistem konfigürasyonu, oluşturulan sistemin gelecekteki parametrelerini ayarlamanıza olanak tanır:

Buildroot - bölüm 1. Genel bilgiler, minimal bir sistemin montajı, menü aracılığıyla yapılandırma

Çoğu nokta başlıktan açıkça anlaşılıyor. Aşağıdaki noktalara dikkat edelim:
Kullanıcı tablolarının yolu - oluşturulacak kullanıcıları içeren tablo (https://buildroot.org/downloads/manual/manual.html#makeuser-syntax).

Örnek dosya. Kullanıcı kullanıcısı admin, otomatik olarak gid/uid, /bin/sh kabuk, varsayılan grup kullanıcısı, grup üyesi kökü, yorum Foo kullanıcısı parolasıyla oluşturulacaktır.

[alexey@alexey-pc buildroot ]$ cat board/my_x86_board/users.txt 
user -1 user -1 =admin /home/user /bin/sh root Foo user

Kök dosya sistemi yer paylaşımlı dizinleri - birleştirilmiş target-fs'nin üzerine yerleştirilmiş dizin. Yeni dosyalar ekler ve mevcut dosyaların yerine geçer.

Dosya sistemi görüntüleri oluşturmadan önce çalıştırılacak özel komut dosyaları - Dosya sistemini görüntülere katlamadan hemen önce çalıştırılan komut dosyaları. Şimdilik scripti boş bırakalım.

Çekirdek bölümüne geçelim

Buildroot - bölüm 1. Genel bilgiler, minimal bir sistemin montajı, menü aracılığıyla yapılandırma

Çekirdek ayarları burada yapılır. Çekirdeğin kendisi make linux-menuconfig aracılığıyla yapılandırılır.
Çekirdek sürümünü farklı şekillerde ayarlayabilirsiniz: sunulanlar arasından seçim yapın, sürümü manuel olarak girin, bir depo veya hazır bir tarball belirtin.

Çekirdek yapılandırması — çekirdek yapılandırmasının yolu. Seçilen mimari için varsayılan konfigürasyonu veya Linux'tan defocnfig'i seçebilirsiniz. Linux kaynağı, farklı hedef sistemler için bir dizi tanım içerir. İhtiyacınız olanı bulabilirsiniz doğrudan buradaki kaynaklara bakarak. Örneğin, bir beagle kemiği kara tahtası için şunları yapabilirsiniz: yapılandırmayı seç.

Hedef paketler bölümü, kurulmakta olan sisteme hangi paketlerin kurulacağını seçmenizi sağlar. Şimdilik değiştirmeden bırakalım. Paketlerimizi daha sonra bu listeye ekleyeceğiz.
Dosya sistemi görüntüleri - toplanacak dosya sistemi görüntülerinin listesi. Bir ISO görüntüsü ekleyin

Buildroot - bölüm 1. Genel bilgiler, minimal bir sistemin montajı, menü aracılığıyla yapılandırma

Önyükleyiciler - toplanacak önyükleyicilerin seçimi. İsolinix'i seçelim

Buildroot - bölüm 1. Genel bilgiler, minimal bir sistemin montajı, menü aracılığıyla yapılandırma

Systemd'yi Yapılandırma

Systemd, çekirdek ve glibc ile birlikte Linux'un temel direklerinden biri haline geliyor. Bu nedenle ayarını ayrı bir öğeye taşıdım.

make menuconfig, ardından Hedef paketler → Sistem araçları → systemd aracılığıyla yapılandırılır. Burada sistem başlatıldığında hangi systemd hizmetlerinin kurulacağını ve başlatılacağını belirleyebilirsiniz.

Buildroot - bölüm 1. Genel bilgiler, minimal bir sistemin montajı, menü aracılığıyla yapılandırma

Sistem yapılandırmasını kaydetme

Bu konfigürasyonu KConfig aracılığıyla kaydediyoruz.

Ardından defconfig'imizi kaydedin:

make savedefconfig

Linux Çekirdek Yapılandırması

Linux çekirdeği yapılandırması aşağıdaki komutla çağrılır:

make linux-menuconfig

Virtualbox video kartı için destek ekleyelim

Buildroot - bölüm 1. Genel bilgiler, minimal bir sistemin montajı, menü aracılığıyla yapılandırma

Virtualbox Guest entegrasyon desteğini ekleyelim

Buildroot - bölüm 1. Genel bilgiler, minimal bir sistemin montajı, menü aracılığıyla yapılandırma

Kaydet ve çık. ÖNEMLİ: yapılandırma çıktı/derleme/linux-$sürüm/config dosyasına kaydedilecek ancak board/my_x86_board/linux.config dosyasına kaydedilmeyecek

Buildroot - bölüm 1. Genel bilgiler, minimal bir sistemin montajı, menü aracılığıyla yapılandırma

Bu nedenle, yapılandırmayı bir depolama konumuna manuel olarak kopyalamanız gerekir:

cp output/build/linux-4.19.25/.config board/my_x86_board/linux.config

Bundan sonra tüm sistemin tamamen yeniden montajını gerçekleştireceğiz. buildroot önceden oluşturulmuş olanı yeniden oluşturmaz; yeniden oluşturma için paketleri manuel olarak belirtmeniz gerekir. Zaman ve sinir kaybetmemek için küçük bir sistemi tamamen yeniden inşa etmek daha kolaydır):

make clean;make

Derlemenin tamamlanmasının ardından, CD'den önyükleme yaparak VirtualBox'ı (sürüm 5.2 ve 6.0'da test edilmiştir) başlatın.

Buildroot - bölüm 1. Genel bilgiler, minimal bir sistemin montajı, menü aracılığıyla yapılandırma

Birleştirilmiş iso'dan çalıştırma:

Buildroot - bölüm 1. Genel bilgiler, minimal bir sistemin montajı, menü aracılığıyla yapılandırma

Kullanılan malzemelerin listesi

  1. Yapı kökü kılavuzu

Kaynak: habr.com

Yorum ekle