KUMICO

COLUMN

【Linux Tipsシリーズ】平凡なソフトウェア開発者が自分Linuxを作ってみた ③

前回前々回とBuildrootの設定を変更してRaspberryPi3用ディスクイメージを作りました。 今回は、前々回に変更用のコマンドを紹介しただけとなっている、カーネルの設定変更を実際に行います。 そして、Buildrootの設定をBuildrootのディレクトリツリーの外に保存するということしてみようと思います。

カーネルの設定変更

カーネルの設定変更に関しては、前々回に変更用のコマンドを紹介しただけでしたが、今回は実際にカーネルの設定を変更して、変更した結果が反映されることを確認してみます。
カーネルの設定が変わっていることを確認する一番簡単と思われる方法は、 「/proc/configs.gz」 を参照することですが、ここでは「IPv6 ドライバ」をカーネル構成から外してみて、「ifconfig」コマンドの出力結果が変わることを確認します。

É}1図 1 ifconfig実行結果カーネルの設定を変える前に、「ifconfig」を実行して現在の状態を確認しておきます。出力情報に「inet6 addr: ・・・・」という出力があります。(図 1 ifconfig実行結果 参照)

IPv6に関するドライバが読み込まれて作動していることが確認できたので、「IPv6 ドライバ」をカーネル構成から外してみます。

「make linux-menuconfig」、「make linux-nconfig」、「make linux-xconfig」、「make linux-gconfig」のいずれかを実行して、カーネルの設定を開き、「Networking support」->「Networking options」と辿り、「The IPv6 protocol」を選択します。(図 2 IPv6設定 、図 3 IPv6設定詳細 参照)
É}2

図 2 IPv6設定

前回は「make linux-menuconfig」コマンドを紹介しましたが、ここでは、「make linux- xconfig」を使用しています。

É}3

図 3 IPv6設定詳細

「The IPv6 protocol」に付いているチェックを外して未選択状態にし、「保存」して終了します。(図 4 IPv6未選択状態 参照)
É}4

図 4 IPv6未選択状態

É}5図 5 ifconfig 実行結果カーネルの設定を変更したので、「make」を実行してイメージファイルを作成します。
イメージファイルは、Buildrootのディレクトリ配下の「output/images/」に「sdcard.img」というファイル名で生成されています。生成されたイメージファイルをマイクロSDに書き込んでRaspberryPiを起動し、ログイン後に「ifconfig」を実行してみます。(図 5 ifconfig 実行結果 参照)

前々回のコラムで、rootのパスワードを設定していますので、「buildroot login:」の箇所は“root”、「Password:」は“admin”と入力するとログインできます。

IPv6に関する情報が表示されていませんので、IPv6のドライバが外れていることが確認できました。

これまでの設定内容を保存する

前々回から今回までにBuildrootの設定や、Linuxカーネルの設定を変更してきましたが、変更内容はBuildrootのディレクトリツリーの中に保存されています。
これでは、前回紹介した「ルートファイルシステムオーバーレイ」の内容が違うだけなどの小さな変更をしたい場合でも、Buildrootのディレクトリツリーを複数保持することになりかねません。しかし、幸いなことに、Buildrootには、設定内容をBuildrootのディレクトリツリー内ではなく、外部に保存する方法が存在します。(Buildrootのドキュメントの「9.3. Storing the Buildroot configuration」及び「9.4. Storing the configuration of other components」 参照)

設定の保存先は、Buildrootの設定で指定することができ、「Buildroot」、「Linuxカーネル」のほかに、「Busybox」、「uClibc」、「Barebox」、「U-Boot」の設定を保存することができます。 本コラムでは、「Buildroot」と「Linuxカーネル」の設定をBuildrootのディレクトリツリーの外に保存してみます。

設定ファイルをBuildrootのディレクトリツリーの外に保存する前に、現在の状態を確認してみます。確認する項目は「BR2_DEFCONFIG」と「BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE」になります。
設定の確認だけなので、設定画面は開かずにBuildrootの設定ファイルを直接参照してみます。 Buildrootの設定ファイルは、Buildrootのディレクトリツリーの直下にある「.config」ファイルなので、そのファイルの「BR2_DEFCONFIG」と「BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE」の定義内容を表示してみます。

~$ cd ~/buildroot-2019.02.5
~/buildroot-2019.02.5$ egrep “BR2_DEFCONFIG|BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE” .config
BR2_DEFCONFIG=”/home/kumico/buildroot-2019.02.5/configs/raspberrypi3_64_defconfig”

今回のコラムは前回の続きなので、Buildrootはbuildroot-2019.02.05.tar.gzを使用し、ホームディレクトリに解凍されていることとします。 ここでは、ホームディレクトリは「/home/kumico」としています。

定義内容を表示してみると、「BR2_DEFCONFIG」の定義はされていますが、「BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE」は定義されていません。これは、Buildrootの設定が「BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE」を使用できない状態になっているためです。
「BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE」を使用するには、Buildrootの設定の「Kernel configration」を「BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG」に変更する必要があります。「make menuconfig」等を使用して、設定を変更してみましょう。

Buildrootの設定を開き、「Kernel」->「Kernel configration」と辿り、設定を「Using a custom (def) config file」に変更すると、「BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE」の設定である「Configuration file path :」が入力可能になるので、Linuxカーネルの設定ファイルとしたいファイル名を入力します。(図 6 BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE設定 参照)
É}6

図 6 BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE設定

本コラムでは、保存先を「~/br2-external/configs/column_kernel.config」としています。

Linuxカーネルの設定ファイルの入力が終わったら、「保存」して終了します。設定が保存されたか確認してみましょう。

~/buildroot-2019.02.5$ egrep “BR2_DEFCONFIG|BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE” .config
BR2_DEFCONFIG=”/home/kumico/buildroot-2019.02.5/configs/raspberrypi3_64_defconfig”
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE=”~/br2-external/configs/column_kernel.config”
~/buildroot-2019.02.5$

「BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE」に値が格納されているのが確認できましたが、この段階では、まだLinuxカーネルの設定は保存されていません。 保存を行うには、「make linux-update-defconfig」を実行する必要があります。また、保存を正常に行うには、「make linux-menuconfig」などを行い、設定ファイルをBuildrootのディレクトリツリー内に作成しておく必要があります。

~/buildroot-2019.02.5$ make linux-update-defconfig
PATH=”/home/kumico/buildroot-2019.02.5/output/host/bin: ・・・
・・・ HOSTCC=”/usr/bin/gcc” savedefconfig
scripts/kconfig/conf ––savedefconfig=defconfig Kconfig
cp -f /home/kumico/buildroot-2019.02.5/output/build/linux-custom/defconfig ~/br2-external/configs/column_kernel.config

「make linux-update-defconfig」が失敗する場合、Buildrootの設定で「BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES」の値を確認してください。 文字列が入っていた場合は削除後に「make linux-update-defconfig」を試してみてください。

Linuxカーネルの設定が保存されたので内容を確認してみます。今回はIPv6の設定を外していますので、ファイルを直接参照して、IPv6に関する定義を見てみます。

~/buildroot-2019.02.5$ grep IPV6 ~/br2-external/configs/column_kernel.config
# CONFIG_IPV6 is not set
~/buildroot-2019.02.5$

IPv6の設定が外れていることが確認できましたので、Linuxカーネルの設定の保存先を設定したBuildrootの設定を保存します。
保存は「make savedefconfig」で行いますが、そのままだとBuildrootのディレクトリツリーに保存されてしまいますので、変数「BR2_DEFCONFIG」に保存先ファイル名を指定して実行します。

~/buildroot-2019.02.5$ make savedefconfig BR2_DEFCONFIG=~/br2-external/configs/column_br_defconfig
~/buildroot-2019.02.5$

本コラムでは、保存先を「~/br2-external/configs/ column_br_defconfig」としています。

処理結果などは出力されませんので、出力された内容を確認して正常に出力されたかを確認します。

~/buildroot-2019.02.5$ cat ~/br2-external/configs/column_br_defconfig
BR2_aarch64=y
・・・
BR2_TARGET_GENERIC_ROOT_PASSWD=”admin”
BR2_ROOTFS_OVERLAY=”~/overlay_root”
BR2_ROOTFS_POST_BUILD_SCRIPT=”board/raspberrypi3-64/post-build.sh”
BR2_ROOTFS_POST_IMAGE_SCRIPT=”board/raspberrypi3-64/post-image.sh”
・・・
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE=”~/br2-external/configs/column_kernel.config”
・・・
BR2_PACKAGE_HOST_MTOOLS=y

これで、Buildrootの設定とLinuxカーネルの設定が保存できたので、Buildrootのディレクトリツリーの設定を変更しても「BR2_DEFCONFIG」変数にBuildrootの設定ファイルを指定して、「make defconfig」コマンドを実行する事で戻すことができます。

/buildroot-2019.02.5$ make defconfig BR2_DEFCONFIG=~/br2-external/configs/column_br_defconfig
#
# configuration written to /home/kumico/buildroot-2019.02.5/.config
#
~/buildroot-2019.02.5$

本コラムでは、BuildrootとLinuxカーネルの設定を取り上げましたが、ほかにも「Busybox」、「uClibc」、「Barebox」、「U-Boot」の設定もありますし、Linuxカーネルの設定には「IPv6」のほかにもいろいろとありますので、自分好みの設定をしてBuildrootのディレクトリツリー外に保存してみてください。

個別相談も承っております。下記よりお申し込みください。

個別相談会申し込み

関連記事

OTHER COLUMN

MORE  

まこちゃんブログ

NEWS

MORE  

PARTNER

  • Intel
  • Xilinx

お探しの組み込み製品はキーワードで検索!