Buildroot - 2-бөлім. Тақта конфигурациясын жасау; сыртқы ағашты, rootfs-overlay, пост құрастыру сценарийлерін пайдалану

Бұл бөлімде мен өзіме қажет кейбір теңшеу опцияларын қарастырамын. Бұл buildroot ұсынатындардың толық тізімі емес, бірақ олар өте функционалды және buildroot файлдарының өзіне араласуды қажет етпейді.

Баптау үшін EXTERNAL механизмін пайдалану

Алдыңғы мақалада Тақтаның defconfig және қажетті файлдарды Buildroot каталогына тікелей қосу арқылы жеке конфигурацияңызды қосудың қарапайым мысалын қарастырдық.

Бірақ бұл әдіс өте ыңғайлы емес, әсіресе buildroot жаңартуы кезінде. Бұл мәселені шешудің тетігі бар сыртқы ағаш. Оның мәні мынада: тақтаны, конфигурацияларды, бумаларды және басқа каталогтарды бөлек каталогта сақтауға болады (мысалы, мен патчтар каталогын бумаларға патчтарды қолдану үшін қолданамын, қосымша мәліметтер бөлек бөлімде) және buildroot өзі оларды мыналарға қосады. оның каталогы.

Ескерту: сіз бірден бірнеше сыртқы ағаштарды қабаттастыруға болады, мысалы, Buildroot нұсқаулығында бар

Buildroot каталогының жанында орналасқан my_tree каталогын жасап, конфигурациямызды сол жерге тасымалдайық. Шығару келесі файл құрылымы болуы керек:

[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 біздің тақталардың дефконфигурациясын қамтиды. Бізде біреу ғана.

пакет - біздің пакеттеріміз бар каталог. Бастапқыда 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 — қосылған бумаларды сипаттайтын файлдар. Егер сіз өзіңіздің пакеттеріңізді қоспасаңыз, бұл файлдарды бос қалдыруға болады. Әзірге біз осылай істейміз.
Енді бізде тақтаның дефконфигурациясын және оған қажетті файлдарды қамтитын сыртқы ағашымыз дайын. 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_СЫРТҚЫ=../менің_ағашым/, сыртқы ағашты пайдалануды көрсетеді.Бір уақытта пайдалану үшін бірнеше сыртқы ағаштарды көрсетуге болады.Бұл жағдайда мұны тек бір рет орындау керек, содан кейін шығыс/.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, пост құрастыру сценарийлерін пайдалану

Бұл ішкі мәзірде сыртқы ағаштан біздің пакеттеріміз болады. Бұл бөлім қазір бос.

Енді біз үшін сыртқы ағашты пайдалану үшін қажетті жолдарды қайта жазу маңыздырақ.

Құрастыру опциялары → buildroot конфигурациясын сақтау үшін орын бөлімінде сақталған дефконфигурацияға абсолютті жол болатынын ескеріңіз. Ол extgernal_tree пайдалануды көрсету сәтінде қалыптасады.

Сондай-ақ біз «Жүйе конфигурациясы» бөліміндегі жолдарды түзетеміз. Құрылған пайдаланушылары бар кесте үшін:

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

Ядро бөлімінде ядро ​​конфигурациясының жолын өзгертіңіз:

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

Енді біздің сыртқы ағаштағы файлдарымыз құрастыру кезінде пайдаланылады. Басқа каталогқа көшкенде немесе Buildroot жүйесін жаңартқанда, бізде ең аз мәселелер болады.

Түбір fs қабатын қосу:

Бұл механизм мақсатты файлдық жүйеге файлдарды оңай қосуға/ауыстыруға мүмкіндік береді.
Егер файл fs түбірлік қабатында болса, бірақ мақсатта болмаса, ол қосылады
Егер файл fs түбірлік қабатта және мақсатта болса, ол ауыстырылады.
Алдымен, fs overlay dir түбірі жолын орнатайық. Бұл Жүйе конфигурациясы → Түбірлік файлдық жүйенің қабаттасу каталогтары бөлімінде орындалады:

$(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) бөліміндегі тақта параметрлерінде көрсетті.

Ақпарат көзі: www.habr.com

пікір қалдыру