Buildroot - Қисми 1 - Шарҳи, Сохтани ҳадди ақали система, Танзими меню

Муқаддима

Дар ин силсила мақолаҳо ман мехоҳам ба системаи сохтани тақсимоти buildroot назар кунам ва таҷрибаи худро дар танзими он мубодила кунам. Дар ин ҷо шумо таҷрибаи амалии эҷоди ОС-и хурд бо интерфейси графикӣ ва ҳадди ақали функсияҳо хоҳед дошт.

Пеш аз ҳама, шумо набояд системаи сохтмон ва тақсимотро омехта кунед. Buildroot метавонад аз маҷмӯи бастаҳое, ки ба он пешниҳод карда мешаванд, система созад. Buildroot дар файлҳои makefile сохта шудааст ва аз ин рӯ дорои қобилиятҳои азими мутобиқсозӣ мебошад. Бастаро бо версияи дигар иваз кунед, бастаи шахсии худро илова кунед, қоидаҳои сохтани бастаро тағир диҳед, пас аз насб кардани ҳама бастаҳо системаи файлиро танзим кунед? buildroot метавонад ҳамаи инро иҷро кунад.

Дар Русия buildroot истифода мешавад, аммо ба назари ман барои шурӯъкунандагон маълумоти кам ба забони русӣ вуҷуд дорад.

Ҳадафи кор ҷамъ овардани маҷмӯаи тақсимот бо зеркашии зинда, интерфейси icewm ва браузер мебошад. Платформаи ҳадаф virtualbox аст.

Чаро тақсимоти шахсии худро созед? Аксар вақт функсияҳои маҳдуд бо захираҳои маҳдуд лозиманд. Ҳатто бештар дар автоматизатсия шумо бояд нармафзори нармафзор эҷод кунед. Мутобиқсозии тақсимоти таъиноти умумӣ тавассути тоза кардани бастаҳои нолозим ва табдил додани он ба нармафзори нармафзор назар ба сохтани тақсимоти нав меҳнатталабтар аст. Истифодаи Gentoo низ маҳдудиятҳои худро дорад.

Системаи Buildroot хеле пурқувват аст, аммо он барои шумо коре намекунад. Он танҳо метавонад раванди васлкуниро фаъол ва автоматӣ кунад.

Системаҳои сохти алтернативӣ (йокто, системаи сохтани кушода ва ғайра) баррасӣ ё муқоиса карда намешаванд.

Онро аз куҷо гирифтан ва чӣ гуна бояд оғоз кард

Вебсайти лоиҳа - buildroot.org. Дар ин ҷо шумо метавонед версияи ҷорӣро зеркашӣ кунед ва дастурро хонед. Дар он ҷо шумо метавонед бо ҷомеа тамос гиред, як пайгирии хатогӣ, рӯйхати почтаҳо ва канали irc мавҷуд аст.

Buildroot defconfig-ро барои тахтаи ҳадафи сохтмон кор мекунад. Defconfig файли конфигуратсияест, ки танҳо интихобҳоеро нигоҳ медорад, ки арзишҳои пешфарз надоранд. Маҳз ӯ муайян мекунад, ки чӣ ва чӣ тавр ҷамъоварӣ карда мешавад. Дар ин ҳолат, шумо метавонед конфигуратсияҳои busybox, linux-kernel, uglibc, u-boot ва barebox bootloaders-ро алоҳида танзим кунед, аммо ҳамаи онҳо ба тахтаи ҳадаф пайваст карда мешаванд.
Пас аз кушодани бойгонии зеркашидашуда ё клонкунӣ аз git, мо як rootroot барои истифода омода мегирем. Шумо метавонед дар бораи сохтори директория бештар дар дастур хонед; Ман ба шумо дар бораи муҳимтаринаш мегӯям:

Шӯрои — феҳрист бо файлҳои хоси ҳар як тахта. Инҳо метавонанд скриптҳо барои ташаккули тасвирҳои системавӣ (iso, sdcart, cpio ва дигарон), директорияи қабатӣ, конфигуратсияи ядро ​​​​ва ғайра бошанд.
танзим мекунад — танзими воқеии тахта. Defconfig конфигуратсияи нопурраи тахта аст. Он танҳо параметрҳоеро нигоҳ медорад, ки аз танзимоти пешфарз фарқ мекунанд
dl — феҳрист бо рамзҳои сарчашмаҳо/файлҳо барои васлкунӣ
баромад/мақсад — системаи файлии ҷамъшудаи ОС-и натиҷа. Минбаъд аз он тасвирҳо барои зеркашӣ/насб сохта мешаванд
баромад/мизбон - хидматҳои мизбон барои васлкунӣ
баромад/сохт - бастаҳои ҷамъшуда

Маҷмӯа тавассути KConfig танзим карда мешавад. Ҳамин система барои сохтани ядрои Linux истифода мешавад. Рӯйхати фармонҳои маъмултарин (иҷро дар директорияи buildroot):

  • menuconfig созед - конфигуратсияи сохтмонро даъват кунед. Шумо инчунин метавонед интерфейси графикиро истифода баред (nconfig созед, xconfig созед, gconfig созед)
  • linux-menuconfig созед - конфигуратсияи ядроро даъват кунед.
  • тоза кунед - натиҷаҳои сохтмонро тоза кунед (ҳама чизе, ки дар баромад захира шудааст)
  • сохтан - сохтани система. Ин равандҳои аллакай ҷамъшударо дубора васл намекунад.
  • defconfig_name созед - конфигуратсияро ба defconfig мушаххас гузаред
  • list-defconfigs созед - рӯйхати defconfigҳоро нишон диҳед
  • сарчашма эҷод кунед - танҳо файлҳои насбкуниро бидуни сохтмон зеркашӣ кунед.
  • кӯмак кунед - номбар кардани фармонҳои имконпазир

Қайдҳои муҳим ва маслиҳатҳои муфид

Buildroot бастаҳоеро, ки аллакай сохта шудаанд, барқарор намекунад! Аз ин рӯ, вазъият метавонад ба миён ояд, ки дар он ҷо васлкунии пурра талаб карда мешавад.

Шумо метавонед бастаи алоҳидаро бо фармон аз нав созед бастаи номро аз нав созед. Масалан, шумо метавонед ядрои Linux-ро аз нав барқарор кунед:

make linux-rebuild

Buildroot ҳолати ҳама гуна бастаҳоро тавассути сохтани файлҳои .stamp дар директорияи output/build/$packagename нигоҳ медорад:

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 - директорияи бунёдӣ
  • $BASEDIR - директорияи OUTPUT
  • $HOST_DIR, $STAGING_DIR, $TARGET_DIR — ҳост fs, staging fs, target 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 дорои тавсифи ин скриптҳо мебошад.

Биёед тақсимоти саҳмияҳоро созем

Дар хотир доштан муҳим аст, ки ҳама амалиётҳо аз номи корбари муқаррарӣ анҷом дода мешаванд, на реша.
Ҳама фармонҳо дар rootroot иҷро карда мешаванд. Бастаи 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

Ҳамин тариқ, ҳоло конфигуратсияи сохтмон (дар .config дар решаи директорияи buildroot захира шудааст) ба мошини ҳадафи пурборкунандаи x86-64 legacy(bios) мувофиқат мекунад.

Биёед конфигуратсияи linux-ядро нусхабардорӣ кунем (баъдтар муфид аст):

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 – интихоби китобхонаи C. Фаъолияти тамоми система аз ин вобаста аст. Одатан, glibc истифода мешавад, ки тамоми функсияҳои имконпазирро дастгирӣ мекунад. Аммо он метавонад барои системаи дохилшуда хеле калон бошад, аз ин рӯ аксар вақт uglibc ё musl интихоб карда мешаванд. Мо glibc-ро интихоб мекунем (ин баъдтар барои истифодаи systemd лозим мешавад).

Сарлавҳаҳои ядро ​​ва силсилаи сарлавҳаҳои фармоишии ядро ​​- бояд ба версияи ядрое, ки дар системаи ҷамъшуда ҷойгир аст, мувофиқат кунанд. Барои сарлавҳаҳои ядро, шумо инчунин метавонед роҳро ба анбори tarball ё git муайян кунед.

VERSIONS COMPILER GCC - версияи компиляторро интихоб кунед, ки барои сохтмон истифода мешавад
Дастгирии C++-ро фаъол созед - барои сохтан бо дастгирии китобхонаҳои C++ дар система интихоб кунед. Ин барои мо дар оянда муфид хоҳад буд.

Имконоти иловагии gcc - шумо метавонед имконоти иловагии компиляторро танзим кунед. Ҳоло ба мо лозим нест.

Конфигуратсияи система ба шумо имкон медиҳад, ки параметрҳои ояндаи системаи сохташударо муқаррар кунед:

Buildroot - Қисми 1 - Шарҳи, Сохтани ҳадди ақали система, Танзими меню

Аксари нуктаҳо аз сарлавҳа равшананд. Биёед ба нуктаҳои зерин диққат диҳем:
Роҳ ба ҷадвалҳои корбарон - ҷадвал бо корбарони сохташаванда (https://buildroot.org/downloads/manual/manual.html#makeuser-syntax).

Намунаи файл. Истифодабарандаи корбар бо администратори парол, ба таври худкор gid/uid, shell /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

Директорияҳои такрории системаи файлии решавӣ - директорияе, ки дар болои ҳадаф-fs ҷамъшуда ҷойгир шудааст. Файлҳои нав илова мекунад ва файлҳои мавҷударо иваз мекунад.

Скриптҳои фармоишӣ барои пеш аз эҷод кардани тасвирҳои системаи файлӣ иҷро мешаванд - Скриптҳое, ки фавран пеш аз печонидани системаи файлӣ ба тасвирҳо иҷро мешаванд. Биёед ҳоло скриптро холӣ гузорем.

Биёед ба бахши ядро ​​​​равем

Buildroot - Қисми 1 - Шарҳи, Сохтани ҳадди ақали система, Танзими меню

Танзимоти ядро ​​​​дар ин ҷо муқаррар карда шудаанд. Худи ядро ​​тавассути make linux-menuconfig танзим карда мешавад.
Шумо метавонед версияи ядроро бо роҳҳои гуногун насб кунед: аз онҳое, ки пешниҳод шудаанд, интихоб кунед, версияро дастӣ ворид кунед, анбор ё тарболи тайёрро муайян кунед.

Конфигуратсияи ядро ​​​​ — роҳ ба конфигуратсияи ядро ​​​​. Шумо метавонед конфигуратсияи пешфарзро барои меъмории интихобшуда ё defocnfig аз Linux интихоб кунед. Манбаи Linux дорои маҷмӯи танзимот барои системаҳои гуногуни мақсаднок мебошад. Шумо метавонед он чизеро, ки ба шумо лозим аст, пайдо кунед бо дидани бевосита ба манбаъҳои ин ҷо. Масалан, барои як тахтаи сиёҳи beagle bone шумо метавонед конфигуратсияро интихоб кунед.

Бахши бастаҳои мақсаднок ба шумо имкон медиҳад, ки кадом бастаҳо дар системаи сохташаванда насб карда шаванд. Биёед ҳоло онро бетағйир гузорем. Мо бастаҳои худро дертар ба ин рӯйхат илова мекунем.
Тасвирҳои системаи файлӣ - рӯйхати тасвирҳои системаи файлӣ, ки ҷамъ карда мешаванд. Иловаи тасвири iso

Buildroot - Қисми 1 - Шарҳи, Сохтани ҳадди ақали система, Танзими меню

Боркунакҳо - интихоби боркунакҳо барои ҷамъоварӣ. Биёед isolinix-ро интихоб кунем

Buildroot - Қисми 1 - Шарҳи, Сохтани ҳадди ақали система, Танзими меню

Танзими Systemd

Systemd дар баробари ядро ​​ва glibc ба яке аз рукнҳои Linux табдил меёбад. Аз ин рӯ, ман танзимоти онро ба як ҷузъи алоҳида кӯчонидам.

Тавассути make menuconfig танзим карда мешавад, пас бастаҳои мақсаднок → Воситаҳои система → systemd. Дар ин ҷо шумо метавонед муайян кунед, ки кадом хидматҳои системавӣ ҳангоми оғозёбии система насб ва оғоз мешаванд.

Buildroot - Қисми 1 - Шарҳи, Сохтани ҳадди ақали система, Танзими меню

Нигоҳ доштани конфигуратсияи система

Мо ин конфигуратсияро тавассути KConfig захира мекунем.

Пас defconfig-и моро захира кунед:

make savedefconfig

Танзимоти ядрои Linux

Конфигуратсияи ядрои Linux бо фармони зерин даъват карда мешавад:

make linux-menuconfig

Биёед дастгирии корти видеоии Virtualbox -ро илова кунем

Buildroot - Қисми 1 - Шарҳи, Сохтани ҳадди ақали система, Танзими меню

Биёед дастгирии ҳамгироии Virtualbox Guestро илова кунем

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

Пас аз анҷоми сохтмон, VirtualBox-ро оғоз кунед (дар версияҳои 5.2 ва 6.0 санҷида шудааст) аз CD пурбор карда мешавад. Параметрҳои система:

Buildroot - Қисми 1 - Шарҳи, Сохтани ҳадди ақали система, Танзими меню

Иҷроиш аз iso ҷамъшуда:

Buildroot - Қисми 1 - Шарҳи, Сохтани ҳадди ақали система, Танзими меню

Рӯйхати маводҳои истифодашуда

  1. Дастури Buildroot

Манбаъ: will.com

Илова Эзоҳ