тааныштыруу
Бул макалалар сериясында мен Buildroot бөлүштүрүү куруу системасын карап, аны ыңгайлаштыруудагы тажрыйбам менен бөлүшкүм келет. Графикалык интерфейси жана минималдуу функционалдуулугу бар чакан ОС түзүүдө практикалык тажрыйба болот.
Биринчиден, сиз куруу системасын жана бөлүштүрүүнү чаташтырбоо керек. Buildroot ага сунушталган пакеттердин топтомунан системаны кура алат. Buildroot макефайлдарга курулган жана ошондуктан эбегейсиз зор ыңгайлаштыруу мүмкүнчүлүктөрүнө ээ. Пакетти башка версияга алмаштырып, өзүңүздүн пакетиңизди кошуңуз, пакетти түзүү эрежелерин өзгөртүңүз, бардык пакеттерди орноткондон кийин файл тутумун ыңгайлаштырыңызбы? buildroot мунун баарын жасай алат.
Россияда buildroot колдонулат, бирок менин оюмча үйрөнчүктөр үчүн орус тилиндеги маалымат аз.
Иштин максаты - түз жүктөө, icewm интерфейси жана браузер менен бөлүштүрүүчү комплектти чогултуу. Максаттуу платформа виртуалдык куту болуп саналат.
Эмне үчүн өзүңүздүн дистрибьюцияңызды түзүңүз? Көп учурда чектелген функциялар чектелген ресурстар менен талап кылынат. Автоматташтырууда дагы көп учурда микропрограмманы түзүшүңүз керек. Керексиз пакеттерди тазалоо жана аны микропрограммага айландыруу аркылуу жалпы максаттуу бөлүштүрүүнү адаптациялоо жаңы дистрибьюторду курууга караганда көбүрөөк эмгекти талап кылат. Gentoo колдонуу да өзүнүн чектөөлөрү бар.
Buildroot системасы абдан күчтүү, бирок ал сиз үчүн эч нерсе кыла албайт. Ал монтаждоо процессин гана иштетип, автоматташтыра алат.
Альтернативдүү куруу системалары (yocto, ачык куруу системасы жана башкалар) каралбайт же салыштырылбайт.
Аны кайдан алуу керек жана кантип баштоо керек
Долбоордун веб-сайты -
Buildroot түзүүнүн максаттуу тактасы үчүн дефконфигурацияларды иштетет. Defconfig – демейки маанилери жок гана параметрлерди сактаган конфигурация файлы. Эмне, кантип чогултуларын ал аныктайт. Бул учурда, сиз булsybox, linux-kernel, uglibc, u-boot жана barebox жүктөөчүлөрдүн конфигурацияларын өзүнчө конфигурациялай аласыз, бирок алардын баары максаттуу тактага байланат.
Жүктөлгөн архивди таңгактан чыгаргандан же gitтен клондогондон кийин биз колдонууга даяр Buildroot алабыз. Каталогдун түзүмү тууралуу кененирээк окуу куралынан окуй аласыз, мен сизге эң маанилүүлөрү жөнүндө айтып берем:
башкарма — ар бир тактага тиешелүү файлдары бар каталог. Бул система сүрөттөрүн түзүү үчүн скрипттер болушу мүмкүн (iso, sdcart, cpio жана башкалар), катмар каталогу, ядро конфигурациясы ж.б.
configs — тактанын иш жүзүндөгү дефконфигурациясы. Defconfig - тактанын толук эмес конфигурациясы. Ал демейки жөндөөлөрдөн айырмаланган гана параметрлерди сактайт
dl — чогултуу үчүн жүктөлүп алынган баштапкы коддору/файлдары бар каталог
чыгаруу/максат — пайда болгон ОСтун чогултулган файлдык системасы. Андан кийин жүктөө/орнотуу үчүн андан сүрөттөр түзүлөт
чыгаруу/хост - чогултуу үчүн негизги коммуналдык кызматтар
чыгаруу/куруу - чогултулган пакеттер
Жыйын KConfig аркылуу конфигурацияланган. Ошол эле система Linux ядросун куруу үчүн колдонулат. Эң көп колдонулган буйруктардын тизмеси (Buildroot каталогунда аткаруу):
- make menuconfig - куруу конфигурациясын чакырыңыз. Сиз ошондой эле графикалык интерфейсти колдоно аласыз (nconfig жасаңыз, xconfig жасаңыз, gconfig жасаңыз)
- linux-menuconfig жасоо - ядро конфигурациясын чакырыңыз.
- таза кылуу - куруу натыйжаларын тазалоо (чыгарууда сакталган нерселердин баары)
- түзүү - системаны куруу. Бул мурунтан эле чогултулган процесстерди кайра чогултпайт.
- make defconfig_name - конфигурацияны белгилүү бир defconfigге которуу
- list-defconfigs жасоо - defconfigs тизмесин көрсөтүү
- булак түзүү - жөн гана орнотуу файлдарын жүктөө, куруу жок.
- жардам берүү - мүмкүн болгон буйруктарды тизмелөө
Маанилүү эскертүүлөр жана пайдалуу кеңештер
Buildroot буга чейин курулган пакеттерди калыбына келтирбейт! Ошондуктан, толук кайра чогултуу талап кылынган жагдай пайда болушу мүмкүн.
Сиз буйрук менен өзүнчө пакетти кайра түзө аласыз пакеттин аталышын кайра куруу. Мисалы, сиз Linux ядросун кайра түзө аласыз:
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 - түпкү каталогду куруу
- $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/readme.txt файлы бул скрипттердин сүрөттөмөсүн камтыйт.
Запастарды бөлүштүрүүнү түзөлү
Бардык операциялар тамыр эмес, кадимки колдонуучунун атынан ишке ашырыларын эстен чыгарбоо керек.
Бардык буйруктар 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 иштеген система болуп саналат:
Өзүңүздүн такта конфигурацияңызды түзүү
Board Files кошуу
Конфигурациялардын тизмесин карап көрөлү:
Тизмеде биз 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) жүктөө максаттуу машинасына туура келет.
Linux-ядро конфигурациясын көчүрөлү (кийинирээк пайдалуу):
cp board/pc/linux.config board/my_x86_board/
KConfig аркылуу куруу параметрлерин орнотуу
Орнотууну баштайлы:
make menuconfig
KConfig терезеси ачылат. Графикалык интерфейс менен конфигурациялоого болот (nconfig жасоо, xconfig жасоо, gconfig жасоо):
Биз биринчи бөлүмгө кирип Максат параметрлери. Бул жерде сиз куруу ишке ашырыла турган максаттуу архитектураны тандай аласыз.
Куруу параметрлери - бул жерде ар кандай куруу параметрлери бар. Сиз баштапкы коддору бар каталогдорду, куруу жиптеринин санын, баштапкы коддорду жүктөө үчүн күзгүлөрдү жана башка орнотууларды көрсөтө аласыз. Келгиле, орнотууларды демейки боюнча калтыралы.
Toolchain - куруу куралдары бул жерде конфигурацияланган. Ал жөнүндө көбүрөөк оку.
Toolchain түрү – колдонулган инструменттердин түрү. Бул buildroot же тышкы түзүлүшкө орнотулган инструменттер тизмеги болушу мүмкүн (сиз мурунтан эле курулган каталогду же жүктөө үчүн url менен көрсөтсөңүз болот). Ар кандай архитектура үчүн кошумча варианттар бар. Мисалы, кол үчүн сиз жөн гана тышкы шаймандардын Linaro версиясын тандай аласыз.
C китепканасы – С китепканасын тандоо.Бардык системанын иштеши ушундан көз каранды. Адатта, бардык мүмкүн болгон функцияларды колдогон glibc колдонулат. Бирок ал орнотулган система үчүн өтө чоң болушу мүмкүн, андыктан uglibc же musl көбүнчө тандалат. Биз glibc тандайбыз (бул кийинчерээк systemd колдонуу үчүн талап кылынат).
Ядро баштары жана Ыңгайлаштырылган ядро баштары сериялары - чогултулган системада боло турган ядронун версиясына дал келиши керек. Ядронун аталыштары үчүн, ошондой эле tarball же git репозиторийине жолду көрсөтсөңүз болот.
GCC КОМПИЛЬЕР ВЕРСИЯЛАРЫ – куруу үчүн колдонула турган компилятордун версиясын тандаңыз
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 аркылуу конфигурацияланган.
Сиз ядро версиясын ар кандай жолдор менен орното аласыз: сунушталгандардын ичинен тандап, версияны кол менен киргизиңиз, репозиторийди же даяр тарболду көрсөтүңүз.
Ядро конфигурациясы — ядро конфигурациясына жол. Тандалган архитектура үчүн демейки конфигурацияны же Linux'тен defocnfig тандай аласыз. Linux булагы ар кандай максаттуу системалар үчүн дефконфигурациялардын топтомун камтыйт. Сизге керектүүсүн таба аласыз
Максаттуу пакеттер бөлүмү курулуп жаткан системага орнотула турган пакеттерди тандоого мүмкүндүк берет. Азырынча өзгөрүүсүз калтыралы. Бул тизмеге пакеттерибизди кийинчерээк кошобуз.
Файл тутумунун сүрөттөрү - жыйнала турган файл тутумунун сүрөттөрүнүн тизмеси. ISO сүрөтүн кошуу
Жүктөөчүлөр - чогултуу үчүн жүктөөчүлөрдү тандоо. isolinix тандайлы
Configuring Systemd
Systemd ядро жана glibc менен бирге Linux түркүктөрүнүн бирине айланууда. Ошондуктан, мен анын жөндөөлөрүн өзүнчө пунктка жылдырдым.
make menuconfig аркылуу конфигурацияланган, андан кийин Максаттуу топтомдор → Системалык куралдар → systemd. Бул жерде сиз кайсы система кызматтары орнотула турганын жана система башталганда иштей баштаарын белгилей аласыз.
Системанын конфигурациясын сактоо
Бул конфигурацияны KConfig аркылуу сактайбыз.
Анда биздин defconfig сактаңыз:
make savedefconfig
Linux ядросунун конфигурациясы
Linux ядросунун конфигурациясы төмөнкү буйрук менен чакырылат:
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 колдонмосу
Source: www.habr.com