2
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にポーティングしてみた(設定ファイル作成編)

Posted at

レポジトリの作成

M5Stack CoreMP135のCPUは、STM社のSTM32MP135DAE7です。本家でサポートしている、OSD32MP1のCPUが、STM32MP1をベースにしたもので近そうなので、これをベースにすることにしました。

Nervesのドキュメントにある、custom_systemを作成する方法に従って、nerves_system_osd32mp1をコピーして、nerves_system_m5stack_core_mp135を作成しました。

@appに指定するのは、最終的にはパッケージ名にもなるので、nerves_system_XXXという形式にするのが良いと思います。

Buildできるか確認

この段階では、ビルドしても動作しませんが、ツールチェーンが一通り動作するか
Builiding the systemに従って、ビルドしてみます。

Nervesのプロジェクトを作成し、mix.exsを編集します。

mix nerves.new your_project

mix.exsの変更箇所

mix.exs
  #=vvv= Update your_project/mix.exs to accept your new :custom_rpi3 target

  # ...
  @all_targets [:osd32mp1, :m5stack_core_mp135]
  #                        =^^^^^^^^^^^^^^^^^^=

  defp deps do
    [
      # Dependencies for all targets
      # ...

      # Dependencies for specific targets
      {:nerves_system_osd32mp1, "~> 0.15", runtime: false, targets: :osd32mp1},

      # Add the entry below vvv
      {:m5stack_core_mp135,
       path: "../nerves_system_m5stack_core_mp135",
       runtime: false,
       targets: :m5stack_core_mp135,
       nerves: [compile: true]},
    ]
  end

buildrootのビルドが実行されるので結構時間がかかります。
私の場合は、メモリ32G、AMD Ryzen 7/NVMeのPCで、1時間くらいかかりました。

試しに、SDカードに書き込んで、起動してみましたが、何も起きませんでした。

Nerves_system_brの役割

buildrootは、LinuxOSのファームウエアを作成するツールです。
このツールでは、Linux OSが動作するのに必要なすべてのパッケージをビルドし一つのファームウエアを作成できます。
nerves_system_brの_brは、buildrootの略(だと思います)で、Nervesのファームウエアを作成する機能を提供するパッケージになります。

Nerves_system_brには、ターゲットによらない共通部分のパッケージが含まれています。
ターゲットによって異なる部分が、nerves_system_rpi0などの各ターゲットのパッケージになります。

ポーティングでは、このターゲットのパッケージを作成する事になります。

buildroot機能

buildrootは、SDカードに書き込むファームウエアイメージを作成します。
Linuxのカーネルだけでなく、ブートローダー、デバイスツリー、ルートファイルシステムなども含まれます。
アプリケーションとして、Elixirや、Nervesのプロセスも含まれます。
電源投入後から、LinuxOSが起動するまでの処理を順に書いてみるとつぎのような流れになります。

  • 電源投入
  • ROMに書かれたプログラムをCPUが実行
  • SDカードのブートセクタを読み込み(ハードウエアにより異なる)
  • ブートセクタからブートローダを読み込み
  • ブートローダがLinux Kernelを読み込み、Kernelを起動
  • カーネルがルートファイルシステムをマウント
  • Nervesプロセスの起動

ポーティングする上では、次の3段階を順に確認していくと良いと思います。

  • ブートローダー(U-Boot)が動作してKernelが起動すること
  • 起動したKernelが正しく動作すること
  • Nervesのプロセスが正しく起動すること

buildrootの設定

buildrootの設定は、nerves_system_m5stack_core_mp135nerves_defconfigで行います。
nerves_system_brがこの設定ファイルを参照していて、この設定ファイルに従って、ファームウエアが作成されます。
このファイルとこのファイルが参照するファイルを一通りそろえる事が、ポーティング作業になります。

M5Stack社の提供しているbuildrootの設定を参考にしながら、nerves_defconfigの内容どうするか検討します。

M5Stack社のbuildrootの設定(以下M5の設定とします)とnerves_system_osd32mp1のもの(以下Nervesの設定とします)を比較して、適切なものを選択していきます。

ブートローダの部分は、M5の設定では、ARM_TRUSTED_FIRMWAREパッケージが使われています。ARM_TRUSTED_FIRMWAREを使わない方法もあるのかもしれませんが、詳しくはCPUやROMの仕様を理解が必要になりそうです。まずは、M5の設定と同様にする事にしました。
カーネルについては、ドライバー関係で問題が起きないようにまずは、M5の設定を使う事にしました。

項目 Nervesの設定 M5の設定 どっちを使うか
実際のファイル defconfig nerves_defconfig -
toolchain nerves project buildroot Nervesの設定
カーネル kernel.orgのLinux stm社のgitのLinux M5の設定
ブートローダ buildrootのU-Bootパッケージ stm社のgitのU-Bootパッケージ。tf-aとかopteeもある M5の設定
デバイスツリー MP1用 MP135用 M5の設定
その他パッケージ - - Nervesの設定
2
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
2
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?