Buildroot β€” Ρ‡Π°ΡΡ‚ΡŒ 2. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ своСй ΠΏΠ»Π°Ρ‚Ρ‹; ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ external tree, rootfs-overlay, post-build скриптов

Π’ Π΄Π°Π½Π½ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ я Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽ Ρ‡Π°ΡΡ‚ΡŒ возмоТностСй ΠΏΠΎ кастомизации, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΈΡΡŒ ΠΌΠ½Π΅. Π­Ρ‚ΠΎ Π½Π΅ ΠΏΠΎΠ»Π½Ρ‹ΠΉ список Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ buildroot, Π½ΠΎ ΠΎΠ½ΠΈ Π²ΠΏΠΎΠ»Π½Π΅ Ρ€Π°Π±ΠΎΡ‡ΠΈΠ΅ ΠΈ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ Π²ΠΌΠ΅ΡˆΠ°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π° Π² Ρ„Π°ΠΉΠ»Ρ‹ самого buildroot.

ИспользованиС EXTERNAL-ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° для кастомизации

Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ рассматривался простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ добавлСния своСй ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, ΠΏΡƒΡ‚Π΅ΠΌ добавлСния defconfig’а ΠΏΠ»Π°Ρ‚Ρ‹ ΠΈ Π½ΡƒΠΆΠ½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² нСпосрСдствСнно Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Buildroot.

Но этот ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π΅Π½, особСнно ΠΏΡ€ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ buildroot. Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ это ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π΅ΡΡ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ external tree. Π‘ΡƒΡ‚ΡŒ Π΅Π³ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ board,configs,packages ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΠ΅( Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ patches для налоТСния ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹, ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅) ΠΈ buildroot Π±ΡƒΠ΄Π΅Ρ‚ сам Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΈΡ… ΠΊ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΌΠΈΡΡ Π² своСм ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π΅Π½ΠΈΠ΅: ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ сразу нСсколько external tree, Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² руководствС 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.

ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ board содСрТит Ρ„Π°ΠΉΠ»Ρ‹, спСцифичныС ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ»Π°Ρ‚Π΅ Π² нашСм случаС:

  • bef_cr_fs_img.sh β€” скрипт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ послС сборки target-Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы, Π½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Π½ΠΈΠ΅ΠΌ Π΅Ρ‘ Π² ΠΎΠ±Ρ€Π°Π·Ρ‹. Π’ дальнСйшСм ΠΌΡ‹ Π΅Π³ΠΎ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ
  • linux.config β€” конфигурация ядра
  • rootfs_overlay β€” ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ для налоТСния ΠΏΠΎΠ²Π΅Ρ€Ρ… target-Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы
  • users.txt β€” Ρ„Π°ΠΉΠ» с описаниСм создаваСмых ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ

ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ configs содСрТит defconfig’и Π½Π°ΡˆΠΈΡ… ΠΏΠ»Π°Ρ‚. Π£ нас ΠΎΠ½ всСго ΠΎΠ΄ΠΈΠ½.

Package β€” ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ с нашими ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ. Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ buildroot содСрТит описания ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π° сборки ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ числа ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ². ПозТС ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ сюда ΠΎΠΊΠΎΠ½Π½Ρ‹ΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ icewm ΠΈ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ графичСского Π²Ρ…ΠΎΠ΄Π° Π² систСму Slim.
Patches β€” позволяСт ΡƒΠ΄ΠΎΠ±Π½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ свои ΠΏΠ°Ρ‚Ρ‡ΠΈ для Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ². ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ Π΄Π°Π»Π΅Π΅.
Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ описания нашСго external-tree. Π—Π° это ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‚ 3 Ρ„Π°ΠΉΠ»Π°: external.desc, Config.in, external.mk.

external.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 β€” Ρ„Π°ΠΉΠ»Ρ‹ для описания добавляСмых ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ². Если свои ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ, Ρ‚ΠΎ эти Ρ„Π°ΠΉΠ»Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ пустыми. Пока Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ‚Π°ΠΊ ΠΈ поступим.
Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ нас Π³ΠΎΡ‚ΠΎΠ²ΠΎ нашС external-tree, содСрТащСС defconfig нашСй ΠΏΠ»Π°Ρ‚Ρ‹ ΠΈ Π½ΡƒΠΆΠ½Ρ‹Π΅ Π΅ΠΌΡƒ Ρ„Π°ΠΉΠ»Ρ‹. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ buildroot, ΡƒΠΊΠ°ΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ external-tree:

[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/, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ использованиС external tree.МоТно Π·Π°Π΄Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ нСсколько external-tree для использования ΠŸΡ€ΠΈ этом достаточно ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, послС Ρ‡Π΅Π³ΠΎ создаСтся Ρ„Π°ΠΉΠ» output/.br-external.mk, хранящий ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΌ external-tree:

[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

Π’Π°ΠΆΠ½ΠΎ! Π’ этом Ρ„Π°ΠΉΠ»Π΅ ΠΏΡƒΡ‚ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹ΠΌΠΈ!

Π’ мСню появился ΠΏΡƒΠ½ΠΊΡ‚ External options:

Buildroot — Ρ‡Π°ΡΡ‚ΡŒ 2. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ своСй ΠΏΠ»Π°Ρ‚Ρ‹; ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ external tree, rootfs-overlay, post-build скриптов

Π’ этом подмСню Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒΡΡ наши ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΈΠ· нашСго external-tree. БСйчас этот Ρ€Π°Π·Π΄Π΅Π» пустой.

БСйчас Π½Π°ΠΌ Π²Π°ΠΆΠ½Π΅Π΅ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΏΡƒΡ‚ΠΈ Π½Π° использованиС external-tree.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 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

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΈ сборкС Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ наши Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ· нашСго external-tree. ΠŸΡ€ΠΈ пСрСносС Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ buildroot Ρƒ нас Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ root fs overlay:

Π”Π°Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ позволяСт Π»Π΅Π³ΠΊΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ/Π·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ Π² target-Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС.
Если Ρ„Π°ΠΉΠ» Π΅ΡΡ‚ΡŒ Π² root fs overlay, Π½ΠΎ Π½Π΅Ρ‚ Π² target, Ρ‚ΠΎ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½
Если Ρ„Π°ΠΉΠ» Π΅ΡΡ‚ΡŒ Π² root fs overlay ΠΈ Π² target, Ρ‚ΠΎ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½Ρ‘Π½.
Π‘Π½Π°Ρ‡Π°Π»Π° Π·Π°Π΄Π°Π΄ΠΈΠΌ ΠΏΡƒΡ‚ΡŒ ΠΊ root 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) добавится.

Π‘ΠΎΠ±ΠΈΡ€Π°Π΅ΠΌ ΠΈ провСряСм:

Buildroot — Ρ‡Π°ΡΡ‚ΡŒ 2. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ своСй ΠΏΠ»Π°Ρ‚Ρ‹; ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ external tree, rootfs-overlay, post-build скриптов

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ скриптов кастомизации Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… этапах сборки систСмы

Часто Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ дСйствия Π²Π½ΡƒΡ‚Ρ€ΠΈ target-Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Π½Π° Π² ΠΎΠ±Ρ€Π°Π·Ρ‹.

Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ System configuration:

Buildroot — Ρ‡Π°ΡΡ‚ΡŒ 2. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ своСй ΠΏΠ»Π°Ρ‚Ρ‹; ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ external tree, rootfs-overlay, post-build скриптов

ΠŸΠ΅Ρ€Π²Ρ‹Π΅ Π΄Π²Π° скрипта Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ послС сборки target-Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы, Π½ΠΎ Π΄ΠΎ ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ Π΅Ρ‘ Π² ΠΎΠ±Ρ€Π°Π·Ρ‹. Π Π°Π·Π½ΠΈΡ†Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ fakeroot-скрипт выполняСтся Π² контСкстС fakeroot, Ρ‚Π΅ имитируСтся Ρ€Π°Π±ΠΎΡ‚Π° ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ root.

ПослСдний скрипт выполняСтся ΡƒΠΆΠ΅ послС создания ΠΎΠ±Ρ€Π°Π·ΠΎΠ² систСмы. Π’ Π½Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ дСйствия, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π½Π° nfs-сСрвСр ΠΈΠ»ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π· своСй ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΈ устройства.

Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° я создам скрипт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡŽ ΠΈ Π΄Π°Ρ‚Ρƒ сборки Π² /etc/.
Π‘Π½Π°Ρ‡Π°Π»Π° ΡƒΠΊΠ°ΠΆΡƒ ΠΏΡƒΡ‚ΡŒ ΠΊ этому Ρ„Π°ΠΉΠ»Ρƒ Π² ΠΌΠΎΠ΅ΠΌ external-tree:

Buildroot — Ρ‡Π°ΡΡ‚ΡŒ 2. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ своСй ΠΏΠ»Π°Ρ‚Ρ‹; ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ external tree, rootfs-overlay, post-build скриптов

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ сам скрипт:

[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. Π£ΠΊΠ°Π·Π°Π» этот скрипт Π² настройках ΠΏΠ»Π°Ρ‚Ρ‹ Π² Ρ€Π°Π·Π΅Π»Π΅ System configuration -> Custom scripts to run inside the fakeroot environment ($(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/run_inside_fakeroot.sh)

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com