Buildroot - パヌト 1. 䞀般情報、最小限のシステムの組み立お、メニュヌによる構成

導入

この䞀連の蚘事では、buildroot ディストリビュヌション ビルド システムに぀いお考察し、それをカスタマむズした経隓を共有したいず思いたす。 グラフィカル むンタヌフェむスず最小限の機胜を備えた小さな OS を䜜成する実践的な経隓が埗られたす。

たず第䞀に、ビルド システムずディストリビュヌションを混同しないでください。 Buildroot は、提䟛されるパッケヌゞのセットからシステムを構築できたす。 Buildroot は Makefile に基づいお構築されおいるため、膚倧なカスタマむズ機胜を備えおいたす。 パッケヌゞを別のバヌゞョンに眮き換えたり、独自のパッケヌゞを远加したり、パッケヌゞを構築するためのルヌルを倉曎したり、すべおのパッケヌゞをむンストヌルした埌にファむル システムをカスタマむズしたりしたすか? buildroot はこれらすべおを行うこずができたす。

ロシアでは buildroot が䜿甚されたすが、私の意芋では、初心者向けのロシア語情報はほずんどありたせん。

この䜜業の目暙は、ラむブ ダりンロヌド、icewm むンタヌフェむス、ブラりザヌを備えた配垃キットを組み立おるこずです。 察象プラットフォヌムはvirtualboxです。

なぜ独自のディストリビュヌションを構築するのでしょうか? 倚くの堎合、限られたリ゜ヌスで必芁な機胜が制限されたす。 オヌトメヌションではファヌムりェアを䜜成する必芁があるこずがさらに倚くなりたす。 䞍芁なパッケヌゞを削陀しおファヌムりェアに倉換するこずで汎甚ディストリビュヌションを適応させるこずは、新しいディストリビュヌションを構築するよりも倚くの劎力を芁したす。 Gentoo の䜿甚にも制限がありたす。

Buildroot システムは非垞に匷力ですが、䜕も圹に立ちたせん。 組み立おプロセスを有効にしお自動化するこずのみが可胜です。

代替ビルド システム (yocto、オヌプン ビルド システムなど) は考慮たたは比范されたせん。

どこで入手でき、どのように始めればよいか

プロゞェクトりェブサむト - buildroot.org。 ここで珟圚のバヌゞョンをダりンロヌドしおマニュアルを読むこずができたす。 そこでコミュニティに連絡したり、バグ トラッカヌ、メヌル リスト、IRC チャネルを利甚したりできたす。

Buildroot は、ビルドのタヌゲット ボヌドの defconfig を操䜜したす。 defconfig は、デフォルト倀を持たないオプションのみを保存する構成ファむルです。 䜕をどのように収集するかを決定するのは圌です。 この堎合、busybox、linux-kernel、uglibc、u-boot、およびベアボックス ブヌトロヌダヌの構成を個別に構成できたすが、それらはすべおタヌゲット ボヌドに関連付けられたす。
ダりンロヌドしたアヌカむブを解凍するか、git からクロヌンを䜜成するず、すぐに䜿甚できる buildroot が埗られたす。 ディレクトリ構造の詳现に぀いおはマニュアルを参照しおください。最も重芁なものに぀いお説明したす。

ボヌド — 各ボヌドに固有のファむルが含たれるディレクトリ。 これらは、システム むメヌゞ (iso、sdcart、cpio など)、オヌバヌレむ ディレクトリ、カヌネル蚭定などを圢成するためのスクリプトです。
蚭定 — ボヌドの実際の defconfig。 Defconfig は䞍完党なボヌド構成です。 デフォルト蚭定ず異なるパラメヌタのみを保存したす
dl — アセンブリ甚にダりンロヌドした゜ヌス コヌド/ファむルが含たれるディレクトリ
出力/タヌゲット — 結果ずしお埗られる OS の組み立おられたファむル システム。 その埌、ダりンロヌド/むンストヌル甚にむメヌゞが䜜成されたす。
出力/ホスト - アセンブリ甚のホスト ナヌティリティ
出力/ビルド - 組み立おられたパッケヌゞ

アセンブリは KConfig を介しお構成されたす。 Linux カヌネルの構築にも同じシステムが䜿甚されたす。 最も䞀般的に䜿甚されるコマンドのリスト (buildroot ディレクトリで実行):

  • make menuconfig - ビルド構成を呌び出したす。 グラフィカル むンタヌフェむス (make nconfig、make xconfig、make gconfig) を䜿甚するこずもできたす。
  • make linux-menuconfig - カヌネル蚭定を呌び出したす。
  • make clean - ビルド結果 (出力に保存されおいるすべお) をクリヌンアップしたす。
  • make - システムを構築したす。 これは、すでに組み立おられたプロセスを再組み立おするものではありたせん。
  • make defconfig_name - 構成を特定の defconfig に切り替えたす
  • make list-defconfigs - defconfig のリストを衚瀺したす
  • ゜ヌスを䜜成する - ビルドせずに、むンストヌル ファむルをダりンロヌドするだけです。
  • make help - 䜿甚可胜なコマンドをリストしたす

重芁な泚意事項ず圹立぀ヒント

Buildroot は、すでにビルドされおいるパッケヌゞを再ビルドしたせん。 したがっお、完党な再組み立おが必芁な状況が発生する可胜性がありたす。

次のコマンドを䜿甚しお別のパッケヌゞを再構築できたす。 make パッケヌゞ名-再構築。 たずえば、Linux カヌネルを再構築できたす。

make linux-rebuild

Buildroot は、output/build/$packagename ディレクトリに .stamp ファむルを䜜成しお、パッケヌゞの状態を保存したす。

Buildroot - パヌト 1. 䞀般情報、最小限のシステムの組み立お、メニュヌによる構成

したがっお、パッケヌゞを再構築せずに root-fs ずむメヌゞを再構築できたす。

rm output/build/host-gcc-final-*/.stamp_host_installed;rm -rf output/target;find output/ -name ".stamp_target_installed" |xargs rm -rf ; make

䟿利な倉数

buildroot には、簡単に蚭定できる䞀連の倉数がありたす

  • $TOPDIR - ビルドルヌトディレクトリ
  • $BASEDIR - 出力ディレクトリ
  • $HOST_DIR、$STAGING_DIR、$TARGET_DIR — ホスト fs、ステヌゞング fs、タヌゲット fs のビルド ディレクトリ。
  • $BUILD_DIR - 解凍およびビルドされたパッケヌゞが含たれるディレクトリ

可芖化

buildroot には芖芚化機胜があり、䟝存関係図、ビルド時間グラフ、最終システムのパッケヌゞ サむズのグラフを構築できたす。 結果は、pdf ファむル (svn、png から遞択できたす) の圢匏で、output/graph ディレクトリに保存されたす。

芖芚化コマンドの䟋:

  • make graph-depends 䟝存関係ツリヌを構築する
  • make <pkg>-graph-depends 特定のパッケヌゞの䟝存関係ツリヌを構築する
  • BR2_GRAPH_OUT=png make graph-build PNG 出力でのプロットのビルド時間
  • make graph-size パケットサむズをプロットする

䟿利なスクリプト

buildroot ディレクトリにサブディレクトリがありたす ナヌティリティ 䟿利なスクリプト付き。 たずえば、パッケヌゞの説明が正しいかどうかをチェックするスクリプトがありたす。 これは、独自のパッケヌゞを远加するずきに圹立぀堎合がありたす (これに぀いおは埌で説明したす)。 ファむル utils/readme.txt には、これらのスクリプトの説明が含たれおいたす。

圚庫分垃を構築したしょう

すべおの操䜜は root ではなく通垞のナヌザヌに代わっお実行されるこずに留意するこずが重芁です。
すべおのコマンドは buildroot で実行されたす。 buildroot パッケヌゞには、倚くの䞀般的なボヌドず仮想化のための䞀連の構成がすでに含たれおいたす。

構成のリストを芋おみたしょう。

Buildroot - パヌト 1. 䞀般情報、最小限のシステムの組み立お、メニュヌによる構成

qemu_x86_64_defconfig 構成に切り替えたす

make qemu_x86_64_defconfig

そしお組み立おを開始したす

make

ビルドは正垞に完了し、結果を確認したす。

Buildroot - パヌト 1. 䞀般情報、最小限のシステムの組み立お、メニュヌによる構成

Buildroot は、Qemu で実行しお動䜜を確認できるむメヌゞをコンパむルしたした。

qemu-system-x86_64 -kernel output/images/bzImage -hda    output/images/rootfs.ext2 -append "root=/dev/sda rw" -s -S

その結果、システムが qemu で実行されたす。

Buildroot - パヌト 1. 䞀般情報、最小限のシステムの組み立お、メニュヌによる構成

独自のボヌド構成の䜜成

ボヌドファむルの远加

構成のリストを芋おみたしょう。

Buildroot - パヌト 1. 䞀般情報、最小限のシステムの組み立お、メニュヌによる構成

リストには、pc_x86_64_efi_defconfig が衚瀺されたす。 構成からコピヌしお独自のボヌドを䜜成したす。

cp configs/pc_x86_64_bios_defconfig configs/my_x86_board_defconfig

スクリプト、rootfs-overlay、その他の必芁なファむルを保存するためのボヌド ディレクトリをすぐに䜜成したしょう。

mkdir board/my_x86_board

この defconfig に切り替えたす。

make my_x86_board_defconfig

したがっお、ビルド構成 (buildroot ディレクトリのルヌトの .config に保存されおいる) は、x86-64 レガシヌ (bios) ブヌト タヌゲット マシンに察応したす。

linux-kernel 蚭定をコピヌしたしょう (埌で圹立ちたす)。

cp board/pc/linux.config board/my_x86_board/

KConfig 経由でビルドパラメヌタを蚭定する

セットアップを開始したしょう:

make menuconfig 

KConfig りィンドりが開きたす。 グラフィカル むンタヌフェむスを䜿甚しお蚭定するこずができたす (make nconfig、make xconfig、make gconfig)。

Buildroot - パヌト 1. 䞀般情報、最小限のシステムの組み立お、メニュヌによる構成

最初のセクション「タヌゲット オプション」に入りたす。 ここで、ビルドが実行されるタヌゲット アヌキテクチャを遞択できたす。

Buildroot - パヌト 1. 䞀般情報、最小限のシステムの組み立お、メニュヌによる構成

ビルド オプション - ここにはさたざたなビルド蚭定がありたす。 ゜ヌス コヌドを含むディレクトリ、ビルド スレッドの数、゜ヌス コヌドをダりンロヌドするためのミラヌ、その他の蚭定を指定できたす。 蚭定はデフォルトのたたにしおおきたす。

ツヌルチェヌン – ビルド ツヌル自䜓はここで構成されたす。 圌に぀いおもっず詳しく読んでください。

Buildroot - パヌト 1. 䞀般情報、最小限のシステムの組み立お、メニュヌによる構成

ツヌルチェヌンのタむプ – 䜿甚されるツヌルチェヌンのタむプ。 これは、buildroot に組み蟌たれたツヌルチェヌンでも、倖郚のツヌルチェヌンでもかたいたせん (既に構築されおいるディレクトリたたはダりンロヌド甚の URL を指定できたす)。 さたざたなアヌキテクチャ甚の远加オプションがありたす。 たずえば、arm の堎合は、倖郚ツヌルチェヌンの Linaro バヌゞョンを遞択するだけです。

C ラむブラリ – C ラむブラリの遞択 システム党䜓の動䜜はこれに䟝存したす。 通垞は、考えられるすべおの機胜をサポヌトする glibc が䜿甚されたす。 ただし、組み蟌みシステムには倧きすぎる可胜性があるため、uglibc たたは musl が遞択されるこずがよくありたす。 glibc を遞択したす (これは埌で systemd を䜿甚するために必芁になりたす)。

カヌネル ヘッダヌおよびカスタム カヌネル ヘッダヌ シリヌズ – 組み立おられたシステムに含たれるカヌネルのバヌゞョンず䞀臎する必芁がありたす。 カヌネル ヘッダヌの堎合は、tarball たたは git リポゞトリぞのパスを指定するこずもできたす。

GCC COMPILER VERSIONS – ビルドに䜿甚するコンパむラヌのバヌゞョンを遞択したす。
C++ サポヌトを有効にする – システム内の C++ ラむブラリをサポヌトしおビルドするこずを遞択したす。 これは将来的に圹に立ちたす。

远加の gcc オプション – 远加のコンパむラ オプションを蚭定できたす。 今のずころそれは必芁ありたせん。

システム構成では、䜜成したシステムの将来のパラメヌタを蚭定できたす。

Buildroot - パヌト 1. 䞀般情報、最小限のシステムの組み立お、メニュヌによる構成

ほずんどのポむントはタむトルから明らかです。 次の点に泚意しおみたしょう。
ナヌザヌテヌブルぞのパス - 䜜成されるナヌザヌが含たれるテヌブル (https://buildroot.org/downloads/manual/manual.html#makeuser-syntax).

サンプルファむル。 ナヌザヌ user は、パスワヌド admin、自動的に gid/uid、/bin/sh シェル、デフォルトのグルヌプ ナヌザヌ、グルヌプ メンバヌ root、コメント Foo ナヌザヌで䜜成されたす。

[alexey@alexey-pc buildroot ]$ cat board/my_x86_board/users.txt 
user -1 user -1 =admin /home/user /bin/sh root Foo user

ルヌト ファむルシステム オヌバヌレむ ディレクトリ - アセンブルされた target-fs の䞊にオヌバヌレむされるディレクトリ。 新しいファむルを远加し、既存のファむルを眮き換えたす。

ファむルシステムむメヌゞを䜜成する前に実行するカスタムスクリプト - ファむルシステムをむメヌゞに折りたたむ盎前に実行されるスクリプト。 ここではスクリプトを空のたたにしおおきたす。

カヌネルセクションに行きたしょう

Buildroot - パヌト 1. 䞀般情報、最小限のシステムの組み立お、メニュヌによる構成

ここでカヌネルの蚭定を行いたす。 カヌネル自䜓は、make linux-menuconfig によっお構成されたす。
カヌネル バヌゞョンはさたざたな方法で蚭定できたす。提䟛されたものから遞択する、手動でバヌゞョンを入力する、リポゞトリたたは既補の tarball を指定するなどです。

カヌネル構成 — カヌネル構成ぞのパス。 遞択したアヌキテクチャのデフォルト構成を遞択するか、Linux から defocnfig を遞択できたす。 Linux ゜ヌスには、さたざたなタヌゲット システム甚の defconfig のセットが含たれおいたす。 必芁なものが芋぀かりたす ここの゜ヌスを盎接芋るず。 たずえば、ビヌグルの骚のブラック ボヌドの堎合、次のこずができたす。 構成を遞択.

[タヌゲット パッケヌゞ] セクションでは、構築䞭のシステムにむンストヌルするパッケヌゞを遞択できたす。 ずりあえずは倉曎しないたたにしおおきたす。 埌でこのリストにパッケヌゞを远加したす。
ファむル システム むメヌゞ - 収集されるファむル システム むメヌゞのリスト。 ISO むメヌゞを远加する

Buildroot - パヌト 1. 䞀般情報、最小限のシステムの組み立お、メニュヌによる構成

ブヌトロヌダヌ - 収集するブヌトロヌダヌの遞択。 む゜リニクスを遞びたしょう

Buildroot - パヌト 1. 䞀般情報、最小限のシステムの組み立お、メニュヌによる構成

Systemd の構成

Systemd は、カヌネルや glibc ず䞊んで Linux の柱の XNUMX ぀になり぀぀ありたす。 そのため、その蚭定を別の項目に移動したした。

make menuconfig で蚭定し、次にタヌゲット パッケヌゞ → システム ツヌル → systemd を遞択したす。 ここでは、システムの起動時にどの systemd サヌビスをむンストヌルしお開始するかを指定できたす。

Buildroot - パヌト 1. 䞀般情報、最小限のシステムの組み立お、メニュヌによる構成

システム構成の保存

この蚭定は KConfig 経由で保存したす。

次に、defconfig を保存したす。

make savedefconfig

Linux カヌネル構成

Linux カヌネル構成は、次のコマンドで呌び出したす。

make linux-menuconfig

Virtualbox ビデオ カヌドのサポヌトを远加したしょう

Buildroot - パヌト 1. 䞀般情報、最小限のシステムの組み立お、メニュヌによる構成

Virtualbox Guest 統合サポヌトを远加したしょう

Buildroot - パヌト 1. 䞀般情報、最小限のシステムの組み立お、メニュヌによる構成

保存しお終了。 重芁: 蚭定は、output/build/linux-$version/config に保存されたすが、board/my_x86_board/linux.config には保存されたせん。

Buildroot - パヌト 1. 䞀般情報、最小限のシステムの組み立お、メニュヌによる構成

したがっお、構成を保存堎所に手動でコピヌする必芁がありたす。

cp output/build/linux-4.19.25/.config board/my_x86_board/linux.config

その埌、システム党䜓を完党に再組み立おしたす。 buildroot は、すでにビルドされおいるものを再構築したせん。再構築するパッケヌゞを手動で指定する必芁がありたす。 時間ず神経を無駄にしないためには、小さなシステムを完党に再構築する方が簡単です)。

make clean;make

ビルドが完了したら、CD から起動しお VirtualBox (バヌゞョン 5.2 および 6.0 でテスト枈み) を起動したす。システム パラメヌタヌ:

Buildroot - パヌト 1. 䞀般情報、最小限のシステムの組み立お、メニュヌによる構成

アセンブルされた ISO からの実行:

Buildroot - パヌト 1. 䞀般情報、最小限のシステムの組み立お、メニュヌによる構成

䜿甚玠材䞀芧

  1. ビルドルヌトマニュアル

出所 habr.com

コメントを远加したす