純粋なソフト屋さんが「つくることになってしまった」ということは普通はないでしょうし、そもそもロボット制御屋が書いているので、対象は「ハードの制御屋さん」に片寄ってます。
対象は Linux 2.0, 2.2 で、同時に対応できるドライバを目指します。
(いま、2.0系列、どのくらい需要があるんでしょうか... というか時代は2.4, 2.6時代)
おおよそ、世のハードウェアのドライバを書くために必須な情報はそろえたつもりですが、ときどき追加、FIXは行われます。
(という予定が2.4以降放置。あまり変わっていないはずですが)
個人的趣味では select ははずせません。特にハードウェアのドライバとしては、select でデバイスまとめて全部待機、というのが非常に便利です。
それ以外にも、ドライバの心臓部のデバッグ作業を普通のプロセスで行うために必要な情報を提供します。
早い話が「Linuxはふつうのプロセスで十分ハードを触れます」です。
そこで、壁になったのが、ハードへのアクセスです。とりあえず、デバイスドライバなしでもある程度使えることはわかっていたので、無理だったらあきらめる覚悟でドライバをつくってみることにしました。
それも、ISAが滅びるこれからの時代に対応できるようにPCIバス対応の。
そのために、先生(当時は学生)にPCIのPIOボードを買って頂いていじり始めたのでした。
(Linux で制御っていったらRT-Linuxでは? という疑問に対してはこちら。)
もし、そのときに、オーム社の「LINUXデバイスドライバ」(山崎康宏・山崎邦子 共訳)をみつけていたら、たぶんこのページ(の前身)を書こうとは思いませんでした。 私がいじり始めたのが1999年の2月ころ、本(第一版)が出たのは1998年12月、微妙なタイミングです。 いじり始めたときには適当な情報源がなく、WWWでもページを2つほどみつけただけでした。 これらのページは情報としては覚え書き的性格のもので、そのままドライバ作成に直結するものではありませんでしたが、非常によい取っ掛かりにはなりました。 そのあとはひたすら試行錯誤&カーネル解析の連続でした。 そのときの「やっぱり Linux のソースはいい参考書だ」としみじみ思ったものです。
せっかくドライバを書いたので、それを公開し、かつ、解説をつくることにしました。それが本ページの前身です。 内容的には(たぶん)まちがってはいなかったのですが、なんていうか今見ると見辛いです(笑)。 それでも、複数の方が参考にしてくださり、幸せになって頂きました。 あまつさえ、デバイスドライバの講演依頼まで来てしまい、これはもっと情報を拡充せねば、ということで、書き直しです。
「LINUXデバイスドライバ」があるのになぜまた?、というところですが、世の中にはあまたのC言語の入門書と「プログラミング言語C」があります。 「LINUXデバイスドライバ」が「プログラミング言語C」にあたり、バイブルです。このページは入門書で、面倒なことは省いたり、細かい解説抜きだったりしますが、とっかかりにはなるように、自分が学んだ過程をたどります。
ちなみに、やるからには(講演会で)嘘教えてはいけないので、「バイブル」はこのあいだ買ってきました。
しばらく前に見たときには、ちらっとみて「あ、この内容なら、しってるからいらないや」と買わずに済ませてたんですけど。
ただ、本を買ったら今度はブロック型デバイスがつくりたくなって不穏です。
#そんな暇ないのに。
と、いうところから、もう3年が流れて、勤務先も移り、Linuxのカーネルもまもなく2.6という時代です。 それなのに、2.2時代のページを残しておくのは、いまだに多くのアクセスがあるからで、なぜ2.2のままなのかというと、2.4以降は忙しくなって、あまりいじれなかったからです(言い訳)。 ただ、もしかして、もしかすると、1年以内くらいに何かの拍子に2.6対応ページになっているかもしれません(笑)。 その願いをこめて、リニューアルしました@030831。
なお、その途中で、雑誌記事になりました。そちらもご参考に。配布資料置き場に記事PDFもおいておきました。 ご参考になれば幸いです。