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の情報収集していき、次のセミナーに参加しました。
https://www.stmcu.jp/event/event-history/78332/

セミナーの資料はこちらのリンクにあります。
https://www.stmcu.jp/design/thirdparty/sw_hw_dev/78787/

OpenSTLinuxコンパイル環境にはいくつか選択肢がありますが今回はAWSでコンパイルすることにしました。
とてもわかりやすい・丁寧な資料で文中で紹介されている動画通りの手順で環境構築することが可能です。


# AWSを開発環境に決定した理由
当初はWindows PCにVirtualBoxをインストールし、ゲストOSにUbuntuの構成でコンパイルを試しました(OpenSTLinuxはUbuntuでコンパイルする必要があります)。
しかし、Windows PC 2台でOpenSTLinuxのコンパイルを試しましたが2台ともに失敗しました。

推測ですが、

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

でした。

そこでセミナー資料で紹介されていたAWS EC2でコンパイル環境構築を試すことにしました。　
※OpenSTLinuxのコンパイルPCのスペックはこちらに記載されています。
https://wiki.st.com/stm32mpu/wiki/PC_prerequisites
* 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ドルの費用がかかりました。

次の資料が費用の内訳です。
https://drive.google.com/file/d/1T2QxFP32fbegiTB70bLK4YyTvUjVINzj/view?usp=sharing


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


## OpenSTLinux環境構築
結果としてOpenSTLinuxがコンパイル環境ができました。
OpenSTLinuxの起動イメージをコンパイルし、STM32MP1の評価基板(STM32MP157C-DK2)でOpenSTLinuxがブートできました。


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

#### OpenSTLinuxのコンパイルに必要なツールの準備
OpenSTLinuxのコンパイルに必要なツールをインストールします。　
https://wiki.st.com/stm32mpu/wiki/PC_prerequisites#Installing_extra_packages
3.2 Installing extra packagesを実行します。


#### OpenSTLinuxのコンパイル
OpenSTLinuxをコンパイルします。
https://wiki.st.com/stm32mpu/wiki/STM32MP1_Distribution_Package

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のコンパイル
SDKのコンパイルは次の手順を実行しました。
https://wiki.st.com/stm32mpu/wiki/How_to_create_an_SDK_for_OpenSTLinux_distribution#SDK_generation
　
SDKのコンパイルは4時間ほどかかりました。


#### SDカード書き込みイメージの作成
OpenSTLinuxのSDカード書き込みイメージを作成します。次の手順を実行しました。
https://wiki.st.com/stm32mpu/wiki/How_to_populate_the_SD_card_with_dd_command


# 感想
## AWS費用管理
AWS費用管理がザルでした。
EC2インスタンスを使わないときも実行してしまっていました。EC2を一切使わないのにインスタンス実行中のまま2日間くらい放置してしまいました。EC2を使わないときはインスタンスを停止することで費用を抑えることができると思います。その辺のコストの感覚というか費用をおさえるために何をしなくてはいけないのかがわかっていませんでした。


## 物理デバイスの取り扱い
AWSでコンパイル環境をつくった場合、物理デバイスの取り扱いが少し面倒と感じました。
EC2でOpenSTLinux起動イメージができましたがそれをSDカードに書き込むのに少し面倒でした。

SDカードへの書き込みは次の手順で実施しました。
①EC2上にあるOpenSTLinux起動イメージをscpコマンドでローカルPCにダウンロード
　↓
②ローカルPCのOpenSTLinux起動イメージをSDカードに書き込み

ローカルPCにVirtualBox+Ubuntuで環境構築できていれば①の手順は必要ありません。
SDカードなどの物理的なストレージにOS起動イメージを書き込む際はひと手間必要なことがAWSを使ううえで少し面倒と感じました。
上記の点を差し引いてもAWSを使うメリットがあると思いますが知識がないためその辺が理解できていません。


# 最後に
Linuxのコンパイルもはじめて、AWSでサーバを立てるのもはじめてで、できるかどうか不安でしたがなんとかできました。これから組込み開発環境をAWSで構築しようと考えていた方のなにか参考になると嬉しいです。　

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