ドライバを書くにあたって、最低限必要と思われるリソースを、以下に示します。
C言語の知識は必須です。参考とするべきLinuxのドライバは、ほとんどすべてがC言語で書かれています。加えて、OSの「サブルーチン」の一部を書くわけですから、(一般的な意味での)「モジュール化」プログラミングに関する知識も必要となります。これは、上位/下位とのインターフェースをきちんと設計できるか、というくらいの意味にとってください。
特に特殊なものはつかいません。シェルの知識があり、 make(1) や grep(1) などが使えれば十分でしょう。 ar(1) なども使うことがあるかもしれません。
回路的な動きまで把握している必要はありませんが(あればそれにこしたことはありません。ちなみに私もハードウェアの知識はありません)、ハードウェアとソフトウェアのインターフェースを定義した文書がないと話になりません。うちの会社の場合は、ボードメーカとの取り決めにより仕様書を公開してもらったみたいです。この文書には、ドライバを作るためのフローチャートなども載っていました。オープンなベンダーならWeb上で公開しているかもしれませんし、メールで請求したら送ってもらえるのかもしれません。