このセクションでは、必要なカスタマイズ オプションのいくつかを見ていきます。 これは 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.txtXNUMX 行目は、人間が判読できる短い説明です。
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重要! このファイル内のパスは絶対パスになります。
外部オプション項目がメニューに表示されます。

このサブメニューには、外部ツリーからのパッケージが含まれます。 このセクションは現在空です。
ここで、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) が追加されます。
私たちは以下を収集し、チェックします。

システム組み立てのさまざまな段階でのカスタマイズ スクリプトの実行
多くの場合、ターゲット ファイル システムをイメージにパッケージ化する前に、ターゲット ファイル システム内で何らかの作業を実行する必要があります。
これは、「システム構成」セクションで行うことができます。

最初の XNUMX つのスクリプトは、ターゲット ファイル システムが構築された後、イメージにパッケージ化される前に実行されます。 違いは、fakeroot スクリプトが fakeroot のコンテキストで実行され、root ユーザーとしての作業をシミュレートすることです。
最後のスクリプトは、システム イメージの作成後に実行されます。 ここで追加のアクションを実行できます。たとえば、必要なファイルを NFS サーバーにコピーしたり、デバイス ファームウェアのイメージを作成したりできます。
例として、バージョンとビルド日を /etc/ に書き込むスクリプトを作成します。
まず、外部ツリーでこのファイルへのパスを指定します。

そして、スクリプト自体は次のようになります。
[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アセンブリ後、このファイルはシステム上で確認できます。
実際には、スクリプトが大きくなる可能性があります。 したがって、実際のプロジェクトでは、より高度な方法を採用しました。
- 実行するスクリプトが含まれるディレクトリ (my_tree/board_my_x86_board/inside_fakeroot_scripts) を作成し、シリアル番号を付けました。 たとえば、0001-add-my_small_linux-version.sh、0002-clear-apache-root-dir.sh
- このディレクトリを経由して、そこに含まれるスクリプトを順番に実行するスクリプト (my_tree/board_my_x86_board/run_inside_fakeroot.sh) を作成しました。
- [システム構成] -> [fakeroot 環境内で実行するカスタム スクリプト] ($(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/run_inside_fakeroot.sh) セクションのボード設定でこのスクリプトを指定しました。
出所: habr.com
