19. カスタムカーネルについて

http://takabrk.seesaa.net/article/449185431.html

This low latency kernel is for Ubuntu 16.04 LTS(64bit) and is aimed at processors after the Intel SandyBridge architecture by adding an aufs patch and CK2 patch,kernel_gcc patch to Linux Kernel.

19.1. カスタムカーネルの作成

64bit OS「Phantom Valkyrie Linux」用のカスタムカーネルを作成しました。フルインストール環境とLiveDVD環境で動作しています。

Linuxカーネル4.11ベースでリアルタイムカーネルを作りたいのですが、まだRT Preempt(https://www.kernel.org/pub/linux/kernel/projects/rt/)のパッチが公開されていないようですので、取り敢えず、カーネルオプションでISDNやIEEE1394など明らかに現在の一般的なコンピューティングで使わないドライバとモジュールを外して、カーネルのファイル容量を減らしました。

カスタムカーネルの作成方法は、昔からあるmakeを使う方法で行っています。

1.Ubuntuパッチが適用されているカーネルソースをダウンロードする。:

$apt-get source linux-image-$(uname -r)

あるいは以下の方法:

$apt-get source linux-source-4.10.0

$apt-get source linux-source-4.8.0

2.カーネルソースに合ったビルド環境をインストールする。:

$sudo apt-get install build-essential kernel-package libqt4-dev pkg-config libncurses5-dev

$sudo apt-get build-dep linux-image-$(uname -r)

3.現在使っているカーネルからカーネルコンフィグをコピーする。:

$make oldconfig

4.コンフィグ設定ツールを起動させて、カーネルオプションを調整し、3で作成した「.config」ファイルに上書き保存する。:

$make xconfig

5.Makefileを任意のテキストエディタで開き、「EXTRAVERSION = 」の部分に適当な数字や文字列を入れておくとバージョン管理がしやすくなります。文字列は先頭に「-」を入れておくと見易くなります。

6.ビルドを行う。:

$sudo make-kpkg -j3 --initrd kernel_image kernel_headers

-jオプションの数字は、プロセッサのコア数+1にしておくと効率的にビルドを行ってくれます。

7.無事にビルドが終われば、カーネルソースフォルダの上位ディレクトリにdebファイルが出来ていますので、そのディレクトリに移動してカーネルとヘッダファイルをインストールします。:

$sudo dpkg -i *.deb

◇削除したモジュール

・Kernel Hacking関連全て

◇最適化

  • Processer family -> Generic-x86-64

  • Kernel Compression mode -> LZ4

  • Preemption Model -> Preemptible Kernel(Low-Latency Desktop)

  • Timer frequency -> 1000MHz

  • Default I/O scheduler -> BFQ-SQ

  • Compiler optimization level -> Optimized harder

  • MuQSS on

  • UKSM on

  • Zen Interactive Tune on

  • CPUFreq Governor -> ondemand

19.2. Linuxカーネルのソースコードとパッチ

1.カーネルソースコード

https://www.kernel.org/

2.公式パッチ

https://www.kernel.org/pub/linux/kernel/

3.UbuntuパッチとUbuntuカーネルバイナリ

http://kernel.ubuntu.com/~kernel-ppa/mainline/

4.リアルタイムカーネルパッチ

https://www.kernel.org/pub/linux/kernel/projects/rt/

5.Processor Familyの種類を増やすパッチ

https://github.com/graysky2/kernel_gcc_patch

6.BFQスケジューラやMuQSSなどを追加するCK1パッチ

http://ck-hack.blogspot.jp/

7.CK1パッチを個別にした物

http://ck.kolivas.org/patches/4.0/

8.Aufs

http://aufs.sourceforge.net/

9.Zen kernel

https://github.com/zen-kernel/zen-kernel

10.pf-kernel

https://pf.natalenko.name/

11.UKSM

https://github.com/dolohow/uksm

◇パッチ適用方法例:

$patch -p1 < xxx.patch

◇xz圧縮されている場合:

$xzcat ../patch-xxx.patch.xz | patch -p1

◇Aufsをgitから取得:

$git clone  git://github.com/sfjro/aufs4-standalone.git

$cd aufs4-standalone

$git checkout origin/aufs4.10

◇Zen Kernel SourceをGitから取得:

$git clone https://github.com/zen-kernel/zen-kernel.git

$cd zen-kernel

$git checkout origin/4.10/master