Table of Contents
- 1. カーネルのビルドに必要なパッケージのインストール
- 2. カーネルソースコードのダウンロード
- 3. バージョンの変更
- 4. カーネルコンフィグの変更
- 5. カーネルソースコードの変更
- 6. カーネルのビルド
- 7. 動作確認
1 カーネルのビルドに必要なパッケージのインストール
rpmbuildの為にrpm-buildを、カーネルビルドの為にpatterns-openSUSE-devel_kernelをインストールします。
> sudo zypper -n in rpm-build patterns-openSUSE-devel_kernel
2 カーネルソースコードのダウンロード
デスクトップ向けのkernel-desktopをダウンロードします。カーネルのビルドに必要なkernel-macrosもダウンロードします。
> # If you have already downloaded other package, clear /usr/src/packages.> # sudo rm -rf /usr/src/packages/*> sudo zypper -n si kernel-desktop kernel-macros> cp -a /usr/src/packages ~/rpmbuild> cd ~/rpmbuild> rpmbuild -bp SPECS/kernel-desktop.spec
その他のカーネルについては、例えばvanillaカーネルをビルドする場合はkernel-vanillaとkernel-macrosをダウンロードします。
3 バージョンの変更
バージョンを変更しないとインストール時に既存のカーネルとコンフリクトします。specファイルの変数Releaseを変更することでバージョンを変更します。
> sed -i -e ‘s/^Release:(.*)/Release:1.hiroom2/g’ SPECS/kernel-desktop.spec> diff -uprN SPECS/kernel-desktop.spec{.org,}— SPECS/kernel-desktop.spec.org 2016-12-25 17:35:06.963941101 +0900+++ SPECS/kernel-desktop.spec 2016-12-25 17:36:07.145422377 +0900@@ -61,9 +61,9 @@ License: GPL-2.0 Group: System/Kernel Version: 3.16.7 %if 0%{?is_kotd}-Release: 53.1.g7b4a1f9+Release: 53.1.g7b4a1f9.hiroom2 %else-Release: 53.1+Release: 53.1.hiroom2 %endif Url: http://www.kernel.org/ BuildRequires: bc
4 カーネルコンフィグの変更
カーネルコンフィグはSOURCES/config.tar.bz2にまとめられており、config/<arch>/<type>に置かれています。archはx86_64等で、typeはdesktop等です。
config.tar.bz2を展開し、カーネルディレクトリの.configへコピーします。カーネルディレクトリへ移動してmake menuconfig等でコンフィグを変更し、変更が完了したらconfig.tar.bz2を更新します。
> tar jxf SOURCES/config.tar.bz2> cp config/x86_64/desktop BUILD/kernel-desktop-3.16.7/linux-3.16/.config> cd BUILD/kernel-desktop-3.16.7/linux-3.16> make menuconfig # Change kernel config> cp .config ../../../config/x86_64/desktop> cd ../../..> tar jcf SOURCES/config.tar.bz2 config
この記事ではCONFIG_PRINTK_TIMEを無効にします。
> tar jxf SOURCES/config.tar.bz2> sed -i -e ‘s/CONFIG_PRINTK_TIME=y/# CONFIG_PRINTK_TIME is not set/g’ config/x86_64/desktop> tar jcf SOURCES/config.tar.bz2 config
5 カーネルソースコードの変更
パッチはSOURCES/patches.<type>.tar.bz2に格納されており、SOURCES/series.confに読み込むパッチが記載されています。
独自にパッチを追加するにはSOURCES/patches.addon.tar.bz2にパッチを格納し、SOURCES/series.confにパッチのファイル名を記載します。
tar jxf SOURCES/patches.addon.tar.bz2cat <<EOF > patches.addon/hello.patchdiff -uprN linux-3.16.org/init/main.c linux-3.16/init/main.c— linux-3.16.org/init/main.c 2016-12-25 22:38:14.721618205 +0900+++ linux-3.16/init/main.c 2016-12-25 22:40:09.678637730 +0900@@ -944,6 +944,8 @@ static int __ref kernel_init(void *unuse flush_delayed_fput();+ printk(“Hello, Worldn”);+ if (ramdisk_execute_command) { ret = run_init_process(ramdisk_execute_command); if (!ret)EOFtar jcf SOURCES/patches.addon.tar.bz2 patches.addonecho “patches.addon/hello.patch” >> SOURCES/series.conf
6 カーネルのビルド
カーネルのビルドには1時間ほど掛かります。
> rpmbuild -ba SPECS/kernel-desktop.spec
ビルドしたカーネルをインストールします。
> sudo zypper -n in RPMS/x86_64/kernel-desktop-3.16.7-53.1.hiroom2.x86_64.rpm
再起動してインストールしたカーネルを起動します。
> sudo reboot
7 動作確認
以下の出力が得られました。
> uname -r3.16.7-53.1.hiroom2-desktop> zcat /proc/config.gz | grep CONFIG_PRINTK_TIME# CONFIG_PRINTK_TIME is not set> dmesg | grep Hello[ 2.158619] Hello, World