試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

rtパッチの当たったカーネルが他の独自パッチや外部カーネルモジュールに与える影響について

rtパッチはカーネルの深い部分にも修正を行うようで、通常のカーネルと同じ感覚で使うと不具合が出ることがある。ここではその影響について、分かった範囲でメモすることにする。
カーネルは、「tuxonice-sourcesとrt(リアルタイム)パッチ」のもの(GentooパッチセットとTuxOnIceを追加したカーネルにrtパッチを当てたもの)を使用している。

関連記事:

NVIDIAドライバ

そのままでは動作せず

そのままビルドは通るのだが、Xサーバが起動するところで画面が真っ黒のまま固まった。
rtパッチのカーネルと、仮想化のXen上で動作する特権OS(ドメイン0)のLinuxカーネルの2つは特別な修正が必要なようで、Xenのほうは随分前にバージョン2*1を試したときにも失敗していた気がする。現在は「#ifdef CONFIG_XEN」などによる分岐がカーネルモジュールのソースに見られるものの、usr/src/nv/conftest.shで「Xenカーネル上では動作しない」*2と弾いているようにも見える。

NVIDIAドライバを動作させるためのパッチ

nvnews.netのフォーラムで過去にrtカーネル用パッチが貼られたこともあったのだが、
http://www.nvnews.net/vbulletin/showthread.php?t=87541
の手順「3」に書かれているURLのものは対象バージョンが古くて使えなかった。
169.09向けのパッチを探したところ
http://svn.pardus.org.tr/pardus/devel/kernel/drivers/nvidia-new/files/rt.patch
が見つかったので試したところ、(対象は169.07のx86_32版のようだったが)パッチは無事当たり、x86_64上での動作も確認。3D機能も正常に動作していて、Compiz Fusionも使える。手動での適用からインストールの例としては下のようになる(ファイル名はx86_64版のもの)。

$ install -m 755 [NVIDIA-Linux-x86_64-169.09-pkg2.runの場所] .
$ ./NVIDIA-Linux-x86_64-169.09-pkg2.run -x
$ cd NVIDIA-Linux-x86_64-169.09-pkg2/usr/src/nv/
$ wget "http://svn.pardus.org.tr/pardus/devel/kernel/drivers/nvidia-new/files/rt.patch"
$ patch -p4 < rt.patch
$ make module
$ sudo mkdir /lib/modules/$(uname -r)/video
$ sudo cp nvidia.ko /lib/modules/$(uname -r)/video/
$ sudo depmod -ae

fbsplashとinitramfs

グラフィカルな起動画面を提供するfbsplashは、動作自体はするのだが、ブートローダの後、カーネルが起動する直後からfbsplashを動かすために独自のinitramfsを使用した場合に限り、何故か固まってしまった。理由はよく分からない。
GRUBで「initrd」の行を消してinitramfsを使用せずに起動すると普通に起動し、途中からfbsplashも動いている。
関連記事:

TuxOnIce

NVIDIAドライバ絡みなのか、復帰後にウィンドウが応答しなかったり、*3SCIMを再起動しないと日本語が入らなかったりといったことがランダムに起こっている。
休止/復帰の処理自体は問題ないと思われる。UserUIも正常動作している。
関連記事:

VMware PlayerとVirtualBox

特に問題はないように見えるが、「検証不足で不具合が実はあった」という可能性はある。

QEMU/KVM

rtパッチには、カーネル内蔵のKVMに対しても修正が入っている。つまり、この内蔵版KVMモジュールを使用してQEMU/KVMをビルドしないとうまく動作しないということが予想され、KVM-60で

$ ./configure --disable-gcc-check --qemu-cc=gcc --enable-alsa --with-patched-kernel
$ make

としてビルドしたものの、

gcc  -m64 -Wl,-T,/tmp/work/kvm-60/qemu/x86_64.ld -L /tmp/work/kvm-60/qemu/../libkvm  -g -o qemu-system-x86_64 vl.o osdep.o monitor.o pci.o loader.o isa_mmio.o migration.o block-raw-posix.o lsi53c895a.o usb-ohci.o eeprom93xx.o eepro100.o ne2000.o pcnet.o rtl8139.o hypercall.o virtio.o virtio-net.o virtio-blk.o ide.o pckbd.o ps2.o vga.o sb16.o es1370.o dma.o fdc.o mc146818rtc.o serial.o i8259.o i8254.o pcspk.o pc.o cirrus_vga.o apic.o parallel.o acpi.o piix_pci.o usb-uhci.o vmmouse.o vmport.o vmware_vga.o extboot.o gdbstub.o ../libqemu_common.a libqemu.a /tmp/work/kvm-60/qemu/../libkvm/libkvm.a  -lm -lz -lasound -lkvm -lgnutls   -lSDL -lpthread  -lrt -lpthread -lutil
libqemu.a(kvm-tpr-opt.o): In function `enable_vapic':
/tmp/work/kvm-60/qemu/kvm-tpr-opt.c:221: undefined reference to `kvm_enable_vapic'
libqemu.a(kvm-tpr-opt.o): In function `kvm_tpr_opt_setup':
/tmp/work/kvm-60/qemu/kvm-tpr-opt.c:287: undefined reference to `kvm_enable_tpr_access_reporting'
collect2: ld returned 1 exit status
make[2]: *** [qemu-system-x86_64] Error 1
make[2]: Leaving directory `/tmp/work/kvm-60/qemu/x86_64-softmmu'
make[1]: *** [subdir-x86_64-softmmu] Error 2
make[1]: Leaving directory `/tmp/work/kvm-60/qemu'
make: *** [qemu] Error 2

ビルドは通らず、今回は使えなかった。

使用したバージョン:

  • nvidia-drivers 169.09-r1
  • tuxonice-sources 2.6.24-r2
  • rtパッチ 2.6.24-rt1
  • klibc 1.5.8
  • v86d 0.1.3
  • splashutils 1.5.3.2(USE="fbcondecor gpm mng png truetype")
  • tuxonice-userui 0.7.2(USE=fbsplash)
  • VMware Player 2.0.2.59824 / vmware-modules 1.0.0.17-r1
  • VirtualBox 1.5.4(virtualbox-bin 1.5.4) / virtualbox-modules 1.5.4

*1:3は試していない

*2:「The NVIDIA driver does not currently work on Xen kernels」などのメッセージが含まれている

*3:応答するものもあるし、しないものもある