デバイスドライバ

デバイスドライバの勉強してまして、ちょっとしたものを作って登録したり、解除したりと遊んでいたら /proc/devices に次のようなレコードが…

/* ... 省略 ... */
248 simpleio
249 秘秘
250 秘秘
251 秘秘
252 ??秒
/* ... 省略 ... */

simpleio ってのが自作のドライバなのですが、その後に続く「秘」の連続は? まぁ、実際のところドライバのアンロードに失敗して、メモリ関連のエラーが発生しているのでしょうけどね…。

ちょっと面白かったもので。

さぁ、再起動しなくちゃ。

【追記】 上記の理由が分かりました。というか至極基本的なミスをしていましたね。モジュール内のcleanup_module関数にて unregister_chrdev 呼んでいませんでした。馬鹿ですな。

【さらに追記】 どうも insmod を実行すると細々とワーニングが出るのが嫌で、標準で入っているモジュールのソースコードを見ていたら次のようなマクロを呼ぶ必要があるようだ。

MODULE_LICENSE("GPL");
MODULE_AUTHOR("J-Klein");
MODULE_DESCRIPTION("Simple Input/Output device driver.");

別にGPLである必要は無い(モジュールによってはGPLが必須になるようだが正直わかりません)のですが、とにかくこんな感じのマクロを呼んであげると奇麗にインストールできます。そして modinfo コマンドにて情報が見れます。何となく、自分の名前が modinfo で見れる事に酔いしれてみたり…。