Jump to content

Apple iPhone 8 (apple-d20)

From postmarketOS Wiki
Note This device is supported as part of a generic port. Refer to Apple_Generic_iDevice_(apple-idevice) for installation instructions and more information.
Apple iPhone 8
iPhone 8
iPhone 8
Manufacturer Apple
Name iPhone 8
Codename apple-d20
Released 2017
Type handset
Hardware
Chipset Apple A11 Bionic
CPU 2.39 GHz hexa-core 64-bit
GPU Custom Tri-Core Apple GPU
Display 750x1334 (326 ppi) Retina IPS LCD
Storage 64GB, 128GB, 256GB
Memory 2GB
Architecture aarch64
Software
Original software
The software and version the device was shipped with.
iOS 11
Extended version
The most recent supported version from the manufacturer.
iOS 16.7.11
postmarketOS
Mainline
Instead of a Linux kernel fork, it is possible to run (Close to) Mainline.
no
Generic port Apple_Generic_iDevice_(apple-idevice)
Device package device-Apple_Generic_iDevice_apple-idevice
Kernel package linux-apple-d20
Features
Flashing
Whether it is possible to flash the device with pmbootstrap flasher.
Untested
USB Networking
After connecting the device with USB to your PC, you can connect to it via telnet (initramfs) or SSH (booted system).
Untested
Battery
Whether charging and battery level reporting work.
Untested
Screen
Whether the display works; ideally with sleep mode and brightness control.
Untested
Touchscreen
Untested
Keyboard
Whether the built-in physical keyboard works.
Untested
Touchpad
Whether the built-in touchpad works.
Untested
Multimedia
3D Acceleration
Untested
Audio
Audio playback, microphone, headset and buttons.
Untested
Camera
Untested
IR TX
Untested
Connectivity
WiFi
Untested
Bluetooth
Untested
GPS
Untested
NFC
Near Field Communication
Untested
Modem
Calls
Untested
SMS
Untested
Mobile data
Untested
Miscellaneous
FDE
Full disk encryption and unlocking with unl0kr.
Untested
USB-A
Whether the full-sized USB-A port works.
Untested
USB OTG
USB On-The-Go or USB-C Role switching.
Untested
HDMI/DP
Video and audio output with HDMI or DisplayPort.
Untested
Sensors
Accelerometer
Handles automatic screen rotation in many interfaces.
Untested
Magnetometer
Sensor to measure the Earth's magnetism
Untested
Ambient Light
Measures the light level; used for automatic screen dimming in many interfaces.
Untested
Proximity
Untested
Hall Effect
Measures magnetic fields; usually used as a flip cover sensor
Untested
Barometer
Sensor to measure air pressure
Untested
Power Sensor
Sensor to monitor current, voltage and power. Not fuel gauge!
Untested

Contributors

Users owning this device


Mainline

A mainline fork for this device is available here with further instructions here. Still needs to be tested and ported to postmarketOS.

Booting a modified PostmarketOS Initramfs

Required files

Instructions

Building things

This section assumes you're on a linux system with all dependencies installed. (Possible on CachyOS as of 30. June, 2025.)

Linux
# Get the Kernel Config
wget https://raw.githubusercontent.com/HoolockLinux/docs/refs/heads/master/config_16k
mv config_16k .config

# With GCC:
make -j$(nproc) ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image.gz dtbs

# With CLANG:
make -j$(nproc) ARCH=arm64 LLVM=1 Image.gz dtbs
pongoterm
# Get code
wget https://github.com/checkra1n/PongoOS/raw/iOS15/scripts/pongoterm.c

# Make sure to install libusb-1.0
gcc pongoterm.c -DUSE_LIBUSB -Os -lusb-1.0 -o pongoterm

Creating a m1n1 blob

cat m1n1.bin <(echo 'chosen.bootargs=loglevel=7 pmos.nosplash')  \
	<path to>/*.dtb \
	<path to>/Image.gz  \
	<path to>/initramfs.new.gz  > m1n1-linux.bin

Booting it

Booting PongoOS

Firstly, Enter DFU mode. This can be done using Palera1n.

palera1n -Dl
Sending and booting the Linux, initramfs images
printf '/send <path to>/m1n1-linux.bin\nbootm\n' | sudo <path to>/pongoterm

What do to now?

Currently, not much is possible.

Accessing the terminal

telnet 172.16.42.1 23

Unpacking and repacking the initramfs

You'd want to do this to add more software / modify the filesystem.

# Set up working directory
mkdir initramfs
mv initramfs.gz initramfs/
cd initramfs/

# Unpack the initramfs
zcat initramfs.gz | sudo cpio -iv --make-directories

# Remove the residue
rm initramfs.gz

# Do your modifications here!
# E.G. sudo mv $(which neowofetch) bin/neowofetch

# Re-pack it!
find . | sudo cpio -ov --format=newc | gzip -c -1 > initramfs.gz

At this point, you can re-make the m1n1 blob and re-boot your iPhone 8 and you'll use the new initramfs.