KUMICO

COLUMN

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

前回は、使用するBuildrootのアップデートを行いましたが、カーネルは古いままとなっていましたので、今回はカーネルのバージョンを上げようと思います。

アプリケーション等のバージョンの確認

カーネルのバージョンが変わっていないのだから、他のアプリケーション等のバージョンも変わっていないのでは? と思われるかもしれませんが、カーネルとアプリケーション等とでは使用するソースコードの指定方法が異なっており、カーネルの方は「<name>_defconfig」ファイルで指定していますが、アプリケーション等の方はBuildrootのディレクトリ配下にある「package」ディレクトリ内で指定されているため、使用するBuildrootのバージョンを変更するとそれに追従してアプリケーション等のバージョンも変わります。

本コラムでは、省メモリ版のsshソフトである「dropbear」がインストール済みとなっているイメージファイルを作ってきましたので、「dropbear」のバージョンが変わっているか確認してみることにします。

元のバージョンである、「buildroot-2019.02.5 版」の方から、バージョンを確認してみます。

É}1.dropbearâoü[âWâçâôö╘ìåèmöF

図 1 dropbearバージョン番号確認

「/etc/os-release」ファイルは、元になったBuildrootのバージョン情報が記載されていますのでその情報も表示しています。

次に、新しいバージョンの方である「buildroot-2020.02.7 版」でのバージョンを確認してみます。
É}2.dropbearâoü[âWâçâôò╧ìXèmöF

図 2 dropbearバージョン変更確認

「dropbear」のバージョンが「v2018.76」から「v2019.78」に変更されていますので、使用するBuildrootを変えるとアプリケーションのバージョンも変わることが確認できました。

カーネルのバージョンを上げる

カーネルのバージョンが古いままなのは、Buildrootの設定変更に使用した設定ファイル(「<name>_defconfig」)にある、カーネルのバージョンに関する定義を変更しないまま使用したので、本コラムで使用していた古い方(buildroot-2019.02.5 版で採用されていた)のカーネルが採用されたためです。

Buildrootは「make」を実行してイメージファイルを作る際に、設定ファイルで定義された内容に従い必要なソースコード等のパッケージのダウンロードを行いますので、古い方のBuildrootのディレクトリを参照したわけではありません。

カーネルのバージョンを上げるには、Buildrootの設定変更に使用した設定ファイルからカーネルのバージョンに関する定義を見つけなければなりませんので、設定ファイルの内容を確認してみます。

~$ cd ~/ buildroot-2020.02.7

~/buildroot-2020.02.7$ cat ~/br2-external/configs/column_br_defconfig
BR2_aarch64=y
BR2_ARM_FPU_VFPV4=y
BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_14=y
・・・
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_TARBALL=y
BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION=”$(call github,raspberrypi,linux,83b3・・・c9a1c)/linux-83b36・・・c9a1c.tar.gz”
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE=”~/br2-external/configs/column_kernel.config”
BR2_LINUX_KERNEL_DTS_SUPPORT=y
BR2_LINUX_KERNEL_INTREE_DTS_NAME=”broadcom/bcm2710-rpi-3-b broadcom/bcm2710-rpi-3-b-plus broadcom/bcm2837-rpi-3-b”
・・・

本コラムでは、設定ファイル「<name>_defconfig」を「column_br_defconfig」とし、「~/br2-external/configs」ディレクトリに保存されていることとします。

buildroot-2019.02.5とbuildroot-2020.02.7はホームディレクトリに解凍されていることとします。

カーネルのバージョンに関係していそうな「BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_14」や「BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION」という項目が見つかりますが、設定すべき値がわかりませんので使用した設定ファイル「column_br_defconfig」の元になった「raspberrypi3_64_defconfig」を参照して設定すべき値を探します。

「buildroot-2019.02.5」と「buildroot-2020.02.」」の「raspberrypi3_64_defconfig」を比較すると、変更された項目と設定すべき値がわかりますので二つのファイルを比較してみます。

~/buildroot-2020.02.7$ diff ~/buildroot-2019.02.5/configs/raspberrypi3_64_defconfig ~/buildroot-2020.02.7/configs/raspberrypi3_64_defconfig

9,10c9,10
< # Linux headers same as kernel, a 4.14 series
< BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_14=y
‐‐‐
> # Linux headers same as kernel, a 4.19 series
> BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_19=y
14c14
< BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,raspberrypi,・・・
‐‐‐
> BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION=”$(call github,raspberrypi,・・・
20a21,22
> BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y
>
22d23
< # BR2_PACKAGE_RPI_FIRMWARE_INSTALL_DTB_OVERLAYS is not set
36c37
< BR2_ROOTFS_POST_SCRIPT_ARGS="--aarch64"
‐‐‐
> BR2_ROOTFS_POST_SCRIPT_ARGS=”–aarch64 –add-miniuart-bt-overlay”

「BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_14」と「BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION」の他にもいくつか変更されていることが確認できましたので、設定値を設定ファイル「column_br_defconfig」に反映させます。

  • 「BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_14」を「BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_19」に変更

  • 「BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION」は新しい値で上書き

  • 「# BR2_PACKAGE_RPI_FIRMWARE_INSTALL_DTB_OVERLAYS is not set」と記述されている行は削除

  • 「BR2_ROOTFS_POST_SCRIPT_ARGS」は新しい値で上書き

私の環境では必要なかったのですが、カーネルのビルドの際に “fatal error: openssl/bio.h. No such file or directory” のようなエラーメッセージが出力されてビルドに失敗した場合は、
「BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y」を設定ファイルに追加してください。

設定ファイルへの反映結果を確認してみます。

~/buildroot-2020.02.7$ egrep “BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4|BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION|BR2_PACKAGE_RPI_FIRMWARE_INSTALL_DTB_OVERLAYS|BR2_ROOTFS_POST_SCRIPT|BR2_TARGET_ROOTFS_EXT2_SIZE” ../br2-external/configs/column_br_defconfig

BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_19=y
BR2_ROOTFS_POST_SCRIPT_ARGS=”‐‐aarch64 ‐‐add-miniuart-bt-overlay”
BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION=”$(call github,raspberrypi,linux,64d0a9870ac14d5eb5253f67d984ae348eec1393)/linux-64d0a9870ac14d5eb5253f67d984ae348eec1393.tar.gz”
BR2_TARGET_ROOTFS_EXT2_SIZE=”240M”

私の環境では以下のようなエラーメッセージが出力されてイメージファイルが生成されなかったため、「BR2_TARGET_ROOTFS_EXT2_SIZE」の値を変更しています。

「 *** Maybe you need to increase the filesystem size (BR2_TARGET_ROOTFS_EXT2_SIZE)
fs/ext2/ext2.mk:46: recipe for target ‘/home/・・・’ failed 」

設定ファイルの変更ができたのでイメージファイルの生成を行います。 現時点でのBuildrootの設定は古い方のカーネルをビルドするようになっていますので、変更した設定ファイルを使用してBuildrootの設定変更を行い、変更結果の確認をします。

~/buildroot-2020.02.7$ make BR2_EXTERNAL=~/br2-external column_br_defconfig
#
# configuration written to ~/buildroot-2020.02.7/.config
#
~/buildroot-2020.02.7$ diff -u .config.old .config | grep “+”

+BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_19=y
+# BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_14 is not set
+BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_15=y
+BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_16=y
+BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_17=y
+BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_18=y
+BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_19=y
+BR2_TOOLCHAIN_HEADERS_AT_LEAST=”4.19″
+BR2_ROOTFS_POST_SCRIPT_ARGS=”‐‐aarch64 ‐‐add-miniuart-bt-over
+BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION=”$(call github,raspb・・・
+BR2_LINUX_KERNEL_DTB_OVERLAY_SUPPORT=y
+BR2_PACKAGE_RPI_FIRMWARE_INSTALL_DTB_OVERLAYS=y
+BR2_TARGET_ROOTFS_EXT2_SIZE=”240M”

Buildrootの設定は「.config」ファイルに保存され、古い設定ファイルは「.config.old」というファイルに保存されていますので、内容の差分を見て設定が反映されたか確認しています。 
Buildrootの設定変更ができたのでイメージファイルの生成を行います。 本来であれば、変更分のみの再構築を行ってイメージファイルを生成してほしいのですが、Buildrootのドキュメントの「8.2. Understanding when a full rebuild is necessary」の記述によると、再構築箇所の検出は行わないということが書かれていますので、「make clean」を実行してシステム全体の構築をし直すことにします。

~/buildroot-2020.02.7$ make clean
~/buildroot-2020.02.7$ make
・・・
INFO: hdimage(sdcard.img): adding partition ‘boot’ (in MBR) from ‘boot.vfat’ …
INFO: hdimage(sdcard.img): adding partition ‘rootfs’ (in MBR) from ‘rootfs.ext4’ …
INFO: hdimage(sdcard.img): writing MBR
~/buildroot-2020.02.7$

ディスクイメージが生成されたので、マイクロSDに書き込んでRaspberryPiを起動してみます。
É▌ÆΦôαùeèmöFîïë╩

図 3 設定内容確認結果

カーネルのバージョンが、「4.14.95」ではなく、今回指定したバージョンの「4.19.97」になっていることが確認できました。 また、実は前回の状態では、RaspberryPiに直接ログインすることができず、sshを使用してログインしたのですが、今回の設定内容の見直しにより直接ログインできるようになりました。

カーネルのバージョンを変えるだけであれば、
「BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION」と
「BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_14」、
「BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_19」の変更だけでもできますが、RaspberryPiに直接ログインできるようにしたかったので、他の項目も変更することにしました。

今回は、設定ファイルの見直しを行うことでカーネルのバージョンの変更ができ、直接ログインの問題も解決したのですが、「BR2_ROOTFS_POST_SCRIPT_ARGS」の変更内容は「‐‐add-miniuart-bt-overlay」が追加されており、標準搭載されているBluetoothの機能に関して何か影響があるのかもしれませんので、機会があったらBluetoothや無線LAN等も取り上げていこうと思います。

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

個別相談会申し込み

関連記事

OTHER COLUMN

MORE  

まこちゃんブログ

NEWS

MORE  

PARTNER

  • Intel
  • Xilinx

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