Buildroot - մաս 2. Ձեր տախտակի կոնֆիգուրացիայի ստեղծում; օգտագործելով արտաքին ծառ, rootfs-overlay, հետկառուցման սցենարներ

Այս բաժնում ես նայում եմ հարմարեցման որոշ ընտրանքներ, որոնք ինձ անհրաժեշտ էին: Սա ամբողջական ցանկ չէ, թե ինչ է առաջարկում buildroot-ը, բայց դրանք բավականին ֆունկցիոնալ են և չեն պահանջում միջամտություն հենց buildroot-ի ֆայլերում:

Օգտագործելով EXTERNAL մեխանիզմը հարմարեցման համար

Մի նախորդ հոդվածում Մենք դիտեցինք ձեր սեփական կոնֆիգուրացիան ավելացնելու պարզ օրինակ՝ ավելացնելով տախտակի defconfig-ը և անհրաժեշտ ֆայլերը անմիջապես Buildroot գրացուցակում:

Բայց այս մեթոդը այնքան էլ հարմար չէ, հատկապես buildroot-ը թարմացնելիս։ Այս խնդիրը լուծելու մեխանիզմ կա արտաքին ծառ. Դրա էությունն այն է, որ դուք կարող եք պահել տախտակ, կոնֆիգուրացիաներ, փաթեթներ և այլ դիրեկտորիաներ առանձին գրացուցակում (օրինակ, ես օգտագործում եմ patches գրացուցակը փաթեթների վրա կարկատներ կիրառելու համար, ավելի մանրամասն՝ առանձին բաժնում) և ինքը՝ buildroot-ը կավելացնի դրանք նշվածներին։ դրա գրացուցակը:

Նշում. կարող եք միանգամից մի քանի արտաքին ծառեր ծածկել, օրինակ կա buildroot ձեռնարկում

Եկեք ստեղծենք my_tree գրացուցակ, որը գտնվում է buildroot գրացուցակի կողքին և տեղափոխենք մեր կոնֆիգուրացիան այնտեղ: Արդյունքը պետք է լինի հետևյալ ֆայլի կառուցվածքը.

[alexey@alexey-pc my_tree]$ tree
.
├── board
│   └── my_x86_board
│       ├── bef_cr_fs_img.sh
│       ├── linux.config
│       ├── rootfs_overlay
│       └── users.txt
├── Config.in
├── configs
│   └── my_x86_board_defconfig
├── external.desc
├── external.mk
├── package
└── patches

6 directories, 7 files

Ինչպես տեսնում եք, ընդհանուր առմամբ կառուցվածքը կրկնում է buildroot-ի կառուցվածքը։

Տեղեկատու տախտակ պարունակում է մեր դեպքում յուրաքանչյուր տախտակի համար հատուկ ֆայլեր.

  • bef_cr_fs_img.sh-ը սկրիպտ է, որը կկատարվի թիրախային ֆայլային համակարգը կառուցելուց հետո, բայց նախքան այն պատկերների մեջ փաթեթավորելը: Մենք դա կօգտագործենք ապագայում
  • linux.config - միջուկի կոնֆիգուրացիա
  • rootfs_overlay - գրացուցակ, որը ծածկվում է թիրախային ֆայլային համակարգի վերևում
  • users.txt - ֆայլ, որը նկարագրում է ստեղծվելիք օգտվողներին

Տեղեկատու configs պարունակում է մեր տախտակների defconfig: Մենք միայն մեկն ունենք։

Փաթեթ - կատալոգ մեր փաթեթներով: Սկզբում buildroot-ը պարունակում է նկարագրություններ և կանոններ սահմանափակ թվով փաթեթներ ստեղծելու համար: Ավելի ուշ այստեղ կավելացնենք icewm պատուհանի կառավարիչը և Slim գրաֆիկական մուտքի մենեջերը:
Տեղ - տեղ — թույլ է տալիս հարմարավետորեն պահել ձեր պատչերը տարբեր փաթեթների համար: Լրացուցիչ մանրամասները ստորև ներկայացված առանձին բաժնում:
Այժմ մենք պետք է ավելացնենք նկարագրության ֆայլերը մեր արտաքին ծառի համար: Դրա համար պատասխանատու են 3 ֆայլեր՝ external.desc, Config.in, external.mk:

արտաքին.նշ պարունակում է իրական նկարագրությունը.

[alexey@alexey-pc my_tree]$ cat external.desc 
name: my_tree
desc: My simple external-tree for article

Առաջին տողը վերնագիրն է. Ապագայում buildroot-ում ստեղծեք փոփոխական $(BR2_EXTERNAL_MY_TREE_PATH), որը պետք է օգտագործվի ժողովը կարգավորելիս: Օրինակ, օգտվողի ֆայլի ուղին կարող է սահմանվել հետևյալ կերպ.

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/users.txt

Երկրորդ տողը կարճ, մարդու համար ընթեռնելի նկարագրություն է:

Config.in, external.mk — ֆայլեր՝ ավելացված փաթեթները նկարագրելու համար: Եթե ​​դուք չեք ավելացնում ձեր սեփական փաթեթները, ապա այս ֆայլերը կարող են դատարկ մնալ: Առայժմ մենք այդպես էլ կանենք:
Այժմ մենք պատրաստ ենք մեր արտաքին ծառը, որը պարունակում է մեր տախտակի defconfig-ը և անհրաժեշտ ֆայլերը: Եկեք գնանք buildroot գրացուցակ և նշենք արտաքին ծառի օգտագործումը.

[alexey@alexey-pc buildroot]$ make BR2_EXTERNAL=../my_tree/ my_x86_board_defconfig
#
# configuration written to /home/alexey/dev/article/ramdisk/buildroot/.config
#
[alexey@alexey-pc buildroot]$ make menuconfig

Առաջին հրամանում մենք օգտագործում ենք փաստարկը BR2_EXTERNAL=../my_tree/, որը ցույց է տալիս արտաքին ծառի օգտագործումը: Կարող եք միաժամանակ օգտագործել մի քանի արտաքին ծառեր: Այս դեպքում դա պետք է անել միայն մեկ անգամ, որից հետո ստեղծվում է ֆայլ output/.br-external.mk, որը պահպանում է տեղեկատվություն օգտագործվող արտաքին ծառի մասին.

[alexey@alexey-pc buildroot]$ cat output/.br-external.mk 
#
# Automatically generated file; DO NOT EDIT.
#

BR2_EXTERNAL ?= /home/alexey/dev/article/ramdisk/my_small_linux/my_tree
BR2_EXTERNAL_NAMES = 
BR2_EXTERNAL_DIRS = 
BR2_EXTERNAL_MKS = 

BR2_EXTERNAL_NAMES += my_tree
BR2_EXTERNAL_DIRS += /home/alexey/dev/article/ramdisk/my_small_linux/my_tree
BR2_EXTERNAL_MKS += /home/alexey/dev/article/ramdisk/my_small_linux/my_tree/external.mk
export BR2_EXTERNAL_my_tree_PATH = /home/alexey/dev/article/ramdisk/my_small_linux/my_tree
export BR2_EXTERNAL_my_tree_DESC = My simple external-tree for article

Կարևոր. Այս ֆայլի ուղիները բացարձակ կլինեն:

Արտաքին ընտրանքների տարրը հայտնվել է ընտրացանկում.

Buildroot - մաս 2. Ձեր տախտակի կոնֆիգուրացիայի ստեղծում; օգտագործելով արտաքին ծառ, rootfs-overlay, հետկառուցման սցենարներ

Այս ենթամենյուն կպարունակի մեր արտաքին ծառի մեր փաթեթները: Այս բաժինը ներկայումս դատարկ է:

Այժմ մեզ համար ավելի կարևոր է վերաշարադրել արտաքին ծառի օգտագործման անհրաժեշտ ուղիները:

Խնդրում ենք նկատի ունենալ, որ Build options → Location to save buildroot config բաժնում, կլինի բացարձակ ճանապարհ դեպի պահպանված defconfig: Այն ձևավորվում է extgernal_tree-ի օգտագործումը նշելու պահին։

Մենք կուղղենք նաև System configuration բաժնում առկա ուղիները: Ստեղծված օգտվողների հետ սեղանի համար.

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/users.txt

Kernel բաժնում փոխեք միջուկի կազմաձևման ուղին.

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/linux.config

Այժմ մեր արտաքին ծառի ֆայլերը կօգտագործվեն հավաքման ժամանակ: Մեկ այլ գրացուցակ տեղափոխելիս կամ buildroot-ը թարմացնելիս մենք կունենանք նվազագույն խնդիրներ։

Արմատ fs ծածկույթի ավելացում.

Այս մեխանիզմը թույլ է տալիս հեշտությամբ ավելացնել/փոխարինել ֆայլերը թիրախային ֆայլային համակարգում:
Եթե ​​ֆայլը գտնվում է root fs overlay-ում, բայց ոչ թիրախում, ապա այն կավելացվի
Եթե ​​ֆայլը գտնվում է root fs overlay-ում և թիրախում, ապա այն կփոխարինվի:
Նախ, եկեք սահմանենք fs overlay dir-ի ուղին: Սա արվում է System configuration → Root filesystem overlay Directories բաժնում:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/rootfs_overlay/

Հիմա եկեք ստեղծենք երկու ֆայլ:

[alexey@alexey-pc my_small_linux]$ cat my_tree/board/my_x86_board/rootfs_overlay/etc/hosts 
127.0.0.1   localhost
127.0.1.1   my_small_linux
8.8.8.8     google-public-dns-a.google.com.
[alexey@alexey-pc my_small_linux]$ cat my_tree/board/my_x86_board/rootfs_overlay/new_file.txt 
This is new file from overlay

Առաջին ֆայլը (my_tree/board/my_x86_board/rootfs_overlay/etc/hosts) կփոխարինի /etc/hosts ֆայլին պատրաստի համակարգում: Երկրորդ ֆայլը (cat my_tree/board/my_x86_board/rootfs_overlay/new_file.txt) կավելացվի:

Մենք հավաքում և ստուգում ենք.

Buildroot - մաս 2. Ձեր տախտակի կոնֆիգուրացիայի ստեղծում; օգտագործելով արտաքին ծառ, rootfs-overlay, հետկառուցման սցենարներ

Համակարգի հավաքման տարբեր փուլերում անհատականացման սկրիպտների կատարում

Հաճախ դուք պետք է որոշակի աշխատանք կատարեք թիրախային ֆայլային համակարգի ներսում՝ նախքան այն պատկերների մեջ փաթեթավորելը:

Դա կարելի է անել Համակարգի կազմաձևման բաժնում.

Buildroot - մաս 2. Ձեր տախտակի կոնֆիգուրացիայի ստեղծում; օգտագործելով արտաքին ծառ, rootfs-overlay, հետկառուցման սցենարներ

Առաջին երկու սկրիպտները կատարվում են թիրախային ֆայլային համակարգի կառուցումից հետո, բայց նախքան այն պատկերների մեջ փաթեթավորելը: Տարբերությունն այն է, որ fakeroot սկրիպտը կատարվում է fakeroot-ի համատեքստում, որը մոդելավորում է աշխատանքը որպես արմատային օգտվող:

Վերջին սցենարը կատարվում է համակարգի պատկերների ստեղծումից հետո: Դրանում կարող եք կատարել լրացուցիչ գործողություններ, օրինակ՝ պատճենել անհրաժեշտ ֆայլերը NFS սերվերում կամ ստեղծել ձեր սարքի որոնվածի պատկերը:

Որպես օրինակ, ես կստեղծեմ սցենար, որը կգրի տարբերակը և ստեղծման ամսաթիվը /etc/:
Սկզբում ես կնշեմ այս ֆայլի ուղին իմ արտաքին ծառի մեջ.

Buildroot - մաս 2. Ձեր տախտակի կոնֆիգուրացիայի ստեղծում; օգտագործելով արտաքին ծառ, rootfs-overlay, հետկառուցման սցենարներ

Եվ հիմա ինքնին սցենարը.

[alexey@alexey-pc buildroot]$ cat ../my_tree/board/my_x86_board/bef_cr_fs_img.sh 
#!/bin/sh
echo "my small linux 1.0 pre alpha" > output/target/etc/mysmalllinux-release
date >> output/target/etc/mysmalllinux-release

Հավաքումից հետո դուք կարող եք տեսնել այս ֆայլը համակարգում:

Գործնականում սցենարը կարող է մեծ դառնալ: Հետևաբար, իրական նախագծում ես գնացի ավելի առաջադեմ ճանապարհ.

  1. Ես ստեղծեցի գրացուցակ (my_tree/board_my_x86_board/inside_fakeroot_scripts), որտեղ կան կատարվող սկրիպտներ՝ սերիական համարներով: Օրինակ՝ 0001-add-my_small_linux-version.sh, 0002-clear-apache-root-dir.sh
  2. Ես գրեցի մի սկրիպտ (my_tree/board_my_x86_board/run_inside_fakeroot.sh), որն անցնում է այս գրացուցակով և հաջորդաբար կատարում դրա մեջ պարունակվող սկրիպտները։
  3. Նշված է այս սկրիպտը տախտակի կարգավորումներում Համակարգի կազմաձևում -> Հատուկ սկրիպտներ՝ գործարկելու համար fakeroot միջավայրում ($(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/run_inside_fakeroot.sh) բաժնում:

Source: www.habr.com

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