Red Hat Code Browser
Red Hat Code Browser は、Red Hat 製品に同梱されるカーネルソースツリー、パッチ、RPM 仕様ファイル、および Changelog を表示するための新しいソースブラウザーです。プログラミング言語またはパッケージの結果を検索およびフィルタリングし、関数、クラス、構造体などの特定のシンボルを検索できます。
機能
- シンボルおよびコードの抜粋を検索する
- ソースコード、パッチ、spec ファイル、changelog を表示する
- ソースコードのファイルに diff 操作を実行する
- Changelog に対応するパッチファイルを表示する
- ソースコードおよびパッチで利用可能な相互参照
- 検索で利用できる言語とパッケージをフィルタリング
Red Hat Code Browser の使用方法
Red Hat Code Browser は、Red Hat Customer Portal Labs ページ (Red Hat Code Browser) で利用できます。
Code Browser ホームページでは、Red Hat Enterprise Linux に同梱されるカーネルのリストをリリース別に整理して表示します。カーネルをクリックして、カーネルソースツリーおよびファイルを表示します。一般的なプログラミング言語で書かれたソースコードファイルでは、構文が自動的に強調され、検出された識別子 (関数、マクロ、変数) がビルドイン検索エンジンで自動的に相互参照されます。
画面上部の検索ボックスは、複数のカーネルソースでコードまたは特定のシンボルを検索するのに使用できます。検索は文脈依存です。特定のカーネルバージョンを表示している時にコードを検索すると、そのカーネルバージョンでコードが自動的に検索されます。
使用方法
検索操作を実行する
特定のカーネルバージョン内で検索操作を実行する
特定のカーネルバージョン内で tg3_tx_recover 文字列 (たとえば kernel-3.10.0-123.4.2.el7) を検索します。そのカーネル内の検索結果が表示されます。

フィルターファセットを使用して検索を最適化する
Makefile ソースを含むファイルで memcpy 文字列を検索します。検索バーに language: makefile パラメーターを入力したり、左側に表示されるフィルターリストから言語を選択したりして、プログラミング言語フィルターを使用します。

ソースコードを表示する
Red Hat Code Browser ホームページからカーネルを選択すると、カーネルソースのツリーが表示されます。

関数の一覧を表示する
カーネルソースを表示してファイルをクリックするとソースコードが表示されます。関数、マクロ、構造体、メンバー定義が左側に表示されます。関数をクリックすると、ファイル内の定義に移動します。

パッチを当てたソースを表示する
パッチがソースコードに適用されていると、パッチアイコンが左側に表示されます。アイコンをクリックして変更箇所を確認します。

Diff 操作を実行する
さまざまなカーネルバージョンで使用されるファイルへの変更を検索します。右端にある Diff ドロップダウンを使用して、現在のソースでその他のカーネルリリースと異なる箇所を検索します。

パッチ一覧を表示する
Patches タブは、特定のカーネルバージョンに適用するパッチの一覧を表示します。パッチのファイル名、サイズ、そのパッチが含まれるカーネルのバージョンを含むパッチの一覧を表示します。

パッチ内を検索する
検索ボックスの隣にあるドロップダウンをクリックして Patch を選択すると、パッチ内の skb_headlen 文字列を検索します。

Bugzilla ID または CVE によって適用されるパッチを表示する
bugzilla: 1152755 を検索して、bugzilla #1152755 に適用されるパッチの一覧を表示します。

または、cve: CVE-2014-3688 を検索して、CVE-2014-3688 に適用するパッチの一覧を表示します。
パッチで修正された行を検索する
xfs_ail_min_lsn 文字列を含むコードを修正するすべてのパッチを一覧表示する modified_lines: xfs_ail_min_lsn を検索します。

同様に、added_lines: set_thread_flag(TIF_NOTIFY_RESUME) は set_thread_flag(TIF_NOTIFY_RESUME) 文字列を追加するパッチを検索し、removed_lines は、この文字列を削除するパッチを検索します。
Spec ファイルを表示する
Spec タブは、特定のカーネルバージョンを構築するために使用される spec ファイルを表示します。

Changelog を表示する
Changelog タブは、特定のカーネルバージョンの Changelog と、そのバージョンに適用されるパッチへのリンクを表示します。Bugzilla ID や CVE 識別子が利用できる場合は適切なページにリンクされます。

Red Hat Code Browser の使用事例
Red Hat Code Browser における重要な使用事例である vmcore ファイルを解析します。Code Browser の強力な検索機能とフィルター機能を使用すれば、指定したカーネルバージョンとファイルパス内のソースコードの範囲を絞り込むことができます。Code Browser がカーネルソースでどのように動作するか以下で説明します。
カーネルの vmcore を解析する
vmcore を解析する場合は、サマリーとバックトレースから開始します。
KERNEL:
/cores/retrace/repos/kernel/x86_64/usr/lib/debug/lib/modules/2.6.32-431.11.2.el6.x86_64/vmlinux
RELEASE:2.6.32-431.11.2.el6.x86_64
PANIC:"kernel BUG at drivers/net/tg3.c:6409!"
[exception RIP: tg3_tx_recover+133]
RIP: ffffffffa03aeb85 RSP: ffff880002203cf0 RFLAGS:00010286
RAX:00000000000000af RBX: ffff8800374566e0 RCX:00000000ffffffff
RDX:0000000000000000 RSI:0000000061a37000 RDI: ffff8800374566e0
RBP: ffff880002203d10 R8: ffff880002214008 R9: ffffffff81a01ea8
R10:0000000000000000 R11:0000000000000001 R12: ffff8800374567e0
R13: ffff8800da5e1068 R14:0000000000000002 R15:0000000000000000
ORIG_RAX: ffffffffffffffff CS:0010 SS:0018
...
...
上述の vmcore によると、問題のカーネルは kernel-2.6.32-431.11.2.el6 でシンボルは tg3_tx_recover です。これにより、symbol tg3_tx_recover を検索してコードの動作を確認できます。
検索例:
tg3_tx_recover version:kernel-2.6.32-431.11.2.el6
シンボルを検索する
特別な検索キーワード tag を使用すると識別子を検索できます。たとえば、MM_PAGEVEC_FREE をいうシンボルを検索します。
検索例:
tag: MM_PAGEVEC_FREE
この結果から、検索するシンボルは同じであることがわかります。




