korechi’s diary

とあるVR/ARエンジニアのブログ

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

  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がクラッシュしたら自分のどこかが明確に悪くて原因があると理解する。
これこそデバイスドライバを記述していく上でとても大事。笑