人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

現在 Ubuntu を使用しており、これから Linux kernel (特にドライバまわり)を読んで勉強していこうと思っています。
kernel 内で使用されている関数をEmacsなどのプログラミング環境、もしくはシェルから効率よく調べる手順を教えてください。
すべての関数は無理だと思ってますので、使用頻度の高い関数(printk()など)がカバーされていればよいです。

以下これまで自分で調べた範囲での知識を挙げておきます。これらに当てはまらない方法であっても、効率的、便利な方法があれば教えてください。

・ kernel関数用のmanpageは、suseでは存在してるがUbuntuでは見つけられませんでした。
・ linux-doc は見てみましたが、探している関数名から説明を見つけるのがスムーズにできないため、あきらめました。
・ kernelソースコードをgrepで検索するのは時間がかかってしまう上、説明文もあった方がうれしい。grepの仕方にもコツがあるのでしょうか?
・ GNU Global の gtags も利用してみましたが、インデックス作成に時間がかかるのはともかく、Emacsでタグジャンプするのにも結構時間(2分とか)がかかっており、もっと効率がよい方法を探しています。(改善方法があればおしえてください。)

●質問者: BlueSkyDetector
●カテゴリ:コンピュータ
✍キーワード:DOC Emacs GNU grep kernel
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● longicorn
●50ポイント ベストアンサー

kernel関数用のmanについては分かりません。

というか自分は見たことがないです。


自分はVim使いなのでctagsを利用していますので参考までに。

makeでタグファイルを作成できます。

$ time make tags
 MAKE tags

real 0m43.947s
user 0m20.057s
sys 0m2.472s

タグファイルを作成さえすれば一瞬で関数ジャンプが出来ます。


Emacsならば以下のコマンドでタグファイルを作成できるはずです。

make TAGS

ドライバの情報は以下のサイトで。英語ばかりですけど。

自分は以下のサイトと、本も購入済みです。

Linux Device Drivers, 2nd Edition(英語) 日本語版の本有り

Linux Device Drivers, Third Edition(英語) 日本語版の本有り

The Linux Kernel Module Programming Guide(英語)


関数の説明は関数の頭に説明があるかもしれません。

あとはひらメソッドをみれば結構情報があります。


とりあえずのコツはどの機能がどのディレクトリにあるかを覚えることです。

例えばipc/はIPC関係のソースがありますし、fs/はファイルシステム系があります。


また関数名もヒントになります。

システムコールはsys_*()という関数名になっているはずです。

open(2)であればsys_open()という関数名でfs/open.cにあります。


あとは頑張るのみかな。

◎質問者からの返答

さっそくの回答ありがとうございます。

ctagsについては質問文で書いたgtagsと同様なものと理解しているのですが、kernel程度の規模のソースコードであっても実用レベルの反応速度で使用できますか?(ここの部分再度回答いただきたいです。)

Linuxデバイスドライバの本はすでに持っていますが、「The Linux Kernel Module Programming Guide」は知りませんでした。良さそうなサイトですね。ありがとうございます。

ちなみにsuseには存在しているようです、と書いたmanpageは以下URLに存在していました。

http://72.14.235.104/search?q=cache:7EIk-63SmusJ:rpmfind.net/lin...

「頑張る」の方向が見えるところまでまずはたどり着きたいと思っています。


2 ● longicorn
●50ポイント

>ctagsについては質問文で書いたgtagsと同様なものと理解しているのですが、kernel程度の規模のソースコードであっても実用レベルの反応速度で使用できますか?(ここの部分再度回答いただきたいです。)


gtagsはctagsよりも高機能です。

ctags(Vi用)とetags(Emacs用)は昔からあるツールです。

gtagsについてはここを参考にしてください。


で本題の反応速度ですがViでは一瞬で飛びます。

Emacsは使用したことがないですが多分違いはあまりないのではないかと思います。


ちなみに自分の環境はUbuntu-ja 7.10です。

◎質問者からの返答

ありがとうございます。

ctagsを試してみたところ、非常に速く実用できる速度で使用できました。

globalは高機能な分、重かったのかもしれません。

しかし、manpageが気になるところです。存在するならば使用したいような。。。だめならalienでsuseのrpmを入れてしまおうか。

まだまだ回答募集中です。

追記:

自己レスですいませんが、kernelのmanpageをインストールする方法がわかりました。

kernel ソースのトップから以下コマンドでできました。あー、うれしい。

$ sudo make installmandocs

参照元:http://f42.aaa.livedoor.jp/~hassaku/crswikicrs/?LinuxDriver%A4%D...

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ