snaka; 第6章 マウス入力とPCI - uchan-nos/os-from-zero GitHub Wiki
osbook_day06a
の実行結果
USB ドライバの構造 (「ゼロからのOS自作入門」内田公太著、マイナビ出版 P.140 から引用)
- ホストコントローラドライバ
- USBホストコントローラ(USB機器とOSを橋渡しする制御チップ)を扱うソフトウェア
- ホストコントローラの規格に従って作る
- 本書では xHCI のみ対応
- xHCI に準拠したホストコントローラを xHC と呼ぶ
- USBバスドライバ
- ホストコントローラの詳細を隠してUSB規格で定められたAPIをクラスドライバに対して提供する
- クラスドライバ
- USBデバイスの「種別」ごとに用意されたドライバ
- PICバス
- Peripheral Component Interconnect
- 部品とマザーボードを繋ぐための規格
- USBホストコントローラである xHC 以外にも、SSD, ネットワークカード, GPU etc. が接続されている
osbook_day06b
実行結果
- MMIO
- Memory Mapped Input/Output
- メモリと同じようにアドレスを使って読み書きできるレジスタ
- XHC を制御するレジスタ群は MMIO となっている
- PCI コンフィギュレーション空間の BAR0 (Base Address Register 0) に記録されている
PCI コンフィギュレーション空間 (「ゼロからのOS自作入門」内田公太著、マイナビ出版 P.142 から引用)
main 関数の中で マウスイベントを処理し続ける
# main.cpp
while (1) {
if (auto err = ProcessEvent(xhc)) {
Log(kError, "Error while ProcessEvent: %s at %s:%d\n",
err.Name(), err.File(), err.Line());
}
}