Playstation File System is a set of libraries designed primarily to support new filesystems. The main aim was to provide support for reading NTFS from Sony PS3 GameOS. At this moment writing is not supported and is not currently planned.
- Support for multiple simultaneously connected devices.
- Hot swapping of devices.
- Support for multiple partitions (with different FS).
- Alternate data streams
- Sparse files
- File compression
- B+ trees directory
- FAT12, FAT16, FAT32
- Long file names (VFAT)
- Userland Mass Storage device driver is tested on a small set of devices.
- Concurrent access to files on one disc is not supported.
- It supports only the ASCII subset of Unicode (UTF-16).
- Read only access.
libpmsd.a (Playstation Mass Storage Driver)
- A simple userland driver for reading sectors from USB Mass Storage.
libpfs.a (Playstation File System)
- File system drivers NTFS and FAT.
libpfsm.a (Playstation File System Manager)
- Exported functions are in 'libpfsm.h'.
- Responsible for hot swapping, managing partitions and mounting the FS.
== Building ==
If you want to use these libraries in your project, you must add to the
Makefile the following lines:
PPU_LIBS += libpmsd.a libpfs.a libpfsm.a
PPU_LDLIBS += -lusbd_stub
A source code must include the header file with FS Manager interface:
== Usage ==
int32_t PfsmInit(int32_t max_volumes);
The FS Manager must first be initialized with 'PfsmInit'. Maximum possible
connected devices/volumes is set by `max_volumes`. It is suitable to call the
'PfsmUninit' before you quit.
int32_t PfsmDevAdd(uint16_t vid, uint16_t pid, PFSM_DEVICE *dev);
int32_t PfsmDevDel(PFSM_DEVICE *dev);
All supported devices must be registered with the function 'PfsmDevAdd'. The USB
device is identified by Vendor ID (`vid`) a ProductID (`pid`). If the devices is
no longer needed it can be unregistered with 'PfsmDevDel'.
int32_t PfsmVolStat(int32_t vol_id);
The application can monitor the newly added/removed devices using 'PfsmVolStat'.
The parameter `vol_id` must be between 0 and `max_volumes`-1.
PFS_HFILE PfsFileOpen(const char *path);
PFS_HFIND PfsFileFindFirst(const char *path, PFS_FIND_DATA *find_data);
Standard functions for access to the files is similar to the Win32 API. The file
`path` is in the form of '/pvd_usbXXX/DIR/FILE' where XXX represents `vol_id`.
== Sample: GaiaManager ==
For reference implementations was used open source GaiaManager. This solution
extends GaiaManager to connect one device with NTFS or FAT file system. When the
connection is successful, this device is shown as a 'usb10'. Backups in 'BDRIPS'
directory can then be copied in a standard way to internal disk.
Attached sample file 'usbdevs.cfg' with tested devices must be placed in a folder
on the PS3, where is installed GaiaManager ('/dev_hdd0/game/GAIA01985').
If you want to use your own USB disk, you must add another line to 'usbdevs.cfg'.
File 'usbdevs.cfg' lists the device's IDs separated by a newline in the following
VID and PID are hexadecimal numbers that identify the USB device. Linux users can
obtain this identification number using lsusb utility. Transcend StoreJet disk is
Bus 002 Device 011: ID 152d:2329 JMicron Technology Corp. / JMicron USA Tech...
Windows users can use one of these utilities:
Description | StoreJet Transcend
Device Type | Mass Storage
VendorID | 152d (VID)
ProductID | 2329 (PID)
Compiling for CFW/MFW without dongle (not tested):
Compiling for older OFW with a dongle (tested only 3.41):
make -f Makefile.dongle clean
make -f Makefile.dongle
Precompiled package for FW 3.41 (with PSGroove) is included:
== Compatible devices ==
USB Mass Storage driver has been tested with the following devices:
Corsair Flash Voyager (2GB)
Kingston DataTravelerMini (1GB)
Kingston DataTraveler 2.0 1GB/4GB Flash Drive (1GB)
JMicron StoreJet Transcend (320GB)
== TODO ==
Support for a wider range of USB Mass Storage devices.
Support for other file systems. (e.g. Ext2/3)
Support for concurrent access to files.
Proper Unicode (UTF-16) support.