Buildroot - дел 2. Креирање на вашата конфигурација на таблата; користење на надворешно дрво, rootfs-overlay, пост-изградба скрипти

Во овој дел гледам некои од опциите за прилагодување што ми беа потребни. Ова не е комплетна листа на она што го нуди buildroot, но тие се доста функционални и не бараат интервенција во датотеките на самиот buildroot.

Користење на НАДВОРЕШЕН механизам за прилагодување

Во претходниот напис Разгледавме едноставен пример за додавање своја сопствена конфигурација со додавање на дефконфигурацијата на таблата и потребните датотеки директно во директориумот Buildroot.

Но, овој метод не е многу удобен, особено кога се ажурира buildroot. Постои механизам за решавање на овој проблем надворешно дрво. Неговата суштина е што можете да складирате табла, конфигурации, пакети и други директориуми во посебен директориум (на пример, јас го користам директориумот за закрпи за да аплицирам закрпи на пакетите, повеќе детали во посебен дел) и самиот 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 и менаџерот за тенок графички најава.
Закрпи — ви овозможува практично да ги складирате вашите закрпи за различни пакувања. Повеќе детали во посебен дел подолу.
Сега треба да ги додадеме датотеките за опис за нашето надворешно дрво. За ова се одговорни 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/, што укажува на употреба на надворешно дрво. Можете да наведете неколку надворешни-дрва за употреба во исто време. Во овој случај, треба да го направите ова само еднаш, по што се креира датотека излез/.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, ќе имаме минимум проблеми.

Додавање на преклопување на root fs:

Овој механизам ви овозможува лесно додавање/замена на датотеки во целниот датотечен систем.
Ако датотеката е во root fs преклоп, но не и во цел, тогаш ќе се додаде
Ако датотеката е во root fs преклоп и во цел, тогаш таа ќе биде заменета.
Прво, да ја поставиме патеката до root fs overlay dir. Ова е направено во делот Системска конфигурација → Директориуми за преклопување на root датотечен систем:

$(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, што симулира работа како root корисник.

Последната скрипта се извршува откако ќе се креираат системските слики. Можете да извршите дополнителни дејства во него, на пример, да ги копирате потребните датотеки на серверот 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

Додадете коментар