Buildroot - 1-р хэсэг. Ерөнхий мэдээлэл, хамгийн бага системийг угсрах, цэсээр дамжуулан тохиргоо хийх

Танилцуулга

Энэ цуврал нийтлэлд би buildroot түгээлтийн бүтээх системийг үзэж, үүнийг өөрчлөх туршлагаасаа хуваалцахыг хүсч байна. График интерфэйстэй, хамгийн бага ажиллагаатай жижиг үйлдлийн систем үүсгэх практик туршлага байх болно.

Юуны өмнө та бүтээх систем болон түгээлтийг андуурч болохгүй. Buildroot нь түүнд санал болгож буй багц багцаас систем бүтээх боломжтой. Buildroot нь makefile дээр суурилагдсан тул өөрчлөх асар их чадвартай. Багцыг өөр хувилбараар сольж, өөрийн багцыг нэмж, багц бүтээх дүрмийг өөрчлөх, бүх багцыг суулгасны дараа файлын системийг өөрчлөх үү? buildroot энэ бүгдийг хийж чадна.

Орос улсад buildroot ашигладаг, гэхдээ миний бодлоор эхлэгчдэд зориулсан орос хэл дээрх мэдээлэл бага байдаг.

Ажлын зорилго нь шууд татаж авах, icewm интерфейс, хөтөч бүхий түгээлтийн иж бүрдэл угсрах явдал юм. Зорилтот платформ нь virtualbox юм.

Яагаад өөрийн түгээлтийг бий болгох вэ? Ихэнхдээ хязгаарлагдмал нөөцөөр хязгаарлагдмал функц шаардлагатай байдаг. Илүү олон удаа автоматжуулалтад та програм хангамж үүсгэх хэрэгтэй. Шаардлагагүй багцуудыг цэвэрлэж, програм хангамж болгон хувиргах замаар ерөнхий зориулалтын түгээлтийг тохируулах нь шинэ түгээлт бүтээхээс илүү хөдөлмөр шаарддаг. Gentoo ашиглах нь бас хязгаарлалттай байдаг.

Buildroot систем нь маш хүчирхэг боловч таны төлөө юу ч хийхгүй. Энэ нь зөвхөн угсрах үйл явцыг идэвхжүүлж, автоматжуулах боломжтой.

Альтернатив бүтээх системүүдийг (yocto, open build system болон бусад) авч үзэхгүй, харьцуулдаггүй.

Үүнийг хаанаас авах, яаж эхлэх вэ

Төслийн вэбсайт - buildroot.org. Эндээс та одоогийн хувилбарыг татаж аваад гарын авлагыг уншиж болно. Тэнд та олон нийттэй холбоо барьж болно, алдаа илрүүлэгч, имэйлийн жагсаалт, irc суваг байдаг.

Buildroot нь угсралтын зорилтот самбарт зориулсан defconfig-уудыг ажиллуулдаг. Defconfig нь зөвхөн анхдагч утгагүй сонголтуудыг хадгалдаг тохиргооны файл юм. Юуг яаж цуглуулахыг тэр л шийддэг. Энэ тохиолдолд та busybox, linux-kernel, uglibc, u-boot болон barebox ачаалагчийн тохиргоог тусад нь тохируулах боломжтой боловч бүгдийг нь зорилтот самбарт холбох болно.
Татаж авсан архивыг задлах эсвэл git-ээс клон хийсний дараа бид ашиглахад бэлэн Buildroot-г авна. Та лавлах бүтцийн талаар дэлгэрэнгүй мэдээллийг гарын авлагаас уншиж болно, би хамгийн чухал зүйлийн талаар танд хэлэх болно.

ТУЗ-ийн — самбар бүрт тусгайлан зориулсан файл бүхий лавлах. Эдгээр нь системийн дүрс үүсгэх скрипт (iso, sdcart, cpio болон бусад), давхардсан лавлах, цөмийн тохиргоо гэх мэт байж болно.
тохируулна - самбарын бодит тохиргоо. Defconfig нь бүрэн бус хавтангийн тохиргоо юм. Энэ нь зөвхөн анхдагч тохиргооноос ялгаатай параметрүүдийг хадгалдаг
dl — угсрах эх код/файлуудыг татаж авсан лавлах
гаралт/зорилт - үүссэн үйлдлийн системийн угсарсан файлын систем. Дараа нь татаж авах/суулгах зорилгоор үүнээс зураг үүсгэнэ
гаралт/хост - угсрах зориулалттай хост хэрэгслүүд
гаралт / бүтээх - угсарсан багцууд

Угсралтыг KConfig-ээр тохируулсан. Линуксийн цөмийг бүтээхэд ижил системийг ашигладаг. Хамгийн түгээмэл хэрэглэгддэг командуудын жагсаалт (Buildroot директорт гүйцэтгэх):

  • make menuconfig - бүтээх тохиргоог дуудах. Та мөн график интерфэйсийг ашиглаж болно (nconfig хийх, xconfig хийх, gconfig хийх)
  • linux-menuconfig хийх - цөмийн тохиргоог дуудах.
  • make clean - бүтээх үр дүнг цэвэрлэх (гаралтад хадгалагдсан бүх зүйл)
  • хийх - системийг бий болгох. Энэ нь аль хэдийн угсарсан процессуудыг дахин угсардаггүй.
  • make defconfig_name - тохиргоог тодорхой defconfig руу шилжүүлнэ
  • list-defconfigs хийх - defconfigs-ийн жагсаалтыг харуулах
  • эх сурвалжийг бий болгох - зүгээр л суулгах файлуудыг суулгахгүйгээр татаж аваарай.
  • тусламж хийх - боломжтой командуудыг жагсаана

Чухал тэмдэглэл, хэрэгтэй зөвлөмжүүд

Buildroot нь аль хэдийн баригдсан багцуудыг дахин бүтээдэггүй! Тиймээс бүрэн дахин угсрах шаардлагатай нөхцөл байдал үүсч болно.

Та командын тусламжтайгаар тусдаа багцыг дахин үүсгэж болно багцын нэрийг дахин бүтээх. Жишээлбэл, та Линуксийн цөмийг дахин бүтээж болно:

make linux-rebuild

Buildroot нь output/build/$packagename директорт .stamp файл үүсгэснээр аливаа багцын төлөвийг хадгалдаг:

Buildroot - 1-р хэсэг. Ерөнхий мэдээлэл, хамгийн бага системийг угсрах, цэсээр дамжуулан тохиргоо хийх

Тиймээс та багцуудыг дахин бүтээхгүйгээр root-fs болон дүрсийг дахин бүтээх боломжтой.

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

Ашигтай хувьсагч

buildroot нь тохиргоо хийхэд хялбар хувьсагчтай

  • $TOPDIR - buildroot лавлах
  • $BASEDIR - OUTPUT лавлах
  • $HOST_DIR, $STAGING_DIR, $TARGET_DIR — хост fs, үе шаттай fs, зорилтот fs бүтээх лавлах.
  • $BUILD_DIR - задалсан болон барьсан багц бүхий лавлах

Дүрслэх

buildroot нь дүрслэх функцтэй.Та эцсийн системд хамаарлын диаграмм, бүтээх хугацааны график болон багцын хэмжээсийн графикийг барьж болно. Үр дүн нь pdf файл хэлбэрээр (та svn,png-ээс сонгож болно) гаралт/график санд байна.

Дүрслэх командуудын жишээ:

  • make graph-depends хараат байдлын модыг бий болгох
  • make <pkg>-graph-depends тодорхой багцад хамаарлын модыг бий болгох
  • BR2_GRAPH_OUT=png make graph-build PNG гаралттай бүтээх хугацааг төлөвлө
  • make graph-size багцын хэмжээ

Хэрэгтэй скриптүүд

Buildroot санд дэд директор байдаг utils ашигтай скриптүүдтэй. Жишээлбэл, багцын тайлбарын зөв эсэхийг шалгадаг скрипт байдаг. Энэ нь таны багцуудыг нэмэхэд хэрэг болно (би үүнийг дараа хийх болно). utils/readme.txt файл нь эдгээр скриптүүдийн тайлбарыг агуулна.

Хувьцааны хуваарилалтыг байгуулъя

Бүх үйлдлүүд нь root биш харин байнгын хэрэглэгчийн нэрийн өмнөөс хийгддэг гэдгийг санах нь чухал.
Бүх командуудыг Buildroot дээр гүйцэтгэдэг. Buildroot багц нь олон нийтлэг самбар болон виртуалчлалын тохиргооны багцыг аль хэдийн агуулдаг.

Тохиргооны жагсаалтыг харцгаая:

Buildroot - 1-р хэсэг. Ерөнхий мэдээлэл, хамгийн бага системийг угсрах, цэсээр дамжуулан тохиргоо хийх

qemu_x86_64_defconfig тохиргоо руу шилжинэ үү

make qemu_x86_64_defconfig

Тэгээд бид чуулганаа эхлүүлнэ

make

Барилга амжилттай дууссан тул үр дүнг харна уу:

Buildroot - 1-р хэсэг. Ерөнхий мэдээлэл, хамгийн бага системийг угсрах, цэсээр дамжуулан тохиргоо хийх

Buildroot нь Qemu-д ажиллуулж, ажиллаж байгаа эсэхийг шалгах боломжтой зургуудыг эмхэтгэсэн.

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

Үр дүн нь qemu-д ажиллаж байгаа систем юм:

Buildroot - 1-р хэсэг. Ерөнхий мэдээлэл, хамгийн бага системийг угсрах, цэсээр дамжуулан тохиргоо хийх

Өөрийнхөө самбарын тохиргоог бий болгох

Самбарын файлуудыг нэмэх

Тохиргооны жагсаалтыг харцгаая:

Buildroot - 1-р хэсэг. Ерөнхий мэдээлэл, хамгийн бага системийг угсрах, цэсээр дамжуулан тохиргоо хийх

Жагсаалтад бид pc_x86_64_efi_defconfig-г харж байна. Бид тохиргооноос хуулж өөрийн самбарыг үүсгэх болно.

cp configs/pc_x86_64_bios_defconfig configs/my_x86_board_defconfig

Скриптүүд, rootfs-overlay болон бусад шаардлагатай файлуудыг хадгалах самбарын лавлахыг нэн даруй үүсгэцгээе.

mkdir board/my_x86_board

Энэ тохиргоонд шилжих:

make my_x86_board_defconfig

Тиймээс одоо бүтээх тохиргоо (Buildroot лавлахын үндэс дэх .config-д хадгалагдсан) нь x86-64 legacy(bios) ачаалах зорилтот машинтай тохирч байна.

Линукс цөмийн тохиргоог хуулж авцгаая (дараа нь хэрэг болно):

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

KConfig ашиглан бүтээх параметрүүдийг тохируулах

Тохиргоог эхлүүлцгээе:

make menuconfig 

KConfig цонх нээгдэнэ. График интерфейсээр тохируулах боломжтой (nconfig хийх, xconfig хийх, gconfig хийх):

Buildroot - 1-р хэсэг. Ерөнхий мэдээлэл, хамгийн бага системийг угсрах, цэсээр дамжуулан тохиргоо хийх

Бид Зорилтот сонголтуудын эхний хэсэгт ордог. Энд та угсралтын ажлыг гүйцэтгэх зорилтот архитектурыг сонгож болно.

Buildroot - 1-р хэсэг. Ерөнхий мэдээлэл, хамгийн бага системийг угсрах, цэсээр дамжуулан тохиргоо хийх

Барилгын сонголтууд - энд янз бүрийн бүтээх тохиргоонууд байдаг. Та эх код, бүтээх хэлхээний тоо, эх кодыг татаж авах толь болон бусад тохиргоо бүхий лавлахуудыг зааж өгч болно. Тохиргоог анхдагчаар нь үлдээцгээе.

Toolchain – бүтээх хэрэгслүүдийг энд тохируулсан болно. Түүний тухай дэлгэрэнгүй уншина уу.

Buildroot - 1-р хэсэг. Ерөнхий мэдээлэл, хамгийн бага системийг угсрах, цэсээр дамжуулан тохиргоо хийх

Хэрэгслийн гинжний төрөл - ашигласан багажны гинжний төрөл. Энэ нь buildroot-д суурилагдсан багаж хэрэгсэл эсвэл гадны нэг хэрэгсэл байж болно (та аль хэдийн үүсгэсэн лавлах эсвэл татаж авах url-г зааж өгч болно). Өөр өөр архитектурт зориулсан нэмэлт сонголтууд байдаг. Жишээлбэл, гарны хувьд та гадаад хэрэгслийн гинжний Linaro хувилбарыг сонгож болно.

C library – Си номын санг сонгох.Бүхэл системийн ажиллагаа үүнээс хамаарна. Ихэвчлэн glibc ашигладаг бөгөөд энэ нь бүх боломжит функцийг дэмждэг. Гэхдээ энэ нь суулгагдсан системд хэтэрхий том байж болох тул uglibc эсвэл musl-ийг ихэвчлэн сонгодог. Бид glibc-г сонгох болно (энэ нь дараа нь systemd ашиглахад шаардлагатай болно).

Цөмийн толгой ба захиалгат цөмийн толгойн цувралууд нь угсарсан системд байгаа цөмийн хувилбартай тохирч байх ёстой. Цөмийн толгойн хувьд та мөн tarball эсвэл git репозитор руу орох замыг зааж өгч болно.

GCC COMPILER VERSIONS – бүтээхэд ашиглах хөрвүүлэгчийн хувилбарыг сонгоно уу
C++ дэмжлэгийг идэвхжүүлэх – систем дэх C++ сангуудын дэмжлэгтэйгээр бүтээхийг сонгоно уу. Энэ нь ирээдүйд бидэнд ашигтай байх болно.

Нэмэлт gcc сонголтууд - та хөрвүүлэгчийн нэмэлт сонголтыг тохируулж болно. Бидэнд одоохондоо хэрэггүй.

Системийн тохиргоо нь үүсгэсэн системийн ирээдүйн параметрүүдийг тохируулах боломжийг танд олгоно.

Buildroot - 1-р хэсэг. Ерөнхий мэдээлэл, хамгийн бага системийг угсрах, цэсээр дамжуулан тохиргоо хийх

Гарчигнаас ихэнх оноо тодорхой байна. Дараахь зүйлд анхаарлаа хандуулцгаая.
Хэрэглэгчийн хүснэгтүүдийн зам - үүсгэх хэрэглэгчидтэй хүснэгт (https://buildroot.org/downloads/manual/manual.html#makeuser-syntax).

Жишээ файл. Хэрэглэгчийн хэрэглэгчийг нууц үгийн админ, автоматаар gid/uid, /bin/sh бүрхүүл, үндсэн бүлгийн хэрэглэгч, бүлгийн гишүүн үндэс, тайлбар Foo хэрэглэгчээр үүсгэнэ.

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

Үндэс файлын системийн давхардсан лавлахууд - угсарсан target-fs дээр давхарласан лавлах. Шинэ файлуудыг нэмж, байгаа файлуудыг солино.

Файлын системийн зураг үүсгэхээс өмнө ажиллуулах тусгай скриптүүд - Файлын системийг зураг болгон эвхэхээс өмнө шууд гүйцэтгэсэн скриптүүд. Одоохондоо скриптийг хоосон орхиё.

Цөмийн хэсэг рүү орцгооё

Buildroot - 1-р хэсэг. Ерөнхий мэдээлэл, хамгийн бага системийг угсрах, цэсээр дамжуулан тохиргоо хийх

Цөмийн тохиргоог энд тохируулсан. Цөм нь өөрөө make linux-menuconfig-ээр тохируулагдсан байдаг.
Та цөмийн хувилбарыг янз бүрийн аргаар тохируулж болно: санал болгож буй хувилбаруудаас сонгох, хувилбарыг гараар оруулах, хадгалах газар эсвэл бэлэн tarball зааж өгөх.

Цөмийн тохиргоо — цөмийн тохиргоонд хүрэх зам. Та Linux-аас сонгосон архитектур эсвэл defocnfig-ийн анхдагч тохиргоог сонгож болно. Линуксийн эх сурвалж нь өөр өөр зорилтот системд зориулсан defconfig-уудыг агуулдаг. Та өөрт хэрэгтэй нэгийг нь олох боломжтой энд байгаа эх сурвалжийг шууд үзэх замаар. Жишээ нь, beagle bone хар хавтангийн хувьд та боломжтой тохиргоог сонгоно уу.

Зорилтот багцууд нь баригдаж буй системд ямар багцуудыг суулгахыг сонгох боломжийг танд олгоно. Одоохондоо өөрчлөхгүй орхиё. Бид дараа нь багцуудаа энэ жагсаалтад нэмэх болно.
Файлын системийн зургууд - цуглуулах файлын системийн зургийн жагсаалт. ISO дүрс нэмнэ үү

Buildroot - 1-р хэсэг. Ерөнхий мэдээлэл, хамгийн бага системийг угсрах, цэсээр дамжуулан тохиргоо хийх

Bootloaders - цуглуулах ачаалагчийг сонгох. Isolinix-ийг сонгоцгооё

Buildroot - 1-р хэсэг. Ерөнхий мэдээлэл, хамгийн бага системийг угсрах, цэсээр дамжуулан тохиргоо хийх

Systemd-г тохируулж байна

Systemd нь цөм болон glibc-ийн хамт Линуксийн нэг тулгуур болж байна. Тиймээс би түүний тохиргоог тусдаа зүйл рүү шилжүүлсэн.

make menuconfig, дараа нь Зорилтот багцууд → Системийн хэрэгслүүд → systemd-ээр тохируулна. Эндээс та систем эхлэхэд ямар системийн үйлчилгээг суулгаж, эхлүүлэхийг зааж өгч болно.

Buildroot - 1-р хэсэг. Ерөнхий мэдээлэл, хамгийн бага системийг угсрах, цэсээр дамжуулан тохиргоо хийх

Системийн тохиргоог хадгалж байна

Бид энэ тохиргоог KConfig-ээр хадгалдаг.

Дараа нь манай defconfig-г хадгал:

make savedefconfig

Линуксийн цөмийн тохиргоо

Линуксийн цөмийн тохиргоог дараах тушаалаар ажиллуулна.

make linux-menuconfig

Virtualbox видео картын дэмжлэгийг нэмье

Buildroot - 1-р хэсэг. Ерөнхий мэдээлэл, хамгийн бага системийг угсрах, цэсээр дамжуулан тохиргоо хийх

Virtualbox зочин нэгтгэх дэмжлэгийг нэмье

Buildroot - 1-р хэсэг. Ерөнхий мэдээлэл, хамгийн бага системийг угсрах, цэсээр дамжуулан тохиргоо хийх

Хадгалаад гарах. Анхаарах зүйл: тохиргоо нь output/build/linux-$version/config дотор хадгалагдах боловч board/my_x86_board/linux.config дотор хадгалагдахгүй.

Buildroot - 1-р хэсэг. Ерөнхий мэдээлэл, хамгийн бага системийг угсрах, цэсээр дамжуулан тохиргоо хийх

Тиймээс та тохиргоог хадгалах газар руу гараар хуулах хэрэгтэй.

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

Үүний дараа бид бүхэл бүтэн системийг дахин угсрах ажлыг гүйцэтгэнэ. buildroot нь аль хэдийн баригдсан зүйлийг дахин бүтээхгүй тул та дахин бүтээх багцуудыг гараар зааж өгөх ёстой. Цаг хугацаа, мэдрэлийг үрэхгүй байхын тулд жижиг системийг бүхэлд нь сэргээх нь илүү хялбар байдаг):

make clean;make

Бүтээж дууссаны дараа CD-ээс ачаалж VirtualBox (5.2 ба 6.0 хувилбарууд дээр туршсан) ажиллуулна. Системийн параметрүүд:

Buildroot - 1-р хэсэг. Ерөнхий мэдээлэл, хамгийн бага системийг угсрах, цэсээр дамжуулан тохиргоо хийх

Угсарсан iso-ээс ажиллаж байна:

Buildroot - 1-р хэсэг. Ерөнхий мэдээлэл, хамгийн бага системийг угсрах, цэсээр дамжуулан тохиргоо хийх

Ашигласан материалын жагсаалт

  1. Buildroot гарын авлага

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх