Ներածություն
Այս հոդվածաշարում ես ուզում եմ նայել buildroot բաշխման կառուցման համակարգը և կիսվել այն հարմարեցնելու իմ փորձով: Կլինի գրաֆիկական ինտերֆեյսով և նվազագույն ֆունկցիոնալությամբ փոքր ՕՀ-ի ստեղծման գործնական փորձ:
Նախ պետք չէ շփոթել կառուցման համակարգը և բաշխումը: Buildroot-ը կարող է համակարգ ստեղծել իրեն առաջարկվող փաթեթներից: Buildroot-ը կառուցված է մեյքֆայլերի վրա և, հետևաբար, ունի անհատականացման հսկայական հնարավորություններ: Փաթեթը փոխարինել մեկ այլ տարբերակով, ավելացնել քո սեփական փաթեթը, փոխել փաթեթ կառուցելու կանոնները, հարմարեցնել ֆայլային համակարգը բոլոր փաթեթները տեղադրելուց հետո: buildroot-ը կարող է անել այս ամենը:
Ռուսաստանում օգտագործվում է buildroot, բայց իմ կարծիքով ռուսալեզու տեղեկատվությունը քիչ է սկսնակների համար:
Աշխատանքի նպատակն է հավաքել բաշխման հավաքածու՝ ուղիղ ներբեռնմամբ, icewm ինտերֆեյսով և բրաուզերով: Թիրախային հարթակը վիրտուալ տուփն է:
Ինչու՞ կառուցել ձեր սեփական բաշխումը: Հաճախ սահմանափակ ֆունկցիոնալությունը անհրաժեշտ է սահմանափակ ռեսուրսներով: Նույնիսկ ավելի հաճախ ավտոմատացման մեջ դուք պետք է ստեղծեք որոնվածը: Ընդհանուր նշանակության բաշխումը հարմարեցնելը՝ ավելորդ փաթեթները մաքրելով և այն որոնվածքի վերածելով, ավելի աշխատատար է, քան նոր բաշխում կառուցելը: Gentoo-ի օգտագործումը նույնպես ունի իր սահմանափակումները:
Buildroot համակարգը շատ հզոր է, բայց ձեզ համար ոչինչ չի անի: Այն կարող է միայն միացնել և ավտոմատացնել հավաքման գործընթացը:
Այլընտրանքային կառուցման համակարգերը (yocto, open build համակարգ և այլն) չեն դիտարկվում կամ համեմատվում:
Որտեղ ստանալ այն և ինչպես սկսել
Ծրագրի կայք -
Buildroot-ը գործարկում է defconfig-ներ build-ի թիրախային տախտակի համար: Defconfig-ը կազմաձևման ֆայլ է, որը պահպանում է միայն լռելյայն արժեքներ չունեցող ընտրանքները: Հենց նա է որոշում, թե ինչ և ինչպես է հավաքվելու։ Այս դեպքում դուք կարող եք առանձին կարգավորել busybox-ի, linux-kernel-ի, uglibc-ի, u-boot-ի և barebox-ի բեռնախցիկների կոնֆիգուրացիաները, սակայն դրանք բոլորը կկապվեն թիրախային տախտակի հետ:
Ներբեռնված արխիվը բացելուց կամ git-ից կլոնավորելուց հետո մենք ստանում ենք պատրաստի օգտագործման buildroot: Գրացուցակի կառուցվածքի մասին ավելին կարող եք կարդալ ձեռնարկում, ես ձեզ կասեմ ամենակարևորների մասին.
տախտակ — գրացուցակ յուրաքանչյուր տախտակի համար հատուկ ֆայլերով: Սրանք կարող են լինել համակարգի պատկերներ (iso, sdcart, cpio և այլն) ձևավորման սցենարներ, ծածկույթի գրացուցակ, միջուկի կազմաձև և այլն:
configs - տախտակի իրական defconfig: Defconfig-ը տախտակի թերի կոնֆիգուրացիա է: Այն պահպանում է միայն այն պարամետրերը, որոնք տարբերվում են լռելյայն կարգավորումներից
dl — հավաքագրման համար ներբեռնված սկզբնական կոդերով/ֆայլերով գրացուցակ
ելք/նպատակ — ստացված ՕՀ-ի հավաքված ֆայլային համակարգը: Հետագայում դրանից պատկերներ են ստեղծվում ներբեռնման/տեղադրման համար
ելք/հոսթ - հյուրընկալող կոմունալ ծառայություններ հավաքման համար
ելք/կառուցում - հավաքված փաթեթներ
Ժողովը կազմաձևված է KConfig-ի միջոցով: Նույն համակարգը օգտագործվում է Linux միջուկը կառուցելու համար: Առավել հաճախ օգտագործվող հրամանների ցանկը (կատարվում է buildroot գրացուցակում).
- make menuconfig - զանգահարել build configuration: Կարող եք նաև օգտագործել գրաֆիկական ինտերֆեյսը (կատարել nconfig, կատարել xconfig, կատարել gconfig)
- կատարել linux-menuconfig - զանգահարել միջուկի կոնֆիգուրացիան:
- մաքրել - մաքրել կառուցման արդյունքները (արդյունքում պահված ամեն ինչ)
- make - կառուցել համակարգ. Սա չի վերահավաքում արդեն հավաքված գործընթացները:
- կատարել defconfig_name - փոխարկել կոնֆիգուրացիան կոնկրետ defconfig-ի
- make list-defconfigs - ցույց տալ defconfig-ների ցանկը
- make source - պարզապես ներբեռնեք տեղադրման ֆայլերը՝ առանց կառուցելու:
- օգնություն կազմել - ցուցակագրել հնարավոր հրամանները
Կարևոր նշումներ և օգտակար խորհուրդներ
Buildroot-ը չի վերակառուցում արդեն կառուցված փաթեթները: Հետեւաբար, կարող է առաջանալ իրավիճակ, երբ պահանջվում է ամբողջական վերահավաքում:
Հրամանով կարող եք վերակառուցել առանձին փաթեթ կատարել փաթեթի անունը-վերակառուցում: Օրինակ, դուք կարող եք վերակառուցել Linux միջուկը.
make linux-rebuild
Buildroot-ը պահպանում է ցանկացած փաթեթի վիճակը՝ ստեղծելով .stamp ֆայլեր output/build/$packagename գրացուցակում.
Հետևաբար, դուք կարող եք վերակառուցել 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 — host fs, բեմականացում fs, թիրախ fs կառուցել դիրեկտորիաներ:
- $BUILD_DIR - գրացուցակ չփաթեթավորված և կառուցված փաթեթներով
Visualization
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 ֆայլը պարունակում է այս սկրիպտների նկարագրությունը:
Եկեք կառուցենք բաժնետոմսերի բաշխում
Կարևոր է հիշել, որ բոլոր գործողությունները կատարվում են սովորական օգտագործողի անունից, այլ ոչ թե 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
Անցեք այս defconfig-ին.
make my_x86_board_defconfig
Այսպիսով, այժմ build config-ը (պահվում է .config-ում buildroot գրացուցակի արմատում) համապատասխանում է x86-64 legacy(bios) boot target machine-ին:
Եկեք պատճենենք linux-kernel-ի կոնֆիգուրացիան (օգտակար հետագայում).
cp board/pc/linux.config board/my_x86_board/
Կառուցման պարամետրերի կարգավորում KConfig-ի միջոցով
Սկսենք կարգավորումը.
make menuconfig
Կբացվի KConfig պատուհանը: Հնարավոր է կարգավորել գրաֆիկական ինտերֆեյսով (կատարել nconfig, կատարել xconfig, կատարել gconfig):
Մենք մտնում ենք առաջին բաժինը Թիրախային ընտրանքներ: Այստեղ դուք կարող եք ընտրել թիրախային ճարտարապետությունը, որի համար կիրականացվի կառուցումը:
Կառուցման ընտրանքներ - այստեղ կան կառուցման տարբեր պարամետրեր: Դուք կարող եք նշել դիրեկտորիաներ՝ սկզբնական կոդերով, կառուցման թելերի քանակով, սկզբնական կոդեր ներբեռնելու հայելիներով և այլ կարգավորումներով: Եկեք կարգավորումները թողնենք լռելյայն:
Toolchain – կառուցման գործիքներն իրենք են կազմաձևված այստեղ: Կարդացեք ավելին նրա մասին:
Գործիքաշղթայի տեսակը – օգտագործվող գործիքաշղթայի տեսակը: Սա կարող է լինել buildroot-ի մեջ ներկառուցված գործիքների շղթա կամ արտաքին (կարող եք նշել գրացուցակը արդեն կառուցվածի հետ կամ ներբեռնման համար url-ը): Կան լրացուցիչ տարբերակներ տարբեր ճարտարապետությունների համար: Օրինակ, arm-ի համար կարող եք պարզապես ընտրել արտաքին գործիքաշարի Linaro տարբերակը:
C գրադարան – C գրադարանի ընտրություն: Ամբողջ համակարգի աշխատանքը կախված է դրանից: Սովորաբար օգտագործվում է glibc, որն աջակցում է բոլոր հնարավոր ֆունկցիոնալությանը: Բայց այն կարող է չափազանց մեծ լինել ներկառուցված համակարգի համար, ուստի հաճախ ընտրվում են uglibc կամ musl: Մենք կընտրենք glibc (սա հետագայում կպահանջվի systemd-ն օգտագործելու համար):
Kernel Headers և Custom Kernel Headers շարքերը – պետք է համապատասխանեն միջուկի տարբերակին, որը կլինի հավաքված համակարգում: Միջուկի վերնագրերի համար կարող եք նաև նշել ճանապարհը դեպի tarball կամ git պահոց:
GCC ԿՈՄՊԻԼԵՐԻ ՏԱՐԲԵՐԱԿՆԵՐ – ընտրեք կոմպիլյատորի տարբերակը, որը կօգտագործվի կառուցման համար
Միացնել C++-ի աջակցությունը – ընտրեք ստեղծելու համար C++ գրադարանները համակարգում: Սա մեզ ապագայում օգտակար կլինի։
Լրացուցիչ gcc ընտրանքներ – կարող եք սահմանել լրացուցիչ կոմպիլյատորի ընտրանքներ: Մեզ դա առայժմ պետք չէ։
Համակարգի կոնֆիգուրացիան թույլ է տալիս սահմանել ստեղծված համակարգի հետագա պարամետրերը.
Միավորների մեծ մասը պարզ է վերնագրից: Ուշադրություն դարձնենք հետևյալ կետերին.
Ճանապարհ դեպի օգտվողների աղյուսակներ - ստեղծվող օգտվողների աղյուսակ (
Օրինակ ֆայլ. Օգտատիրոջ օգտատերը կստեղծվի գաղտնաբառով admin, ավտոմատ gid/uid, /bin/sh shell, լռելյայն խմբի օգտագործող, խմբի անդամ արմատ, մեկնաբանություններ 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-ի վերևում: Ավելացնում է նոր ֆայլեր և փոխարինում առկաներին:
Պատվերով սկրիպտներ, որոնք պետք է գործարկվեն նախքան ֆայլային համակարգի պատկերներ ստեղծելը. Սցենարներ, որոնք կատարվում են անմիջապես ֆայլային համակարգը պատկերների մեջ ծալելուց առաջ: Սցենարն առայժմ դատարկ թողնենք։
Գնանք միջուկի բաժին
Միջուկի կարգավորումները դրված են այստեղ: Միջուկն ինքնին կարգավորվում է make linux-menuconfig-ի միջոցով:
Դուք կարող եք սահմանել միջուկի տարբերակը տարբեր ձևերով՝ ընտրել առաջարկվողներից, մուտքագրել տարբերակը ձեռքով, նշել պահեստ կամ պատրաստի թարբոլ:
Միջուկի կոնֆիգուրացիա — միջուկի կազմաձևման ուղի: Դուք կարող եք ընտրել լռելյայն կոնֆիգուրացիան ընտրված ճարտարապետության համար կամ defocnfig-ը Linux-ից: Linux աղբյուրը պարունակում է մի շարք defconfigs տարբեր թիրախային համակարգերի համար: Դուք կարող եք գտնել այն, ինչ ձեզ հարկավոր է
Թիրախային փաթեթներ բաժինը թույլ է տալիս ընտրել, թե որ փաթեթները կտեղադրվեն կառուցվող համակարգի վրա: Առայժմ թողնենք անփոփոխ։ Մենք մեր փաթեթները կավելացնենք այս ցանկին ավելի ուշ:
Ֆայլային համակարգի պատկերներ - ֆայլային համակարգի պատկերների ցանկ, որոնք կհավաքվեն: Ավելացնել iso պատկեր
Bootloaders - հավաքելու համար բեռնախցիկների ընտրություն: Եկեք ընտրենք isolinix
Systemd-ի կարգավորում
Systemd-ը դառնում է Linux-ի հիմնասյուներից մեկը՝ միջուկի և glibc-ի հետ մեկտեղ: Հետևաբար, ես դրա կարգավորումը տեղափոխեցի առանձին տարր:
Կարգավորվել է make menuconfig-ի միջոցով, այնուհետև Target փաթեթներ → Համակարգի գործիքներ → systemd: Այստեղ կարող եք նշել, թե որ systemd ծառայությունները կտեղադրվեն և գործարկվեն, երբ համակարգը գործարկվի:
Համակարգի կոնֆիգուրացիայի պահպանում
Մենք պահպանում ենք այս կազմաձևը KConfig-ի միջոցով:
Այնուհետև պահպանեք մեր defconfig-ը.
make savedefconfig
Linux միջուկի կոնֆիգուրացիա
Linux միջուկի կոնֆիգուրացիան կանչվում է հետևյալ հրամանով.
make linux-menuconfig
Ավելացնենք Virtualbox վիդեո քարտի աջակցությունը
Եկեք ավելացնենք Virtualbox Guest-ի ինտեգրման աջակցությունը
Պահպանել և դուրս գալ: ԿԱՐԵՎՈՐկոնֆիգուրացիան կպահվի 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
Կառուցման ավարտից հետո գործարկեք VirtualBox-ը (փորձարկվել է 5.2 և 6.0 տարբերակների վրա), որը բեռնվում է CD-ից: Համակարգի պարամետրեր.
Հավաքված iso-ից վազում.
Օգտագործված նյութերի ցանկ
- Buildroot ձեռնարկ
Source: www.habr.com