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

😃 mattintosh note 📝

Hello Raspberry Pi!

🐧 Linux Mint 17 KDE and Linux Kernel 3.17

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 の方が若干レスポンスが良いような気もするけどサスペンドが使えないのは困るので仕方がない。