Open main menu

postmarketOS β

OnePlus 5 (oneplus-cheeseburger)

OnePlus 5/5T
Manufacturer OnePlus
Name 5/5T
Codename oneplus-cheeseburger, oneplus-dumpling
Released 2017
Category testing
Original software Android 7.1.1 (up to Android 9) on Linux 4.4
Hardware
Chipset Qualcomm MSM8998 Snapdragon 835
CPU 4x 2.45 GHz Cortex-A73 + 4x 1.90 GHz Cortex-A53
GPU Adreno 540
Display 1080x1920/1080x2160 Optic AMOLED (5/5T)
Storage 64 or 128 GB UFS 2.1
Memory 6 or 8 GB LPDDR4X RAM
Architecture aarch64
Features
USB Networking
Works
Flashing
Works
Touchscreen
Works
Display
Works
WiFi
Broken
Xwayland
Works
FDE
Broken
Mainline
Partial
Battery
Broken
3D Acceleration
Broken
Accelerometer
Audio
Broken
Bluetooth
Broken
Camera
Broken
GPS
Mobile data
Broken
SMS
Broken
Calls
Broken
USB OTG
Works



Contents

Contributors

  • deathmist
  • R0551 (mainlining)

Maintainer(s)

deathmist

Users owning this device

Fastboot mode

The OnePlus 5/5T uses fastboot as its flashing protocol.

To enter fastboot mode, hold Volume Up while powering on the device. Release the button when FastBoot Mode can be seen on the display.

Installation

Unlocking the bootloader

If your bootloader is still locked at this point, you need to unlock it to proceed.

WARNING: Doing this WILL delete all your data on the device as a security precaution, so backup all your data before continuing!

There are plenty of guides online describing how to do this, but the run-down should be as follows:

  1. Enable Developer options by tapping the build number 7 times in Settings > About
  2. Go back and enter Developer options to enable both USB Debugging and OEM Unlocking
  3. Install the android-tools-fastboot or android-tools package depending on your machine's distro
  4. Power down your OnePlus 5 & enter fastboot mode using the instructions above this section
  5. Open a terminal window and verify your phone is displayed under fastboot devices to continue
  6. Run fastboot oem unlock and follow the instructions on screen. Navigate menus with Volume Up/Down and select an option with the Power button.
  7. Congrats, you should now have an unlocked bootloader on your device!

Setup build env & create flashables

Install pmbootstrap on your build machine and start following the steps below:

pmbootstrap init
pmbootstrap install

NOTICE: Both phosh and plasma-mobile are NOT working at all currently; this should be solved later by mainlining and using the freedreno DRM driver for graphics & mesa 3D acceleration.

Flashing the device

To begin the flashing process, boot your device to fastboot mode (if you haven't already). The standard flashing process goes as follows:

pmbootstrap flasher flash_rootfs
pmbootstrap flasher flash_kernel
sudo fastboot reboot

If you instead want to install the pmOS root filesystem on userdata partition (around 56 or 120 GB) instead of the system partition (3 GB), run the following instead as the flash_rootfs command:

pmbootstrap flasher flash_rootfs --partition userdata

During e.g. rapid kernel development you can simply boot the new image instead of always flashing to the device boot partition like so:

pmbootstrap flasher boot

LEDs

Currently you can control a whole bunch of the LEDs present on the device via sysfs by writing values to their brightness control files as root:

Screen brightness (0-255) can be adjusted: echo 255 > /sys/class/leds/lcd-backlight/brightness

The backlight for physical buttons can be enabled (1) or disabled (0): echo 1 > /sys/class/leds/button-backlight/brightness

Notification light color & brightness (0-255) are controllable:

  • Red: echo 255 > /sys/class/leds/red/brightness
  • Green: echo 255 > /sys/class/leds/green/brightness
  • Blue: echo 255 > /sys/class/leds/blue/brightness

Control of the rear camera flashlight (/sys/class/leds/torch-light*/brightness) seems to be broken via sysfs anyway right now.

Partition layout

oneplus5:~# fdisk -l -o Device,Start,End,Sectors,Size,Name /dev/sda

Disk /dev/sda: 113.55 GiB, 121911640064 bytes, 29763584 sectors
Disk model: KLUDG8V1EE-B0C1 
Units: sectors of 1 * 4096 = 4096 bytes
Sector size (logical/physical): 4096 bytes / 4096 bytes
I/O size (minimum/optimal): 8192 bytes / 8192 bytes
Disklabel type: gpt
Disk identifier: 98101B32-BBE2-4BF2-A06E-2BB33D000C20

Device     Start      End  Sectors   Size Name
/dev/sda1      6        7        2     8K ssd
/dev/sda2      8     8199     8192    32M persist
/dev/sda3   8200    73735    65536   256M cache
/dev/sda4  73736    73991      256     1M misc
/dev/sda5  73992    74119      128   512K keystore
/dev/sda6  74120    74247      128   512K frp
/dev/sda7  74248    76807     2560    10M oem_dycnvbk
/dev/sda8  76808    79367     2560    10M oem_stanvbk
/dev/sda9  79368    79623      256     1M param
/dev/sda10 79624    81647     2024   7.9M reserve1
/dev/sda11 81648    85695     4048  15.8M reserve2
/dev/sda12 85696    85823      128   512K config
/dev/sda13 85824 29763578 29677755 113.2G userdata

oneplus5:~# fdisk -l -o Device,Start,End,Sectors,Size,Name /dev/sdb

Disk /dev/sdb: 4 MiB, 4194304 bytes, 1024 sectors
Disk model: KLUDG8V1EE-B0C1 
Units: sectors of 1 * 4096 = 4096 bytes
Sector size (logical/physical): 4096 bytes / 4096 bytes
I/O size (minimum/optimal): 8192 bytes / 8192 bytes
Disklabel type: gpt
Disk identifier: 98101B32-BBE2-4BF2-A06E-2BB33D000C20

Device     Start   End Sectors Size Name
/dev/sdb1      6  1018    1013   4M xbl

oneplus5:~# fdisk -l -o Device,Start,End,Sectors,Size,Name /dev/sdc

Disk /dev/sdc: 4 MiB, 4194304 bytes, 1024 sectors
Disk model: KLUDG8V1EE-B0C1 
Units: sectors of 1 * 4096 = 4096 bytes
Sector size (logical/physical): 4096 bytes / 4096 bytes
I/O size (minimum/optimal): 8192 bytes / 8192 bytes
Disklabel type: gpt
Disk identifier: 98101B32-BBE2-4BF2-A06E-2BB33D000C20

Device     Start   End Sectors Size Name
/dev/sdc1      6  1018    1013   4M xblbak

oneplus5:~# fdisk -l -o Device,Start,End,Sectors,Size,Name /dev/sdd

Disk /dev/sdd: 128 MiB, 134217728 bytes, 32768 sectors
Disk model: KLUDG8V1EE-B0C1 
Units: sectors of 1 * 4096 = 4096 bytes
Sector size (logical/physical): 4096 bytes / 4096 bytes
I/O size (minimum/optimal): 8192 bytes / 8192 bytes
Disklabel type: gpt
Disk identifier: 98101B32-BBE2-4BF2-A06E-2BB33D000C20

Device     Start   End Sectors   Size Name
/dev/sdd1      6    13       8    32K reserve
/dev/sdd2     14    14       1     4K cdt
/dev/sdd3     15   270     256     1M ddr
/dev/sdd4    271 32762   32492 126.9M last_parti

oneplus5:~# fdisk -l -o Device,Start,End,Sectors,Size,Name /dev/sde

Disk /dev/sde: 4 GiB, 4294967296 bytes, 1048576 sectors
Disk model: KLUDG8V1EE-B0C1 
Units: sectors of 1 * 4096 = 4096 bytes
Sector size (logical/physical): 4096 bytes / 4096 bytes
I/O size (minimum/optimal): 8192 bytes / 8192 bytes
Disklabel type: gpt
Disk identifier: 98101B32-BBE2-4BF2-A06E-2BB33D000C20

Device      Start     End Sectors   Size Name
/dev/sde1       6     133     128   512K rpm
/dev/sde2     134     261     128   512K rpmbak
/dev/sde3     262     773     512     2M tz
/dev/sde4     774    1285     512     2M tzbak
/dev/sde5    1286    1413     128   512K hyp
/dev/sde6    1414    1541     128   512K hypbak
/dev/sde7    1542    1545       4    16K sec
/dev/sde8    1546    1673     128   512K pmic
/dev/sde9    1674    1801     128   512K pmicbak
/dev/sde10   1802   29961   28160   110M modem
/dev/sde11  29962   34057    4096    16M dsp
/dev/sde12  34058   35081    1024     4M mdtpsecapp
/dev/sde13  35082   36105    1024     4M mdtpsecappbak
/dev/sde14  36106   36361     256     1M dip
/dev/sde15  36362   44553    8192    32M mdtp
/dev/sde16  44554   46601    2048     8M abl
/dev/sde17  46602   48649    2048     8M ablbak
/dev/sde18  48650   52745    4096    16M LOGO
/dev/sde19  52746   69129   16384    64M boot
/dev/sde20  69130   85513   16384    64M boot_aging
/dev/sde21  85514  871945  786432     3G system
/dev/sde22 871946  888329   16384    64M recovery
/dev/sde23 888330  888330       1     4K devinfo
/dev/sde24 888331  888586     256     1M bluetooth
/dev/sde25 888587  888714     128   512K keymaster
/dev/sde26 888715  888842     128   512K keymasterbak
/dev/sde27 888843  888970     128   512K cmnlib
/dev/sde28 888971  889098     128   512K cmnlibbak
/dev/sde29 889099  889226     128   512K cmnlib64
/dev/sde30 889227  889354     128   512K cmnlib64bak
/dev/sde31 889355  889418      64   256K apdp
/dev/sde32 889419  889482      64   256K msadp
/dev/sde33 889483  889483       1     4K dpo
/dev/sde34 889484  897839    8356  32.7M splash
/dev/sde35 897840  897840       1     4K limits
/dev/sde36 897841  898096     256     1M toolsfv
/dev/sde37 898097  900144    2048     8M logfs
/dev/sde38 900145  900656     512     2M sti
/dev/sde39 900657  900688      32   128K devcfg
/dev/sde40 900689  917072   16384    64M logdump
/dev/sde41 917073  917104      32   128K storsec
/dev/sde42 917105  917136      32   128K storsecbak
/dev/sde43 917137  917648     512     2M fw_4j1ed
/dev/sde44 917649  918160     512     2M fw_8v1ee
/dev/sde45 918161  918672     512     2M fw_4g9n4
/dev/sde46 918673  919184     512     2M fw_4t0n8
/dev/sde47 919185 1048570  129386 505.4M minidump
/dev/sde48 927377  927377       0     0B last_parti

oneplus5:~# fdisk -l -o Device,Start,End,Sectors,Size,Name /dev/sdf

Disk /dev/sdf: 1.51 GiB, 1610612736 bytes, 393216 sectors
Disk model: KLUDG8V1EE-B0C1 
Units: sectors of 1 * 4096 = 4096 bytes
Sector size (logical/physical): 4096 bytes / 4096 bytes
I/O size (minimum/optimal): 8192 bytes / 8192 bytes
Disklabel type: gpt
Disk identifier: 98101B32-BBE2-4BF2-A06E-2BB33D000C20

Device      Start    End Sectors   Size Name
/dev/sdf1       6    517     512     2M modemst1
/dev/sdf2     518   1029     512     2M modemst2
/dev/sdf3    1030   1541     512     2M fsg
/dev/sdf4    1542   1542       1     4K fsc
/dev/sdf5    1543   1670     128   512K md5
/dev/sdf6    1671 263814  262144     1G vendor
/dev/sdf7  263815 393182  129368 505.4M reserve3
/dev/sdf8  267863 267863       0     0B last_parti


Mainline kernel

This is heavily W.I.P currently, but it's coming along quite nicely. Here is an imgur gallery with some of the progress showcased!

Here's a list of stuff that is currently (Linux 5.6.13) known to be working (in at least some capacity):

And that's about it for now. Next up would be USB as I've been doing this blind and don't exactly have a great setup to debug stuff / get logsĀ :p

Check the links below for source code.

Building

It's easiest to build mainline (for pmOS anyway) with pmbootstrap, so get that setup and remember the install location (in this guide ~/pmOS/pmbootstrap is an example).

After you've run through the installation steps found on this site at least once please pmbootstrap extract & save the produced downstream boot.img to a known location as we'll reuse the initramfs found inside later.

Next start following the instructions below:

 git clone https://github.com/JamiKettunen/linux-mainline-oneplus5
 cd linux-mainline-oneplus5/
 source ~/pmOS/pmbootstrap/helpers/envkernel.sh     # adjust to match where you've cloned PMB yourself
 make defconfig
 make -j`nproc`

Boot image generation

Now that the kernel image and DTBs have been built we can assemble a bootable Android-friendly boot.img (assuming you're still in the root of the cloned kernel dir):

 pmbootstrap chroot -- apk add abootimg android-tools mkbootimg dtbtool
 export DEVICE=`pmbootstrap config device | cut -d'-' -f2` WORK=`pmbootstrap config work` PMOS_BOOT_IMG_PATH="~/pmOS/downstream-boot.img"
 export TEMP="$WORK/chroot_native/tmp/mainline/" DTB="$PWD/.output/arch/arm64/boot/dts/qcom/msm8998-$DEVICE.dtb"
 rm -r "$TEMP"; mkdir -p "$TEMP"
 cat .output/arch/arm64/boot/Image.gz "$DTB" > "$TEMP/Image.gz-dtb"
 cp "$PMOS_BOOT_IMG_PATH" "$TEMP/boot.img"          # replace "$PMOS_BOOT_IMG_PATH" with the known location of a pmOS downstream boot.img
 pmbootstrap chroot -- abootimg -u /tmp/mainline/boot.img -k /tmp/mainline/Image.gz-dtb -c "bootsize=67108864"

At this point you get to choose whether to boot the new kernel image or more "permanently" flash it on the device's boot partition instead ^^

Boot: pmbootstrap chroot -- fastboot boot /tmp/mainline/boot.img

Flash: pmbootstrap chroot -- fastboot flash boot /tmp/mainline/boot.img

NOTE: Sometimes running pmbootstrap flasher list_devices once is needed to get the device detected in fastboot mode!

Links