3.11 Linuxカーネルのビルド方法 #
対象機種: AX30 / AX11 / AX21 / AG10 / AG20 / AR10 / AR20
本エッジゲートウェイはLinuxカーネルを採用しており、アプリケーションの開発内容に応じて、カーネルの設定(カーネルコンフィグレーション)を変更する必要が生じる場合があります。
特定の機能を利用するために、カーネルオプションを有効化または無効化することが可能です。
以下の手順に従って、開発環境の構築およびソースコードの取得を行い、必要なカーネルオプションを設定してご利用ください。
注意:
- ビルドしたカーネルとモジュールは rootfs 領域にインストールされます。ファームウェアの全体更新で rootfs 領域が初期化されると、インストールしたカーネルとモジュールは削除されます(『2.3 アプリケーションをファームウェア更新後も残す』)。
- インストールしたカーネルで起動しなくなった場合は、『5.2 正常に起動しない場合の対処』の手順で、もう一方のエリアから起動して復旧します。インストールの前に、もう一方のエリアが正常に起動できる状態であることを確認してください。
1. 開発環境の構築
環境構築は実機もしくは仮想環境で行います。Linuxカーネルのビルドに必要な依存関係と開発ツールを、aptサーバーから更新・インストールする操作します。
$ sudo apt update
$ sudo apt -y build-dep linux-image-generic
$ sudo apt -y install flex bison libncurses-dev libelf-dev libssl-dev dwarves
2.カーネルソースコードの取得と展開
実機環境の場合
aptコマンドを利用し、aptサーバーからLinuxカーネルのソースコードを取得します。
実行環境: エッジゲートウェイ
$ apt source linux-image
補足: 実機のカーネルのソースパッケージ名と版は、次のコマンドで確認できます。以下は AG10 の FW 3.8.1 の実行例です。
実行環境: エッジゲートウェイ
$ dpkg-query -W -f '${Package} ${Version} ${source:Package}\n' linux-image linux-image 5.10.201-cip41-01330-gcc892a704d8b-1 linux-5.10.201-cip41-01330-gcc892a704d8b $ uname -r 5.10.201-cip41-01330-gcc892a704d8b
補足: 実機環境の場合、ここまでの操作で約2Gbyte領域を消費します。ストレージ容量にご注意ください。
実機環境の場合、IoTルーターの環境ではeMMCの領域が不足していますので、領域を確保できません。仮想化技術ソフトウェアVirtual BoxやWSL2(Windows Subsystem for Linux 2)などの仮想環境を構築し、その上で開発することをおすすめします。
仮想環境の場合
aptサーバーのURLから直接Linuxカーネルのソースコードを取得します。具体的には下記URLから参照できる、linux-*.dscファイルと、linux-*.orig.tar.gz、linux-*.diff.gzファイルをダウンロードします。
https://{アカウント名}:{パスワード}@package.amnimo.com/amnimo/pool/main/l/
以下の例はバージョン2.6.2の場合です。(アカウント名、パスワードは別途記載が必要です。)
実行環境: ホストマシン(PC)
$ wget https://package.amnimo.com/amnimo/pool/main/l/linux-5.10.83-cip1-00925-g23eba26b0521/linux-5.10.83-cip1-00925-g23eba26b0521_5.10.83-cip1-00925-g23eba26b0521-1.dsc
$ wget https://package.amnimo.com/amnimo/pool/main/l/linux-5.10.83-cip1-00925-g23eba26b0521/linux-5.10.83-cip1-00925-g23eba26b0521_5.10.83-cip1-00925-g23eba26b0521-1.diff.gz
$ wget https://package.amnimo.com/amnimo/pool/main/l/linux-5.10.83-cip1-00925-g23eba26b0521/linux-5.10.83-cip1-00925-g23eba26b0521_5.10.83-cip1-00925-g23eba26b0521.orig.tar.gz
$ dpkg-source -x linux-5.10.83-cip1-00925-g23eba26b0521_5.10.83-cip1-00925-g23eba26b0521-1.dsc
補足: aptサーバーへのアクセスにはアカウントとパスワードが必要です。弊社営業経由でご確認ください。
Linuxカーネルのソースファイル名は実機上でunameコマンドを利用して取得してください。上記の例(バージョン2.6.2)のディレクトリ名とファイル名の
5.10.83-cip1-00925-g23eba26b0521の部分を、uname -rの出力に置き換えます。
3.カーネルコンフィグレーションの変更
2で取得したソースディレクトリに移動してください。(以下はバージョン2.6.2の例です。)
$ cd linux-5.10.83-cip1-00925-g23eba26b0521-5.10.83-cip1-00925-g23eba26b0521
Linuxカーネルのビルドシステムにおいて、エッジゲートウェイの初期設定ファイル(amnimo_defconfig)を使って .config ファイルを生成します。
$ make amnimo_defconfig
下記コマンドでカーネルオプションメニューを開いて必要なオプションを変更します。
$ make menuconfig
注意: 仮想環境(x86 の PC)でビルドする場合は、本節の
makeコマンドすべてにARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-を付けてください。付けないと、PC のアーキテクチャ向けの設定でビルドされます。クロスコンパイラーは『1.3.1 PC環境の準備』の手順でインストールします。実行環境: ホストマシン(PC)
$ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- amnimo_defconfig $ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- menuconfig $ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image dtbs modules -j2
4.カーネルのコンパイル
Linuxカーネルのビルドプロセスにおいて、特定の成果物(カーネル本体のバイナリイメージ,デバイスツリー, カーネルモジュール)を並列でビルドします。
$ make Image dtbs modules -j2
| コマンドパラメータ | 意味 |
|---|---|
| Image | カーネル本体(バイナリイメージ)をビルドします。 |
| dtbs | デバイスツリーをビルドします。 |
| modules | カーネルモジュールをビルドします。 |
| -j2 | 並列ビルド数(2並列ビルド) |
補足: 実機環境の場合、ビルド作業には完了までに数時間程度かかります。
実機環境の場合、メモリが不足しビルドが成功しない場合があります。スワップファイルを作成することによりメモリを拡張してください。以下はSSD搭載しているデバイスでSSDに2Gbyteのスワップ領域を作成する例になります。
実行環境: エッジゲートウェイ
$ sudo dd if=/dev/zero of=/media/ssd/swapfile bs=1M count=2048 $ sudo chmod 600 /media/ssd/swapfile $ sudo mkswap /media/ssd/swapfile $ sudo swapon /media/ssd/swapfile $ free -h total used free shared buff/cache available Mem: 1.9Gi 144Mi 58Mi 3.0Mi 1.7Gi 1.7Gi Swap: 2.0Gi 0B 2.0Gi
5.インストール方法
実機の場合、以下のコマンドでインストール後、機器を再起動します。
実行環境: エッジゲートウェイ
$ sudo make install modules_install
$ sudo reboot
6.パッケージの作成
以下のコマンドでカーネルやその関連ファイルを Ubuntu 系で利用できる .deb パッケージを生成します。
$ make bindeb-pkg -j2 KBUILD_IMAGE=arch/arm64/boot/Image
| コマンドパラメータ | 意味 |
|---|---|
| bindeb-pkg | Ubuntuパッケージを生成するターゲット 補足: クリーンビルドを要求せず、すでにビルド済みの成果物をそのままパッケージ化できます。 |
| -j2 | 並列ビルド数(2並列ビルド) |
| KBUILD_IMAGE=arch/arm64/boot/Image | カーネルイメージのパスを指定(arm64向けのImageファイル) |
補足: 実機環境の場合、パッケージの作成完了までに約30分程度かかります。

注意:
補足: 実機のカーネルのソースパッケージ名と版は、次のコマンドで確認できます。以下は AG10 の FW 3.8.1 の実行例です。