Buildroot - 2-бөлүк. Тактанын конфигурациясын түзүү; тышкы дарак, rootfs-кабат, пост-куруу скрипттерин колдонуу

Бул бөлүмдө мен керектүү ыңгайлаштыруу параметрлерин карап чыгам. Бул buildroot сунуштаган нерселердин толук тизмеси эмес, бирок алар абдан функционалдык жана buildroot файлдарына кийлигишүүнү талап кылбайт.

Настройка үчүн ТЫШКЫ механизмди колдонуу

Мурунку макалада Биз тактанын defconfig жана керектүү файлдарды түз 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 графикалык кирүү менеджерин кошобуз.
Patches — ар кандай пакеттер үчүн патчтарды ыңгайлуу сактоого мүмкүндүк берет. Төмөндө өзүнчө бөлүмдө көбүрөөк маалымат.
Эми биз тышкы дарак үчүн сүрөттөмө файлдарын кошушубуз керек. Бул үчүн жооптуу 3 файл бар: external.desc, Config.in, external.mk.

тышкы.desc чыныгы сүрөттөлүшүн камтыйт:

[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_EXTERNAL=../менин_дарагым/, тышкы даракты колдонууну көрсөтүү.Сиз бир эле учурда колдонуу үчүн бир нече тышкы дарактарды белгилей аласыз.Мындай учурда муну бир гана жолу жасашыңыз керек, андан кийин 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-кабат, пост-куруу скрипттерин колдонуу

Бул подменюда биздин тышкы дарактан биздин пакеттер болот. Бул бөлүм учурда бош.

Эми тышкы даракты колдонуу үчүн керектүү жолдорду кайра жазуу биз үчүн маанилүү.

Эсиңизде болсун, Build options → Location to save 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 катмарын кошуу:

Бул механизм максаттуу файл тутумуна файлдарды оңой кошууга/алмаштырууга мүмкүндүк берет.
Эгер файл түпкү 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-кабат, пост-куруу скрипттерин колдонуу

Системаны чогултуунун ар кандай этаптарында настройка скрипттерин аткаруу

Көбүнчө максаттуу файл тутумунун ичинде сүрөттөрдү пакеттөөдөн мурун кандайдыр бир иштерди аткарышыңыз керек.

Бул системанын конфигурация бөлүмүндө жасалышы мүмкүн:

Buildroot - 2-бөлүк. Тактанын конфигурациясын түзүү; тышкы дарак, rootfs-кабат, пост-куруу скрипттерин колдонуу

Алгачкы эки скрипт максаттуу файл системасы курулгандан кийин, бирок ал сүрөттөргө пакеттелгенге чейин аткарылат. Айырмачылыгы fakeroot скриптинин түпкү колдонуучу катары иштөөнү окшоштурган fakeroot контекстинде аткарылганында.

Акыркы скрипт системанын сүрөттөрү түзүлгөндөн кийин аткарылат. Анда сиз кошумча аракеттерди жасай аласыз, мисалы, керектүү файлдарды NFS серверине көчүрүп же түзмөгүңүздүн микропрограммасынын сүрөтүн түзө аласыз.

Мисал катары, мен версияны жаза турган скрипт түзөм жана датасын /etc/ түзөм.
Алгач мен бул файлдын жолун тышкы дарагымда көрсөтөм:

Buildroot - 2-бөлүк. Тактанын конфигурациясын түзүү; тышкы дарак, rootfs-кабат, пост-куруу скрипттерин колдонуу

Эми сценарийдин өзү:

[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

Комментарий кошуу