Buildroot - 2-qism. Kengash konfiguratsiyasini yaratish; tashqi daraxt, rootfs-overlay, post-build skriptlaridan foydalanish

Ushbu bo'limda men o'zimga kerak bo'lgan sozlash variantlarini ko'rib chiqaman. Bu buildroot taklif qiladigan narsalarning to'liq ro'yxati emas, lekin ular juda funktsional va Buildroot fayllariga aralashuvni talab qilmaydi.

Moslashtirish uchun EXTERNAL mexanizmidan foydalanish

Oldingi maqolada Biz kengashning defconfig va kerakli fayllarni to'g'ridan-to'g'ri Buildroot katalogiga qo'shish orqali o'zingizning konfiguratsiyangizni qo'shishning oddiy misolini ko'rib chiqdik.

Ammo bu usul juda qulay emas, ayniqsa Buildroot-ni yangilashda. Bu muammoni hal qilish mexanizmi mavjud tashqi daraxt. Uning mohiyati shundaki, siz platani, konfiguratsiyalarni, paketlarni va boshqa kataloglarni alohida katalogda saqlashingiz mumkin (masalan, paketlarga yamoqlarni qo'llash uchun men yamalar katalogidan foydalanaman, batafsil ma'lumot alohida bo'limda) va buildroot o'zi ularni ushbu katalogdagilarga qo'shadi. uning katalogi.

Eslatma: bir vaqtning o'zida bir nechta tashqi daraxtlarni qoplashingiz mumkin, buning misoli Buildroot qo'llanmasida mavjud

Keling, Buildroot katalogining yonida joylashgan my_tree katalogini yaratamiz va konfiguratsiyamizni u erga o'tkazamiz. Chiqish quyidagi fayl tuzilishi bo'lishi kerak:

[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

Ko'rib turganingizdek, umuman struktura Buildroot tuzilishini takrorlaydi.

katalog taxta Bizning holatlarimizda har bir kengashga xos fayllar mavjud:

  • bef_cr_fs_img.sh - maqsadli fayl tizimini yaratgandan so'ng, lekin uni tasvirlarga joylashtirishdan oldin bajariladigan skript. Kelajakda biz undan foydalanamiz
  • linux.config - yadro konfiguratsiyasi
  • rootfs_overlay - maqsadli fayl tizimining ustiga qo'yish uchun katalog
  • users.txt - yaratiladigan foydalanuvchilarni tavsiflovchi fayl

katalog configs platalarimizning defconfig'ini o'z ichiga oladi. Bizda faqat bitta.

To'plam - paketlarimiz bilan katalog. Dastlab, buildroot cheklangan miqdordagi paketlarni yaratish uchun tavsif va qoidalarni o'z ichiga oladi. Keyinchalik bu erda icewm oyna boshqaruvchisi va Slim grafik kirish menejerini qo'shamiz.
Yamalar — turli paketlar uchun yamoqlaringizni qulay saqlash imkonini beradi. Quyidagi alohida bo'limda batafsil ma'lumot.
Endi biz tashqi daraxtimiz uchun tavsif fayllarini qo'shishimiz kerak. Buning uchun 3 ta fayl mas'uldir: external.desc, Config.in, external.mk.

tashqi.dec Haqiqiy tavsifni o'z ichiga oladi:

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

Birinchi qator - sarlavha. Kelajakda Buildroot o'zgaruvchini yarating $(BR2_EXTERNAL_MY_TREE_PATH), bu yig'ilishni sozlashda ishlatilishi kerak. Masalan, foydalanuvchi fayliga yo'l quyidagicha o'rnatilishi mumkin:

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

Ikkinchi qator qisqa, inson o‘qishi mumkin bo‘lgan tavsifdir.

Config.in, external.mk — qo'shilgan paketlarni tavsiflovchi fayllar. Agar siz o'zingizning paketlaringizni qo'shmasangiz, bu fayllar bo'sh qolishi mumkin. Hozircha biz shunday qilamiz.
Endi bizda taxtaning defconfig va unga kerakli fayllarni o'z ichiga olgan tashqi daraxtimiz tayyor. Keling, Buildroot katalogiga o'tamiz va tashqi daraxtdan foydalanishni belgilaymiz:

[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

Birinchi buyruqda biz argumentdan foydalanamiz BR2_EXTERNAL=../mening_daraxtim/, tashqi daraxtdan foydalanishni ko'rsatadi.Bir vaqtning o'zida foydalanish uchun bir nechta tashqi daraxtlarni belgilashingiz mumkin.Bu holda siz buni faqat bir marta qilishingiz kerak, shundan so'ng output/.br-external.mk fayli yaratiladi. ishlatiladigan tashqi daraxt haqidagi ma'lumotlarni saqlaydi:

[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

Muhim! Ushbu fayldagi yo'llar mutlaq bo'ladi!

Menyuda tashqi parametrlar elementi paydo bo'ldi:

Buildroot - 2-qism. Kengash konfiguratsiyasini yaratish; tashqi daraxt, rootfs-overlay, post-build skriptlaridan foydalanish

Ushbu pastki menyuda bizning tashqi daraxtimizdagi paketlarimiz mavjud. Bu boʻlim hozircha boʻsh.

Endi biz uchun tashqi daraxtdan foydalanish uchun kerakli yo'llarni qayta yozish muhimroq.

Esda tutingki, Build Options → Location to save buildroot config bo'limida saqlangan defconfig uchun mutlaq yo'l bo'ladi. U extgernal_tree dan foydalanishni belgilash vaqtida hosil bo'ladi.

Shuningdek, biz tizim konfiguratsiyasi bo'limidagi yo'llarni tuzatamiz. Yaratilgan foydalanuvchilar bilan jadval uchun:

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

Yadro bo'limida yadro konfiguratsiyasiga yo'lni o'zgartiring:

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

Endi bizning tashqi daraxtimizdagi fayllar yig'ish paytida ishlatiladi. Boshqa katalogga o'tish yoki Buildroot-ni yangilashda bizda minimal muammolar bo'ladi.

Ildiz fs qoplamasini qo'shish:

Ushbu mexanizm maqsadli fayl tizimidagi fayllarni osongina qo'shish/almashtirish imkonini beradi.
Agar fayl ildiz fs qoplamasida bo'lsa, lekin maqsadda bo'lmasa, u qo'shiladi
Agar fayl ildiz fs qoplamasida va maqsadda bo'lsa, u almashtiriladi.
Birinchidan, root fs overlay dir yo'lini o'rnatamiz. Bu tizim konfiguratsiyasi → Ildiz fayl tizimining ustki kataloglari bo'limida amalga oshiriladi:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/rootfs_overlay/

Endi ikkita fayl yaratamiz.

[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

Birinchi fayl (my_tree/board/my_x86_board/rootfs_overlay/etc/hosts) tayyor tizimdagi /etc/hosts faylini almashtiradi. Ikkinchi fayl (cat my_tree/board/my_x86_board/rootfs_overlay/new_file.txt) qo'shiladi.

Biz yig'amiz va tekshiramiz:

Buildroot - 2-qism. Kengash konfiguratsiyasini yaratish; tashqi daraxt, rootfs-overlay, post-build skriptlaridan foydalanish

Tizimni yig'ishning turli bosqichlarida moslashtirish skriptlarini bajarish

Ko'pincha maqsadli fayl tizimi tasvirlarga qadoqlashdan oldin uning ichida ba'zi ishlarni bajarishingiz kerak.

Bu tizim konfiguratsiyasi bo'limida amalga oshirilishi mumkin:

Buildroot - 2-qism. Kengash konfiguratsiyasini yaratish; tashqi daraxt, rootfs-overlay, post-build skriptlaridan foydalanish

Dastlabki ikkita skript maqsadli fayl tizimi qurilgandan so'ng, lekin u tasvirlarga qadoqlanishidan oldin bajariladi. Farqi shundaki, fakeroot skripti fakeroot kontekstida bajariladi, bu esa root foydalanuvchisi sifatida ishlashni taqlid qiladi.

Oxirgi skript tizim tasvirlari yaratilgandan keyin bajariladi. Unda qo'shimcha amallarni bajarishingiz mumkin, masalan, kerakli fayllarni NFS serveriga nusxalash yoki qurilmangiz proshivkasining tasvirini yaratish.

Misol sifatida, men /etc/ ga versiyani yozadigan va sanani yaratadigan skript yarataman.
Avval tashqi daraxtda ushbu faylga yo'lni ko'rsataman:

Buildroot - 2-qism. Kengash konfiguratsiyasini yaratish; tashqi daraxt, rootfs-overlay, post-build skriptlaridan foydalanish

Va endi skriptning o'zi:

[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

Yig'ishdan so'ng siz ushbu faylni tizimda ko'rishingiz mumkin.

Amalda, skript katta bo'lishi mumkin. Shuning uchun, haqiqiy loyihada men yanada rivojlangan yo'lni tanladim:

  1. Men katalog yaratdim (my_tree/board_my_x86_board/inside_fakeroot_scripts) unda seriya raqamlari bilan bajariladigan skriptlar mavjud. Masalan, 0001-add-my_small_linux-version.sh, 0002-clear-apache-root-dir.sh
  2. Men skript yozdim (my_tree/board_my_x86_board/run_inside_fakeroot.sh) bu katalog orqali o'tadi va undagi skriptlarni ketma-ket bajaradi.
  3. Ushbu skriptni plata sozlamalarida Tizim konfiguratsiyasi -> fakeroot muhitida ishlash uchun maxsus skriptlar ($(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/run_inside_fakeroot.sh) bo‘limida ko‘rsatilgan.

Manba: www.habr.com

a Izoh qo'shish