2019年11月9日土曜日

5.2系のカーネルにRealtime Kernel用のパッチを当ててビルドして使ってみた


背景

カーネル(Kernel)とはLinux OSの核となるソフトウェアのことです。
Realtime Kernelとは、遅延を抑えることを重視したカーネルのことです。
LinuxのカーネルにRealtime Kernel用のパッチ(ソフトウェアの変更)を適用することで、通常のカーネルより遅延を抑えたカーネルを利用できます。

ビルドに手間取ったので、ビルドとインストール方法を備忘録として共有します。

使ったもの

Ubuntu18.04.3をインストールして、カーネル5.3.0に切り替えたPC

環境の構築方法は、下記の記事が参考になると思います。

Ubuntu18.04のカーネルのバージョンを切り替えつつ動かしてみた

ダウンロードしてインストール

ビルドに必要なパッケージをインストールします。
apt-get install build-essential bc curl ca-certificates fakeroot gnupg2 libssl-dev lsb-release libelf-dev bison flex

記事を買いている時点で最新のパッチを(5.2.21-rt13)利用します。
mkdir ~/Downloads/5.2.21
cd ~/Downloads/5.2.21
wget https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.2.21.tar.xz
wget https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.2.21.tar.sign
wget https://mirrors.edge.kernel.org/pub/linux/kernel/projects/rt/5.2/patch-5.2.21-rt13.patch.xz
wget https://mirrors.edge.kernel.org/pub/linux/kernel/projects/rt/5.2/patch-5.2.21-rt13.patch.sign
xz -d linux-5.2.21.tar.xz
xz -d patch-5.2.21-rt13.patch.xz

ダウンロード可能なカーネルとパッチは下記のページで確認できます。
カーネル: https://mirrors.edge.kernel.org/pub/linux/kernel/
パッチ: https://mirrors.edge.kernel.org/pub/linux/kernel/projects/rt/

ダウンロードしたファイルの著名の検証を行います。
gpg2 --verify linux-5.2.21.tar.sign

確認に成功するとこのような表示が出ます。
gpg: 署名されたデータが'linux-5.2.21.tar'にあると想定します
gpg: 2019年10月12日 01時23分39秒 JSTに施された署名
gpg:                RSA鍵XXXX使用
gpg: "Greg Kroah-Hartman <gregkh@linuxfoundation.org>"からの正しい署名 [不明の]
gpg:                 別名"Greg Kroah-Hartman <gregkh@kernel.org>" [不明の]
gpg:                 別名"Greg Kroah-Hartman (Linux kernel stable release signing key) <greg@kroah.com>" [不明の]
gpg: *警告*: この鍵は信用できる署名で証明されていません!
gpg:          この署名が所有者のものかどうかの検証手段がありません。
主鍵フィンガープリント: YYYY

失敗するとこのような表示になります。
gpg: 署名されたデータが'linux-5.2.21.tar'にあると想定します
gpg: 2019年10月12日 01時23分39秒 JSTに施された署名
gpg:                RSA鍵XXXXを使用
gpg: 署名を検査できません: 公開鍵がありません

失敗した場合は、下記のように先程のログに表示されたRSA鍵を利用して公開鍵を取得してください。
gpg2 --recv-keys XXXX

パッチも同様に行ってください。
gpg2 --verify patch-5.2.21-rt13.patch.sign

どちらも検証できたら、カーネルファイルを展開して移動してパッチを適用します。
tar xf linux-5.2.21.tar
cd linux-5.2.21/
patch -p1 < ../patch-5.2.21-rt13.patch

ビルド設定を行います。
make oldconfig

ビルド設定は、Frankaのロボット操作に利用するためインストール手順に示されているPreemption Modelだけ5を選び、その他は標準の設定(値を入力せずエンターを入力)にしました。
Preemption Model
    1. No Forced Preemption (Server) (PREEMPT_NONE)
    2. Voluntary Kernel Preemption (Desktop) (PREEMPT_VOLUNTARY)
    3. Preemptible Kernel (Low-Latency Desktop) (PREEMPT__LL) (NEW)
    4. Preemptible Kernel (Basic RT) (PREEMPT_RTB) (NEW)
    > 5. Fully Preemptible Kernel (RT) (PREEMPT_RT_FULL) (NEW)

ビルドします。
記事によってはfakerootを利用してビルドしていますが、5系のカーネルは
自分のPCだと数時間かかりました。
make -j4 deb-pkg

ビルドされたdebファイルを利用してインストールします。
cd ../
sudo dpkg -i *.deb

インストールしたカーネルでUbuntuを起動

Shiftを押しながらUbuntuを起動すると起動オプションが表示されるので、Advanced Optionからインストールしたカーネルを選択します。


起動後下記のコマンドで期待するカーネルの情報が表示されれば、成功です。
uname -r
5.2.21-rt13

まとめ

カーネル5.2.21をRealtime Kernelとして利用してUbuntuを起動できました。

参考

Installation on Linux — Franka Control Interface (FCI) documentation
MoveItでPandaを動かそう:前編(WMD 2019 in Tokyo 準備編)

0 件のコメント :