Hatena::ブログ(Diary)

へにゃぺんて@日々勉強のまとめ

2015-04-13

Linux 4.0ビルド・起動確認と、ライブパッチソースの在り処

今日(4/13)、Linux 4.0がリリースされました。


何度かこういうネタを記事にしていますが、

今回も、自分のマシンでビルドと起動を試してみました。


また、それだけだと記事としてあんまりなので、

v3.19からの差分や、

4.0.0の目玉の「ライブパッチ」の各種ソースコードの場所を調べてみました。


ビルドと起動確認

以前の記事と同じやり方で、ビルドインストール、起動確認できました。


ちなみに、

CPUIntel(R) Core(TM)2 Duo CPU T7250 @ 2.00GHz/proc/cpuinfo の model
メモリ1023828 kB/proc/meminfo の MemTotal

のマシンで、以前の記事と同じDebian Wheezy上で、

ビルドに1時間30分ほどでした。


私が時代遅れなマシンを使っているだけなので、

普通はもっと短時間で済むのかもしれません。


v3.19との差分を調べる

特定のバージョン間で変更のあったファイル数を出してみます。

1. リポジトリダウンロード(clone)

$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git

2. 差分の取得

リーナスのリポジトリ上ではバージョン番号でタグが打ってあるので、

git diff引数にバージョン番号を与えれば、変更内容の一覧を取得できます。

$ cd linux/
$ git diff v3.19 v4.0

3. 変更ファイル数の取得

先ほどのgit diffコマンドの結果をファイルに書きだして、

以下のようなコマンドを実行すると、

変更が加えられたファイル数は9489個だとわかります。

$ git diff v3.19 v4.0 > git_diff_v3.19_v4.0.diff
$ grep '^--- a\|^+++ b' git_diff_v3.19_v4.0.diff | cut -d'/' -f2- | sort | uniq > linux_3.19_4.0_diff_files.log
$ wc -l linux_3.19_4.0_diff_files.log
9489 linux_3.19_4.0_diff_files.log
  • 2つ目のコマンドのワンライナーは、git_diff_v3.19_v4.0.diffの差分情報からファイル名のみを抽出し、重複行を削除しています

ライブパッチの在り処

ライブパッチは、rcの頃から色々なサイトで紹介されていますが、

リブートすること無くパッチを当てられる機能、とのことです。

(私自身、まだよくわかっていません。。。)


ともあれ、注目の「ライブパッチ」がどのようなものか、

せっかくならソースコードを見てみたいものです。


ライブパッチ関係のファイルはファイル名に"livepatch"が入っています。

なので、Linuxソースコードディレクトリを対象に、

$ find linux/ -name '*livepatch*'

このようなコマンドで、該当するファイルをリストアップできます。


試してみると、該当するファイルは以下のとおりでした。

  • samples/livepatch
  • samples/livepatch/livepatch-sample.c
  • kernel/livepatch
  • Documentation/ABI/testing/sysfs-kernel-livepatch
  • arch/x86/kernel/livepatch.c
  • arch/x86/include/asm/livepatch.h
  • include/linux/livepatch.h

Documentation/ABI/testing/sysfs-kernel-livepatch

によると、以下のファイルを通して操作するようです。

  • /sys/kernel/livepatch
  • /sys/kernel/livepatch/<patch>
  • /sys/kernel/livepatch/<patch>/enabled
  • /sys/kernel/livepatch/<patch>/<object>
  • /sys/kernel/livepatch/<patch>/<object>/<function>

samples/livepatch/

には、Makefileも置いてあるので、

まずはここを見て、試してみるのが良さそうです。


追記

デフォルトコンフィグではライブパッチは有効になっていません。


make menuconfigでは、

"/"キーを押すと、シンボル名で検索できます。


"livepatch"で検索してみたところ、

  • Processor type and features

を有効化するのが良さそうです(シンボル名:"LIVEPATCH")。


なお、このコンフィグは、以下に依存しています。

  • DYNAMIC_FTRACE_WITH_REGS
  • MODULES
  • SYSFS
  • KALLSYMS_ALL
  • HAVE_LIVEPATCH

無効なものがあると、"Processor type and features"の中に現れないので、

先に、有効化する必要があります。

(それぞれのコンフィグの場所は、"/"で検索すれば良いです。)


ただし、"HAVE_LIVEPATCH"はアーキテクチャ依存で決まっているようで、

Symbol: HAVE_LIVEPATCH [=n]
Type  : boolean
  Defined at kernel/livepatch/Kconfig:1
  Selected by: X86_64 [=n] && 64BIT [=n]

"Selected by:"に、"X86_64 && 64BIT"とあるので、

当面、ライブパッチx86(64ビット)環境でしか使えないようです。(。。無念)

  • ちなみに、"[=n]"とあるのは現在の設定値です
  • 私の環境はx86の32ビットなので、"=n"と出ています

あと、サンプルソースビルドも、

  • Kernel hacking
    • Sample kernel code
      • Build live patching sample -- loadable modules only

を有効化すると(シンボル名:"SAMPLE_LIVEPATCH")行なってくれるようですので、x86(64ビット)な方は試してみてください。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

リンク元