#3 PCI・USBドライバ作成
OS開発の進捗。
ドライバの意味、わかります?
プリンターなんかを使うとよくドライバって言葉が出てくる。
なんじゃそれ、状態だったのが今回の勉強でしっかり分かった。
ハードウェアを操るソフト or アルゴリズム
これがドライバの正体。
車を操る人はドライバ。これのアナロジーで、ある特定のハードウェアを操るアルゴリズムもドライバ。こういうことらしい。
ドライバ ―― OSの抽象化の仕事を担う思っていたよりも重要なものでビックリ。
USBのホストドライバ
今回はUSBのホストドライバのお勉強。とにかく骨が折れた。
正確には、骨が折れたのは著者でそれを後追いしただけだけれども。
規格という敵
みんなが好き勝手に通信ルールを作ってしまっては困る。
だから、当然USBには規格がある。みんなで共通のルールを守らないといけない。これが大変。
まず探す
まずは、USBデバイスが接続されているのか?接続されているならばいくつ接続されているのかを、見る必要がある。
これはそこまで難しくはない。というもののバス(データが通る道)を片っ端から見ていけばいいから。
ここまではよかった。ここまでは。
bitでの位置指定
探索を終え、デバイスを見つけました。そうしたらまず。ハードウェアからUSBのバージョンや、何をする機器なのか、などの情報を引っ張り出す必要がある。
これがまず細かい。
ハードウェア内のメモリみたいなやつの中に情報があるのだが、位置の指定がbit単位。頭からnbit目からこの情報があるので、ポインタで見にいこうという感じ。
厄介なことに、通常のメモリ空間とIO系のメモリ空間は別物でC / C++ では介入ができない。ということでアセンブリで関数を書いて、C++側から呼び出す実装を行う。
内容の読み取り
さらにその内容もキッチリカッチリ規定されている。
16進数(0xなんちゃら)で情報が入っていて、厳に内容が決められている。
デバイスごとのID、作った会社のID、どんな機能があるのか etc… とにかく読み取る情報量たるや。しかもレジスタとアセンブリのダブルコンボで不慣れな自分にはハードルが高かった。
まとめ
こんなに記事を書いておいてなんだが、今回の分野への理解は浅いと思う。だから今回の記事は、ひとまず一度写経をしてみての感想。アセンブリをつかみ切れていない、レジスタへの理解が浅い。この二つが理解を妨げているように思う。これからテキストを進めていくことで、この二つが血肉について読み返すと、もっと深く理解ができると思う。
今回勉強してみてつくづく感じたのは、退屈だなということ。というのも、ほぼほぼPCIの規格のお勉強。これが自分の肌には合わず、やっているうちに眠くなってくる始末。そんな奴でもなんとかやれるように、テキストはまとめられてあった。大変ありがたい。
テキスト
この記事が気に入ったらサポートをしてみませんか?