From postmarketOS

JumpDrive is a tiny flashing and rescue SD card image that is available for a few devices. This article explains how to flash postmarketOS to the eMMC of a device after it booted JumpDrive.

Note that this may not be the only way to flash postmarketOS to the eMMC of a device. For example for devices that can boot from SD cards, the installer images will offer to install postmarketOS to the eMMC.

Following these instructions is only recommended if you know what you are doing, it is easy to shoot yourself in the foot here! Consider using other installation methods instead.


Get the latest JumpDrive image for your device from releases.

Follow the instructions in installation to download a pre-built postmarketOS rootfs image, or generate your own one with pmbootstrap.


From SD card

If your device can boot from SD card (PinePhone, PineTab etc.), flash the image to an SD card. Find the name with lsblk first and make sure it is the right one as you will overwrite data on it. Use a path without partition number at the end, such as /dev/mmcblk0.

$ xz --decompress --stdout pine64-pinephone.img.xz | sudo dd of=/dev/mmcblk... status=progress

Insert the SD card into your device, connect it via USB to your PC and boot up JumpDrive.


Get your phone into the flash mode (see your device's wiki page for more information). Then boot JumpDrive with fastboot, for example:

$ fastboot boot boot-oneplus-fajita.img

Librem 5

Booting JumpDrive on the Librem 5 requires the uuu application is installed on the host computer. uuu is NXP's image deploy tool, and may be found in some distros in a package named mfgtools. Additionally, the following udev rules may be required for uuu to be able to find/access your phone in flash mode:

SUBSYSTEM!="usb", GOTO="librem5_devkit_rules_end"
ATTR{idVendor}=="1fc9", ATTR{idProduct}=="012b", GROUP+="plugdev", TAG+="uaccess"
ATTR{idVendor}=="0525", ATTR{idProduct}=="a4a5", GROUP+="plugdev", TAG+="uaccess"
ATTR{idVendor}=="0525", ATTR{idProduct}=="b4a4", GROUP+="plugdev", TAG+="uaccess"

The rules above assume your user is in the plugdev group, adjust accordingly. You may need to reboot for changes to take effect.

Extract the JumpDrive archive, and you should see something similar:

$ tar xf purism-librem5.tar.xz
$ ls
boot-purism-librem5.sh  dtbs  initramfs-purism-librem5.gz  kernel-librem5.gz  purism-librem5.lst  purism-librem5.tar.xz  u-boot-librem5.bin

Place the Librem 5 into flash mode, then use the helper script from the JumpDrive release to flash the Librem 5:

$ ./boot-purism-librem5.sh
uuu (Universal Update Utility) for nxp imx chips -- libuuu_1.4.72-0-g8e9e189

Success 1    Failure 0

3:2     10/10 [Done                                  ] FB: Done

Flashing to eMMC

Locate the block device exposed to the host computer via JumpDrive:

$ lsblk -o name,size,model,vendor |grep JumpDriv
sdc        29.1G e_eMMC                    JumpDri

In the example above, the /dev/sdc is the eMMC device on your phone.

Again, make sure you know what you are doing, and verify you picked the right path - overwriting the wrong partition or changing the partition layout on Android by accident may cause data loss or render your device unbootable! If you want to proceed:

$ xzcat 20210217-0609-postmarketOS-edge-phosh-6-purism-librem5.img.xz | sudo dd of=/dev/DRIVE status=progress bs=1M oflag=direct iflag=fullblock
4277141504 bytes (4.3 GB, 4.0 GiB) copied, 194 s, 22.0 MB/s
4093+0 records in
4093+0 records out
4291821568 bytes (4.3 GB, 4.0 GiB) copied, 200.427 s, 21.4 MB/s

Remove the usb cable and power off the phone. Remove the JumpDrive SD card if you used one. Power the phone to boot into postmarketOS.

See also