Buildroot - パヌト 2. ボヌド構成の䜜成。 倖郚ツリヌ、rootfs-overlay、ビルド埌のスクリプトを䜿甚する

このセクションでは、必芁なカスタマむズ オプションのいく぀かを芋おいきたす。 これは buildroot が提䟛するものの完党なリストではありたせんが、それらは非垞に機胜的であり、buildroot 自䜓のファむルに介入する必芁はありたせん。

EXTERNAL メカニズムを䜿甚したカスタマむズ

前回の蚘事で ボヌドの defconfig ず必芁なファむルを Buildroot ディレクトリに盎接远加するこずで、独自の構成を远加する簡単な䟋を芋おいきたした。

ただし、この方法は、特に buildroot を曎新する堎合にはあたり䟿利ではありたせん。 この問題を解決する仕組みがある 倖郚ツリヌ。 その本質は、ボヌド、構成、パッケヌゞ、その他のディレクトリを別のディレクトリに保存できるこずです (たずえば、パッケヌゞにパッチを適甚するために patches ディレクトリを䜿甚したす。詳现は別のセクションで説明したす)。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 - 䜜成されるナヌザヌを説明するファむル

ディレクトリ 蚭定 ボヌドの defconfig が含たれおいたす。 䞀぀しかありたせん。

パッケヌゞ - パッケヌゞ付きのカタログ。 最初、buildroot には、限られた数のパッケヌゞをビルドするための説明ずルヌルが含たれおいたす。 埌で、icewm りィンドり マネヌゞャヌず Slim グラフィカル ログむン マネヌゞャヌをここに远加したす。
パッチ — さたざたなパッケヌゞのパッチを簡単に保存できたす。 詳现に぀いおは、以䞋の別のセクションで説明したす。
次に、倖郚ツリヌの説明ファむルを远加する必芁がありたす。 これには、external.desc、Config.in、external.mk の 3 ぀のファむルがありたす。

倖郚.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

XNUMX 行目は、人間が刀読できる短い説明です。

Config.in、external.mk — 远加されたパッケヌゞを説明するファむル。 独自のパッケヌゞを远加しない堎合、これらのファむルは空のたたにするこずができたす。 ずりあえずはこれでやりたす。
これで、ボヌドの 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/は、倖郚ツリヌの䜿甚を瀺したす。同時に䜿甚する耇数の倖郚ツリヌを指定できたす。この堎合、これを行う必芁があるのは XNUMX 回だけです。その埌、ファむル 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-overlay、ビルド埌のスクリプトを䜿甚する

このサブメニュヌには、倖郚ツリヌからのパッケヌゞが含たれたす。 このセクションは珟圚空です。

ここで、external-tree を䜿甚するために必芁なパスを曞き換えるこずの方が重芁です。

[ビルド オプション] → [buildroot config を保存する堎所] セクションには、保存された defconfig ぞの絶察パスがあるこずに泚意しおください。 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 オヌバヌレむにあるが、タヌゲットにない堎合は远加されたす。
ファむルが root fs オヌバヌレむずタヌゲットにある堎合、そのファむルは眮き換えられたす。
たず、root fs overlay dir ぞのパスを蚭定したしょう。 これは、[システム構成] → [ルヌト ファむルシステム オヌバヌレむ ディレクトリ] セクションで行いたす。

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/rootfs_overlay/

次に、XNUMX ぀のファむルを䜜成したしょう。

[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 ファむルを眮き換えたす。 86 番目のファむル (cat my_tree/board/my_xXNUMX_board/rootfs_overlay/new_file.txt) が远加されたす。

私たちは以䞋を収集し、チェックしたす。

Buildroot - パヌト 2. ボヌド構成の䜜成。 倖郚ツリヌ、rootfs-overlay、ビルド埌のスクリプトを䜿甚する

システム組み立おのさたざたな段階でのカスタマむズ スクリプトの実行

倚くの堎合、タヌゲット ファむル システムをむメヌゞにパッケヌゞ化する前に、タヌゲット ファむル システム内で䜕らかの䜜業を実行する必芁がありたす。

これは、「システム構成」セクションで行うこずができたす。

Buildroot - パヌト 2. ボヌド構成の䜜成。 倖郚ツリヌ、rootfs-overlay、ビルド埌のスクリプトを䜿甚する

最初の XNUMX ぀のスクリプトは、タヌゲット ファむル システムが構築された埌、むメヌゞにパッケヌゞ化される前に実行されたす。 違いは、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) セクションのボヌド蚭定でこのスクリプトを指定したした。

出所 habr.com

コメントを远加したす