AWS(EC2)でSTM32MP1 用の組込みLinux(OpenSTLinux)をコンパイルした件

この記事はSTマイクロエレクトロニクス社のプロセッサ・STM32MP1の組込みLinux(OpenSTLinux)を AWSのEC2でコンパイル環境構築した際の記録です。

AWSで組込みLinuxコンパイルしたときにどの程度費用がかかるかざっくり知りたい方は参考になるかもしれません。

背景

 従来からシングルコアマイコンを使っていましたが、今後は機能要求・通信データ量の増加もあり、 マルチコアプロセッサを検討することになりました。

シングルコアの従来システムは画像処理しながらリアルタイムな通信処理をおこなっています。

現状システムから処理負荷分散を考えると

  • それほど厳密なリアルタイム性が求められない画像処理を担当するコア

  • リアルタイム性が求められる通信処理を担当するコア

のようにしたいと考えました。

そこで前述の要求を満たすことが可能なプロセッサとしてSTマイクロエレクトロニクス社のSTM32MP1を見つけました。

STM32MP1のCortex-Aコアで画像処理、Cortex-Mコアでリアルタイム処理を担当させることができれば良さそうと思いました。

STM32MP1は組込みLinux(OpenSTLinux)のうえで動くということでした。 そこでSTM32MP1の評価基板(STM32MP157C-DK2)を購入し、色々試してみることにしました。

情報収集

 STM32MP1の情報収集していき、次のセミナーに参加しました。

www.stmcu.jp

セミナーの資料はこちらのリンクにあります。

www.stmcu.jp

OpenSTLinuxコンパイル環境にはいくつか選択肢がありますが今回はAWSコンパイルすることにしました。

とてもわかりやすい・丁寧な資料で文中で紹介されている動画通りの手順で環境構築することが可能です。

AWSを開発環境に決定した理由

 当初はWindows PCにVirtualBoxをインストールし、ゲストOSにUbuntuの構成でコンパイルを試しました(OpenSTLinuxはUbuntuコンパイルする必要があります)。

しかし、Windows PC 2台でOpenSTLinuxのコンパイルを試しましたが2台ともに失敗しました。

推測ですが、

  • 1台目はPCスペック不足に起因する原因

  • 2台目はネットワーク環境に起因する原因(あるパッケージだけがダウンロードできなかった)

でした。

 そこでセミナー資料で紹介されていたAWS EC2でコンパイル環境構築を試すことにしました。

  ※OpenSTLinuxのコンパイルPCのスペックはこちらに記載されています。

wiki.st.com

  • 2 Recommended PC configurations

 次がコンパイルPCのスペックの抜粋です。

  • クロック:i5-2540M @ 2.6 GHz

  • RAM:8 Gbytes

  • 320 Gbytes

私の技術バックボーン

 OpenSTLinuxをAWSコンパイルすることを決めましたが、本件を試す前の私の技術バックボーンを紹介しておきます。

Linuxに関して

 組込みLinuxの開発経験はありません。Linuxコンパイルした経験もありません。Linuxのコマンドはなんとなく理解しているレベルです。

AWSに関して

 これまでAWSで開発環境を構築した経験はありません。

2019年11月にとあるセミナーでAWSアカウントを作成する必要がありAWSアカウントはつくっていました。 2021年6月に色々試したのですが、無料利用枠期間(1年間)も既に終了していました。

このような背景のため、本件の記事は最適な運用ができていない(無駄にお金を使っている)と思います。

後述する費用はあくまで参考、ということにご注意ください。

AWSを使うことの懸念

 「OpenSTLinuxをコンパイルするとどれくらいの費用がかかるのか」がわからないことでした。

調査・学習してからAWSで開発環境構築すれば良いかも思いましたが、知識・経験がほとんどない状態でとりあえず試してみることにしました。

結果

AWS請求費用

 合計で32.60ドルの費用がかかりました。

次の資料が費用の内訳です。 drive.google.com

費用概要

 EC2でUbuntu 18.04のサーバを構築したので、費用内訳の資料を見るとElastic Compute Cloudの部分に費用が集中しています。

OpenSTLinux環境構築

 結果としてOpenSTLinuxがコンパイル環境ができました。

OpenSTLinuxの起動イメージをコンパイルし、STM32MP1の評価基板(STM32MP157C-DK2)でOpenSTLinuxがブートできました。

OpenSTLinuxの作業内容

 OpenSTLinuxの環境構築は具体的に次の作業を行いました。

OpenSTLinuxのコンパイルに必要なツールをインストールします。   wiki.st.com

3.2 Installing extra packagesを実行します。

 OpenSTLinuxをコンパイルします。

wiki.st.com

5 Installing the OpenSTLinux distributionからの手順、

5.1 Initializing the OpenEmbedded build environment、

6 Building the OpenSTLinux distributionを実行します。

コンパイルですが6/11 23:20頃に開始し、6/12 9:49頃に確認したら正常終了していました。

コンパイル開始後10時間くらいには終了していました。

 SDKコンパイルは次の手順を実行しました。

wiki.st.com    SDKコンパイルは4時間ほどかかりました。

  • SDカード書き込みイメージの作成

 OpenSTLinuxのSDカード書き込みイメージを作成します。次の手順を実行しました。

How to populate the SD card with dd command - stm32mpu

感想

  • AWS費用の管理がザルでした。

  EC2インスタンスを使わないときも実行してしまっていました。

 EC2を一切使わないのにインスタンス実行中のまま2日間くらい放置してしまいました。

 EC2を使わないときはインスタンスを停止することで費用を抑えることができると思います。

 その辺のコストの感覚というか費用をおさえるために何をしなくてはいけないのかがわかっていませんでした。

 EC2でOpenSTLinux起動イメージができましたがそれをSDカードに書き込むのに少し面倒でした。

SDカードへの書き込みは次の手順で実施しました。

 ①EC2上にあるOpenSTLinux起動イメージをscpコマンドでローカルPCにダウンロード   ↓

 ②ローカルPCのOpenSTLinux起動イメージをSDカードに書き込み

ローカルPCにVirtualBox+Ubuntuで環境構築できていれば①の手順は必要ありません。

SDカードなどの物理的なストレージにOS起動イメージを書き込む際はひと手間必要なことがAWSを使ううえで少し面倒と感じました。

上記の点を差し引いてもAWSを使うメリットがあると思いますが知識がないためその辺が理解できていません。

最後に

 Linuxコンパイルもはじめて、AWSでサーバを立てるのもはじめてで、できるかどうか不安でしたがなんとかできました。

 これから組込み開発環境をAWSで構築しようと考えていた方のなにか参考になると嬉しいです。 

   最後まで読んでいただいてありがとうございました。