snaka; 第6章 マウス入力とPCI - uchan-nos/os-from-zero GitHub Wiki

home

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());
    }
  }