#format md #acl +All:read # カーネル(デバイスドライバ)課題メモ 今更需要あるか甚だ疑問ですが、メモも兼ねて。 ## Exuberant Ctagsを使う カーネル課題やっていて思ったのですが、カーネル課題に限っては(概要を知りたいとかの一部を除いて)役立ち度が、 「ctagsやgrepを使ってコードを探っていく >>>> google様に聞く」 ってかんじだと思いました。 なので基本的に関数等について詳しく調べたい…、っていうときはツールを使ってカーネルソースを探索するようにした方がいいと思います。 んで、ctagsというのが簡潔にまとめると「関数や構造体や変数の宣言等をコードを探索して索引にして1つのファイルにまとめるツール」なのですが、 これを使うとエディタを開きながら関数宣言にジャンプしたりできて、コードを読むのが楽になります。 VimだとExuberant CtagsというVimに適したctagsの派生があるのでこれをインストールして使いましょう。(emacsはよくわからないので調べて頑張ってください) 大概標準ではExuberant Ctagsでないctagsが入っているのですが、各ディストリ毎にctagsとかのパッケージ名で用意されていたりするので、調べてインストールしてみます。 ~~~ ctags --version ~~~ でExuberant Ctagsと表示されたら正しくインストールされているので、linuxカーネルのルートディレクトリに移動して、 ~~~ ctags -R ~~~ でタグファイル(tags)を作成できます。 あとは、vimから ~~~ :set tags=(タグファイルが見つかるような検索パス) ~~~ でtagsの検索パスを設定して、tagsが見つかるようなディレクトリに移動して、 ~~~ :tag (探したい関数、変数名) ~~~ とか、探したい関数名にカーソルを置き、(Ctrl-])を押したり…とかでタグジャンプができます。 詳しいことはhelp(:help tagとかで出てくる)を読みましょう。 ##デバドラ課題のやること ↓こんなイメージ ~~~ [ ユーザプログラム ] ↓open ↓write ↓read ↓close [ キャラクタデバイスのハンドラ ] ↓xmit ↑(受信用のキューとかに突っ込む) ↓ [自分で設定したパケットタイプの受信ハンドラ] ↓ ↑(パケット受信時のソフトウェア割り込み) [ ethernet層(実際に通信を行うレベル) ] ~~~ (執筆中) ---- [[SystemProgClassCategory]]