読者です 読者をやめる 読者になる 読者になる

korechi’s diary

とある大学院生のブログ

デバイスドライバ作成の注意

デバイスドライバ
  1. とにかくkmallocしたらkfreeをする
    まじでこれ。PCがフリーズしたらまずこれを疑ったほうが良い。
    どこかでkfreeをし忘れていないかどうか念入りにチェック。
  2. ありえんポインターを参照していないか kmallocもしていないところを参照していないか。それをしたら一発OUT
  3. for文でkmallocは回さない
    kmallocは処理が重いので、できるだけ1回のkmallocで済ませたほうが良い。 あんまりたくさんkmallocをやってるとパンクしてPCが落ちることがある。

  4. KERN_ERRをなるべく書く
    たとえば

if ((*** = kmalloc(sizeof( ~~ ) * NUM, GFP_KERNEL) == NULL) {
 printk(KERN_ERR "error!!!¥n");
}

という風にちゃんとkmallocが失敗した時のことも書いておく。基本
5. ポインターが存在しているかはNULLで確認 これはつまり

if (sample[100] == NULL) {
 if (sample[100] = kmalloc(sizeof ( ~~ ) * 1, GFP_KERNEL)) == NULL) {
  printk(KERN_ERR "error!!!¥n");
 }
}

という風にポインターが割り当てられているかはNULLで確認できる。
ただ、これはエラーを返す時もある。正直よくわからない..
6. 「わけわかんねー挙動をしている」と思わない
こう思いがち。PCがクラッシュしたら自分のどこかが明確に悪くて原因があると理解する。
これこそデバイスドライバを記述していく上でとても大事。笑