現在 Ubuntu を使用しており、これから Linux kernel (特にドライバまわり)を読んで勉強していこうと思っています。

kernel 内で使用されている関数をEmacsなどのプログラミング環境、もしくはシェルから効率よく調べる手順を教えてください。
すべての関数は無理だと思ってますので、使用頻度の高い関数(printk()など)がカバーされていればよいです。

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

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

回答の条件
  • URL必須
  • 1人3回まで
  • 登録:2008/03/20 18:37:42
  • 終了:2008/03/24 20:33:39

ベストアンサー

id:longicorn No.1

longicorn回答回数56ベストアンサー獲得回数62008/03/20 20:46:21

ポイント50pt

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にあります。


あとは頑張るのみかな。

id:BlueSkyDetector

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

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...

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

2008/03/20 21:13:14

その他の回答(1件)

id:longicorn No.1

longicorn回答回数56ベストアンサー獲得回数62008/03/20 20:46:21ここでベストアンサー

ポイント50pt

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にあります。


あとは頑張るのみかな。

id:BlueSkyDetector

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

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...

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

2008/03/20 21:13:14
id:longicorn No.2

longicorn回答回数56ベストアンサー獲得回数62008/03/20 21:30:07

ポイント50pt

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


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

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

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


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

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


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

id:BlueSkyDetector

ありがとうございます。

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

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

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

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

追記:

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

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

$ sudo make installmandocs

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

2008/03/21 00:22:34
  • id:longicorn
    kernelのmanpageをさっそくインストールしました。
    すべての関数があるという訳ではなさそうだけどこれは便利ですね。
  • id:BlueSkyDetector
    > longicorn さん
    コメントありがとうございました。
    非常に勉強になりました。
    もしかしたらこのあたりの情報をまとめたら需要があるかもしれませんね。
    もう少しして振り返る余裕ができたらまとめておきたいと思います。

この質問への反応(ブックマークコメント)

トラックバック

  • kernel内関数のmanpage作成方法 printk を man で見たかったんです。 このまえ使った opensuse には存在したので、どこかにあるはず、と思って探してました。 http://q.hatena.ne.jp/1206005860 で、人力検索
  • kernel内関数のmanpage作成方法 printk を man で見たかったんです。 このまえ使った opensuse には存在したので、どこかにあるはず、と思って探してました。 http://q.hatena.ne.jp/1206005860 で、人力検索
「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません