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 をサポートしている。


[編集] 参考資料