デバイスドライバ:コントローラ、ストレージ、その先。

ドライバを読み込むと言っても、いろいろ。メモってみる。
VIVERは「ストレージ」と「NIC」が重要なデバイスで、こいつらを自動的に発見したい。さらにGPUやマウスも検出できるとなお良い。
Linuxカーネルモジュールのdrivers/以下を見てみると、大量のドライバがある。


まず、ホストコントローラのドライバというモノがあるらしい。

たとえばUSBホストコントローラは、ehci-hcdとohci-hcdとuhci-hcdがある。sl811_csは_csだからPCMCIAに繋げるUSBコントローラかな?あとsl811-hcdというのがある。

IEEE1394にはohci1394とpcilynxがある。IEEE1394はさっぱり普及していないから、ドライバも少なくて助かる。

Serial ATAにはahcisata_nv、sata_promise、...と、ベンダごとにある模様。ahciIntelのサウスブリッジが使っているらしいけど、なにやら「Serial ATAホストコントローラの標準規格」という雰囲気のものでもあるらしい。そうなるとsata_nv(NVIDIA)とかはどうなるんだろうか?もう良くワカラン…。

IDEにもホストコントローラがある。当たり前といえば当たり前なのだけど、これはだいたいカーネルに組み込んだ状態でコンパイルされている。VIVERに使うカーネルもそうする。なので自分で検出しないでも良い。

SCSIホストコントローラは、ちょいと意味不明。


で、ホストコントローラは、今時のPCだと大方PCIバスに接続されている。昔はISAバスというものが標準的だったらしいけど、まぁ今は要らないのでは無かろうか。
PCIバスに接続されているので、「PCIバイスの自動検出ツール」で検出できる。このツールは最近作った(これがSimpleDetectPCI)つまり、ホストコントローラのドライバは自動的にロードすることが出来る。PCI接続のNICもこれで検出できる。
最近のPCI ExcpressはPCIとソフトウェア的に互換性があるということで、PCIで検出できるのではなかろうか。
AGPはどうなんだろうか…
あと「チップセット内蔵」というのは、実は中はPCIになっている?
あとはInfiniBandとか、FiberChannelとかSASとかあるな。とりあえず無視だけど。(SASはパラレルなSCSIとソフトウェア互換?)
パラレルポートとシリアルポートは、とりあえず放っておいて良いでしょう。


次に、ストレージドライバなんてものがある。usb-storageとか。
コレはなかなか便利な代物で、たとえばusb-storageを読み込んでおけば、USB接続のHDDとかCDとかフラッシュメモリとかは全部使えるようになるらしい。
IEEE1394はsbp2。これ一つでHDDからDVDから全部対応する。
IDEide-disk、ide-cd、ide-tapeなどなど、種類ごとに分かれていて、ほかにもある。
SCSIはsd_mod(HDD)、sr_mod(光学ドライブ)など。
Serial ATAにはそういうモノは無い…のかな。
これらのドライバは「とりあえず読み込んでおけば良い」ので、問題なし。


で、IEEE1394IDESCSISerial ATAあたりはこれでめでたしめでたしなのだけど、USBはも一つやっかい。(IEEE1394もやっかいであるハズなのだけど、普及してないからダメ)
USB接続なNICというものが存在してくる。(SCSI接続なNICってのもあるのかな…)
しかしUSBは便利なことに自分のデバイスIDから商品名までアナウンスしてくる。なので、これらも自動検出が可能。このツールも最近作った。SimpleDetectUSB。
でも、どうやら汎用USBネットワークドライバというのがあるような気がする。kernel/drivers/usb/net/にusbnetというドライバがある。でもpegasusとかrtl8150とかkawethというドライバも並んでいる。む。良くわからない。rtl8150は名前からしRealtekのチップなのだろうけど。
数が少ないなら、自動検出しないで手当たり次第に読み込むという方法でも良い。


それから、PCMCIAがある。PCMCIAはPCIと同列のところに位置するものらしく、PCMCIAのチップは「PCI-PCMCIAブリッジ」などと言うらしい。
PCI-PCMCIAブリッジはPCIの自動検出でたぶん検出できる。
で、PCMCIAに接続されたカードは、cardmgrという業界標準なプログラムがあるので、これを使って検出することにする。
PCMCIAにUSBコントローラがつながっていたりする。なのでUSBデバイスの自動検出は、PCMCIAの後にしないといけない。


そんなこんな。
ハードウェアは難しいすねぇ…。