Այս բաժնում ես նայում եմ հարմարեցման որոշ ընտրանքներ, որոնք ինձ անհրաժեշտ էին: Սա ամբողջական ցանկ չէ, թե ինչ է առաջարկում buildroot-ը, բայց դրանք բավականին ֆունկցիոնալ են և չեն պահանջում միջամտություն հենց buildroot-ի ֆայլերում:
Օգտագործելով EXTERNAL մեխանիզմը հարմարեցման համար
Բայց այս մեթոդը այնքան էլ հարմար չէ, հատկապես 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
Կարևոր. Այս ֆայլի ուղիները բացարձակ կլինեն:
Արտաքին ընտրանքների տարրը հայտնվել է ընտրացանկում.
Այս ենթամենյուն կպարունակի մեր արտաքին ծառի մեր փաթեթները: Այս բաժինը ներկայումս դատարկ է:
Այժմ մեզ համար ավելի կարևոր է վերաշարադրել արտաքին ծառի օգտագործման անհրաժեշտ ուղիները:
Խնդրում ենք նկատի ունենալ, որ 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) կավելացվի:
Մենք հավաքում և ստուգում ենք.
Համակարգի հավաքման տարբեր փուլերում անհատականացման սկրիպտների կատարում
Հաճախ դուք պետք է որոշակի աշխատանք կատարեք թիրախային ֆայլային համակարգի ներսում՝ նախքան այն պատկերների մեջ փաթեթավորելը:
Դա կարելի է անել Համակարգի կազմաձևման բաժնում.
Առաջին երկու սկրիպտները կատարվում են թիրախային ֆայլային համակարգի կառուցումից հետո, բայց նախքան այն պատկերների մեջ փաթեթավորելը: Տարբերությունն այն է, որ fakeroot սկրիպտը կատարվում է fakeroot-ի համատեքստում, որը մոդելավորում է աշխատանքը որպես արմատային օգտվող:
Վերջին սցենարը կատարվում է համակարգի պատկերների ստեղծումից հետո: Դրանում կարող եք կատարել լրացուցիչ գործողություններ, օրինակ՝ պատճենել անհրաժեշտ ֆայլերը NFS սերվերում կամ ստեղծել ձեր սարքի որոնվածի պատկերը:
Որպես օրինակ, ես կստեղծեմ սցենար, որը կգրի տարբերակը և ստեղծման ամսաթիվը /etc/:
Սկզբում ես կնշեմ այս ֆայլի ուղին իմ արտաքին ծառի մեջ.
Եվ հիմա ինքնին սցենարը.
[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
Հավաքումից հետո դուք կարող եք տեսնել այս ֆայլը համակարգում:
Գործնականում սցենարը կարող է մեծ դառնալ: Հետևաբար, իրական նախագծում ես գնացի ավելի առաջադեմ ճանապարհ.
- Ես ստեղծեցի գրացուցակ (my_tree/board_my_x86_board/inside_fakeroot_scripts), որտեղ կան կատարվող սկրիպտներ՝ սերիական համարներով: Օրինակ՝ 0001-add-my_small_linux-version.sh, 0002-clear-apache-root-dir.sh
- Ես գրեցի մի սկրիպտ (my_tree/board_my_x86_board/run_inside_fakeroot.sh), որն անցնում է այս գրացուցակով և հաջորդաբար կատարում դրա մեջ պարունակվող սկրիպտները։
- Նշված է այս սկրիպտը տախտակի կարգավորումներում Համակարգի կազմաձևում -> Հատուկ սկրիպտներ՝ գործարկելու համար fakeroot միջավայրում ($(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/run_inside_fakeroot.sh) բաժնում:
Source: www.habr.com