LoginSignup
0

More than 1 year has 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のコスパが良さそうです!

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
What you can do with signing up
0