Buildroot - bölüm 2. Kart konfigürasyonunuzu oluşturma; harici ağaç, rootfs-overlay, derleme sonrası komut dosyalarını kullanma

Bu bölümde ihtiyaç duyduğum bazı özelleştirme seçeneklerine bakıyorum. Bu, buildroot'un sunduğu hizmetlerin tam listesi değildir, ancak oldukça işlevseldirler ve buildroot'un dosyalarına müdahale gerektirmezler.

Özelleştirme için HARİCİ mekanizmayı kullanma

Bir önceki yazıda Panonun defconfig'ini ve gerekli dosyaları doğrudan Buildroot dizinine ekleyerek kendi konfigürasyonunuzu eklemenin basit bir örneğine baktık.

Ancak bu yöntem, özellikle buildroot'u güncellerken pek kullanışlı değildir. Bu sorunu çözecek bir mekanizma var dış ağaç. Bunun özü, panoyu, yapılandırmaları, paketleri ve diğer dizinleri ayrı bir dizinde saklayabilmenizdir (örneğin, yamaları paketlere uygulamak için yamalar dizinini kullanıyorum, daha fazla ayrıntı ayrı bir bölümde) ve buildroot'un kendisi bunları içindekilere ekleyecektir. onun dizini.

Not: Aynı anda birkaç harici ağacı üst üste bindirebilirsiniz, buildroot kılavuzunda bir örnek vardır.

Buildroot dizininin yanında my_tree adında bir dizin oluşturalım ve konfigürasyonumuzu oraya aktaralım. Çıktı aşağıdaki dosya yapısında olmalıdır:

[alexey@alexey-pc my_tree]$ tree
.
├── board
│   └── my_x86_board
│       ├── bef_cr_fs_img.sh
│       ├── linux.config
│       ├── rootfs_overlay
│       └── users.txt
├── Config.in
├── configs
│   └── my_x86_board_defconfig
├── external.desc
├── external.mk
├── package
└── patches

6 directories, 7 files

Gördüğünüz gibi genel olarak yapı buildroot'un yapısını tekrarlıyor.

Rehber yazı tahtası bizim durumumuzda her panoya özel dosyalar içerir:

  • bef_cr_fs_img.sh, hedef dosya sistemi oluşturulduktan sonra, ancak onu görüntülere paketlemeden önce çalıştırılacak bir komut dosyasıdır. Gelecekte kullanacağız
  • linux.config - çekirdek yapılandırması
  • rootfs_overlay - hedef dosya sisteminin üzerine yerleştirilecek dizin
  • user.txt - oluşturulacak kullanıcıları açıklayan bir dosya

Rehber yapılandırmaları panolarımızın defconfig'ini içerir. Sadece bir tane var.

paket - paketlerimizi içeren katalog. Başlangıçta buildroot, sınırlı sayıda paket oluşturmak için açıklamalar ve kurallar içerir. Daha sonra buraya icewm pencere yöneticisini ve Slim grafiksel giriş yöneticisini ekleyeceğiz.
Yamalar — farklı paketler için yamalarınızı rahatlıkla saklamanıza olanak tanır. Daha fazla ayrıntıyı aşağıdaki ayrı bir bölümde bulabilirsiniz.
Şimdi harici ağacımız için açıklama dosyalarını eklememiz gerekiyor. Bundan sorumlu 3 dosya var: external.desc, Config.in, external.mk.

harici.desc gerçek açıklamayı içerir:

[alexey@alexey-pc my_tree]$ cat external.desc 
name: my_tree
desc: My simple external-tree for article

İlk satır başlıktır. Gelecekte buildroot'ta bir değişken oluşturun $(BR2_EXTERNAL_MY_TREE_PATH)Montajı yapılandırırken kullanılması gereken. Örneğin kullanıcı dosyasının yolu şu şekilde ayarlanabilir:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/users.txt

İkinci satır kısa, insan tarafından okunabilen bir açıklamadır.

Config.in, harici.mk — eklenen paketleri açıklayan dosyalar. Eğer kendi paketlerinizi eklemezseniz bu dosyalar boş bırakılabilir. Şimdilik böyle yapacağız.
Artık panomuzun defconfig'ini ve ihtiyaç duyduğu dosyaları içeren harici ağacımız hazır. Yapı kökü dizinine gidelim ve harici ağacın kullanılacağını belirtelim:

[alexey@alexey-pc buildroot]$ make BR2_EXTERNAL=../my_tree/ my_x86_board_defconfig
#
# configuration written to /home/alexey/dev/article/ramdisk/buildroot/.config
#
[alexey@alexey-pc buildroot]$ make menuconfig

İlk komutta argümanı kullanıyoruz BR2_EXTERNAL=../ağacım/, harici bir ağacın kullanımını belirtir. Aynı anda kullanmak için birkaç harici ağaç belirtebilirsiniz. Bu durumda, bunu yalnızca bir kez yapmanız gerekir, ardından çıktı/.br-external.mk dosyası oluşturulur. kullanılan harici ağaç hakkındaki bilgileri saklar:

[alexey@alexey-pc buildroot]$ cat output/.br-external.mk 
#
# Automatically generated file; DO NOT EDIT.
#

BR2_EXTERNAL ?= /home/alexey/dev/article/ramdisk/my_small_linux/my_tree
BR2_EXTERNAL_NAMES = 
BR2_EXTERNAL_DIRS = 
BR2_EXTERNAL_MKS = 

BR2_EXTERNAL_NAMES += my_tree
BR2_EXTERNAL_DIRS += /home/alexey/dev/article/ramdisk/my_small_linux/my_tree
BR2_EXTERNAL_MKS += /home/alexey/dev/article/ramdisk/my_small_linux/my_tree/external.mk
export BR2_EXTERNAL_my_tree_PATH = /home/alexey/dev/article/ramdisk/my_small_linux/my_tree
export BR2_EXTERNAL_my_tree_DESC = My simple external-tree for article

Önemli! Bu dosyadaki yollar mutlak olacaktır!

Menüde bir Harici seçenekler öğesi belirdi:

Buildroot - bölüm 2. Kart konfigürasyonunuzu oluşturma; harici ağaç, rootfs-overlay, derleme sonrası komut dosyalarını kullanma

Bu alt menü harici ağacımızdaki paketlerimizi içerecektir. Bu bölüm şu anda boştur.

Artık harici ağacı kullanmak için gerekli yolları yeniden yazmamız bizim için daha önemli.

Lütfen Yapı seçenekleri → Buildroot yapılandırmasının kaydedileceği konum bölümünde, kaydedilen defconfig'e giden mutlak bir yol olacağını unutmayın. Extgernal_tree'nin kullanımının belirtildiği anda oluşturulur.

Ayrıca Sistem yapılandırması bölümündeki yolları da düzelteceğiz. Oluşturulan kullanıcıları içeren bir tablo için:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/users.txt

Çekirdek bölümünde çekirdek yapılandırmasının yolunu değiştirin:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/linux.config

Artık montaj sırasında harici ağacımızdaki dosyalarımız kullanılacak. Başka bir dizine geçerken veya buildroot'u güncellerken minimum sorunla karşılaşacağız.

Kök fs kaplaması ekleme:

Bu mekanizma, hedef dosya sistemine kolayca dosya eklemenizi/değiştirmenizi sağlar.
Dosya root fs katmanındaysa ancak hedefte değilse eklenecektir
Dosya root fs katmanında ve hedefteyse değiştirilecektir.
Öncelikle root fs overlay dizininin yolunu ayarlayalım. Bu, Sistem yapılandırması → Kök dosya sistemi yer paylaşımı dizinleri bölümünde yapılır:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/rootfs_overlay/

Şimdi iki dosya oluşturalım.

[alexey@alexey-pc my_small_linux]$ cat my_tree/board/my_x86_board/rootfs_overlay/etc/hosts 
127.0.0.1   localhost
127.0.1.1   my_small_linux
8.8.8.8     google-public-dns-a.google.com.
[alexey@alexey-pc my_small_linux]$ cat my_tree/board/my_x86_board/rootfs_overlay/new_file.txt 
This is new file from overlay

İlk dosya (my_tree/board/my_x86_board/rootfs_overlay/etc/hosts), tamamlanan sistemdeki /etc/hosts dosyasının yerini alacaktır. İkinci dosya (cat my_tree/board/my_x86_board/rootfs_overlay/new_file.txt) eklenecektir.

Aşağıdakileri topluyor ve kontrol ediyoruz:

Buildroot - bölüm 2. Kart konfigürasyonunuzu oluşturma; harici ağaç, rootfs-overlay, derleme sonrası komut dosyalarını kullanma

Özelleştirme komut dosyalarının sistem montajının farklı aşamalarında yürütülmesi

Çoğu zaman hedef dosya sistemi görüntülere paketlenmeden önce bazı çalışmalar yapmanız gerekir.

Bu, Sistem yapılandırması bölümünde yapılabilir:

Buildroot - bölüm 2. Kart konfigürasyonunuzu oluşturma; harici ağaç, rootfs-overlay, derleme sonrası komut dosyalarını kullanma

İlk iki komut dosyası, hedef dosya sistemi oluşturulduktan sonra, ancak görüntüler halinde paketlenmeden önce yürütülür. Aradaki fark, fakeroot betiğinin, root kullanıcı olarak çalışmayı simüle eden fakeroot bağlamında yürütülmesidir.

Son komut dosyası, sistem görüntüleri oluşturulduktan sonra yürütülür. İçinde ek eylemler gerçekleştirebilirsiniz, örneğin gerekli dosyaları bir NFS sunucusuna kopyalayabilir veya cihazınızın donanım yazılımının bir görüntüsünü oluşturabilirsiniz.

Örnek olarak, sürümü ve derleme tarihini /etc/ dizinine yazacak bir komut dosyası oluşturacağım.
İlk önce bu dosyanın yolunu harici ağacımda belirteceğim:

Buildroot - bölüm 2. Kart konfigürasyonunuzu oluşturma; harici ağaç, rootfs-overlay, derleme sonrası komut dosyalarını kullanma

Ve şimdi betiğin kendisi:

[alexey@alexey-pc buildroot]$ cat ../my_tree/board/my_x86_board/bef_cr_fs_img.sh 
#!/bin/sh
echo "my small linux 1.0 pre alpha" > output/target/etc/mysmalllinux-release
date >> output/target/etc/mysmalllinux-release

Montajdan sonra bu dosyayı sistemde görebilirsiniz.

Uygulamada komut dosyası büyüyebilir. Bu nedenle gerçek projede daha ileri bir rota izledim:

  1. Çalıştırılacak komut dosyalarının seri numaralarıyla birlikte bulunduğu bir dizin (my_tree/board_my_x86_board/inside_fakeroot_scripts) oluşturdum. Örneğin, 0001-add-my_small_linux-version.sh, 0002-clear-apache-root-dir.sh
  2. Bu dizinden geçen ve içindeki scriptleri sırayla çalıştıran bir script (my_tree/board_my_x86_board/run_inside_fakeroot.sh) yazdım.
  3. Bu komut dosyasını, Sistem yapılandırması -> Fakeroot ortamında çalıştırılacak özel komut dosyaları ($(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/run_inside_fakeroot.sh) bölümündeki pano ayarlarında belirtildi.

Kaynak: habr.com

Yorum ekle