Skip to content

ps5-linux/ps5-linux-image

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

51 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PS5 Linux Image Builder

Builds bootable Linux USB images for PlayStation 5 using Docker containers. Supports Ubuntu 26.04, Arch, CachyOS (Gamescope + Steam), and full Kali Linux, individually or as a multi-distro image with kexec switching.

Prerequisites

  • Docker (with permission to run --privileged containers) — install as per your distro's instructions
  • ~30GB free disk space for Ubuntu, Arch, or CachyOS; a full Kali build needs substantial working space because it creates a 96GB image and a full rootfs tree (~150GB free recommended for a clean Kali build)

Once Docker is installed, add your user to the docker group and apply it without logging out:

sudo usermod -aG docker $USER
newgrp docker

Quick Start

# Build a single Ubuntu 26.04 image
./build_image.sh --distro ubuntu2604

OR

# Build CachyOS (Arch-based, Gamescope + Steam Big Picture)
./build_image.sh --distro cachyos

OR

# Build Kali Linux (XFCE + kali-linux-everything)
./build_image.sh --distro kali

OR

# Build a multi-distro image (ubuntu2604 + arch + cachyos)
./build_image.sh --distro all

The script auto-clones the kernel source, applies PS5 patches, compiles, and builds the image. Subsequent runs reuse cached artifacts automatically. Press Ctrl+C at any time to abort cleanly.

Flash to USB

sudo dd if=output/ps5-ubuntu2604.img of=/dev/sdX bs=4M status=progress

Kali First Boot Time Sync

The Kali image uses UTC by default and enables ntpsec. PS5 hardware may boot Linux without a correct real-time clock, so the displayed time can be wrong until a network connection is available. The Kali recipe configures IPv4 NTP sources that were validated through Android USB tethering, because that connection may not provide usable IPv6 routing.

The Xfce clock's Time and Date window is the legacy time-admin utility. On Kali it can report that NTP support is not installed even though ntpsec is installed and active. Verify or repair synchronization from a terminal:

systemctl --no-pager status ntpsec
ntpq -pn
timedatectl status

If the PS5 clock is still wrong after the internet connection is active, force one initial correction and restart continuous synchronization:

sudo systemctl stop ntpsec
sudo ntpd -gq -c /etc/ntpsec/ntp.conf
sudo systemctl start ntpsec
date

To use a local timezone after boot, for example Kentucky:

sudo timedatectl set-timezone America/Kentucky/Louisville
timedatectl status

Kali Internal WiFi

The Kali image builds and installs the PS5 IW620 mwifiex modules for the PS5-patched kernel. On boot, ps5-iw620.service copies the console-specific firmware dumped by ps5-linux-loader from /boot/efi/lib/nxp/ into /lib/firmware/nxp/, loads the driver, and enables WiFi radio. If the firmware payload is present, NetworkManager should expose the internal interface as mlan0 and the Xfce network applet can be used to scan and connect.

The Kali desktop autologin is enabled for local first boot. SSH is installed but disabled by default because the initial local account is kali with password kali. Before enabling remote access, change that password:

passwd
sudo systemctl enable --now ssh

The image holds its installed kernel packages and protects the boot-copy hook from deploying a generic Kali kernel. Do not replace or unhold the PS5 kernel unless you are intentionally testing a new PS5-patched kernel build.

Ghidra is configured to use JDK 21, its documented supported runtime. Full Kali installations may also contain newer Java versions for other software.

kali-linux-everything installs NFS client components, but the PS5-patched kernel has NFS disabled. A failed run-rpc_pipefs.mount unit can therefore be reported at boot; it only indicates that NFS mounts are unavailable. The Kali desktop and security tools are unaffected.

The full Kali toolset also enables chkrootkit.timer; its daily integrity scan can use noticeable CPU time while it runs.

Options

Flag Description Default
--distro ubuntu2604, arch, cachyos, kali, or all ubuntu2604
--kernel Path to kernel source directory auto-clone version selected by PS5 patch set
--img-size Disk image size in MB 12000 (32000 for all, 98304 for kali)
--clean Remove all cached build artifacts and start fresh off
--kernel-only Build and package the kernel only, then exit off
--patches-ref Branch, tag, or commit SHA for patches v1.2

Caching

The build automatically skips stages that have already completed:

  • Kernel source — reused if work/linux/ exists
  • Kernel packages — reused if .deb/.pkg.tar.zst files exist in linux-bin/
  • Root filesystem — reused if chroot directories are populated

Use --clean to wipe everything and rebuild from scratch. The build will also suggest --clean if a stage fails.

Build Output

PS5 Linux Image Builder
=======================
  Distro:       all
                (ubuntu2604 arch cachyos)
  Image size:   32000MB
  Kernel src:   /path/to/work/linux

Stages:
  1. Kernel            cached
  2. Root filesystem   build
  3. Disk image        build

Logs: /path/to/build.log

  ✓ Kernel packages (cached)
  ✓ Build image builder image
  ⠹ Building arch rootfs

All verbose output goes to build.log. The terminal shows a spinner with live progress.

Distributions

Distro Desktop Kernel format Init
Ubuntu 26.04 (Resolute) GNOME .deb systemd
Arch Sway .pkg.tar.zst systemd
CachyOS Gamescope + Steam Big Picture (Arch + [cachyos] repo, no v3 migration in image build) .pkg.tar.zst systemd
Kali Linux Rolling XFCE + kali-linux-everything .deb systemd

Multi-distro Image

--distro all builds a 32GB image with 4 partitions (one EFI boot partition plus three root filesystems):

Partition Type Label Content
p1 FAT32 boot Shared kernel, per-distro initrds, kexec scripts
p2 ext4 ubuntu2604 Ubuntu 26.04 rootfs
p3 ext4 arch Arch rootfs
p4 ext4 cachyos CachyOS rootfs

The boot partition contains kexec scripts to switch between distros at runtime. Ubuntu 26.04 is the default boot target.

Building the Kernel Standalone

Use --kernel-only to compile the PS5 kernel and produce installable packages without building a full disk image.

./build_image.sh --kernel-only                                # .deb (default)
./build_image.sh --kernel-only --distro all                   # .deb + .pkg.tar.zst
./build_image.sh --kernel-only --patches-ref main             # fetch from specific branch/tag
./build_image.sh --kernel-only --clean                        # wipe and rebuild from scratch

Output packages are written to linux-bin/. Install on a running PS5 Linux system:

sudo dpkg -i linux-bin/linux-ps5_*.deb

Directory Layout

build_image.sh                  # Image builder (also supports --kernel-only)
docker/
  kernel-builder/               # Kernel compilation container
  kernel-builder-arch/         # Repackages .deb kernel as .pkg.tar.zst
  image-builder/
    Dockerfile                  # Image building container (distrobuilder)
    entrypoint.sh               # Single-distro build logic
    entrypoint-multi.sh         # Multi-distro build logic
distros/
  ubuntu2604/                   # Ubuntu 26.04 (Resolute)
  arch/                         # Arch Linux
  cachyos/                      # CachyOS repos + Gamescope/Steam
  kali/                         # Kali Linux Rolling
  shared/                       # Kernel postinst hooks (single + multi)
boot/
  cmdline.txt                   # Kernel cmdline template (__DISTRO__ placeholder)
  vram.txt                      # VRAM allocation
  kexec-{ubuntu2604,arch,cachyos}.sh
work/                           # Build artifacts (auto-created)
linux-bin/                      # Compiled kernel packages
output/                         # Final .img files

About

Linux image builder

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors