Buildroot - qism 1. Umumiy ma'lumot, minimal tizimni yig'ish, menyu orqali konfiguratsiya

kirish

Ushbu maqolalar seriyasida men Buildroot tarqatish qurish tizimini ko'rib chiqmoqchiman va uni sozlash bo'yicha tajribam bilan o'rtoqlashmoqchiman. Grafik interfeys va minimal funksionallik bilan kichik OT yaratishda amaliy tajriba bo'ladi.

Avvalo, siz qurish tizimi va tarqatishni chalkashtirmasligingiz kerak. Buildroot unga taklif qilingan paketlar to'plamidan tizim yaratishi mumkin. Buildroot makefiles asosida qurilgan va shuning uchun katta xususiylashtirish imkoniyatlariga ega. Paketni boshqa versiya bilan almashtiring, o'z paketingizni qo'shing, paketni yaratish qoidalarini o'zgartiring, barcha paketlarni o'rnatgandan so'ng fayl tizimini moslashtirasizmi? buildroot bularning barchasini qila oladi.

Rossiyada buildroot ishlatiladi, lekin mening fikrimcha, yangi boshlanuvchilar uchun rus tilidagi ma'lumotlar kam.

Ishning maqsadi jonli yuklab olish, icewm interfeysi va brauzer bilan tarqatish to'plamini yig'ishdir. Maqsadli platforma virtual qutidir.

Nima uchun o'z tarqatishingizni yaratasiz? Ko'pincha cheklangan resurslar bilan cheklangan funksionallik kerak. Ko'pincha avtomatlashtirishda siz proshivka yaratishingiz kerak. Keraksiz paketlarni tozalash va uni proshivkaga aylantirish orqali umumiy maqsadli taqsimotni moslashtirish yangi tarqatishni yaratishdan ko'ra ko'proq mehnat talab qiladi. Gentoo-dan foydalanish ham o'z cheklovlariga ega.

Buildroot tizimi juda kuchli, lekin u siz uchun hech narsa qilmaydi. U faqat yig'ish jarayonini yoqishi va avtomatlashtirishi mumkin.

Muqobil qurish tizimlari (yocto, ochiq tizim va boshqalar) ko'rib chiqilmaydi yoki taqqoslanmaydi.

Uni qayerdan olish va qanday boshlash kerak

Loyiha veb-sayti - buildroot.org. Bu erda siz joriy versiyani yuklab olishingiz va qo'llanmani o'qishingiz mumkin. U erda siz hamjamiyat bilan bog'lanishingiz mumkin, xato kuzatuvchisi, pochta ro'yxatlari va irc kanali mavjud.

Buildroot tuzilishning maqsadli taxtasi uchun defconfiglarni boshqaradi. Defconfig - bu faqat standart qiymatlarga ega bo'lmagan variantlarni saqlaydigan konfiguratsiya fayli. U nima va qanday to'planishini belgilaydi. Bunday holda siz busybox, linux-kernel, uglibc, u-boot va barebox bootloaderlarining konfiguratsiyalarini alohida sozlashingiz mumkin, ammo ularning barchasi maqsadli panelga bog'langan bo'ladi.
Yuklab olingan arxivni ochish yoki git-dan klonlashdan so'ng biz foydalanishga tayyor Buildroot-ni olamiz. Siz qo'llanmada katalog tuzilishi haqida ko'proq o'qishingiz mumkin, men sizga eng muhimlari haqida aytib beraman:

taxta — har bir plataga xos fayllarga ega katalog. Bu tizim tasvirlarini yaratish uchun skriptlar (iso, sdcart, cpio va boshqalar), qoplamali katalog, yadro konfiguratsiyasi va boshqalar bo'lishi mumkin.
configs — kengashning haqiqiy defconfig. Defconfig - bu to'liq bo'lmagan kengash konfiguratsiyasi. U faqat standart sozlamalardan farq qiluvchi parametrlarni saqlaydi
dl — yig'ish uchun yuklab olingan manba kodlari/fayllari bo'lgan katalog
chiqish/maqsad — hosil bo'lgan OTning yig'ilgan fayl tizimi. Keyinchalik, yuklab olish/o'rnatish uchun undan tasvirlar yaratiladi
chiqish/host - yig'ish uchun xost yordamchi dasturlari
chiqish/qurilish - yig'ilgan paketlar

Yig'ish KConfig orqali sozlangan. Xuddi shu tizim Linux yadrosini yaratish uchun ishlatiladi. Eng ko'p ishlatiladigan buyruqlar ro'yxati (Buildroot katalogida bajaring):

  • make menuconfig - qurish konfiguratsiyasini chaqiring. Grafik interfeysdan ham foydalanishingiz mumkin (nconfig qiling, xconfig qiling, gconfig qiling)
  • linux-menuconfig qiling - yadro konfiguratsiyasini chaqiring.
  • tozalash - qurish natijalarini tozalash (chiqishda saqlangan hamma narsa)
  • yaratish - tizim yaratish. Bu allaqachon yig'ilgan jarayonlarni qayta yig'maydi.
  • make defconfig_name - konfiguratsiyani ma'lum bir defconfigga o'tkazing
  • list-defconfigs qilish - defconfigs ro'yxatini ko'rsatish
  • manba yarating - faqat o'rnatish fayllarini qurmasdan yuklab oling.
  • yordam berish - mumkin bo'lgan buyruqlar ro'yxati

Muhim eslatmalar va foydali maslahatlar

Buildroot allaqachon qurilgan paketlarni qayta tiklamaydi! Shuning uchun, to'liq qayta yig'ish talab qilinadigan vaziyat yuzaga kelishi mumkin.

Buyruq yordamida alohida paketni qayta tiklashingiz mumkin paket nomini qayta qurish. Masalan, siz Linux yadrosini qayta tiklashingiz mumkin:

make linux-rebuild

Buildroot har qanday paketning holatini output/build/$packagename katalogida .stamp fayllarini yaratish orqali saqlaydi:

Buildroot - qism 1. Umumiy ma'lumot, minimal tizimni yig'ish, menyu orqali konfiguratsiya

Shuning uchun siz paketlarni qayta tiklamasdan root-fs va tasvirlarni qayta tiklashingiz mumkin:

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

Foydali o'zgaruvchilar

buildroot oson konfiguratsiya uchun o'zgaruvchilar to'plamiga ega

  • $TOPDIR - Buildroot katalogi
  • $BASEDIR - OUTPUT katalogi
  • $HOST_DIR, $STAGING_DIR, $TARGET_DIR — xost fs, staging fs, maqsadli fs kataloglarini yaratish.
  • $BUILD_DIR - paketdan chiqarilgan va qurilgan paketlarga ega katalog

Vizualizatsiya

buildroot vizualizatsiya xususiyatiga ega.Yakuniy tizimda siz qaramlik diagrammasi, qurish vaqti grafigi va paket oʻlchamlari grafigini qurishingiz mumkin. Natijalar chiqish/grafik katalogida pdf fayllar ko'rinishida (siz svn,png dan tanlashingiz mumkin).

Vizualizatsiya buyruqlariga misollar:

  • make graph-depends qaramlik daraxtini qurish
  • make <pkg>-graph-depends Muayyan paket uchun qaramlik daraxtini yaratish
  • BR2_GRAPH_OUT=png make graph-build PNG chiqishi bilan qurilish vaqtini belgilang
  • make graph-size uchastka paketi hajmi

Foydali skriptlar

Buildroot katalogida pastki katalog mavjud idishlar foydali skriptlar bilan. Misol uchun, paket tavsiflarining to'g'riligini tekshiradigan skript mavjud. Bu o'z paketlaringizni qo'shganda foydali bo'lishi mumkin (buni keyinroq qilaman). utils/readme.txt faylida ushbu skriptlar tavsifi mavjud.

Keling, aktsiyalarni taqsimlashni quraylik

Shuni yodda tutish kerakki, barcha operatsiyalar root emas, balki oddiy foydalanuvchi nomidan amalga oshiriladi.
Barcha buyruqlar Buildroot-da bajariladi. Buildroot paketi allaqachon ko'plab keng tarqalgan platalar va virtualizatsiya uchun konfiguratsiyalar to'plamini o'z ichiga oladi.

Keling, konfiguratsiyalar ro'yxatini ko'rib chiqaylik:

Buildroot - qism 1. Umumiy ma'lumot, minimal tizimni yig'ish, menyu orqali konfiguratsiya

qemu_x86_64_defconfig konfiguratsiyasiga o'ting

make qemu_x86_64_defconfig

Va biz yig'ilishni boshlaymiz

make

Qurilish muvaffaqiyatli yakunlandi, natijalarga qarang:

Buildroot - qism 1. Umumiy ma'lumot, minimal tizimni yig'ish, menyu orqali konfiguratsiya

Buildroot siz Qemu-da ishga tushirishingiz va ularning ishlashini tekshirishingiz mumkin bo'lgan rasmlarni jamladi.

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

Natijada qemu-da ishlaydigan tizim:

Buildroot - qism 1. Umumiy ma'lumot, minimal tizimni yig'ish, menyu orqali konfiguratsiya

O'zingizning kengash konfiguratsiyasini yaratish

Kengash fayllarini qo'shish

Keling, konfiguratsiyalar ro'yxatini ko'rib chiqaylik:

Buildroot - qism 1. Umumiy ma'lumot, minimal tizimni yig'ish, menyu orqali konfiguratsiya

Ro'yxatda biz pc_x86_64_efi_defconfig ni ko'ramiz. Biz uni konfiguratsiyadan nusxalash orqali o'z taxtamizni yaratamiz:

cp configs/pc_x86_64_bios_defconfig configs/my_x86_board_defconfig

Skriptlarimiz, rootfs-overlay va boshqa kerakli fayllarni saqlash uchun darhol doska katalogini yarataylik:

mkdir board/my_x86_board

Ushbu defkonfiguratsiyaga o'ting:

make my_x86_board_defconfig

Shunday qilib, endi qurilish konfiguratsiyasi (Buildroot katalogining ildizida .config da saqlangan) x86-64 legacy(bios) yuklash maqsadli mashinasiga mos keladi.

Linux yadrosi konfiguratsiyasidan nusxa ko'rsatamiz (keyinroq foydali bo'ladi):

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

KConfig orqali qurish parametrlarini o'rnatish

Keling, sozlashni boshlaylik:

make menuconfig 

KConfig oynasi ochiladi. Grafik interfeys yordamida sozlash mumkin (nconfig qiling, xconfig qiling, gconfig qiling):

Buildroot - qism 1. Umumiy ma'lumot, minimal tizimni yig'ish, menyu orqali konfiguratsiya

Biz birinchi bo'limga kiramiz Maqsad variantlari. Bu erda siz qurilish amalga oshiriladigan maqsadli arxitekturani tanlashingiz mumkin.

Buildroot - qism 1. Umumiy ma'lumot, minimal tizimni yig'ish, menyu orqali konfiguratsiya

Qurilish variantlari - bu erda turli xil qurish sozlamalari mavjud. Siz manba kodlari bilan kataloglarni, qurilish iplari sonini, manba kodlarini yuklab olish uchun oynalarni va boshqa sozlamalarni belgilashingiz mumkin. Keling, sozlamalarni sukut bo'yicha qoldiramiz.

Asboblar zanjiri - bu erda qurish vositalarining o'zi sozlangan. U haqida ko'proq o'qing.

Buildroot - qism 1. Umumiy ma'lumot, minimal tizimni yig'ish, menyu orqali konfiguratsiya

Asboblar zanjiri turi - ishlatiladigan asboblar zanjiri turi. Bu Buildroot-ga o'rnatilgan asboblar zanjiri yoki tashqi bo'lishi mumkin (siz allaqachon qurilgan katalogni yoki yuklab olish uchun urlni belgilashingiz mumkin). Turli arxitekturalar uchun qo'shimcha imkoniyatlar mavjud. Masalan, qo'l uchun siz tashqi asboblar zanjirining Linaro versiyasini tanlashingiz mumkin.

C kutubxonasi - C kutubxonasini tanlash Butun tizimning ishlashi bunga bog'liq. Odatda, barcha mumkin bo'lgan funksiyalarni qo'llab-quvvatlaydigan glibc ishlatiladi. Ammo u o'rnatilgan tizim uchun juda katta bo'lishi mumkin, shuning uchun ko'pincha uglibc yoki musl tanlanadi. Biz glibc ni tanlaymiz (bu keyinchalik systemd dan foydalanish uchun talab qilinadi).

Yadro sarlavhalari va maxsus yadro sarlavhalari seriyasi - yig'ilgan tizimda bo'ladigan yadro versiyasiga mos kelishi kerak. Yadro sarlavhalari uchun siz tarball yoki git omboriga yo'lni ham belgilashingiz mumkin.

GCC COMPILER VERSIONLARI - qurish uchun ishlatiladigan kompilyator versiyasini tanlang
C++ qo‘llab-quvvatlashini yoqish – tizimdagi C++ kutubxonalarini qo‘llab-quvvatlash bilan qurishni tanlang. Bu biz uchun kelajakda foydali bo'ladi.

Qo'shimcha gcc opsiyalari - qo'shimcha kompilyator parametrlarini o'rnatishingiz mumkin. Bizga hozircha kerak emas.

Tizim konfiguratsiyasi yaratilgan tizimning kelajakdagi parametrlarini o'rnatishga imkon beradi:

Buildroot - qism 1. Umumiy ma'lumot, minimal tizimni yig'ish, menyu orqali konfiguratsiya

Ko'pgina fikrlar sarlavhadan aniq. Keling, quyidagi fikrlarga e'tibor qaratamiz:
Foydalanuvchilar jadvallariga yo'l - yaratiladigan foydalanuvchilar bilan jadval (https://buildroot.org/downloads/manual/manual.html#makeuser-syntax).

Misol fayl. Foydalanuvchi foydalanuvchi parol administratori, avtomatik gid/uid, /bin/sh shell, standart guruh foydalanuvchisi, guruh aʼzosi ildizi, izoh Foo foydalanuvchisi bilan yaratiladi.

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

Ildiz fayl tizimining ustki kataloglari - yig'ilgan target-fs tepasida joylashgan katalog. Yangi fayllarni qo'shadi va mavjudlarini almashtiradi.

Fayl tizimi tasvirlarini yaratishdan oldin ishga tushiriladigan maxsus skriptlar - Fayl tizimini tasvirlarga katlamadan oldin darhol bajariladigan skriptlar. Hozircha skriptni bo'sh qoldiraylik.

Keling, yadro bo'limiga o'tamiz

Buildroot - qism 1. Umumiy ma'lumot, minimal tizimni yig'ish, menyu orqali konfiguratsiya

Yadro sozlamalari bu erda o'rnatiladi. Yadroning o'zi make linux-menuconfig orqali sozlangan.
Siz yadro versiyasini turli yo'llar bilan o'rnatishingiz mumkin: taklif qilinganlardan tanlang, versiyani qo'lda kiriting, omborni yoki tayyor tarballni belgilang.

Yadro konfiguratsiyasi - yadro konfiguratsiyasiga yo'l. Tanlangan arxitektura uchun standart konfiguratsiyani yoki Linuxdan defocnfigni tanlashingiz mumkin. Linux manbasi turli maqsadli tizimlar uchun defconfigs to'plamini o'z ichiga oladi. Sizga kerak bo'lgan narsani topishingiz mumkin bu yerdagi manbalarga to'g'ridan-to'g'ri qarab. Misol uchun, beagle bone qora taxta uchun siz mumkin konfiguratsiyani tanlang.

Maqsadli paketlar bo'limi qurilayotgan tizimga qaysi paketlar o'rnatilishini tanlash imkonini beradi. Keling, buni hozircha o'zgarishsiz qoldiramiz. Biz paketlarimizni keyinroq ushbu ro'yxatga qo'shamiz.
Fayl tizimi tasvirlari - to'planadigan fayl tizimi rasmlari ro'yxati. Iso tasvirni qo'shing

Buildroot - qism 1. Umumiy ma'lumot, minimal tizimni yig'ish, menyu orqali konfiguratsiya

Bootloaders - to'plash uchun yuklovchilarni tanlash. Keling, isolinixni tanlaymiz

Buildroot - qism 1. Umumiy ma'lumot, minimal tizimni yig'ish, menyu orqali konfiguratsiya

Systemd sozlanmoqda

Systemd yadro va glibc bilan birga Linuxning ustunlaridan biriga aylanib bormoqda. Shuning uchun men uning sozlamalarini alohida elementga o'tkazdim.

make menuconfig orqali sozlangan, keyin Maqsadli paketlar → Tizim asboblari → systemd. Bu yerda siz tizim ishga tushganda qaysi systemd xizmatlari o'rnatilishi va ishga tushishini belgilashingiz mumkin.

Buildroot - qism 1. Umumiy ma'lumot, minimal tizimni yig'ish, menyu orqali konfiguratsiya

Tizim konfiguratsiyasi saqlanmoqda

Biz ushbu konfiguratsiyani KConfig orqali saqlaymiz.

Keyin defconfig-ni saqlang:

make savedefconfig

Linux yadro konfiguratsiyasi

Linux yadrosi konfiguratsiyasi quyidagi buyruq bilan chaqiriladi:

make linux-menuconfig

Virtualbox video kartasini qo'llab-quvvatlaymiz

Buildroot - qism 1. Umumiy ma'lumot, minimal tizimni yig'ish, menyu orqali konfiguratsiya

Virtualbox Guest integratsiyasini qo'llab-quvvatlashni qo'shamiz

Buildroot - qism 1. Umumiy ma'lumot, minimal tizimni yig'ish, menyu orqali konfiguratsiya

Saqlash va chiqish. MUHIM: konfiguratsiya output/build/linux-$version/config da saqlanadi, lekin board/my_x86_board/linux.config da saqlanmaydi

Buildroot - qism 1. Umumiy ma'lumot, minimal tizimni yig'ish, menyu orqali konfiguratsiya

Shuning uchun, konfiguratsiyani saqlash joyiga qo'lda nusxalashingiz kerak:

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

Shundan so'ng biz butun tizimni to'liq qayta yig'ishni amalga oshiramiz. buildroot allaqachon qurilgan narsani qayta tiklamaydi, siz qayta tiklash uchun paketlarni qo'lda belgilashingiz kerak. Vaqt va asablarni behuda sarflamaslik uchun kichik tizimni butunlay qayta qurish osonroq):

make clean;make

Qurilish tugallangandan so'ng, VirtualBox-ni ishga tushiring (5.2 va 6.0 versiyalarida sinovdan o'tgan) CD-dan yuklash. Tizim parametrlari:

Buildroot - qism 1. Umumiy ma'lumot, minimal tizimni yig'ish, menyu orqali konfiguratsiya

Yig'ilgan iso-dan ishga tushirish:

Buildroot - qism 1. Umumiy ma'lumot, minimal tizimni yig'ish, menyu orqali konfiguratsiya

Amaldagi materiallar ro'yxati

  1. Buildroot uchun qo'llanma

Manba: www.habr.com

a Izoh qo'shish