MIRACLE
メールサービス申込 ユーザー登録 パートナー情報
お問い合わせ FAQ サイトマップ
MIRACLE LINUXの特長 製品紹介 サービス案内 購入 サポート 技術フォーラム

プロフィール

日本発のリナックス企業、ミラクル・リナックスで奮闘する社員のブログです。

ミラクル関連リンク

採用情報

サイト検索

最近のトラックバック

2008年3月

            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          

« root?ディレクトリ?samba?:Linuxへの遠い道のり(その2) | メイン | vi »

vi系ユーザのカーネルソースコード参照環境

世のカーネルハッカーの皆さんは、カーネルのソースツリーを読み書きするのにそれぞれ独自の最適化済環境を構築しているだろうと想像するのですが、ふりかえって私はといえば、Linuxカーネルを読むようになってもうすぐ3年が経とうというのに全くもって環境らしい環境さえ整えていません。

私の環境はといえば、ctags と vim と grep コマンドだけです。構築(というほどでもありませんが)手順は、kernel.org からダウンロードして展開したソースのトップディレクトリで

$ make tags ARCH=x86_64

などと実行して tag ファイルを作成するだけで終わりです。
vim から tag を利用する際も、vim online で見つかる様々なスクリプトに手を染めることもなく、 Ctrl-] やら Ctrl-T などのデフォルトのキーバインドを叩くだけです。それで足りない場面では grep コマンドに頼っています。そういえば、vi には無い vim の独自機能も殆ど知らないなぁ。。。

『住めば都』ということわざのごとく、便利でない環境にも一度慣れてしまうと気にならないものです。近頃は、マシンパワーも上がって grep コマンドも速いですしね。ところが先日、会社でハッカーの O さんに「効率化の努力を惜しんではあかん」との教えを受けたので、ちょうど良い機会(と blog ネタ)として cscope を使う環境を整えてみました。
vim online を cscope で検索すれば高機能のスクリプトが山ほど見つかりますが、元来シンプルなのが好きな(かつ CUI 作業も多い)私は、vim と cscope のオンラインマニュアルを読んで試しながらノロノロと調べて使ってみることにしたのでした。

まずは cscope のクロス・リファレンスを作成するために、展開した linux-2.6.20 のトップディレクトリで

$ make cscope ARCH=x86_64

を実行します。以下のファイルができました。

-rw-r--r--   1 root root  88052364  2月 13 22:07 cscope.po.out
-rw-r--r--   1 root root 118957329  2月 13 22:07 cscope.out
-rw-r--r--   1 root root  14901248  2月 13 22:07 cscope.in.out

次に vim 上で :help cscope コマンドを実行して表示されるオンラインヘルプを参照して ~/.vimrc に以下のコードを追記しました(本当のこというと、このファイル自体さえ無かったので新規作成しました)。

if has("cscope")
        set csprg=/usr/bin/cscope
        set csto=0
        set cst
        set nocsverb
        " add any database in current directory
        if filereadable("cscope.out")
            cs add cscope.out
        " else add database pointed to by environment
        elseif $CSCOPE_DB != ""
            cs add $CSCOPE_DB
        endif
        set csverb
        map <C-\> :cs find s <C-R>=expand("<cword>")<CR><CR>
        " map <C-]> :cs find g <C-R>=expand("<cword>")<CR><CR>
        map <C-[> :cs find c <C-R>=expand("<cword>")<CR><CR>
endif

以上で準備完了です。
いままでの ctags 環境から便利になった点といえば、 Ctrl-[ でカーソル上の関数を使用する関数に飛べることでしょうか。
cscope がサポートする検索機能は他にもあり、ヘルプには

0 or s: Find this C symbol
1 or g: Find this definition
2 or d: Find functions called by this function
3 or c: Find functions calling this function
4 or t: Find this text string
6 or e: Find this egrep pattern
7 or f: Find this file
8 or i: Find files #including this file

と書かれています。でも s,g,c の3つだけでほとんどの用が足りそうですね。

さて、たいして効率化が進まなかったような気もするのですが、気にせず今回はこれでおしまいです。この blog を読んだハッカーの皆さん、あなたの素晴らしい環境(ただし vi 系に限る)をぜひ教えてください!

トラックバック

このページのトラックバックURL:
http://www.typepad.jp/t/trackback/4447/6793419

このページへのトラックバック一覧 vi系ユーザのカーネルソースコード参照環境:

コメント

http://blog.miraclelinux.com/yume/2006/09/gdbxemacscscope_e0da.html
にxemacs/gdb/cscopeのペアでの利用について書きました。

xemacs使いましょう。

viでいかに便利な環境にするか、というのが大前提なのです。

ちなみになんですが、組込みLinuxでよく用いられる busyboxには viもどきはありますが、emacsもどきまでは入っていないようです。

コメントを投稿

会社情報 採用情報 個人情報保護方針 商標等取り扱い事項 English
Copyright(c)2000-2006 MIRACLE LINUX CORPORATION. All Rights Reserved.