Буилдроот - део 2. Креирање конфигурације ваше плоче; коришћење екстерног стабла, роотфс-преклапања, пост-буилд скрипти

У овом одељку ћу погледати неке од опција прилагођавања које су ми биле потребне. Ово није потпуна листа онога што буилдроот нуди, али су прилично функционални и не захтевају интервенцију у датотекама самог буилдроот-а.

Коришћење ЕКСТЕРНОГ механизма за прилагођавање

У претходном чланку Погледали смо једноставан пример додавања сопствене конфигурације додавањем дефцонфиг-а плоче и потребних датотека директно у Буилдроот директоријум.

Али овај метод није баш згодан, посебно када се ажурира буилдроот. Постоји механизам за решавање овог проблема спољашње дрво. Његова суштина је да можете да складиштите плочу, конфигурације, пакете и друге директоријуме у посебан директоријум (на пример, ја користим директоријум закрпе да применим закрпе на пакете, више детаља у посебном одељку) и сам буилдроот ће их додати онима у његов именик.

Напомена: можете прекрити неколико спољних стабала одједном, постоји пример у приручнику за изградњу корена

Хајде да направимо директоријум ми_трее, који се налази поред буилдроот директоријума и пренесемо нашу конфигурацију тамо. Излаз треба да буде следећа структура датотеке:

[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

Као што видите, генерално структура понавља структуру буилдроот-а.

Директоријум одбор садржи датотеке специфичне за сваку плочу у нашем случају:

  • беф_цр_фс_имг.сх је скрипта која ће бити извршена након изградње циљног система датотека, али пре него што га пакује у слике. Користићемо га у будућности
  • линук.цонфиг - конфигурација језгра
  • роотфс_оверлаи - директоријум за преклапање на врху циљног система датотека
  • усерс.ткт - датотека која описује кориснике који ће бити креирани

Директоријум цонфигс садржи дефцонфиг наших плоча. Имамо само једног.

пакет - каталог са нашим пакетима. У почетку, буилдроот садржи описе и правила за прављење ограниченог броја пакета. Касније ћемо овде додати ицевм менаџер прозора и Слим графички менаџер за пријаву.
Amblemi — омогућава вам да удобно складиштите своје закрпе за различите пакете. Више детаља у посебном одељку испод.
Сада морамо да додамо датотеке описа за наше екстерно стабло. За ово су одговорне 3 датотеке: ектернал.десц, Цонфиг.ин, ектернал.мк.

ектернал.десц садржи стварни опис:

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

Први ред је наслов. У будућности буилдроот креирајте променљиву $(БР2_ЕКСТЕРНАЛ_МИ_ТРЕЕ_ПАТХ), који треба користити приликом конфигурисања склопа. На пример, путања до корисничке датотеке може се поставити на следећи начин:

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

Други ред је кратак, човеку читљив опис.

Цонфиг.ин, ектернал.мк — датотеке за опис додатих пакета. Ако не додате своје пакете, онда ове датотеке могу остати празне. За сада, то је оно што ћемо урадити.
Сада имамо спремно екстерно стабло које садржи дефцонфиг наше плоче и датотеке које су му потребне. Идемо у буилдроот директоријум и одредимо да користимо екстерно стабло:

[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

У првој команди користимо аргумент БР2_ЕКСТЕРНАЛ=../ми_трее/, што указује на употребу екстерног стабла. Можете навести неколико екстерних стабала за употребу у исто време. У овом случају, ово треба да урадите само једном, након чега се креира датотека оутпут/.бр-ектернал.мк која чува информације о коришћеном спољашњем стаблу:

[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

Важно! Путања у овој датотеци ће бити апсолутна!

У менију се појавила ставка Ектернал оптионс:

Буилдроот - део 2. Креирање конфигурације ваше плоче; коришћење екстерног стабла, роотфс-преклапања, пост-буилд скрипти

Овај подмени ће садржати наше пакете из нашег екстерног стабла. Овај одељак је тренутно празан.

Сада нам је важније да препишемо неопходне путање за коришћење спољашњег стабла.

Имајте на уму да ће у одељку Буилд оптионс → Лоцатион то саве буилдроот цонфиг бити апсолутна путања до сачуване дефцонфиг. Формира се у тренутку спецификације употребе ектгернал_трее.

Такође ћемо исправити путање у одељку Конфигурација система. За табелу са креираним корисницима:

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

У одељку Кернел промените путању до конфигурације кернела:

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

Сада ће се наши фајлови из нашег екстерног стабла користити током склапања. Приликом преласка у други директоријум или ажурирања буилдроот-а, имаћемо минимум проблема.

Додавање роот фс преклапања:

Овај механизам вам омогућава да лако додате/замените датотеке у циљном систему датотека.
Ако је датотека у роот фс преклапању, али не у циљу, онда ће бити додата
Ако је датотека у роот фс преклапању и у таргету, онда ће бити замењена.
Прво, поставимо путању до роот фс оверлаи дир. Ово се ради у одељку Конфигурација система → Директоријуми са преклапањем коренског система датотека:

$(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

Прва датотека (ми_трее/боард/ми_к86_боард/роотфс_оверлаи/етц/хостс) ће заменити датотеку /етц/хостс на готовом систему. Други фајл (цат ми_трее/боард/ми_к86_боард/роотфс_оверлаи/нев_филе.ткт) ће бити додат.

Прикупљамо и проверавамо:

Буилдроот - део 2. Креирање конфигурације ваше плоче; коришћење екстерног стабла, роотфс-преклапања, пост-буилд скрипти

Извођење скрипти за прилагођавање у различитим фазама склапања система

Често морате да обавите неки посао унутар циљног система датотека пре него што се упакује у слике.

Ово се може урадити у одељку за конфигурацију система:

Буилдроот - део 2. Креирање конфигурације ваше плоче; коришћење екстерног стабла, роотфс-преклапања, пост-буилд скрипти

Прве две скрипте се извршавају након што је циљни систем датотека изграђен, али пре него што је упакован у слике. Разлика је у томе што се факероот скрипта извршава у контексту факероот, који симулира рад као роот корисник.

Последња скрипта се извршава након што се креирају системске слике. У њему можете извршити додатне радње, на пример, копирати потребне датотеке на НФС сервер или креирати слику фирмвера вашег уређаја.

Као пример, направићу скрипту која ће написати верзију и датум изградње у /етц/.
Прво ћу навести путању до ове датотеке у свом екстерном стаблу:

Буилдроот - део 2. Креирање конфигурације ваше плоче; коришћење екстерног стабла, роотфс-преклапања, пост-буилд скрипти

А сада сама скрипта:

[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. Направио сам директоријум (ми_трее/боард_ми_к86_боард/инсиде_факероот_сцриптс) у којем се налазе скрипте које треба извршити, са серијским бројевима. На пример, 0001-адд-ми_смалл_линук-версион.сх, 0002-цлеар-апацхе-роот-дир.сх
  2. Написао сам скрипту (ми_трее/боард_ми_к86_боард/рун_инсиде_факероот.сх) која пролази кроз овај директоријум и секвенцијално извршава скрипте садржане у њему
  3. Навели ову скрипту у подешавањима плоче у одељку Конфигурација система -> Прилагођене скрипте за покретање унутар факероот окружења ($(БР2_ЕКСТЕРНАЛ_ми_трее_ПАТХ)/боард/ми_к86_боард/рун_инсиде_факероот.сх)

Извор: ввв.хабр.цом

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