背景
カーネル(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) documentationMoveItでPandaを動かそう:前編(WMD 2019 in Tokyo 準備編)
0 件のコメント :
コメントを投稿