3
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?

More than 3 years have passed since last update.

ラズパイ用LinuxカーネルをEC2上でビルドしてみた

Last updated at Posted at 2021-02-04

メカトラックス社が提供しているLinuxカーネル(以下、メカトラカーネル)をAmazon EC2上でビルドしてみました。メカトラカーネルはRaspbianのLinuxカーネルをベースに作成されていますので、RaspbianのLinuxカーネルをビルドする際の参考にもなるかと思います。

環境

・AWSマネジメントコンソールへの接続ブラウザはGoogle Chromeを推奨
・EC2のOSはDebian 10 Buster (ARM)を使用
・EC2への接続ツールはAWSのSession Managerを利用。Tera Term等のリモートログオンクライアントは使用しません。

作業の流れ

  1. EC2作成
  2. Session ManagerからEC2への接続
  3. メカトラカーネルのビルド

1. EC2の作成

AWSマネジメントコンソールにログインして以下を設定します。
「※」はSession Managerを利用するために必要な設定です。

(1-1) VPCを作成してインターネットゲートウェイをアタッチします。※
(1-2) EC2用のIAMロールを新規作成し、AmazonSSMManagedInstanceCoreポリシーをアタッチします。※
(1-3) 下表のポイントを参考にEC2を作成します。

EC2設定項目 設定値
AMI AWS MarketplaceでDebianが提供しているDebian 10 Buster (ARM)を選択
インスタンスタイプ t4g.xlarge を選択。OSがDebian 10 Buster (ARM)の場合に選択可能なインスタンスタイプは t4g、a1、c6g、m6g、r6gのみ(2021年1月時点)
VPC (1-1)で作成したVPCを選択
IAMロール (1-2)で作成したIAMロールを選択
自動割り当てパブリックIP※ 有効
キャパシティーの予約 なし
クレジット仕様 無制限のチェックを外す
ユーザーデータ※ #!/bin/bash
mkdir /tmp/ssm
cd /tmp/ssm
sudo wget https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/debian_arm64/amazon-ssm-agent.deb
sudo dpkg -i amazon-ssm-agent.deb
sudo systemctl enable amazon-ssm-agent

2. Session ManagerからEC2への接続

AWSマネジメントコンソールのSession Managerを利用してEC2へリモート接続します。

(2-1) AWS Systems Managerのセッションマネージャー画面を開き、「セッションの開始」ボタンをクリックします。
(2-2) 作成したEC2を選択し、「セッションを開始する」ボタンをクリックします。
33.PNG
(2-3) コンソールが表示されたら接続完了です。※接続ユーザーは ssm-user となります。
34.PNG

3. メカトラカーネルのビルド

メカトラカーネルをEC2上にダウンロードしてビルドします。
セッションマネージャ上で以下のコマンドを実行します。

(3-1) ビルドに必要となるLinuxパッケージ、クロスコンパイラをダウンロードします。

$ sudo apt update
$ sudo apt install git bc bison flex libssl-dev make crossbuild-essential-armhf

(3-2) githubからメカトラカーネルのソースをダウンロードします。

$ cd /home/ssm-user
$ git clone --depth=1 https://github.com/mechatrax/linux

(3-3) .configファイルを作成し、メカトラカーネルをビルドします。
※ラズパイのモデルによりKERNELの指定方法が異なります。詳細は下記URL参照。
 https://www.raspberrypi.org/documentation/linux/kernel/building.md
※「-j」オプションはジョブの同時実行数です。t4g.xlargeのvCPU数は4なので「-j4」とします。

$ cd /home/ssm-user/linux
$ KERNEL=kernel7l
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2711_defconfig
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4 zImage modules dtbs

t4g.xlargeの場合、ビルドに要した時間は13分44秒でした。

4. ビルド時間の比較

t4g系(ARMベース)の各インスタンスタイプのビルド時間を比較してみました。
ビルドに要する時間はvCPU数にほぼ反比例する形で短縮されます。ビルド時間が1時間未満であれば、下表のインスタンスタイプの中ではt4g.mediumが最もコスパが良いです。

インスタンスタイプ vCPU数 -jオプション ビルド時間 AWS利用料※1
t4g.2xlarge 8 8 6:48 0.3456USD
t4g.xlarge※2 4 4 13:44 0.1728USD
t4g.large 2 2 27:10 0.0864USD
t4g.medium 2 2 27:17 0.0432USD

※1) ビルド時間は1時間未満のため、AWS利用料はEC2(Linux)の1時間の料金です。Debianは1秒単位での課金になります。
※2) -jオプションを8としてもビルド時間は13分55秒でほぼ同じ。

なお、x86系のt3a.2xlarge(OSはARM版ではないDebian 10 Busterを使用)は、ビルド時間はt4g.xlargeとほぼ同じですが、AWS利用料は2倍となるためt4g系のほうが安価です。

インスタンスタイプ vCPU数 -jオプション ビルド時間 AWS利用料※1
t3a.2xlarge 8 8 13:53 0.3917USD

ちなみに、EC2ではなくRaspberry Pi 3 Model Bでビルドすると2時間2分34秒を要しました。

5. 最後に

AWS利用料だけを見ると、メカトラカーネルをビルドするだけならt4g.mediumのコスパが良さそうです!

3
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
3
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?