以下省略!

タイダルウ(ry ほぼ毎日1記事執筆運動実施中。 ※記事に広告(アフィリエイト)リンクを掲載している場合があります。

ふと思い立ってLinuxカーネル設定弄ってビルドしてみた。そう、カスタムビルドだ。

http://www.flickr.com/photos/43038556@N00/3216251461photo by stibbonsUbuntu機(14.04 LTS)で使っているLinuxカーネルは3.19系(Ubuntu 14.10用)だが、これをCore2に最適化、タイマー周波数変更、Low-Latencyに設定を変更したカーネルをビルドしたのは秘密。その手順をまとめてみた。続きを読むから。

目次

カーネルソースとかを落としてくる

・rootで操作を行う。
・libqt4-dev(多分)やlibncurses5-devが導入されている、標準レポジトリで配布されているカーネルを利用していることを前提とする。

カーネルビルドに必要なパッケージをインストールし、現在使っているカーネルのソースをダウンロードする。apt-get sourceコマンドではソースおよびパッチがダウンロードされ自動的に展開&パッチ適用される。

# apt-get install kernel-package
# apt-get source linux-image-$(uname -r)
# apt-get build-dep linux-image-$(uname -r)
# cd linux-lts-vivid-3.19.0/

現在のカーネル設定をコピー後、カーネル設定を起動する。

# cp /boot/config-3.19.0-49-generic .config
# make oldconfig
# make xconfig #または make menuconfig

xconfigはGUI(Qt利用)、menuconfigはCUI(ncurses利用)での設定となる。
make xconfig または make menuconfigでコケる場合は設定画面を表示するのに必要なライブラリの開発パッケージがインストールされていないのでインストールすること。

設定弄り

画面が表示されたらカーネル設定を弄る。パラメーターを変えたり要らないモジュールを削ったりとか。だが下手に弄るとシステムが動かなくなるので慎重に操作すること。筆者の場合は最適化設定ということで以下の設定を変更した。

  • General setup内のLocal version - append to kernel releaseを"-core2-lowlatency"に設定
  • Processor type and features内の
    • Processor familyを"Core 2/newer Xeon"に変更
    • Preemption Modelを"Preemptible Kernel (Low-Latency Desktop)"に変更
    • Timer frequencyを"1000 HZ"に変更

ビルド&インストール

# make-kpkg clean
# CONCURRENCY_LEVEL=2 make-kpkg --initrd --revision=20160204 kernel_image kernel_headers

CONCURRENCY_LEVELの値はコアの数によって変えるとよさげ。
revisionにはビルド日として今日の日付でも入れておこう。
なお、ビルドにはかなり時間が掛かる。

ビルドができたら1つ上のディレクトリにdebファイルが生成されているはずなのでdpkgでインストール。

# cd ..
# dpkg -i linux-image-3.19.8-ckt12-core2-lowlatency_20160204_i386.deb
# dpkg -i linux-headers-3.19.8-ckt12-core2-lowlatency_20160204_i386.deb

インストール後再起動して新しいカーネルで無事起動することを確認する。

$ uname -r
3.19.8-ckt12-core2-lowlatency

vbox絡みでコケる時の対処法

VirtualBox関連のモジュールのビルド時にエラーが発生する場合は、以下のようにしてinclude、r0drvへのシンボリックリンクを貼れば何とかなる。
参考:Bug #1460768 “Unable to build kernel 3.19.0-18” : Bugs : linux package : Ubuntu

# cd ubuntu/vbox/vboxsf
# ln -s ../include include
# cd ../vboxguest
# ln -s ../include include
# ln -s ../r0drv r0drv
# cd ../vboxvideo
# ln -s ../include include
# cd ../r0drv
# ln -s ../include include