読者です 読者をやめる 読者になる 読者になる

szmlb.net

tips for robotics

ubuntuにrt-preemptカーネルを導入する

基本的に以下のサイトを参考にして導入した.
RT PREEMPT HOWTO - RTwiki

環境

$lsb_release -r
Release 14.04

$uname -r
3.13.0-66-generic

$cat /proc/cpuinfo | grep "model name"
model name : Intel(R) Core(TM) i3-4170 CPU @ 3.70GHz

パッチを当てる

$ zcat ../patches-3.12.66-rt88.patch.gz | patch -p1

エラーが出ず "patching..." のように表示されればOK.

カーネルのconfigure

$ make menuconfig

RT PREEMPT HOWTOのページには,

・enable CONFIG_PREEMPT_RT
・activated the High-Resolution-Timer Option
・disabled all Power Management Options like ACPI or APM (Since rt patch 2.6.18-rt6 you will probably have to activate ACPI option to activate high resolution timer.)

と書かれているので, 以下のように設定.

Kernel Features
---> Preemption Model (Fully Preemptible Kernel (RT))
---> [*] Fully Preemptible Kernel (RT)

General setup
---> Timers subsystem
---> [*] High Resolution Timer Support **デフォルトでチェック済み

Power management and ACPI options
---> [*] ACPI (Advanced Configuration and Power Interface) Support **>2.6.18の場合はチェック

Kernel hacking
---> Memory Debugging
---> [ ] Check for stack overflows #Already deselected - do not select

あとは, RTAIでの設定についても反映. これは要るかどうかわかりません.
RTAI installation for ubuntu 14.04 · GitHub

Processor type and features
---> Processor family = Select yours **Generic-x86-64に設定

---> Maximum number of CPUs (NR_CPUS) = Set your number **4に設定

---> [ ] SMT (Hyperthreading) scheduler support = DISABLE IT **チェックを外す

ビルド

$ sudo make
$ sudo make modules_install
$ sudo make install
$ sudo grub-update
$ sudo reboot

3.12.66-rt88がgrubの画面に出ていればOK.

結果

アナログ出力波形をオシロで確認しましたが, low-latencyカーネルと比較してlatencyが低減できています.
RTAIやRT-Linuxよりは導入が簡単で, low-latencyカーネルより精度が高いのでオススメです.
(rtカーネルとrt-preemptカーネルの比較はできていません)