tuxonice-sourcesとrt(リアルタイム)パッチ
Gentoo Linuxの「pro-audio」Overlayにある「rt-sources」というパッケージでrtカーネルのソースをインストールすることができるのだが、これはkernel.orgの提供するソースに対して適用されることになり、GentooパッチセットやTuxOnIceは含まれない。
そこで、2.6.24-tuxonice-r2のソースにALSA 1.0.16を適用したソースツリーにrtパッチを当ててみたところ、Gentooパッチセットに含まれる修正とTuxOnIceのどちらも使えることが分かった。gentoo-sourcesを使用している場合も、TuxOnIceが含まれないだけの違いなので、同様に使える。
バリエーションが色々あるが、もう一度関係をまとめると
- rt-sources=vanilla-sources(kernel.orgのカーネル)+rtパッチ
- gentoo-sources=vanilla-sources+Gentooパッチセット
- tuxonice-sources=gentoo-sources+TuxOnIce=vanilla-sources+Gentooパッチセット+TuxOnIce
となっている。今回の記事で得られるのは「tuxonice-sources+rtパッチ=vanilla-sources+Gentooパッチセット+TuxOnIce+rtパッチ」。
パッチ当て作業と、適用されない部分に関して
事前に
http://www.kernel.org/pub/linux/kernel/projects/rt/
からパッチ(今回使用したのはpatch-2.6.24-rt1.bz2)をダウンロードしておく。
/usr/src/linux-2.6.24-tuxonice-r2/以下にはすでにALSA 1.0.16が入っているものとする。「カーネルソースツリーのALSAドライバを新しいalsa-driverに置き換える」のシェルスクリプトを使用してカーネルソースツリー内のALSAのコードを入れ替えた。
下はtuxonice-sourcesのソースツリーをコピーしてパッチを当てる作業例。最後のsedでMakefile内のバージョン文字列を変更している。
$ sudo cp -pr /usr/src/linux-2.6.24-tuxonice-r2{,-rt1} $ cd /usr/src/ $ sudo ln -fns linux-2.6.24-tuxonice-r2-rt1 linux $ cd linux/ $ sudo make mrproper $ bzcat [patch-2.6.24-rt1.bz2の場所] | sudo patch -p1 $ find -name "*.rej" ./sound/core/control_compat.c.rej ./Makefile.rej ./drivers/video/console/fbcon.c.rej $ sudo sed -i 's:\(EXTRAVERSION = -tuxonice-r2\):\1-rt1:' Makefile
3つのファイルに対しての修正に失敗した*1が、該当部分を確認したところ、いずれも問題はないと思われる。
カーネル設定
リアルタイムカーネル用の追加設定部分は「oldconfig」ターゲットで既定の選択肢を選んでいく(そのままEnterで進んでいく)で問題はなさそうに見えるが、その他の部分(「JACK Audio Connection Kitの音飛びについてと、その対処」のカーネル設定部分・追記を含む)も設定できているかを確認したほうがよさそう。
リアルタイムカーネル用の主な設定は以下の場所。リストから「Complete Preemption (Real-Time)」が選択されていればOK。
Processor type and features ---> Preemption Mode (Complete Preemption (Real-Time)) ---> [CONFIG_PREEMPT_RT]
下は、既存のカーネル設定を元にした作業例。元のカーネルの設定(今回の例では../linux-2.6.24-tuxonice-r2/.config)をコピー .config"」で現在のカーネル設定が書き出せる他、「sudo cp /boot/config-[バージョン] .config」で、保存されている設定ファイルをコピーすることもできる">*4してから
$ CCACHE_DIR="[ccacheのディレクトリ]" sudo make HOSTCXX="ccache g++" CC="ccache gcc" oldconfig $ CCACHE_DIR="[ccacheのディレクトリ]" sudo make HOSTCXX="ccache g++" CC="ccache gcc" $ CCACHE_DIR="[ccacheのディレクトリ]" sudo make HOSTCXX="ccache g++" CC="ccache gcc" modules_install $ CCACHE_DIR="[ccacheのディレクトリ]" sudo make HOSTCXX="ccache g++" CC="ccache gcc" install
などのようにする。
関連:他のディストリのrtカーネルのパッケージ
(2010/1/15)Gentoo以外のrtカーネルのパッケージについての記述を追加する。いずれもkernel.orgのソースにrtパッチが当たっているのみで、ディストリのパッチや追加ドライバなどは提供されない。Gentooとの大きな違いは、ビルド済みですぐ使えるというところ。
Ubuntu
「linux-image-rt」というパッケージでインストールできる。UbuntuのみでDebianにはないようだ。
Ubuntu Studioというディストリでは標準で使用されているので追加インストールの必要はない。
Mandriva
「kernel-rt-latest」というパッケージでインストールできる。また、カーネルとは関係がないが、「task-sound-studio」をインストールするとサウンド関係のアプリケーションが多数インストールされる。
関連記事:
- カーネルソースツリーのALSAドライバを新しいalsa-driverに置き換える
- Linuxカーネル(2.6系)のビルドの流れ
- Linux上で休止状態を実現するTuxOnIceの概要と準備(3.0-rc1の時点)
- JACK Audio Connection Kitの音飛びについてと、その対処
- rtカーネルのリアルタイム性能テスト(cyclictest)
- rtパッチの当たったカーネルが他の独自パッチや外部カーネルモジュールに与える影響について
まとめドキュメント:
使用したバージョン:
- tuxonice-sources 2.6.24-r2
- rtパッチ 2.6.24-rt1
*1:パッチの適用に失敗すると、該当ブロック(Hunk)がrejという拡張子のファイルに書き出される
*2:また、括弧付けに加えて、else以下に別の処理も追加されている
*3:rtパッチでは「int i, type, count, size;」のcount変数の初期値を0にしているが、ALSA 1.0.16では「int uninitialized_var(count);」になっている
*4:CONFIG_IKCONFIGを組み込みかモジュールにした上でCONFIG_IKCONFIG_PROCが有効なら、「sudo sh -c "zcat /proc/config.gz > .config"」で現在のカーネル設定が書き出せる他、「sudo cp /boot/config-[バージョン] .config」で、保存されている設定ファイルをコピーすることもできる