mirror of
https://github.com/manos555555/PS5-Suite.git
synced 2026-10-06 14:00:26 +02:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5022381eeb | ||
|
|
8cdd392576 |
No files matched your search
+51
-1
@@ -1,5 +1,55 @@
|
||||
# Changelog - PS5 Upload Suite
|
||||
|
||||
## Version 4.2.0 - Game Mounter Integration (February 7, 2026)
|
||||
|
||||
### 🎮 Game Mounter Integration
|
||||
- **Mount Games Button** - New green "🎮 Mount Games" button in the client UI
|
||||
- One-click mounting of all uploaded games directly from the PS5 Upload Suite
|
||||
- Button disabled when disconnected, shows "⏳ Mounting..." during operation
|
||||
|
||||
### 🔍 Multi-Path Game Scanning
|
||||
- Scans **6 locations** for games:
|
||||
- `/data/etaHEN/games` (internal storage)
|
||||
- `/mnt/usb0/games` through `/mnt/usb3/games` (USB drives)
|
||||
- `/mnt/ext0/games` (M.2 SSD)
|
||||
- First pass counts total games, second pass processes them
|
||||
- PS5 notifications show real-time progress: "Mounting 3/10 (30%) - Game Name"
|
||||
|
||||
### 🔄 Smart Mount Features
|
||||
- **Duplicate Detection** - Same title ID across multiple drives mounted only once
|
||||
- **Auto-Cleanup** - `auto_unmount_deleted_games()` removes stale mount entries
|
||||
- **Already Mounted Detection** - Skips games that are already mounted via nullfs
|
||||
- **sce_sys Validation** - Verifies game directory has valid `sce_sys/` before mounting
|
||||
|
||||
### 🔧 Payload Changes
|
||||
- **New Command** - `CMD_MOUNT_GAMES` (0x30) added to protocol
|
||||
- **nullfs Mount** - Games mounted to `/system_ex/app/<title_id>`
|
||||
- **DRM Patching** - Automatic `applicationDrmType` fix in `param.json`
|
||||
- **Metadata Copy** - `sce_sys` copied to `/user/app/` and `/user/appmeta/`
|
||||
- **mount.lnk** - Tracks mount source path for cleanup and remount
|
||||
- **Safe Delete** - Replaced `system("rm -rf ...")` with `rmdir_recursive()` to prevent hangs
|
||||
- **remount_system_ex()** - Remounts `/system_ex` as writable for game installation
|
||||
|
||||
### 🖥️ Client Changes
|
||||
- **Protocol.cs** - Added `MountGames = 0x30` enum and `MountGamesAsync()` method
|
||||
- **MainWindow.xaml** - Green "🎮 Mount Games" button between Upload and Cancel
|
||||
- **MainWindow.xaml.cs** - Click handler with progress display and auto-registration
|
||||
- **Auto Registration** - If new games detected, automatically runs `game_mounter.elf` via shell for home screen registration
|
||||
|
||||
### 🐛 Bug Fixes
|
||||
- **Fixed IOVEC_ENTRY(NULL) crash** - `strlen(NULL)` with `-O3` optimization caused segfault in `remount_system_ex()`
|
||||
- **Fixed libSceAppInstUtil startup crash** - Library cannot be loaded in etaHEN payload context (crashes dynamic linker). Switched to standalone `game_mounter.elf` for registration
|
||||
- **Fixed dlopen crash** - `dlopen("libSceAppInstUtil.sprx")` crashes payload thread. Removed dynamic loading approach
|
||||
- **Removed system() calls** - `system("rm -rf ...")` replaced with safe recursive `rmdir_recursive()` to prevent payload hangs
|
||||
- **Fixed compile warnings** - Removed unused `#include <dlfcn.h>`, re-enabled `auto_unmount_deleted_games()`
|
||||
|
||||
### 📝 Technical Notes
|
||||
- `libSceAppInstUtil.sprx` is **not available** in etaHEN payload context (both static linking and dlopen crash)
|
||||
- Game registration (`sceAppInstUtilAppInstallTitleDir`) is handled by the standalone `game_mounter.elf` which runs as a separate ELF with its own library dependencies
|
||||
- The upload suite payload handles nullfs mounting, metadata copy, and DRM patching — everything except the final system registration
|
||||
|
||||
---
|
||||
|
||||
## Version 4.1.0 - Memory Optimization & Large File Handling (February 5, 2026)
|
||||
|
||||
### 🧠 Memory & Performance Improvements
|
||||
@@ -41,7 +91,7 @@
|
||||
- Fixed lock contention causing UI freezes
|
||||
|
||||
### 📊 Tested With
|
||||
- **Astrobot**: 156,253 files, 1,724 directories
|
||||
- **Astrobot**: 156,253 files, 1,724 directories - **53 minutes total**
|
||||
- **Result**: Zero crashes, smooth upload, stable memory usage
|
||||
|
||||
---
|
||||
|
||||
@@ -2,16 +2,16 @@
|
||||
|
||||
**By Manos**
|
||||
|
||||
**Version 4.1.0 - Memory Optimization & Large File Handling**
|
||||
**Version 4.2.0 - Game Mounter Integration**
|
||||
|
||||
Custom high-speed file transfer system for PS5 with etaHEN. Achieves **104+ MB/s** upload speeds for large files using parallel chunked uploads!
|
||||
|
||||
⭐ **NEW in v4.1.0:**
|
||||
- 🧠 **Memory Optimization** - Handles 156K+ files without crashes
|
||||
- ⚡ **Reduced UI Stuttering** - Batch logging for smoother experience
|
||||
- 🔧 **Lock-Free Operations** - ConcurrentDictionary for thread-safety
|
||||
- 🧹 **Auto Memory Cleanup** - Completed files removed from tracking
|
||||
- � **Incremental Processing** - No massive dictionary allocations
|
||||
⭐ **NEW in v4.2.0:**
|
||||
- 🎮 **Mount Games Button** - Mount uploaded games directly from the client
|
||||
- 🔍 **Multi-Path Scanning** - Scans internal storage, USB drives (0-3), and M.2 SSD
|
||||
- � **Duplicate Detection** - Skips already-mounted games automatically
|
||||
- 📊 **Mount Summary** - Detailed results with PS5 notifications
|
||||
- 🧹 **Auto-Cleanup** - Removes mount entries for deleted games
|
||||
|
||||
📱 **Android Mobile Client available!**
|
||||
|
||||
@@ -107,6 +107,12 @@ Download the latest release from the [Releases](https://github.com/manos555555/P
|
||||
- Working directory support
|
||||
✅ **Favorites/Bookmarks** - Quick navigation to saved paths
|
||||
✅ **Multi-PS5 Support** - Save and switch between multiple PS5 profiles
|
||||
✅ **🎮 Mount Games** - Mount uploaded games directly from the client (NEW v4.2)
|
||||
- Scans all game paths: internal, USB drives, M.2 SSD
|
||||
- Duplicate detection across storage locations
|
||||
- Auto-cleanup of deleted game mounts
|
||||
- PS5 notifications with mount progress
|
||||
- Automatic game registration via game_mounter.elf
|
||||
|
||||
---
|
||||
|
||||
@@ -121,6 +127,12 @@ Download the latest release from the [Releases](https://github.com/manos555555/P
|
||||
- ✅ **Fully responsive UI** throughout upload
|
||||
- ✅ **No memory leaks** - stable operation
|
||||
|
||||
### v4.1.0 Real-World Test (Astrobot):
|
||||
- ✅ **156,253 files** uploaded successfully in **53 minutes**
|
||||
- ✅ **1,724 directories** created
|
||||
- ✅ **Zero crashes** - stable memory usage throughout
|
||||
- ✅ **Smooth UI** - no stuttering with massive file counts
|
||||
|
||||
### Previous Results (v1.3.0):
|
||||
- ✅ **42,801 files** uploaded successfully
|
||||
- ✅ **60-150 MB/s** sustained throughput
|
||||
@@ -164,6 +176,31 @@ Download the latest release from the [Releases](https://github.com/manos555555/P
|
||||
|
||||
---
|
||||
|
||||
## 📝 What's New in v4.2.0
|
||||
|
||||
### 🎮 Game Mounter Integration
|
||||
- **Mount Games Button** - New green "🎮 Mount Games" button in the client UI
|
||||
- **Multi-Path Scanning** - Scans 6 locations: `/data/etaHEN/games`, USB drives (0-3), M.2 SSD (`/mnt/ext0/games`)
|
||||
- **Duplicate Detection** - If the same game exists on multiple drives, it's mounted only once
|
||||
- **Auto-Cleanup** - Automatically unmounts entries for games that have been deleted
|
||||
- **PS5 Notifications** - Real-time progress notifications on PS5 screen during mounting
|
||||
- **Detailed Summary** - Shows new mounts, already mounted, duplicates skipped, and failures
|
||||
- **Auto Registration** - Automatically runs `game_mounter.elf` for home screen registration when new games are detected
|
||||
|
||||
### 🔧 Payload Improvements
|
||||
- **New Protocol Command** - `CMD_MOUNT_GAMES` (0x30) for triggering game mount from client
|
||||
- **nullfs Mounting** - Games mounted via nullfs to `/system_ex/app/`
|
||||
- **DRM Patching** - Automatic DRM type fix in param.json
|
||||
- **sce_sys Copy** - Copies game metadata to `/user/app/` and `/user/appmeta/`
|
||||
- **mount.lnk Tracking** - Creates mount link files for persistent mount state
|
||||
|
||||
### 🐛 Bug Fixes
|
||||
- **Fixed IOVEC_ENTRY(NULL) crash** - `strlen(NULL)` with `-O3` optimization caused payload crash
|
||||
- **Fixed libSceAppInstUtil crash** - Library not available in etaHEN payload context, switched to standalone registration
|
||||
- **Removed system() calls** - Replaced `system("rm -rf ...")` with safe recursive delete to prevent hangs
|
||||
|
||||
---
|
||||
|
||||
## 📝 What's New in v3.2.0
|
||||
|
||||
### 🎯 Improvements:
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
<Application x:Class="PS5Upload.App"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
StartupUri="MainWindow.xaml">
|
||||
<Application.Resources>
|
||||
|
||||
</Application.Resources>
|
||||
</Application>
|
||||
@@ -0,0 +1,61 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
using System.Windows.Threading;
|
||||
|
||||
namespace PS5Upload
|
||||
{
|
||||
public partial class App : Application
|
||||
{
|
||||
private static readonly string LogFilePath = Path.Combine(
|
||||
AppDomain.CurrentDomain.BaseDirectory,
|
||||
$"ps5upload_{DateTime.Now:yyyy-MM-dd_HH-mm-ss}.log");
|
||||
|
||||
private static readonly object _logLock = new object();
|
||||
|
||||
public App()
|
||||
{
|
||||
// Global exception handlers
|
||||
this.DispatcherUnhandledException += App_DispatcherUnhandledException;
|
||||
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
|
||||
TaskScheduler.UnobservedTaskException += TaskScheduler_UnobservedTaskException;
|
||||
|
||||
LogToFile("=== Application Started ===");
|
||||
}
|
||||
|
||||
private void App_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
|
||||
{
|
||||
LogToFile($"DISPATCHER EXCEPTION: {e.Exception}");
|
||||
e.Handled = true; // Prevent crash, but log it
|
||||
|
||||
MessageBox.Show($"Error: {e.Exception.Message}\n\nCheck log file: {LogFilePath}",
|
||||
"PS5 Upload Error", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
|
||||
private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
|
||||
{
|
||||
var ex = e.ExceptionObject as Exception;
|
||||
LogToFile($"UNHANDLED EXCEPTION: {ex}");
|
||||
}
|
||||
|
||||
private void TaskScheduler_UnobservedTaskException(object? sender, UnobservedTaskExceptionEventArgs e)
|
||||
{
|
||||
LogToFile($"TASK EXCEPTION: {e.Exception}");
|
||||
e.SetObserved(); // Prevent crash
|
||||
}
|
||||
|
||||
public static void LogToFile(string message)
|
||||
{
|
||||
try
|
||||
{
|
||||
lock (_logLock)
|
||||
{
|
||||
string timestamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
|
||||
File.AppendAllText(LogFilePath, $"[{timestamp}] {message}\n");
|
||||
}
|
||||
}
|
||||
catch { /* Ignore logging errors */ }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,79 @@
|
||||
<Window x:Class="PS5Upload.DuplicateFileDialog"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
Title="File Already Exists"
|
||||
Height="320"
|
||||
Width="550"
|
||||
WindowStartupLocation="CenterOwner"
|
||||
ResizeMode="NoResize"
|
||||
Background="#1E1E1E">
|
||||
|
||||
<Window.Resources>
|
||||
<Style TargetType="Button">
|
||||
<Setter Property="Background" Value="#2D2D30"/>
|
||||
<Setter Property="Foreground" Value="White"/>
|
||||
<Setter Property="BorderBrush" Value="#3F3F46"/>
|
||||
<Setter Property="Padding" Value="15,8"/>
|
||||
<Setter Property="Margin" Value="5"/>
|
||||
<Setter Property="FontSize" Value="13"/>
|
||||
<Setter Property="Cursor" Value="Hand"/>
|
||||
<Style.Triggers>
|
||||
<Trigger Property="IsMouseOver" Value="True">
|
||||
<Setter Property="Background" Value="#3E3E42"/>
|
||||
</Trigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
</Window.Resources>
|
||||
|
||||
<Grid Margin="20">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="*"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<!-- Icon and Message -->
|
||||
<StackPanel Grid.Row="0" Orientation="Horizontal" Margin="0,0,0,15">
|
||||
<TextBlock Text="⚠️" FontSize="32" Margin="0,0,15,0"/>
|
||||
<TextBlock x:Name="MessageTextBlock"
|
||||
Text="This file already exists on PS5:"
|
||||
Foreground="White"
|
||||
FontSize="14"
|
||||
VerticalAlignment="Center"/>
|
||||
</StackPanel>
|
||||
|
||||
<!-- File Name -->
|
||||
<TextBlock Grid.Row="1"
|
||||
x:Name="FileNameTextBlock"
|
||||
Foreground="#4EC9B0"
|
||||
FontSize="13"
|
||||
FontWeight="Bold"
|
||||
Margin="0,0,0,10"
|
||||
TextWrapping="Wrap"/>
|
||||
|
||||
<!-- File Info -->
|
||||
<StackPanel Grid.Row="2" Margin="0,0,0,20">
|
||||
<TextBlock x:Name="LocalSizeTextBlock"
|
||||
Foreground="#9CDCFE"
|
||||
FontSize="12"
|
||||
Margin="0,0,0,5"/>
|
||||
<TextBlock x:Name="RemoteSizeTextBlock"
|
||||
Foreground="#9CDCFE"
|
||||
FontSize="12"/>
|
||||
</StackPanel>
|
||||
|
||||
<!-- Buttons -->
|
||||
<StackPanel Grid.Row="4" Orientation="Vertical">
|
||||
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Margin="0,0,0,10">
|
||||
<Button Content="Replace" Width="120" Click="Replace_Click"/>
|
||||
<Button Content="Skip" Width="120" Click="Skip_Click"/>
|
||||
</StackPanel>
|
||||
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
|
||||
<Button Content="Replace All" Width="120" Click="ReplaceAll_Click"/>
|
||||
<Button Content="Skip All" Width="120" Click="SkipAll_Click"/>
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</Window>
|
||||
@@ -0,0 +1,67 @@
|
||||
using System.Windows;
|
||||
|
||||
namespace PS5Upload
|
||||
{
|
||||
public partial class DuplicateFileDialog : Window
|
||||
{
|
||||
public enum FileAction
|
||||
{
|
||||
Replace,
|
||||
Skip,
|
||||
ReplaceAll,
|
||||
SkipAll
|
||||
}
|
||||
|
||||
public FileAction UserAction { get; private set; }
|
||||
|
||||
public DuplicateFileDialog(string fileName, long localSize, long remoteSize)
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
FileNameTextBlock.Text = fileName;
|
||||
LocalSizeTextBlock.Text = $"Local file: {FormatFileSize(localSize)}";
|
||||
RemoteSizeTextBlock.Text = $"Remote file: {FormatFileSize(remoteSize)}";
|
||||
}
|
||||
|
||||
private void Replace_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
UserAction = FileAction.Replace;
|
||||
DialogResult = true;
|
||||
Close();
|
||||
}
|
||||
|
||||
private void Skip_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
UserAction = FileAction.Skip;
|
||||
DialogResult = true;
|
||||
Close();
|
||||
}
|
||||
|
||||
private void ReplaceAll_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
UserAction = FileAction.ReplaceAll;
|
||||
DialogResult = true;
|
||||
Close();
|
||||
}
|
||||
|
||||
private void SkipAll_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
UserAction = FileAction.SkipAll;
|
||||
DialogResult = true;
|
||||
Close();
|
||||
}
|
||||
|
||||
private string FormatFileSize(long bytes)
|
||||
{
|
||||
string[] sizes = { "B", "KB", "MB", "GB", "TB" };
|
||||
double len = bytes;
|
||||
int order = 0;
|
||||
while (len >= 1024 && order < sizes.Length - 1)
|
||||
{
|
||||
order++;
|
||||
len = len / 1024;
|
||||
}
|
||||
return $"{len:0.##} {sizes[order]}";
|
||||
}
|
||||
}
|
||||
}
|
||||
+18
-2
@@ -1128,12 +1128,14 @@
|
||||
</Grid>
|
||||
</Border>
|
||||
|
||||
<!-- Upload and Cancel Buttons -->
|
||||
<!-- Upload, Mount and Cancel Buttons -->
|
||||
<Grid Grid.Row="5" Margin="0,10,0,0">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="10"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="10"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<!-- Upload Button -->
|
||||
@@ -1147,8 +1149,22 @@
|
||||
Background="#007ACC"
|
||||
IsEnabled="False"/>
|
||||
|
||||
<!-- Cancel Button -->
|
||||
<!-- Mount Games Button -->
|
||||
<Button Grid.Column="2"
|
||||
x:Name="MountGamesButton"
|
||||
Content="🎮 Mount Games"
|
||||
Click="MountGamesButton_Click"
|
||||
Height="45"
|
||||
Width="160"
|
||||
FontSize="14"
|
||||
FontWeight="SemiBold"
|
||||
Background="#28A745"
|
||||
Foreground="White"
|
||||
IsEnabled="False"
|
||||
ToolTip="Mount all uploaded games on PS5 home screen (scans internal, USB, M.2)"/>
|
||||
|
||||
<!-- Cancel Button -->
|
||||
<Button Grid.Column="4"
|
||||
x:Name="CancelButton"
|
||||
Content="❌ Cancel"
|
||||
Click="CancelButton_Click"
|
||||
|
||||
+487
-504
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,29 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>WinExe</OutputType>
|
||||
<TargetFramework>net6.0-windows</TargetFramework>
|
||||
<UseWPF>true</UseWPF>
|
||||
<UseWindowsForms>true</UseWindowsForms>
|
||||
<AssemblyName>PS5Upload</AssemblyName>
|
||||
<RootNamespace>PS5Upload</RootNamespace>
|
||||
<Version>1.0.0</Version>
|
||||
<Authors>Manos</Authors>
|
||||
<Description>High-Speed File Upload Tool for PS5</Description>
|
||||
<Copyright>Copyright © 2026 Manos</Copyright>
|
||||
<Nullable>enable</Nullable>
|
||||
<PublishSingleFile>true</PublishSingleFile>
|
||||
<SelfContained>true</SelfContained>
|
||||
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
|
||||
<PublishReadyToRun>true</PublishReadyToRun>
|
||||
<ApplicationIcon>ps5_logo_fixed.ico</ApplicationIcon>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Resource Include="ps5_logo.png" />
|
||||
<None Include="ps5_logo.ico">
|
||||
<Link>ps5_logo.ico</Link>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
+1035
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,29 @@
|
||||
@echo off
|
||||
echo ================================================
|
||||
echo PS5 Upload Client - Building
|
||||
echo By Manos
|
||||
echo ================================================
|
||||
echo.
|
||||
|
||||
echo [+] Building Windows GUI Client...
|
||||
dotnet publish -c Release -r win-x64 --self-contained true /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true
|
||||
|
||||
if exist "bin\Release\net6.0-windows\win-x64\publish\PS5Upload.exe" (
|
||||
echo.
|
||||
echo ================================================
|
||||
echo [+] SUCCESS! Built PS5Upload.exe
|
||||
echo ================================================
|
||||
echo.
|
||||
echo Location: bin\Release\net6.0-windows\win-x64\publish\PS5Upload.exe
|
||||
echo.
|
||||
echo Copy PS5Upload.exe to any location and run it!
|
||||
) else (
|
||||
echo.
|
||||
echo ================================================
|
||||
echo [-] BUILD FAILED
|
||||
echo ================================================
|
||||
echo.
|
||||
echo Make sure .NET 6.0 SDK is installed:
|
||||
echo https://dotnet.microsoft.com/download/dotnet/6.0
|
||||
exit /b 1
|
||||
)
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 6.7 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 155 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 40 KiB |
@@ -0,0 +1,34 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "================================================"
|
||||
echo "PS5 Upload Server - Compilation"
|
||||
echo "By Manos"
|
||||
echo "================================================"
|
||||
echo ""
|
||||
|
||||
echo "[+] Compiling..."
|
||||
rm -f ps5_upload_server.elf
|
||||
/opt/ps5-payload-sdk/bin/prospero-clang -Wall -O3 -pthread \
|
||||
-I/opt/ps5-payload-sdk/target/include_bsd \
|
||||
-I/opt/ps5-payload-sdk/target/include \
|
||||
-L/opt/ps5-payload-sdk/target/lib \
|
||||
-o ps5_upload_server.elf main.c
|
||||
|
||||
if [ -f "ps5_upload_server.elf" ]; then
|
||||
echo ""
|
||||
echo "================================================"
|
||||
echo "[+] SUCCESS! Compiled ps5_upload_server.elf"
|
||||
echo "================================================"
|
||||
echo ""
|
||||
ls -lh ps5_upload_server.elf
|
||||
file ps5_upload_server.elf
|
||||
echo ""
|
||||
echo "Upload to PS5 and run with elfldr"
|
||||
echo "Server will listen on port 9113"
|
||||
else
|
||||
echo ""
|
||||
echo "================================================"
|
||||
echo "[-] COMPILATION FAILED"
|
||||
echo "================================================"
|
||||
exit 1
|
||||
fi
|
||||
+3140
File diff suppressed because it is too large.
Load diff
Binary file not shown.
Reference in new issue
Block a user