1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Nerves】M5Stack Core MP135にポーティングしてみた(KernelのBuild編)

Last updated at Posted at 2024-11-27

準備編
設定ファイル作成編
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_mp135patchesディレクトリを作成して、パッチを保存します。
このパッチも適用されるように、パスを追加します。

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を作成します。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?