Танилцуулга
Энэ цуврал нийтлэлд би buildroot түгээлтийн бүтээх системийг үзэж, үүнийг өөрчлөх туршлагаасаа хуваалцахыг хүсч байна. График интерфэйстэй, хамгийн бага ажиллагаатай жижиг үйлдлийн систем үүсгэх практик туршлага байх болно.
Юуны өмнө та бүтээх систем болон түгээлтийг андуурч болохгүй. Buildroot нь түүнд санал болгож буй багц багцаас систем бүтээх боломжтой. Buildroot нь makefile дээр суурилагдсан тул өөрчлөх асар их чадвартай. Багцыг өөр хувилбараар сольж, өөрийн багцыг нэмж, багц бүтээх дүрмийг өөрчлөх, бүх багцыг суулгасны дараа файлын системийг өөрчлөх үү? buildroot энэ бүгдийг хийж чадна.
Орос улсад buildroot ашигладаг, гэхдээ миний бодлоор эхлэгчдэд зориулсан орос хэл дээрх мэдээлэл бага байдаг.
Ажлын зорилго нь шууд татаж авах, icewm интерфейс, хөтөч бүхий түгээлтийн иж бүрдэл угсрах явдал юм. Зорилтот платформ нь virtualbox юм.
Яагаад өөрийн түгээлтийг бий болгох вэ? Ихэнхдээ хязгаарлагдмал нөөцөөр хязгаарлагдмал функц шаардлагатай байдаг. Илүү олон удаа автоматжуулалтад та програм хангамж үүсгэх хэрэгтэй. Шаардлагагүй багцуудыг цэвэрлэж, програм хангамж болгон хувиргах замаар ерөнхий зориулалтын түгээлтийг тохируулах нь шинэ түгээлт бүтээхээс илүү хөдөлмөр шаарддаг. Gentoo ашиглах нь бас хязгаарлалттай байдаг.
Buildroot систем нь маш хүчирхэг боловч таны төлөө юу ч хийхгүй. Энэ нь зөвхөн угсрах үйл явцыг идэвхжүүлж, автоматжуулах боломжтой.
Альтернатив бүтээх системүүдийг (yocto, open build system болон бусад) авч үзэхгүй, харьцуулдаггүй.
Үүнийг хаанаас авах, яаж эхлэх вэ
Төслийн вэбсайт -
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 файл үүсгэснээр аливаа багцын төлөвийг хадгалдаг:
Тиймээс та багцуудыг дахин бүтээхгүйгээр 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 багц нь олон нийтлэг самбар болон виртуалчлалын тохиргооны багцыг аль хэдийн агуулдаг.
Тохиргооны жагсаалтыг харцгаая:
qemu_x86_64_defconfig тохиргоо руу шилжинэ үү
make qemu_x86_64_defconfig
Тэгээд бид чуулганаа эхлүүлнэ
make
Барилга амжилттай дууссан тул үр дүнг харна уу:
Buildroot нь Qemu-д ажиллуулж, ажиллаж байгаа эсэхийг шалгах боломжтой зургуудыг эмхэтгэсэн.
qemu-system-x86_64 -kernel output/images/bzImage -hda output/images/rootfs.ext2 -append "root=/dev/sda rw" -s -S
Үр дүн нь qemu-д ажиллаж байгаа систем юм:
Өөрийнхөө самбарын тохиргоог бий болгох
Самбарын файлуудыг нэмэх
Тохиргооны жагсаалтыг харцгаая:
Жагсаалтад бид 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 хийх):
Бид Зорилтот сонголтуудын эхний хэсэгт ордог. Энд та угсралтын ажлыг гүйцэтгэх зорилтот архитектурыг сонгож болно.
Барилгын сонголтууд - энд янз бүрийн бүтээх тохиргоонууд байдаг. Та эх код, бүтээх хэлхээний тоо, эх кодыг татаж авах толь болон бусад тохиргоо бүхий лавлахуудыг зааж өгч болно. Тохиргоог анхдагчаар нь үлдээцгээе.
Toolchain – бүтээх хэрэгслүүдийг энд тохируулсан болно. Түүний тухай дэлгэрэнгүй уншина уу.
Хэрэгслийн гинжний төрөл - ашигласан багажны гинжний төрөл. Энэ нь buildroot-д суурилагдсан багаж хэрэгсэл эсвэл гадны нэг хэрэгсэл байж болно (та аль хэдийн үүсгэсэн лавлах эсвэл татаж авах url-г зааж өгч болно). Өөр өөр архитектурт зориулсан нэмэлт сонголтууд байдаг. Жишээлбэл, гарны хувьд та гадаад хэрэгслийн гинжний Linaro хувилбарыг сонгож болно.
C library – Си номын санг сонгох.Бүхэл системийн ажиллагаа үүнээс хамаарна. Ихэвчлэн glibc ашигладаг бөгөөд энэ нь бүх боломжит функцийг дэмждэг. Гэхдээ энэ нь суулгагдсан системд хэтэрхий том байж болох тул uglibc эсвэл musl-ийг ихэвчлэн сонгодог. Бид glibc-г сонгох болно (энэ нь дараа нь systemd ашиглахад шаардлагатай болно).
Цөмийн толгой ба захиалгат цөмийн толгойн цувралууд нь угсарсан системд байгаа цөмийн хувилбартай тохирч байх ёстой. Цөмийн толгойн хувьд та мөн tarball эсвэл git репозитор руу орох замыг зааж өгч болно.
GCC COMPILER VERSIONS – бүтээхэд ашиглах хөрвүүлэгчийн хувилбарыг сонгоно уу
C++ дэмжлэгийг идэвхжүүлэх – систем дэх C++ сангуудын дэмжлэгтэйгээр бүтээхийг сонгоно уу. Энэ нь ирээдүйд бидэнд ашигтай байх болно.
Нэмэлт gcc сонголтууд - та хөрвүүлэгчийн нэмэлт сонголтыг тохируулж болно. Бидэнд одоохондоо хэрэггүй.
Системийн тохиргоо нь үүсгэсэн системийн ирээдүйн параметрүүдийг тохируулах боломжийг танд олгоно.
Гарчигнаас ихэнх оноо тодорхой байна. Дараахь зүйлд анхаарлаа хандуулцгаая.
Хэрэглэгчийн хүснэгтүүдийн зам - үүсгэх хэрэглэгчидтэй хүснэгт (
Жишээ файл. Хэрэглэгчийн хэрэглэгчийг нууц үгийн админ, автоматаар 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 дээр давхарласан лавлах. Шинэ файлуудыг нэмж, байгаа файлуудыг солино.
Файлын системийн зураг үүсгэхээс өмнө ажиллуулах тусгай скриптүүд - Файлын системийг зураг болгон эвхэхээс өмнө шууд гүйцэтгэсэн скриптүүд. Одоохондоо скриптийг хоосон орхиё.
Цөмийн хэсэг рүү орцгооё
Цөмийн тохиргоог энд тохируулсан. Цөм нь өөрөө make linux-menuconfig-ээр тохируулагдсан байдаг.
Та цөмийн хувилбарыг янз бүрийн аргаар тохируулж болно: санал болгож буй хувилбаруудаас сонгох, хувилбарыг гараар оруулах, хадгалах газар эсвэл бэлэн tarball зааж өгөх.
Цөмийн тохиргоо — цөмийн тохиргоонд хүрэх зам. Та Linux-аас сонгосон архитектур эсвэл defocnfig-ийн анхдагч тохиргоог сонгож болно. Линуксийн эх сурвалж нь өөр өөр зорилтот системд зориулсан defconfig-уудыг агуулдаг. Та өөрт хэрэгтэй нэгийг нь олох боломжтой
Зорилтот багцууд нь баригдаж буй системд ямар багцуудыг суулгахыг сонгох боломжийг танд олгоно. Одоохондоо өөрчлөхгүй орхиё. Бид дараа нь багцуудаа энэ жагсаалтад нэмэх болно.
Файлын системийн зургууд - цуглуулах файлын системийн зургийн жагсаалт. ISO дүрс нэмнэ үү
Bootloaders - цуглуулах ачаалагчийг сонгох. Isolinix-ийг сонгоцгооё
Systemd-г тохируулж байна
Systemd нь цөм болон glibc-ийн хамт Линуксийн нэг тулгуур болж байна. Тиймээс би түүний тохиргоог тусдаа зүйл рүү шилжүүлсэн.
make menuconfig, дараа нь Зорилтот багцууд → Системийн хэрэгслүүд → systemd-ээр тохируулна. Эндээс та систем эхлэхэд ямар системийн үйлчилгээг суулгаж, эхлүүлэхийг зааж өгч болно.
Системийн тохиргоог хадгалж байна
Бид энэ тохиргоог KConfig-ээр хадгалдаг.
Дараа нь манай defconfig-г хадгал:
make savedefconfig
Линуксийн цөмийн тохиргоо
Линуксийн цөмийн тохиргоог дараах тушаалаар ажиллуулна.
make linux-menuconfig
Virtualbox видео картын дэмжлэгийг нэмье
Virtualbox зочин нэгтгэх дэмжлэгийг нэмье
Хадгалаад гарах. Анхаарах зүйл: тохиргоо нь output/build/linux-$version/config дотор хадгалагдах боловч board/my_x86_board/linux.config дотор хадгалагдахгүй.
Тиймээс та тохиргоог хадгалах газар руу гараар хуулах хэрэгтэй.
cp output/build/linux-4.19.25/.config board/my_x86_board/linux.config
Үүний дараа бид бүхэл бүтэн системийг дахин угсрах ажлыг гүйцэтгэнэ. buildroot нь аль хэдийн баригдсан зүйлийг дахин бүтээхгүй тул та дахин бүтээх багцуудыг гараар зааж өгөх ёстой. Цаг хугацаа, мэдрэлийг үрэхгүй байхын тулд жижиг системийг бүхэлд нь сэргээх нь илүү хялбар байдаг):
make clean;make
Бүтээж дууссаны дараа CD-ээс ачаалж VirtualBox (5.2 ба 6.0 хувилбарууд дээр туршсан) ажиллуулна. Системийн параметрүүд:
Угсарсан iso-ээс ажиллаж байна:
Ашигласан материалын жагсаалт
- Buildroot гарын авлага
Эх сурвалж: www.habr.com