Buildroot - մաս 1. Ընդհանուր տեղեկություններ, նվազագույն համակարգի հավաքում, կոնֆիգուրացիա մենյուի միջոցով

Ներածություն

Այս հոդվածաշարում ես ուզում եմ նայել buildroot բաշխման կառուցման համակարգը և կիսվել այն հարմարեցնելու իմ փորձով: Կլինի գրաֆիկական ինտերֆեյսով և նվազագույն ֆունկցիոնալությամբ փոքր ՕՀ-ի ստեղծման գործնական փորձ:

Նախ պետք չէ շփոթել կառուցման համակարգը և բաշխումը: Buildroot-ը կարող է համակարգ ստեղծել իրեն առաջարկվող փաթեթներից: Buildroot-ը կառուցված է մեյքֆայլերի վրա և, հետևաբար, ունի անհատականացման հսկայական հնարավորություններ: Փաթեթը փոխարինել մեկ այլ տարբերակով, ավելացնել քո սեփական փաթեթը, փոխել փաթեթ կառուցելու կանոնները, հարմարեցնել ֆայլային համակարգը բոլոր փաթեթները տեղադրելուց հետո: buildroot-ը կարող է անել այս ամենը:

Ռուսաստանում օգտագործվում է buildroot, բայց իմ կարծիքով ռուսալեզու տեղեկատվությունը քիչ է սկսնակների համար:

Աշխատանքի նպատակն է հավաքել բաշխման հավաքածու՝ ուղիղ ներբեռնմամբ, icewm ինտերֆեյսով և բրաուզերով: Թիրախային հարթակը վիրտուալ տուփն է:

Ինչու՞ կառուցել ձեր սեփական բաշխումը: Հաճախ սահմանափակ ֆունկցիոնալությունը անհրաժեշտ է սահմանափակ ռեսուրսներով: Նույնիսկ ավելի հաճախ ավտոմատացման մեջ դուք պետք է ստեղծեք որոնվածը: Ընդհանուր նշանակության բաշխումը հարմարեցնելը՝ ավելորդ փաթեթները մաքրելով և այն որոնվածքի վերածելով, ավելի աշխատատար է, քան նոր բաշխում կառուցելը: Gentoo-ի օգտագործումը նույնպես ունի իր սահմանափակումները:

Buildroot համակարգը շատ հզոր է, բայց ձեզ համար ոչինչ չի անի: Այն կարող է միայն միացնել և ավտոմատացնել հավաքման գործընթացը:

Այլընտրանքային կառուցման համակարգերը (yocto, open build համակարգ և այլն) չեն դիտարկվում կամ համեմատվում:

Որտեղ ստանալ այն և ինչպես սկսել

Ծրագրի կայք - buildroot.org. Այստեղ կարող եք ներբեռնել ընթացիկ տարբերակը և կարդալ ձեռնարկը: Այնտեղ կարող եք կապվել համայնքի հետ, կա սխալների հետագծող, փոստի ցուցակներ և irc ալիք:

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 գրացուցակում.

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 — 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 փաթեթն արդեն ներառում է բազմաթիվ սովորական տախտակների և վիրտուալացման համար նախատեսված կոնֆիգուրացիաների մի շարք:

Դիտարկենք կազմաձևերի ցանկը.

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

Անցեք այս 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):

Buildroot - մաս 1. Ընդհանուր տեղեկություններ, նվազագույն համակարգի հավաքում, կոնֆիգուրացիա մենյուի միջոցով

Մենք մտնում ենք առաջին բաժինը Թիրախային ընտրանքներ: Այստեղ դուք կարող եք ընտրել թիրախային ճարտարապետությունը, որի համար կիրականացվի կառուցումը:

Buildroot - մաս 1. Ընդհանուր տեղեկություններ, նվազագույն համակարգի հավաքում, կոնֆիգուրացիա մենյուի միջոցով

Կառուցման ընտրանքներ - այստեղ կան կառուցման տարբեր պարամետրեր: Դուք կարող եք նշել դիրեկտորիաներ՝ սկզբնական կոդերով, կառուցման թելերի քանակով, սկզբնական կոդեր ներբեռնելու հայելիներով և այլ կարգավորումներով: Եկեք կարգավորումները թողնենք լռելյայն:

Toolchain – կառուցման գործիքներն իրենք են կազմաձևված այստեղ: Կարդացեք ավելին նրա մասին:

Buildroot - մաս 1. Ընդհանուր տեղեկություններ, նվազագույն համակարգի հավաքում, կոնֆիգուրացիա մենյուի միջոցով

Գործիքաշղթայի տեսակը – օգտագործվող գործիքաշղթայի տեսակը: Սա կարող է լինել buildroot-ի մեջ ներկառուցված գործիքների շղթա կամ արտաքին (կարող եք նշել գրացուցակը արդեն կառուցվածի հետ կամ ներբեռնման համար url-ը): Կան լրացուցիչ տարբերակներ տարբեր ճարտարապետությունների համար: Օրինակ, arm-ի համար կարող եք պարզապես ընտրել արտաքին գործիքաշարի Linaro տարբերակը:

C գրադարան – C գրադարանի ընտրություն: Ամբողջ համակարգի աշխատանքը կախված է դրանից: Սովորաբար օգտագործվում է glibc, որն աջակցում է բոլոր հնարավոր ֆունկցիոնալությանը: Բայց այն կարող է չափազանց մեծ լինել ներկառուցված համակարգի համար, ուստի հաճախ ընտրվում են uglibc կամ musl: Մենք կընտրենք glibc (սա հետագայում կպահանջվի systemd-ն օգտագործելու համար):

Kernel Headers և Custom Kernel Headers շարքերը – պետք է համապատասխանեն միջուկի տարբերակին, որը կլինի հավաքված համակարգում: Միջուկի վերնագրերի համար կարող եք նաև նշել ճանապարհը դեպի tarball կամ git պահոց:

GCC ԿՈՄՊԻԼԵՐԻ ՏԱՐԲԵՐԱԿՆԵՐ – ընտրեք կոմպիլյատորի տարբերակը, որը կօգտագործվի կառուցման համար
Միացնել C++-ի աջակցությունը – ընտրեք ստեղծելու համար C++ գրադարանները համակարգում: Սա մեզ ապագայում օգտակար կլինի։

Լրացուցիչ gcc ընտրանքներ – կարող եք սահմանել լրացուցիչ կոմպիլյատորի ընտրանքներ: Մեզ դա առայժմ պետք չէ։

Համակարգի կոնֆիգուրացիան թույլ է տալիս սահմանել ստեղծված համակարգի հետագա պարամետրերը.

Buildroot - մաս 1. Ընդհանուր տեղեկություններ, նվազագույն համակարգի հավաքում, կոնֆիգուրացիա մենյուի միջոցով

Միավորների մեծ մասը պարզ է վերնագրից: Ուշադրություն դարձնենք հետևյալ կետերին.
Ճանապարհ դեպի օգտվողների աղյուսակներ - ստեղծվող օգտվողների աղյուսակ (https://buildroot.org/downloads/manual/manual.html#makeuser-syntax).

Օրինակ ֆայլ. Օգտատիրոջ օգտատերը կստեղծվի գաղտնաբառով 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-ի վերևում: Ավելացնում է նոր ֆայլեր և փոխարինում առկաներին:

Պատվերով սկրիպտներ, որոնք պետք է գործարկվեն նախքան ֆայլային համակարգի պատկերներ ստեղծելը. Սցենարներ, որոնք կատարվում են անմիջապես ֆայլային համակարգը պատկերների մեջ ծալելուց առաջ: Սցենարն առայժմ դատարկ թողնենք։

Գնանք միջուկի բաժին

Buildroot - մաս 1. Ընդհանուր տեղեկություններ, նվազագույն համակարգի հավաքում, կոնֆիգուրացիա մենյուի միջոցով

Միջուկի կարգավորումները դրված են այստեղ: Միջուկն ինքնին կարգավորվում է make linux-menuconfig-ի միջոցով:
Դուք կարող եք սահմանել միջուկի տարբերակը տարբեր ձևերով՝ ընտրել առաջարկվողներից, մուտքագրել տարբերակը ձեռքով, նշել պահեստ կամ պատրաստի թարբոլ:

Միջուկի կոնֆիգուրացիա — միջուկի կազմաձևման ուղի: Դուք կարող եք ընտրել լռելյայն կոնֆիգուրացիան ընտրված ճարտարապետության համար կամ defocnfig-ը Linux-ից: Linux աղբյուրը պարունակում է մի շարք defconfigs տարբեր թիրախային համակարգերի համար: Դուք կարող եք գտնել այն, ինչ ձեզ հարկավոր է ուղղակիորեն նայելով այստեղ աղբյուրներին. Օրինակ, բիգլի ոսկրային սև տախտակի համար կարող եք ընտրեք կոնֆիգուրացիա.

Թիրախային փաթեթներ բաժինը թույլ է տալիս ընտրել, թե որ փաթեթները կտեղադրվեն կառուցվող համակարգի վրա: Առայժմ թողնենք անփոփոխ։ Մենք մեր փաթեթները կավելացնենք այս ցանկին ավելի ուշ:
Ֆայլային համակարգի պատկերներ - ֆայլային համակարգի պատկերների ցանկ, որոնք կհավաքվեն: Ավելացնել iso պատկեր

Buildroot - մաս 1. Ընդհանուր տեղեկություններ, նվազագույն համակարգի հավաքում, կոնֆիգուրացիա մենյուի միջոցով

Bootloaders - հավաքելու համար բեռնախցիկների ընտրություն: Եկեք ընտրենք isolinix

Buildroot - մաս 1. Ընդհանուր տեղեկություններ, նվազագույն համակարգի հավաքում, կոնֆիգուրացիա մենյուի միջոցով

Systemd-ի կարգավորում

Systemd-ը դառնում է Linux-ի հիմնասյուներից մեկը՝ միջուկի և glibc-ի հետ մեկտեղ: Հետևաբար, ես դրա կարգավորումը տեղափոխեցի առանձին տարր:

Կարգավորվել է make menuconfig-ի միջոցով, այնուհետև Target փաթեթներ → Համակարգի գործիքներ → systemd: Այստեղ կարող եք նշել, թե որ 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 ձեռնարկ

Source: www.habr.com

Добавить комментарий