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
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
Charging and battery level reporting works
Untested
Screen
Display works. Ideally with sleep mode and brightness control.
Untested
Touchscreen
Untested
Keyboard
Build in physical keyboard
Untested
Touchpad
Build in Touchpad
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
Full-sized USB-A port works (Usually applicable to SBCs and laptops).
Untested
USB OTG
USB On-The-Go or USB-C Role switching
Untested
HDMI/DP
Video and audio output with HDMI or Display Port works.
Untested
Sensors
Accelerometer
Auto screen rotation works in desktops e.g. Phosh or Plasma Mobile
Untested
Magnetometer
Sensor to measure magnetism
Untested
Ambient Light
Untested
Proximity
Untested
Hall Effect
Also known as 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.