Linuxカーネル再構築

提供: Akionux-wiki
Share/Save/Bookmark
移動先: 案内検索

概要

Linuxカーネルを再構築する手順を簡単にまとめた。

テスト環境

Slackware Linux 14.0

手順

Linuxカーネルソースコードを/usr/src/linux-x.x.xに展開。ここではx.x.xはバージョンを表すこととする。 .configファイルをコピーすれば、前のバージョンの設定を引き継げる:

# cd /usr/src/linux-x.x.x
# cp ../linux/.config .

.configファイルの編集は

# make menuconfig

で行うか、直接.configをテキストエディタで編集すれば良い。 設定が終わったら、

# make

でビルドし、

# make modules_install

でモジュールをインストール。次に、

# cp System.map /boot/System.map-custom-x.x.x
# cp .config /boot/config-custom-x.x.x
# cp arch/x86_64/boot/bzImage /boot/vmlinuz-custom-x.x.x

でブート関連ファイルをコピー。 また、initrdを作成する:

# mkinitrd -c -k x.x.x -m ext4
OK: /lib/modules/x.x.x/kernel/fs/mbcache.ko added.
OK: /lib/modules/x.x.x/kernel/fs/jbd2/jbd2.ko added.
OK: /lib/modules/x.x.x/kernel/fs/ext4/ext4.ko added.
***** blocks
/boot/initrd.gz created.

ext4の部分はルートになるパーティションのファイルシステムに合わせる。作成したinitrdはブートローダが読める場所(BIOSブートなら/boot、EFIブートならEFIパーティションのブートローダのある場所)に置いて、ブートローダの設定ファイルを編集しておくこと。

mkinitrdコマンドは-rオプションでルートパーティションの指定、-mオプションでコロンで区切ってモジュールを追加、-uオプションでudevを加え、-oで出力先を指定ができるようだ。例えば、

mkinitrd -c -k 3.11.8 -f ext4 -r /dev/sda1 -m usbhid:hid_generic:xhci-hcd:mbcache:bbswithc:nvidia:jbd2:ext4 -u -o /boot/initrd-custom-3.11.8.gz

というように実行できる[1]

新しいカーネルをデフォルトにするならば、linuxカーネルソースのリンクを新しいバージョンに切り替えておく。

cd /usr/src
ln -sf linux-x.x.x linux

/boot以下のリンクも変えておく。

cd /boot
ln -sf System.map-custom-x.x.x System.map
ln -sf config-custom-x.x.x config
ln -sf vmlinuz-custom-x.x.x vmlinuz

eliloの設定

vmlinuzとさきほど作成したinitrd.gzをEFIのeliloがあるディレクトリへコピーする。

# cp vmlinuz-custom-x.x.x /boot/efi/EFI/Slackware/
# cp /boot/initrd.gz /boot/efi/EFI/Slackware/

elilo.confを編集して、新しいカーネルがデフォルトになるようにしておく。initrdでさきほどコピーしたinitrd.gzを指定するのを忘れないようにする。

# vim /boot/efi/EFI/Slackware/elilo.conf
chooser=simple
delay=1
timeout=1
default=vmlinuz-custom-3.18.3
#
image=vmlinuz-custom-x.x.x
        label=vmlinuz-custom-x.x.x
	initrd=initrd.gz
	read-only
	root=/dev/sda3
image=vmlinuz-old
        label=vmlinuz-old
        read-only
        append="root=/dev/sda3 vga=normal ro"

GRUB2の設定

MBRによるブートでGRUBを使う場合、新しいカーネルは

# grub-mkconfig -o /boot/grub/grub.cfg

とすればメニューエントリに加えられる。

新しいカーネルをデフォルトの選択にするには、 /etc/default/grubの

GRUB_DEFAULT="新しいカーネルのエントリの番号(0から始まる)"

で設定する。一番上のエントリならば0である。

"Advanced options for..."で表示されるサブエントリの下に配置された場合は、

GRUB_DEFAULT="サブエントリの番号>サブエントリ中の番号"

と">"を使った書式で記入する[2]

/etc/default/grubを編集した後は、

# grub-mkconfig -o /boot/grub/grub.cfg

を実行する。

その他ドライバなど

その他に特別なカーネルモジュールを今までのカーネルで使っていた場合は忘れずインストールしておこう。

カーネルモジュールの例

  • system/nvidia-kernel
  • system/virtualbox-kernel
インストール後、カーネルモジュールを読み直す。
sudo /etc/rc.d/rc.vboxdrv restart

References

  1. talk:howtos:hardware:nvidia_optimus - SlackDocs http://docs.slackware.com/talk:howtos:hardware:nvidia_optimus
  2. Ubuntu 12.10のGRUB2でデフォルトカーネルを変更するにはどうしたらいいの? - かーねる・う゛いえむにっき http://d.hatena.ne.jp/syuu1228/touch/20130120/1358690996