PS3 Linuxのデバイスドライバ
出典: CellFanWiki
PS3のLinux kernelはhypervisor上で動作しており、各種デバイスはhypervisorによって仮想化されている。本項では、PS3 Linuxが持つ、PS3専用のデバイスドライバについてまとめる。
目次 |
[編集] ストレージ(HDD, BD drive, flash ROM)
HDD, BD drive, flash ROMなどの各種ストレージデバイスは、専用のhypervisor callによってアクセスされる。BDドライブは基本的にただのATAPIデバイスなので、ATAPIコマンドをhypervisor call経由で送ることもできるが、幾つかのATAPIコマンドはセキュリティ上の観点からhypervisorによって拒否される。
PS3 Linux Kernel のストレージドライバ(ps3pf_storage)は、SCSI ホストコントローラドライバとして振舞い、ストレージデバイスはSCSIデバイスとして見える。そのため、HDDはSCSIディスクとして /dev/sda のようにアクセスできる。
PS3のHDDとflash ROMは実際にはSCSIデバイスではないので、応答のSCSIコマンドはps3pf_storageドライバによって生成されたものが返される。
[編集] オーディオ
PS3 のオーディオハードウェアはフロントエンド部とバックエンド部の2つから成る。 フロントエンド部はPS3のオーディオチップ自体で、バックエンドはHDMIドライバチップやAVマルチ用D/Aコンバータ、光デジタル出力(SPDIF)ドライバ、オーディオ用のベースクロックジェネレータなどが相当する。
バックエンドオーディオデバイスはAV setting driverと呼ばれる物によって操作される。AV setting driverはhypervisorの背後に存在しているので、ゲストOSから通信したいときにはvirtual UARTを使用する。
PS3 LinuxのオーディオドライバはALSAドライバフレームワークで動作する。(OSSではない。)
[編集] グラフィックス/ビデオ
PS3は非常に強力なGPUを搭載している。GPUはHDMIともAVマルチとも接続されている。また、Cellとも直接接続されている。
ゲストOSからGPUへの直接アクセスは、今のところ禁止されている。ビデオモードやビデオフォーマットの設定もまた、AV setting driverの仕事である。PS3 Linuxのfbドライバはビデオモードの設定をするためにAV setting driverと通信する。
現在、Xサーバーは画像描画のために仮想フレームバッファを使用している。ハードウェアアクセラレーションは、Linux上ではサポートされていない。
[編集] ギガビット・イーサネット
PS3は内蔵ギガビット・イーサネットコントローラを持っているが、普通のPCとは違い、これはPCIデバイスではなく、コンパニオンチップに直接接続されている。ゲストOSから使う場合、専用のhypervisor callを使用する。
PS3 Linuxでは、gelic_netカーネルモジュールによって実装されている。
[編集] USB
PS3のUSBホストコントローラはコンパニオンチップの中に存在しており、これもまた、イーサネットコントローラと同様PCIデバイスではない。PS3 Linuxは起動時に細工しているため、Linux USB ホストコントローラドライバ無修正である。
PS3は内部に高速のUSBハブを持っていて、PS3の前面のUSBポートはそのハブに繋がっている(つまり、ホストコントローラに直接接続されているわけではない)。
[編集] Game PAD
PS3のゲームパッド(sixaxis)は、USBモードとBluetoothモードを持っている。
USBモードは USB HIDの仕様に殆ど準拠しているが、HIDデータ(リポート)を送信可能にするには、特別なUSBリクエストを送信する必要があるため、汎用のUSB HIDドライバの一部が改造されている。普通のゲームパッドと同様、プログラムから入力データを読む際は /dev/input/js0 や /dev/input/event0 といったノードが使用できる。
BluetoothモードはLinuxではサポートされていない。
[編集] Memory card reader/writer
内蔵メモリカードリーダ・ライタは、Memory Stick, コンパクトフラッシュ、SDメモリカードが読み書きできる。コントローラはハイスピードUSBデバイスで、USBマスストレージの仕様に準拠しているため、一切改造していないLinuxの汎用USBマスストレージドライバで対応できる。
[編集] Bluetooth
内蔵USB Bluetooth host controllerは、Bluetooth host controller interface 仕様に準拠しているため、汎用hci_usbドライバでホストコントローラを取り扱うことができる。コントローラはハイスピードUSBデバイスで、内部のEHCIルートポートに直接接続されている。
Bluetoothデバイスとホスト間のペアリングは OS ごとに管理され、ペアリング情報がGame OSに伝播することは無い。
[編集] RTC
内蔵RTC(Real Time Clock)は PS3システムの時刻を保持する。これは、普通のPCと同様にバッテリーでバックアップされ、外部電源が切られていても時を刻みつづける。RTCの値は専用のhypervisor callで読めるが、値をセットすることは出来ない。PS3のRTCは単調に増加しつづけるだけで、決して巻き戻ることはない。
PS3 Linux の RTC は一般的なRTC userland inteface である /dev/rtc をサポートしている。
[編集] 参考資料
- PS3 Linux Distributor's Starter Kit 内の doc/LinuxKernelOverview.html

