Linux Kernel 3.17 がリリースされたのでビルドしてみた。
とりあえず艦これがヌルサクになった、という結果。
Linux Mint のカーネルは今現在 3.13.0-24。APT で 3.13.0-36 もインストールできる。
自分の環境ではビルドに足りなさそうなものは kernel-package
くらいだった。
sudo aptitude install kernel-package
make menuconfig
でローカル名を決めておくのを忘れずに。
cd /usr/src su - git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git cd linux-stable cp /boot/config-3.13.0-24-generic .config make oldconfig make menuconfig make-kpkg clean CONCURRENCY_LEVEL=`nproc` make-kpkg --revision `date +%Y%m%d` --initrd kernel_{image,headers} cd .. dpkg -i linux-image-3.17.0-local_20141006_i386.deb dpkg -i linux-headers-3.17.0-local_20141006_i386.deb reboot
イメージをインストールする時点で nvidia-331 と virtualbox-guest 関連のエラーが出てたのである程度予想はしていたけど再起動しても X が起動できなかった。"Linux Mint 17" の文字は出るがその後画面の表示がおかしくなり、数回 X が再起動した後に「頑張ったけど無理だったんや…」みたいなメッセージ。
コンソールに切り替えて nvidia-331 と virtualbox-guest 関連を全てアンインストール。そもそも仮想マシンではないので virtualbox-guest は必要ない。
で、無事にログインできて艦これやってみたら今まで 90% くらいまで CPU を喰われてたけど 65% ぐらいまで減少。羅針盤の回転とか、空母の多い航空戦も滑らかに動くようになったし、シーンによるもたつきが全然ない。15 FPS が 30 FPS になったくらいな印象(nouveau に戻したのが原因でカーネルのアップグレード関係ないんじゃないかという可能性も…)。KDE と Pentium D 925 でも艦これがヌルサクだよ!
VLC でシークしたりすると音が鳴らなくなる問題があったんだけどそれも今のところ発生してないなぁ。
あとはインプットメソッドの反応が若干良くなったとかだろうか。前まではもたつくことがあったけどこれも滑らかに入力・変換ができる。
これで暫く様子見してみよう。Pentium 4 の方のマシンもこれで多少マシになるかもなぁ。
2回目
そういえば CPU ファミリを指定するのを忘れたとおもってやり直し。
make menuconfig
で Processor type and features > Processor family を開いて CPU を指定する。Pentium D を使用しているので Pentium 4 シリーズにしておいた。あとモジュールも作り直ししておく。man make-kpkg
を読んでみたらローカルバージョンは make menuconfig
で指定せずとも --append-to-version
で追加できたらしい。
CONCURRENCY_LEVEL=`nproc` MODULE_LOC=`pwd`/modules make-kpkg --revision `date +%Y%m%d` --append-to-version -p4-1 kernel_image kernel_headers modules_image
1回目より断然早く終わった。
あーそういや VirtualBox が動かなくなってたの忘れてましたね…。virtualbox-nonfree
だったけど virtualbox-dkms
で対応しましょうか。
------------------------------ Deleting module version: 4.3.10 completely from the DKMS tree. ------------------------------ Done. Loading new virtualbox-4.3.10 DKMS files... Building only for 3.17.0-p4-2 Building initial module for 3.17.0-p4-2 Error! Bad return status for module build on kernel: 3.17.0-p4-2 (i686) Consult /var/lib/dkms/virtualbox/4.3.10/build/make.log for more information. * Stopping VirtualBox kernel modules [ OK ] * Starting VirtualBox kernel modules * No suitable module for running kernel found [fail] invoke-rc.d: initscript virtualbox, action "restart" failed.
ですよねー。そんなに上手くいくわけないと思ってました。ログを見ると
DKMS make.log for virtualbox-4.3.10 for kernel 3.17.0-p4-2 (i686) Wed Oct 8 23:37:10 JST 2014 make: ディレクトリ `/usr/src/linux-stable' に入ります LD /var/lib/dkms/virtualbox/4.3.10/build/built-in.o LD /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/built-in.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/linux/SUPDrv-linux.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/SUPDrv.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/SUPDrvSem.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/SUPDrvTracer.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/r0drv/alloc-r0drv.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/r0drv/initterm-r0drv.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/r0drv/memobj-r0drv.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/r0drv/mpnotification-r0drv.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/r0drv/powernotification-r0drv.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/r0drv/linux/assert-r0drv-linux.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/r0drv/linux/alloc-r0drv-linux.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/r0drv/linux/initterm-r0drv-linux.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/r0drv/linux/memobj-r0drv-linux.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/r0drv/linux/memuserkernel-r0drv-linux.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/r0drv/linux/mp-r0drv-linux.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/r0drv/linux/mpnotification-r0drv-linux.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/r0drv/linux/process-r0drv-linux.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/r0drv/linux/semevent-r0drv-linux.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/r0drv/linux/semeventmulti-r0drv-linux.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/r0drv/linux/semfastmutex-r0drv-linux.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/r0drv/linux/semmutex-r0drv-linux.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/r0drv/linux/spinlock-r0drv-linux.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/r0drv/linux/thread-r0drv-linux.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/r0drv/linux/thread2-r0drv-linux.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/r0drv/linux/threadctxhooks-r0drv-linux.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/r0drv/linux/time-r0drv-linux.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/r0drv/linux/timer-r0drv-linux.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/r0drv/generic/semspinmutex-r0drv-generic.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/common/alloc/alloc.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/common/checksum/crc32.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/common/checksum/ipv4.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/common/checksum/ipv6.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/common/err/RTErrConvertFromErrno.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/common/err/RTErrConvertToErrno.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/common/log/log.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/common/log/logellipsis.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/common/log/logrel.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/common/log/logrelellipsis.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/common/log/logcom.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/common/log/logformat.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/common/misc/RTAssertMsg1Weak.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/common/misc/RTAssertMsg2.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/common/misc/RTAssertMsg2Add.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/common/misc/RTAssertMsg2AddWeak.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/common/misc/RTAssertMsg2AddWeakV.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/common/misc/RTAssertMsg2Weak.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/common/misc/RTAssertMsg2WeakV.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/common/misc/assert.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/common/misc/handletable.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/common/misc/handletablectx.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/common/misc/thread.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/common/string/RTStrCopy.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/common/string/RTStrCopyEx.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/common/string/RTStrCopyP.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/common/string/RTStrNCmp.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/common/string/RTStrNLen.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/common/string/stringalloc.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/common/string/strformat.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/common/string/strformatrt.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/common/string/strformattype.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/common/string/strprintf.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/common/string/strtonum.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/common/table/avlpv.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/common/time/time.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/r0drv/linux/RTLogWriteDebugger-r0drv-linux.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/generic/RTAssertShouldPanic-generic.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/generic/RTLogWriteStdErr-stub-generic.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/generic/RTLogWriteStdOut-stub-generic.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/generic/RTLogWriteUser-generic.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/generic/RTMpGetArraySize-generic.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/generic/RTMpGetCoreCount-generic.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/generic/RTSemEventWait-2-ex-generic.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/generic/RTSemEventWaitNoResume-2-ex-generic.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/generic/RTSemEventMultiWait-2-ex-generic.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/generic/RTSemEventMultiWaitNoResume-2-ex-generic.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/generic/RTTimerCreate-generic.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/generic/errvars-generic.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/generic/mppresent-generic.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/generic/uuid-generic.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/VBox/log-vbox.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/math/gcc/divdi3.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/math/gcc/moddi3.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/math/gcc/qdivrem.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/math/gcc/udivdi3.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/math/gcc/umoddi3.o LD [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxdrv/vboxdrv.o LD /var/lib/dkms/virtualbox/4.3.10/build/vboxnetadp/built-in.o CC [M] /var/lib/dkms/virtualbox/4.3.10/build/vboxnetadp/linux/VBoxNetAdp-linux.o /var/lib/dkms/virtualbox/4.3.10/build/vboxnetadp/linux/VBoxNetAdp-linux.c: In function ‘vboxNetAdpOsCreate’: /var/lib/dkms/virtualbox/4.3.10/build/vboxnetadp/linux/VBoxNetAdp-linux.c:186:48: error: macro "alloc_netdev" requires 4 arguments, but only 3 given vboxNetAdpNetDevInit); ^ /var/lib/dkms/virtualbox/4.3.10/build/vboxnetadp/linux/VBoxNetAdp-linux.c:184:15: error: ‘alloc_netdev’ undeclared (first use in this function) pNetDev = alloc_netdev(sizeof(VBOXNETADPPRIV), ^ /var/lib/dkms/virtualbox/4.3.10/build/vboxnetadp/linux/VBoxNetAdp-linux.c:184:15: note: each undeclared identifier is reported only once for each function it appears in /var/lib/dkms/virtualbox/4.3.10/build/vboxnetadp/linux/VBoxNetAdp-linux.c: At top level: /var/lib/dkms/virtualbox/4.3.10/build/vboxnetadp/linux/VBoxNetAdp-linux.c:159:13: warning: ‘vboxNetAdpNetDevInit’ defined but not used [-Wunused-function] static void vboxNetAdpNetDevInit(struct net_device *pNetDev) ^ make[2]: *** [/var/lib/dkms/virtualbox/4.3.10/build/vboxnetadp/linux/VBoxNetAdp-linux.o] エラー 1 make[1]: *** [/var/lib/dkms/virtualbox/4.3.10/build/vboxnetadp] エラー 2 make: *** [_module_/var/lib/dkms/virtualbox/4.3.10/build] エラー 2 make: ディレクトリ `/usr/src/linux-stable' から出ます
何この「引数4つ必要だけど3つしかないよ!」っていうエラー。ソース間違われるとどうしようもないんですが…。
仕方ない、公式からインストールしよう。
sudo add-apt-repository 'deb http://download.virtualbox.org/virtualbox/debian trusty contrib' wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | sudo apt-key add - sudo apt-get update
/etc/apt/preferences.d/additional-repositories.pref
を作成して以下を書き込み優先度を上げる。とりあえず /etc/apt/preferences.d/official-package-repositories.pref
に書いておいてもいいと思うがアップグレード時に上書きされるかもしれない。
Package: virtualbox-4.3 Pin: origin download.virtualbox.org Pin-Priority: 701
aptitude show virtualbox-4.3
でバージョンが VirtualBox のサーバにあるものと確認してからインストール。2014年10月09日現在だと 4.3.16-95972~Ubuntu~raring が目的の物。
sudo aptitude install virtualbox-4.3 --with-recommends
: Trying to register the VirtualBox kernel modules using DKMS ...done. Starting VirtualBox kernel modules ...done. :
キタ━━━━(゚∀゚)━━━━!!
で、とりあえず VirtualBox 問題は終了。
詳しくは https://www.virtualbox.org/wiki/Linux_Downloads を見るべし。
2回目その後
nouveau を使っているとサスペンドから復帰出来ないことが判明。NVIDIA から公式ドライバをダウンロードしてきて入れることにした。
コンソールに移動して telinit 1
で X を終了し、nouveau をアンロードしてから作業する。
telinit 1
rmmod nouveau
ERROR: Module nouveau is in use
あぁ、Linux Mint のコンソールは nouveau 絶賛使用中ですね…。/boot/grub/grub.cfg
を一時的に書き換えてロードしないようにしましょう。現在使用しているカーネルのオプション行に nouveau.modeset=0
を追加。
quiet nosplash nouveau.modeset=0
再起動してまた telinit
。
前は詳しく調べていなかったけど http://us.download.nvidia.com/XFree86/Linux-x86/340.46/README/index.html にマニュアルがあり、インストーラに -A
オプションを与えると詳細ヘルプが出るんだそうな出るんだそうな。大事なことなので(ry
詳細ヘルプを見るとカーネルの名前とパスを指定できるとのこと。--dkms
と --disable-nouveau
は勝手にやってくれそうな気がするけどとりあえず追加しておく。途中 /etc/X11/xorg.conf
の書き換えについて聞かれるが Linux Mint はこれが無いので無視。
telinit 1 rmmod nouveau sh /home/me/Downloads/NVIDIA-Linux-x86-340.46.run --kernel-name=`uname -r` --kernel-source-path=/usr/src/linux-stable --dkms --disable-nouveau
尚、このインストーラー、--silent
や --latest
、--update
、--uninstall
も備えている。--silent
はダイアログなしでインストール。--latest
や --update
は FTP で NVIDIA のサーバから新しいものを拾ってくる。色々情報を探してみるとオプションについて記載しているサイトがほとんどなかったのでこんなに多機能だとは思わなかった。
で、再起動して lsmod
してみるとまだ nouveau を読んでいるのではて?と思ったけど initramfs のアップデートをしていなかった。先ほど /boot/grub/grub.cfg
を書き換えてしまったので update-grub2
も実行して元に戻しておく(ドライバインストール時にやってそうな気がするけど)。
sudo update-grub2 && sudo update-initramfs -u
再起動して nouveau がロードされていないことを確認する。
lsmod | grep nouveau
サスペンドも問題なし。nouveau の方が若干レスポンスが良いような気もするけどサスペンドが使えないのは困るので仕方がない。