準備編
設定ファイル作成編
KernelのBuild編 ←いまココ
試行錯誤編
kernel buildの設定
nerves_defconfig
のkernelの設定は、M5の設定を使い、次の様な記述にしました。
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_TARBALL=y
BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,STMicroelectronics,linux)v5.15-stm32mp-r2.1.tar.gz"
BR2_LINUX_KERNEL_DEFCONFIG="multi_v7"
BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="$(LINUX_DIR)/arch/arm/configs/fragment-01-multiv7_cleanup.config $(LINUX_DIR)/arch/arm/configs/fragment-02-multiv7_addons.config $(NERVES_DEFCONFIG_DIR)/m5stack/linux-disable-etnaviv.config $(NERVES_DEFCONFIG_DIR)/m5stack/linux-enable-fbdev-emul.config $(NERVES_DEFCONFIG_DIR)/m5stack/linux-enable-m5stack.config $(NERVES_DEFCONFIG_DIR)/m5stack/fragment-03-systemd.config"
BR2_LINUX_KERNEL_DTS_SUPPORT=y
BR2_LINUX_KERNEL_DTB_OVERLAY_SUPPORT=y
BR2_LINUX_KERNEL_INSTALL_TARGET=y
BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y
BR2_LINUX_KERNEL_CUSTOM_DTS_PATH="$(NERVES_DEFCONFIG_DIR)/m5stack/linux-dts/*"
BR2_LINUX_KERNEL_INTREE_DTS_NAME="stm32mp135f-coremp135"
Kernelは、STMicroelectronicsのリポジトリからダウンロードしています。
nerves_system_osd32mp1
では、kernel.orgのLinux kernelを使用、nerves_system_rpi4
は、raspberrypi提供のカーネルを使用していました。
kernel.orgのLinux kernelが使えれば、その方が良いかもしれませんが、ハードウエアに適したカーネルを使う事が重要だと思います。
今回は、このままで進めます。
カーネルの設定の方法は、BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE
に記述する方法もありますが、M5の設定を踏襲して、BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES
に記述する方法をとっています。
fragment-03-systemd.config等は、Nervesを使う場合は不要かもしれません。M5固有のハードウエアに関する記述は、残し、それ以外の設定は、Nervesとして必要なものに限定しても大丈夫だとおもいます。
予期しない問題があるかもしれないので、実績のあるM5の設定でまず動作させてみることにします。
パッチのあて方
buildrootはパッケージのビルドを次の順に行います。
- パッケージのダウンロード
- パッケージの展開
- パッチのあてる
- パッケージのビルド
nerves_defconfig
には、BR2_GLOBAL_PATCH_DIR
という変数があり、ここにパッケージ名をディレクトリ名として、パッチを置く事で、パッチをあてる事ができます。
Nervesの設定では、
BR2_GLOBAL_PATCH_DIR="${BR2_EXTERNAL_NERVES_PATH}/patches"
となっています。
arm-trusted-firmwareとopteeに当てるパッチがあるので、nerves_system_m5stack_core_mp135
にpatches
ディレクトリを作成して、パッチを保存します。
このパッチも適用されるように、パスを追加します。
BR2_GLOBAL_PATCH_DIR="${BR2_EXTERNAL_NERVES_PATH}/patches ${NERVES_DEFCONFIG_DIR}/patches"
${NERVES_DEFCONFIG_DIR}
は、nerves_system_m5stack_core_mp135
のディレクトリを意味しています。
buildしてみる
mix firmwareを実行すると、buildrootのビルドが実行されます。
buildrootが成功すればfirmwareの作成まで実行されますが、開発中は、途中で止まる事も多々あるとおもいます。
その場合の対処方法を説明します。
buildrootは、.nerves/artifacts
にビルドされたファイルが保存されます。
具体的には、次のようなディレクトリに保存されます。
/path/nerves_system_m5stack_core_mp135/.nerves/artifacts/nerves_system_m5stack_core_mp135-portable-0.0.1
このディレクトリに移動して、make
を実行する事で、buildrootのビルドを再実行する事ができます。
再実行して、エラーメッセージを確認したりできます。
このポーティングでは、u-bootのプログラムでLCDディスプレイにNervesのロゴを表示するようにしました。
この対応で何度か、u-bootのビルドをやり直して試す必要がありました。
その時には、u-bootパッケージが、build/u-boot-custom/に展開されているので、このディレクトリを削除して、make
を実行する事で、u-bootパッケージだけがビルドされ、ビルド時間を短縮できました。
他には、make linux-rebuild
を実行するとlinuxカーネルのリビルドを行えます。Linuxのドライバー部分だけ再作成したい時などに役立ちます。
buildのプロセスが完了できたら、mix firmware
を実行して、firmwareを作成します。