Linuxカーネルのコンフィグとビルドをしてみよう!

自動車の自動運転制御やモバイル基地局の無線処理等、組み込みシステムにはリアルタイム性を必要とするシステムが多くあります。Linux Foundation傘下のReal Time LinuxプロジェクトでメンテナンスしているPreempt RTパッチを適用すると、Linuxカーネルのリアルタイム性が向上します。

Cyclone V SoCのカーネルは、すぐにPreempt RTが利用できるようになっているので、動かしてみましょう!

カーネルのコンフィグとビルド

Linuxカーネル ソースをPreempt RTのブランチに切り替えて、コンフィグを有効にして、再ビルドします。

							環境変数の設定
							$ . /opt/poky/2.1.1/environment-setup-cortexa8hf-neon-poky-linux-gnueabi

							Preempt RTのブランチに切り替え
							$ cd linux-socfpga.git
							$ git checkout -b socfpga-4.1.22-ltsi-rt remotes/origin/socfpga-4.1.22-ltsi-rt

							コンフィグでPreempt RTを有効に
							$ make nconfig

							コンパイル
							$ make zImage

							ビルドしたイメージをSDカードへコピー
							$ cp arch/arm/boot/zImage SDカードのFATパーティションのマウントポイント
						

コンフィグの変更方法

Kernel Featuresを選択

Kernel Featuresを選択

Preemption Modelを選択

Preemption Modelを選択

Fully Preemptible Kernel(RT)を選択

Fully Preemptible Kernel(RT)を選択

ベンチマーク

							ベンチマーク プログラムは前回と同じrt-testsを使用します。

							ソースのダウンロード
							$ git clone http://git.kernel.org/pub/scm/linux/kernel/git/clrkwllms/rt-tests.git

							環境変数の設定
							$ . /opt/poky/2.1.1/environment-setup-cortexa8hf-neon-poky-linux-gnueabi

							コンパイル
							$ cd rt-tests
							$ make

							今回使用するhackbenchをSDカードへコピー
							$ cp hackbench SDカードのrootfsパーティションのマウントポイント/適当なディレクトリー
						

ネットワークやファイルシステムの負荷を掛けてベンチマークしてみます。ビデオでは大きな差が現れませんでしたが、より長時間実行してみると差が現れます。

下記の例では、デフォルトのカーネルではワーストケースで200ミリ秒以上の遅延が発生しているのに対して、Preempt RTではワーストケースでも10ミリ秒以内に収まっています。

デフォルトのカーネル

デフォルトのカーネル

Preempt RTを有効にしたカーネル

Preempt RTを有効にしたカーネル