このセクションでは、必要なカスタマイズ機能のいくつかを検討します。 これはbuildrootが提供するものの完全なリストではありませんが、非常に機能しており、buildroot自体のファイルに介入する必要はありません。
カスタマイズに外部メカニズムを使用する
前の記事では、ボードのdefconfigと必要なファイルをBuildrootディレクトリに直接追加して、独自の構成を追加する簡単な例を見てきました。
ただし、特に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ディレクトリには、ボードのdefconfigsが含まれています。 1つだけです。
パッケージ - パッケージを含むカタログ。 最初、buildrootには、限られた数のパッケージをビルドするための説明とルールが含まれています。 後で、ここでicewmウィンドウマネージャーとSlimグラフィカルログインマネージャーを追加します。
パッチ -さまざまなパッケージのパッチを便利に保存できます。 詳細については、以下の別のセクションをご覧ください。
次に、外部ツリーの記述ファイルを追加する必要があります。 これには、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
2行目は、人間が読み取れる簡単な説明です。
Config.in、external.mk-追加されたパッケージの説明用のファイル。 パッケージを追加しない場合、これらのファイルは空のままにしておくことができます。 これまでのところそうします。
これで、ボードのdefconfigと必要なファイルを含む外部ツリーの準備が整いました。 buildrootディレクトリに移動し、外部ツリーの使用を指定します。
[alexey@alexey-pc buildroot]$ make BR2_EXTERNAL=../my_tree/ my_x86_board_defconfig
最初のコマンドでは、外部ツリーの使用を示す引数BR2_EXTERNAL = .. / my_tree /を使用します。複数の外部ツリーを同時に使用するように指定できます。これを一度行うだけで、その後、出力/ .br-external.mkファイルが作成されます。使用される外部ツリーに関する情報:
[alexey@alexey-pc buildroot]$ cat output/.br-external.mk
重要! このファイルでは、パスは絶対になります!
外部オプション項目がメニューに表示されました:
このサブメニューには、外部ツリーからのパッケージが含まれます。 現在、このセクションは空です。
ここで、外部ツリーを使用するために必要なパスを書き換えることがより重要です。
[ビルドオプション]→[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を更新して別のディレクトリに移動するとき、最小限の問題が発生します。
ルートfsオーバーレイの追加:
このメカニズムにより、ターゲットファイルシステムのファイルを簡単に追加/置換できます。
ファイルがルートfsオーバーレイにあるが、ターゲットにない場合は、追加されます
ファイルがルートfsオーバーレイおよびターゲットにある場合は、置き換えられます。
最初に、ルートfsオーバーレイdirへのパスを設定します。 これは、[システム構成]→[ルートファイルシステムオーバーレイディレクトリ]セクションで行います。
$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/rootfs_overlay/
次に、2つのファイルを作成しましょう。
[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ファイルを置き換えます。 2番目のファイル(cat my_tree / board / my_x86_board / rootfs_overlay / new_file.txt)が追加されます。
以下を収集して確認します。
システムアセンブリのさまざまな段階でのカスタマイズスクリプトの実行
多くの場合、イメージにパッケージ化する前に、ターゲットファイルシステム内でいくつかのアクションを実行する必要があります。
これは、システム構成セクションで実行できます。
最初の2つのスクリプトは、ターゲットファイルシステムを構築した後、イメージにパックする前に実行されます。 違いは、fakerootスクリプトがfakerootのコンテキストで実行され、rootユーザーからの作業をシミュレートすることです。
最後のスクリプトは、システムイメージの作成後に実行されます。 その中で追加のアクションを実行できます。たとえば、必要なファイルをnfsサーバーにコピーしたり、デバイスファームウェアのイメージを作成したりできます。
例として、バージョンとビルド日付を/ etc /に書き込むスクリプトを作成します。
最初に、外部ツリーでこのファイルへのパスを示します。
そして今、スクリプト自体:
[alexey@alexey-pc buildroot]$ cat ../my_tree/board/my_x86_board/bef_cr_fs_img.sh
アセンブリ後、システムでこのファイルを確認できます。
実際には、スクリプトは大きくなる可能性があります。 したがって、実際のプロジェクトでは、より高度な方法で進めました。
- ディレクトリ(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)