Buildroot - hissə 2. Lövhə konfiqurasiyanızın yaradılması; xarici ağac, rootfs-overlay, post-build skriptlərindən istifadə etməklə

Bu bölmədə ehtiyac duyduğum bəzi fərdiləşdirmə seçimlərinə baxıram. Bu buildroot-un təklif etdiyi şeylərin tam siyahısı deyil, lakin onlar kifayət qədər funksionaldır və buildroot-un fayllarına müdaxilə tələb etmir.

Fərdiləşdirmə üçün XARİCİ mexanizmdən istifadə

Bir əvvəlki məqalədə Biz lövhənin defconfig və lazımi faylları birbaşa Buildroot qovluğuna əlavə etməklə öz konfiqurasiyanızı əlavə etməyin sadə nümunəsinə baxdıq.

Ancaq bu üsul çox rahat deyil, xüsusən buildroot-u yeniləyərkən. Bu problemi həll etmək üçün mexanizm var xarici ağac. Onun mahiyyəti ondan ibarətdir ki, siz lövhəni, konfiqurasiyaları, paketləri və digər qovluqları ayrıca qovluqda saxlaya bilərsiniz (məsələn, paketlərə yamaqlar tətbiq etmək üçün yamalar kataloqundan istifadə edirəm, daha çox təfərrüatları ayrıca bölmədə) və buildroot özü onları buradakılara əlavə edəcək. onun kataloqu.

Qeyd: bir anda bir neçə xarici ağacın üst-üstə düşməsinə icazə verilir, bir nümunə quruculuq təlimatında var

Gəlin buildroot kataloqunun yanında yerləşən my_tree qovluğunu yaradaq və konfiqurasiyamızı oraya köçürük. Çıxış aşağıdakı fayl strukturu 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üyünüz kimi, ümumiyyətlə struktur quruluş kökünün strukturunu təkrarlayır.

Directory kollegiya Bizim vəziyyətimizdə hər bir lövhəyə xas olan fayllar var:

  • bef_cr_fs_img.sh hədəf fayl sistemini qurduqdan sonra, lakin onu şəkillərə qablaşdırmadan əvvəl yerinə yetiriləcək bir skriptdir. Gələcəkdə bundan istifadə edəcəyik
  • linux.config - nüvə konfiqurasiyası
  • rootfs_overlay - hədəf fayl sisteminin üstündə üst-üstə düşmək üçün qovluq
  • users.txt - yaradılacaq istifadəçiləri təsvir edən fayl

Directory konfiqurasiyalar lövhələrimizin defkonfiqurasiyasını ehtiva edir. Bizdə yalnız bir.

Paketi - paketlərimizlə kataloq. Əvvəlcə buildroot məhdud sayda paketlərin qurulması üçün təsvirləri və qaydaları ehtiva edir. Daha sonra biz buraya icewm pəncərə meneceri və Slim qrafik giriş menecerini əlavə edəcəyik.
Yamalar — müxtəlif paketlər üçün yamaqlarınızı rahat şəkildə saxlamağa imkan verir. Aşağıdakı ayrı bölmədə daha ətraflı məlumat.
İndi xarici ağacımız üçün təsvir fayllarını əlavə etməliyik. Bunun üçün məsul olan 3 fayl var: external.desc, Config.in, external.mk.

xarici.az faktiki təsviri ehtiva edir:

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

Birinci sətir başlıqdır. Gələcəkdə buildroot dəyişən yaradın $(BR2_EXTERNAL_MY_TREE_PATH), montajı konfiqurasiya edərkən istifadə edilməlidir. Məsələn, istifadəçi faylının yolu aşağıdakı kimi təyin edilə bilər:

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

İkinci sətir qısa, insanın oxuya biləcəyi təsvirdir.

Config.in, external.mk — əlavə paketləri təsvir etmək üçün fayllar. Öz paketlərinizi əlavə etməsəniz, bu fayllar boş qala bilər. Hələlik biz bunu edəcəyik.
İndi lövhəmizin defkonfiqurasiyasını və ona lazım olan faylları ehtiva edən xarici ağacımız hazırdır. Gəlin buildroot qovluğuna gedək və xarici ağacdan istifadə etməyi təyin edək:

[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

Birinci komandada arqumentdən istifadə edirik BR2_EXTERNAL=../mənim_ağacım/, xarici ağacın istifadəsini göstərir.Siz eyni vaxtda istifadə üçün bir neçə xarici ağac təyin edə bilərsiniz.Bu halda bunu yalnız bir dəfə etmək lazımdır, bundan sonra çıxış/.br-external.mk faylı yaradılır ki, istifadə olunan xarici ağac haqqında məlumat saxlayır:

[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

Vacibdir! Bu fayldakı yollar mütləq olacaq!

Menyuda Xarici seçimlər elementi göründü:

Buildroot - hissə 2. Lövhə konfiqurasiyanızın yaradılması; xarici ağac, rootfs-overlay, post-build skriptlərindən istifadə etməklə

Bu alt menyu xarici ağacımızdan paketlərimizi ehtiva edəcəkdir. Bu bölmə hazırda boşdur.

İndi xarici ağacdan istifadə etmək üçün lazımi yolları yenidən yazmaq bizim üçün daha vacibdir.

Nəzərə alın ki, Quraşdırma seçimləri → Quraşdırma kök konfiqurasiyasını saxlamaq üçün yer bölməsində saxlanmış defconfig-ə mütləq yol olacaq. Xarici_ağacın istifadəsini təyin edərkən formalaşır.

Sistem konfiqurasiyası bölməsindəki yolları da düzəldəcəyik. Yaradılmış istifadəçiləri olan cədvəl üçün:

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

Kernel bölməsində kernel konfiqurasiyasına gedən yolu dəyişdirin:

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

İndi bizim xarici ağacımızdan olan fayllarımız montaj zamanı istifadə olunacaq. Başqa qovluğa keçərkən və ya Buildroot-u yeniləyərkən minimum problemimiz olacaq.

Kök fs örtüyünün əlavə edilməsi:

Bu mexanizm hədəf fayl sistemindəki faylları asanlıqla əlavə etməyə/dəyişməyə imkan verir.
Fayl kök fs üst-üstə düşürsə, lakin hədəfdə deyilsə, o zaman əlavə olunacaq
Əgər fayl kök fs örtüyündə və hədəfdədirsə, o zaman dəyişdiriləcək.
Əvvəlcə kök fs overlay dir yolunu təyin edək. Bu, Sistem konfiqurasiyası → Kök fayl sisteminin üst-üstə düşməsi qovluqları bölməsində edilir:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/rootfs_overlay/

İndi iki fayl yaradaq.

[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

Birinci fayl (my_tree/board/my_x86_board/rootfs_overlay/etc/hosts) hazır sistemdəki /etc/hosts faylını əvəz edəcək. İkinci fayl (cat my_tree/board/my_x86_board/rootfs_overlay/new_file.txt) əlavə olunacaq.

Biz toplayırıq və yoxlayırıq:

Buildroot - hissə 2. Lövhə konfiqurasiyanızın yaradılması; xarici ağac, rootfs-overlay, post-build skriptlərindən istifadə etməklə

Sistemin yığılmasının müxtəlif mərhələlərində fərdiləşdirmə skriptlərinin icrası

Çox vaxt hədəf fayl sistemi şəkillərə qablaşdırılmazdan əvvəl onun daxilində bəzi işləri yerinə yetirməlisiniz.

Bu, Sistem konfiqurasiyası bölməsində edilə bilər:

Buildroot - hissə 2. Lövhə konfiqurasiyanızın yaradılması; xarici ağac, rootfs-overlay, post-build skriptlərindən istifadə etməklə

İlk iki skript hədəf fayl sistemi qurulduqdan sonra, lakin şəkillərə qablaşdırılmamışdan əvvəl yerinə yetirilir. Fərq ondadır ki, fakeroot skripti kök istifadəçi kimi işi simulyasiya edən fakeroot kontekstində icra olunur.

Son skript sistem şəkilləri yaradıldıqdan sonra yerinə yetirilir. Siz orada əlavə hərəkətlər edə bilərsiniz, məsələn, lazımi faylları NFS serverinə köçürün və ya cihazınızın proqram təminatının görüntüsünü yarada bilərsiniz.

Nümunə olaraq, versiyanı yazacaq və tarixini /etc/ ünvanına yazacaq bir skript yaradacağam.
Əvvəlcə xarici ağacımda bu faylın yolunu göstərəcəyəm:

Buildroot - hissə 2. Lövhə konfiqurasiyanızın yaradılması; xarici ağac, rootfs-overlay, post-build skriptlərindən istifadə etməklə

İndi skriptin özü:

[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 faylı sistemdə görə bilərsiniz.

Praktikada skript böyük ola bilər. Buna görə də, real layihədə daha inkişaf etmiş bir marşrut tutdum:

  1. Mən seriya nömrələri ilə icra ediləcək skriptlərin olduğu kataloq (my_tree/board_my_x86_board/inside_fakeroot_scripts) yaratdım. Məsələn, 0001-add-my_small_linux-version.sh, 0002-clear-apache-root-dir.sh
  2. Bu kataloqdan keçən və içindəki skriptləri ardıcıl olaraq icra edən bir skript (my_tree/board_my_x86_board/run_inside_fakeroot.sh) yazdım.
  3. Bu skripti board parametrlərində Sistem konfiqurasiyası -> fakeroot mühitində işləmək üçün fərdi skriptlər ($(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/run_inside_fakeroot.sh) bölməsində göstərildi.

Mənbə: www.habr.com

Добавить комментарий