kernel.org でソースを配布しているカーネルは vanilla カーネルというらしい
意味は知らんがなw
特に、新しいハードウェアを購入したとかいう訳ではないけど、最新のカーネルを使ってみたい(嘘)
ツールのインストール
カーネルパッケージを作る make-kpkg と、make menuconfig で使う ncurses が必要
$ sudo apt-get install kernel-package libncurses5-dev
カーネルソース取得
本家( http://www.kernel.org/ )をみると、Latest Stable Kernel: 2.6.38.3
なので、それでやってやるですwww
作業用ディレクトリを作ってソースをダウンロードする
$ mkdir build && cd build $ wget http://www.kernel.org/pub/linux/kernel/v2.6/patch-2.6.38.3.bz2
展開する
$ tar xf linux-2.6.38.3.tar.bz2 $ cd linux-2.6.38.3/
パッチをダウンロードして、パッチ当てる
面倒なので、パッチは[Enter]押しっぱなしw
$ wget http://www.kernel.org/pub/linux/kernel/v2.6/patch-2.6.38.3.bz2 $ bzip2 -d patch-2.6.38.3.bz2 $ patch -p1 < patch-2.6.38.3
カーネルのコンフィグ
とりあえず、現在の設定をコピー
$ cp /boot/config-2.6.32-5-amd64 .config
現在のコンフィグを流用。
面倒なんで、とりあえず[Enter]押しっぱなし $ make oldconfig 適当に設定を変える(とりあえず変えなかったw) $ make menuconfig
カーネルビルド
$ make-kpkg clean $ fakeroot make-kpkg --initrd --revision=20110419a kernel-image
エラー発生
drivers/media/video/uvc/uvc_driver.c: In function ‘uvc_scan_chain_entity’: drivers/media/video/uvc/uvc_driver.c:1275: error: duplicate case value drivers/media/video/uvc/uvc_driver.c:1267: error: previously used here drivers/media/video/uvc/uvc_driver.c:1276: error: duplicate case value drivers/media/video/uvc/uvc_driver.c:1268: error: previously used here drivers/media/video/uvc/uvc_driver.c:1277: error: duplicate case value drivers/media/video/uvc/uvc_driver.c:1269: error: previously used here make[5]: *** [drivers/media/video/uvc/uvc_driver.o] Error 1 make[4]: *** [drivers/media/video/uvc] Error 2 make[3]: *** [drivers/media/video] Error 2 make[2]: *** [drivers/media] Error 2 make[1]: *** [drivers] Error 2
試しに、ソース確認
$ vi drivers/media/video/uvc/uvc_driver.c 1267 case UVC_OTT_VENDOR_SPECIFIC: 1268 case UVC_OTT_DISPLAY: 1269 case UVC_OTT_MEDIA_TRANSPORT_OUTPUT: 1270 if (uvc_trace_param & UVC_TRACE_PROBE) 1271 printk(" OT %d", entity->id); 1272 1273 break; 1274 1275 case UVC_OTT_VENDOR_SPECIFIC: 1276 case UVC_OTT_DISPLAY: 1277 case UVC_OTT_MEDIA_TRANSPORT_OUTPUT: 1278 if (uvc_trace_param & UVC_TRACE_PROBE) 1279 printk(" OT %d", entity->id); 1280 1281 break;
同じcase文があるのが、原因ぽい・・・
1275から1281をコメントアウト
もう一度make
$ fakeroot make-kpkg --initrd --revision=20110419a kernel-image
今度は無事終わった
カーネルのインストール
makeしていたディレクトリの親にdebパッケージができているので、インストールする
そして再起動
$ cd .. $ sudo dpkg -i linux-image-2.6.38.3_20110419a_amd64.deb Selecting previously deselected package linux-image-2.6.38.3. (Reading database ... 150438 files and directories currently installed.) Unpacking linux-image-2.6.38.3 (from linux-image-2.6.38.3_20110419a_amd64.deb) ... Done. Setting up linux-image-2.6.38.3 (20110419a) ... Running depmod. Examining /etc/kernel/postinst.d. run-parts: executing /etc/kernel/postinst.d/dkms 2.6.38.3 /boot/vmlinuz-2.6.38.3 dkms: running auto installation service for kernel 2.6.38.3: virtualbox-ose (3.2.10)...failed. run-parts: executing /etc/kernel/postinst.d/initramfs-tools 2.6.38.3 /boot/vmlinuz-2.6.38.3 update-initramfs: Generating /boot/initrd.img-2.6.38.3 W: Possible missing firmware /lib/firmware/rtl_nic/rtl8168d-2.fw for module r8169 W: Possible missing firmware /lib/firmware/rtl_nic/rtl8168d-1.fw for module r8169 run-parts: executing /etc/kernel/postinst.d/pm-utils 2.6.38.3 /boot/vmlinuz-2.6.38.3 run-parts: executing /etc/kernel/postinst.d/update-notifier 2.6.38.3 /boot/vmlinuz-2.6.38.3 run-parts: executing /etc/kernel/postinst.d/zz-update-grub 2.6.38.3 /boot/vmlinuz-2.6.38.3 Generating grub.cfg ... Found background image: /usr/share/images/desktop-base/desktop-grub.png Found linux image: /boot/vmlinuz-2.6.38.3 Found initrd image: /boot/initrd.img-2.6.38.3 Found linux image: /boot/vmlinuz-2.6.32-5-amd64 Found initrd image: /boot/initrd.img-2.6.32-5-amd64 done
VirtualBox-OSEでエラー出てる
おそらく、2.6.38.3でVirtualBoxをビルドしないとダメだと思うので
とりあえずスルーして再起動
$ sudo reboot
再起動後のトラブル
GRUBで、一番上に追加されてるのでそのまま起動
何かエラー出たけど起動した
$ sudo cat /var/log/syslog |grep fail localhost dkms_autoinstaller: Build failed. Installation skipped. localhost kernel: [ 13.980415] [drm] MTRR allocation failed. Graphics performance may suffer.
VirtualBoxOSEでエラー
$ sudo cat /var/log/user.log |grep dkms debian64 dkms_autoinstaller: virtualbox-ose (3.2.10): Installing module on kernel 2.6.38.3. debian64 dkms_autoinstaller: (bad exit status: 10) debian64 dkms_autoinstaller: Build failed. Installation skipped.
VirtualBoxはこの辺( http://ubuntuforums.org/archive/index.php/t-1673451.html ) 対応が書いてあったから、あとで・・・
MTRRでエラー
MTRRはこの辺( http://phoronix.com/forums/showthread.php?16940-bad-MTRR-setup-according-to-DRM )
CONFIG_X86_PAT=n CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=1
とあるので
$ vi .config -CONFIG_X86_PAT=y -CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=0 +CONFIG_X86_PAT=n +CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=1
でリビルド
$ make clean $ fakeroot make-kpkg --initrd --revision=20110419b kernel-image
さっきのをアンインストール
$ sudo dpkg -r linux-image-2.6.38.3_20110419a_amd64.deb
新しいのをインストールして再起動
$ sudo dpkg -i ../linux-image-2.6.38.3_20110419b_amd64.deb $ sudo reboot
とりあえず再起動した
dmesgを確認
前回のdmesg $ sudo cat /var/log/dmesg.0|grep MTRR [ 0.000000] MTRR default type: uncachable [ 0.000000] MTRR fixed ranges enabled: [ 0.000000] MTRR variable ranges enabled: [ 4.155770] [drm] MTRR allocation failed. Graphics performance may suffer. 今回のdmesg $ sudo cat /var/log/dmesg|grep MTRR [ 0.000000] MTRR default type: uncachable [ 0.000000] MTRR fixed ranges enabled: [ 0.000000] MTRR variable ranges enabled: [ 0.000000] original variable MTRRs [ 0.000000] New variable MTRRs
大丈夫なようだ!
$ uname -a Linux debian64 2.6.38.3 #3 SMP Wed Apr 20 20:15:32 JST 2011 x86_64 GNU/Linux
無事、2.6.38.3 に移行できた。
make menuconfig がほぼdefaultなので、あとでカスタマイズしよう