COLUMN
【Linux Tipsシリーズ】平凡なソフトウェア開発者が自分Linuxを作ってみた ④
今回のコラムも、前回と同じくBuildrootに関する内容となります。前回は、「カーネルの設定変更」と「設定内容の保存」を行いました。
今回は、前回の「これまでの設定内容を保存する」に手を加えて、「br2-externalツリー」を作り、保存した設定内容を簡単に読み込めるようにしてみようと思います。
br2-external ツリーを作る
「br2-externalツリー」を作るには、Buildrootのドキュメントの「9.2.1. Layout of a br2-external tree」を参考に、「external.desc」、「external.mk」、「Config.in」を含む「br2-external ツリー」と呼ばれるディレクトリツリーを作る必要があります。
-
※
-
ここでは前回のコラムでホームディレクトリに作成した br2-externalディレクトリを使用します。
「external.desc」は、「br2-externalツリー」の名前と説明を記述するファイルとなっていて、各行の行頭はキーワードで始まり、その後にコロンと一つ以上のスペースを付けてキーワードの値を記述するようになっています。( リスト 1 external.desc 参照 )
リスト 1 external.desc
name: KUMICO_BR2
desc: br2-external sample for KUMICO
-
※
-
nameで始まっている行が、「br2-externalツリー」の名前の定義で、desc で始まっている
行が説明の定義となっています。 -
※
-
name に使用できる文字種には制限があり、ASCII文字のアルファベットの大文字と
小文字( A ~ Z , a ~ z )及び数字( 0 ~ 9 )とアンダースコア( _ )となっています。 -
※
-
descはオプションなので記述しなくても良いですが、記述する場合は1行で記述する
必要があります(推奨は40文字以下です)。nameと違い使用できる文字に制限はありません。
「external.mk」と「Config.in」は、独自のパッケージをBuildrootに組み込む場合に記述することになります。今回は独自のパッケージを組み込みませんが、ファイル自体は必要なので中身は空のファイルを用意します。
ここまでの手順をLinuxのコマンドにすると、以下のようになります。
~$ cd
~$ mkdir br2-external
~$ cd br2-external/
~/br2-external$ vi external.desc
~/br2-external$
~/br2-external$ cat external.desc
name:KUMICO_BR2
desc:br2-external sample for KUMICO
~/br2-external$
~/br2-external$ touch external.mk
~/br2-external$ touch Config.in
~/br2-external$ mkdir configs
br2-external ツリーのパスを設定する
「br2-externalツリー」を作成しただけでは、Buildrootは「br2-externalツリー」を参照してくれません。Buildrootに「br2-externalツリー」のパスを設定することで、参照されるようになります。
Buildrootに「br2-externalツリー」のパスを設定するには、「make」を行う際に、変数「BR2_EXTERNAL」に「br2-externalツリー」のパスを指定するとできます。
以下のコマンドを入力することで、「br2-externalツリー」のパスが設定され、且つBuildrootの設定画面が表示されます。(図 1 Buildroot BR2-EXTERNAL設定画面 参照)
~$ cd ~/buildroot-2019.02.5
~/buildroot-2019.02.5$ make BR2_EXTERNAL=~/br2-external xconfig
-
※
-
今回のコラムは前回の続きなので、Buildrootはbuildroot-2019.02.05.tar.gzを使用し、
ホームディレクトリに解凍されていることとします。また、「br2-externalツリー」の
パスは「~/br2-external」としています。
図 1 Buildroot BR2-EXTERNAL設定画面
コマンドが正常に実行されたら、Buildrootの設定項目に「External options」という項目が追加され、「br2-externalツリー」のパスが設定されていますので(図 1 Buildroot BR2-EXTERNAL設定画面 参照)、「保存」して終了してください。
また、以下のようにBuildrootの「output」ディレクトリ内の「.br-external.mk」に「br2-externalツリー」の情報が保存され、以降は「BR2_EXTERNAL」を指定しなかった場合にこの設定が使用されるようになります。
~/buildroot-2019.02.5$ cat output/.br-external.mk
#
# Automatically generated file; DO NOT EDIT.
#
BR2_EXTERNAL ?= /home/kumico/br2-external
BR2_EXTERNAL_NAMES =
BR2_EXTERNAL_DIRS =
BR2_EXTERNAL_MKS =
BR2_EXTERNAL_NAMES += KUMICO_BR2
BR2_EXTERNAL_DIRS += /home/kumico/br2-external
BR2_EXTERNAL_MKS += /home/kumico/br2-external/external.mk
export BR2_EXTERNAL_KUMICO_BR2_PATH = /home/kumico/br2-external
export BR2_EXTERNAL_KUMICO_BR2_DESC = br2-external sample for KUMICO
-
※
-
「.br-external.mk」ファイルは、Buildrootのディレクトリの直下にもありますが、
変更されるのは「output」フォルダ内のファイルです。
「br2-externalツリー」を使用しない状態に戻すには、「make」を行う際に変数「BR2_EXTERNAL」に何も設定しないようにします。
~$ cd ~/buildroot-2019.02.5
~/buildroot-2019.02.5$ make BR2_EXTERNAL= xconfig
br2-external ツリーが役立つようにする
「br2-externalツリー」に「external.desc」、「external.mk」、「Config.in」を作り、Buildrootにパスを設定しただけでは役に立ちません。「br2-externalツリー」を役立たせるには、今回作成したファイルの他に、前回「BR2_DEFCONFIG」変数に設定したBuildroot設定ファイルが必要になります。
前回、設定ファイルの保存先を「~/br2-external/configs」としたので、既にBuildrootの設定ファイルがあると思いますが、違う場所に保存した場合は「br2-externalツリー」に「configs」ディレクトリを作成し、「BR2_DEFCONFIG」変数に設定したファイルを「configs」ディレクトリにコピーしてください。また、設定ファイルのファイル名が、「_defconfig」で終了していない場合は、「_defconfig」で終了するようにしてください。
Buildrootは、「br2-externalツリー」直下の「configs」ディレクトリにある「<name>_defconfig」ファイルをBuildrootの設定ファイルとして認識するため、「configs」ディレクトリと「<name>_defconfig」ファイルが必要になります。
-
※
-
「<name>_defconfig」ファイルはファイ名の規則を示しています。
「<name>」部分はファイル名として使用可能な文字列であれば良いですが、ファイル名は「_defconfig」で終了している必要があります。また、「make list-defconfigs」を実行した際に表示される”raspberrypi0_defconfig”などの、Built-in configs も避けたほうが良いと思います。
「configs」ディレクトリと「<name>_defconfig」ファイルが、「br2-externalツリー」に正常に格納されているか確認してみましょう。
「br2-externalツリー」に正常に格納されているか確認するには、本コラムの1回目の「ビルド環境の構築」で使用したコマンドの「make list-defconfig」を使用します。
~$ cd
~$ cd buildroot-2019.02.5
~/buildroot-2019.02.5$ make BR2_EXTERNAL=~/br2-external list-defconfigs
Built-in configs:
aarch64_efi_defconfig – Build for aarch64_efi
acmesystems_aria_g25_128mb_defconfig – Build for acmesystems_aria_g25_128mb
・
・
・
zynqmp_zcu106_defconfig – Build for zynqmp_zcu106
External configs in “br2-external sample for KUMICO”:
column_br_defconfig – Build for column_br
-
※
-
今回のコラムは1回目の続きでもあるので、Buildrootはbuildroot-2019.02.05.tar.gzを使用し、ホームディレクトリに解凍されていることとします。
また、「br2-externalツリー」のパスは「~/br2-external」としています。 -
※
-
前回作成した設定ファイルのファイル名は「column_br_defconfig」です。
「External configs in ・・・」という表示がされ、「external.desc」ファイルに記述した内容と、設定ファイルのファイル名が表示されましたので、「br2-externalツリー」に「configs」ディレクトリと「<name>_defconfig」ファイルが格納された事が確認できました。
「make list-defconfig」での表示が確認できたので、本コラムの1回目の「ビルド環境の構築」でBuildrootの構成を変更したコマンドの「make raspberrypi3_64_defconfig」の代わりとして実行してみます。前回入力したコマンド(「make raspberrypi3_64_defconfig」)を実行してBuildrootの設定を初期状態に戻してから、「make <name>_defconfig」を実行します。
~/buildroot-2019.02.5$ make BR2_EXTERNAL= raspberrypi3_64_defconfig
#
# configuration written to ~/buildroot-2019.02.5/.config
#
~/buildroot-2019.02.5$
~/buildroot-2019.02.5$ egrep “BR2_TARGET_GENERIC_ROOT_PASSWD|BR2_ROOTFS_OVERLAY|BR2_PACKAGE_DROPBEAR” .config
BR2_TARGET_GENERIC_ROOT_PASSWD=””
BR2_ROOTFS_OVERLAY=””
# BR2_PACKAGE_DROPBEAR is not set
~/buildroot-2019.02.5$
~/buildroot-2019.02.5$ make BR2_EXTERNAL=~/br2-external column_br_defconfig
#
# configuration written to /home/yotubata/buildroot_work/buildroot-2019.02.5/.config
#
~/buildroot-2019.02.5$ egrep “BR2_TARGET_GENERIC_ROOT_PASSWD|BR2_PACKAGE_DROPBEAR” .config
BR2_TARGET_GENERIC_ROOT_PASSWD=”admin”
BR2_PACKAGE_DROPBEAR=y
BR2_PACKAGE_DROPBEAR_CLIENT=y
BR2_PACKAGE_DROPBEAR_DISABLE_REVERSEDNS=y
BR2_PACKAGE_DROPBEAR_SMALL=y
# BR2_PACKAGE_DROPBEAR_WTMP is not set
# BR2_PACKAGE_DROPBEAR_LASTLOG is not set
# BR2_PACKAGE_DROPBEAR_LEGACY_CRYPTO is not set
$
「make <name>_defconfig」を実行した結果、初期状態になっていたBuildrootの設定が本コラムで設定した状態に復元されました。
Buildrootの設定を復元するだけなら前回紹介した「make defconfig BR2_DEFCONFIG=設定ファイル名」でもできますが、Buildrootのドキュメントにある「Example layout」を見ると、「br2-externalツリー」にはBuildrootの設定の他にも格納することができそうですので、機会があったら「br2-externalツリー」のその他の効果についても取り上げていこうと思います。
個別相談も承っております。下記よりお申し込みください。