Qualcomm Snapdragon 410/412 (MSM8916)
MSM8916/APQ8016 (or Snapdragon 410) is Qualcomm SoC released in 2014, with great mainline support orginally added for the Dragonboard 410c. There is a slightly higher clocked variant (CPU cores up to 1.4 GHz) available as Snapdragon 412.
MSM8916 (Snapdragon 410)
|Alcatel Idol 3 (4.7")||alcatel-idol347||Y||testing|
|ASUS ZenFone 2 Laser (720p)||asus-z00l||Y||testing|
|Asus Zenfone Max||asus-z010d||Y||testing|
|Huawei Ascend G7||huawei-g7||Y||testing|
|LG Spirit 4G LTE||lg-c70n||P||testing|
|Motorola Moto E (2nd Gen)||motorola-surnia||Y||testing|
|Motorola Moto G 2015||motorola-osprey||Y||testing|
|Motorola Moto G4 Play||motorola-harpia||Y||community|
|OPPO Mirror 5s||oppo-a51f||Y||testing|
|Samsung Galaxy A3 (2015)||samsung-a3||Y||community|
|Samsung Galaxy A5 (2015)||samsung-a5||Y||community|
|Samsung Galaxy Grand Prime||samsung-gprime||Y||testing|
|Samsung Galaxy J5 (2015)||samsung-j5||Y||testing|
|Samsung Galaxy S4 Mini Value Edition||samsung-serranove||Y||community|
|Samsung Galaxy Tab A 8.0 (2015)||samsung-gt58||Y||testing|
|Samsung Galaxy Tab A 9.7 (2015)||samsung-gt510||Y||testing|
|Xiaomi Redmi 2||xiaomi-wt88047||Y||community|
APQ8016 (Snapdragon 410, WiFi-only)
|Arrow DragonBoard 410c||arrow-db410c||Y||community|
|Samsung Galaxy Tab 4 10.1 (2015)||samsung-matisseve||Y||testing|
MSM8916v2 (Snapdragon 412)
|BQ Aquaris X5||bq-paella||Y||community|
All MSM8916 devices in postmarketOS use lk2nd as secondary bootloader. It does not replace the stock bootloader. Instead, it is flashed in place of an Android boot image, so that the stock bootloader will first load lk2nd instead of a regular Linux kernel. The advantage of this approach is that there is a consistent installation procedure for all MSM8916 devices (once lk2nd was installed), and various device-specific quirks can be handled within lk2nd.
|Note: lk2nd makes some checks to show device status and capabilities of the firmware such as secure-boot status. Those are informational and you shouldn't be worried if some are marked not as in the screenshot above.|
The instructions for installing lk2nd vary from device to device, so please check your device wiki page for instructions. Once you have lk2nd installed and working, you can proceed with the common installation procedure documented below.
|Please make sure that you are always updated to the latest lk2nd. It makes various preparations to boot upstream Linux kernel and often gets changed alongside the kernel releases as development continues. Your device may have degraded support if you boot newer kernel version on an outdated lk2nd so it's advised to check for new lk2nd updates whenever you see new kernel package release.|
Installation from pre-built image
The MSM8916-based devices in the
community category (see table above) have pre-built images that can be easily installed without pmbootstrap. There are different images (e.g. Phosh or Plasma Mobile) to choose from and they are updated every week. If you want more control about the installation (e.g. no proprietary firmware, different UI, extra packages, ...) consider using the pmbootstrap installation method instead (documented further below).
Choose an image for your device from the download page.
Pick the latest date, choose UI between the ones that are available and download the rootfs image file:
(You don't need the legacy
-boot.img image since lk2nd 0.10.0)
Unpack this file (
unxz *-<device>-*.img.xz) and with phone in "lk2nd mode" flash it to userdata partition. Do not forget to erase system partition to prevent accidental booting from it. For example:
$ unxz 20210202-0502-postmarketOS-edge-plasma-mobile-3.2-samsung-a5lte-mainline-modem.img.xz $ fastboot flash userdata 20210202-0502-postmarketOS-edge-plasma-mobile-3.2-samsung-a5lte-mainline-modem.img $ fastboot erase system $ fastboot reboot
The default username is
user, and the default password is
147147. Enjoy postmarketOS!
Installation using pmbootstrap
Using pmbootstrap you can generate your own fully customized images, with many more UIs to choose from and other options. However, at the moment it works only on Linux systems.
- Install pmbootstrap
- Follow the Installation guide :
pmbootstrap init(choose your device, UI you like and other options)
- Put phone into "lk2nd mode", and continue
- (Ignore the proposed
flash_kernelstep as lk2nd will boot the kernel image from the installed rootfs)
- (Ignore the proposed
- It is recommended to install large phone UIs like Plasma Mobile or Phosh to
userdatapartition, because system partition is too small for them. Note that you can also install the system image onto an sdcard with
pmbootstrap install --sdcard=/dev/sdX:
pmbootstrap flasher flash_rootfs --partition userdata
fastboot erase system
Audio should work out of the box with PulseAudio. In your favorite PulseAudio mixer (e.g.
pulsemixer on the command line) you can select the output port to use (e.g. Speaker, Earpiece, ...).
Note: If you use
pulsemixer you can switch between output/input configuration with
F2, or loop with
Shift+Tab. To select a particular output/input device press
Enter and choose
Everything is muted by default and must be enabled through alsaucm. Unfortunately, the tool is not very user-friendly.
$ alsaucm -i -c hw:0 set _verb HiFi set _enadev <device>
<device> is one of
alsaucm does not track which devices are already enabled, therefore it is possible to produce combinations that won't work properly (e.g.
Earpiece). To switch between devices, the old device first needs to be re-enabled and then disabled:
$ alsaucm -i -c hw:0 set _verb HiFi set _enadev OLD set _disdev OLD set _enadev NEW
|Warning: alsaucm sets the volume to maximum by default. It is possible to increase the volume even further, however, this may lead to permanent damage to your speaker!|
To use the modem, select the
mainline-modem kernel instead of
mainline, and make sure to agree to the usage of non-free firmware (required for the modem).
Note that this changes the way audio is routed on the device:
- Without modem, audio is routed directly to the audio hardware, and works without the need for non-free firmware.
- With modem running, audio must be routed through the audio DSP, which requires non-free firmware.
Therefore you should choose the kernel depending whether or not you would like to run the modem.
For usage instructions, see Modem.
On Qualcomm devices GNSS is usually part of the modem. ModemManager and libqmi (with qmicli) can configure and use the modem Location service. There is a WIP MR to the gpsd that adds the support for GNSS via Qualcomm modems. Alternatively you can run gpsd to read NMEA output from qmicli.
An example of that would be the following. (You need ModemManager to run and make sure that CID is correct)
$ sudo qmicli -pd /dev/modem --loc-start --client-no-release-cid $ sudo qmicli -pd /dev/modem --loc-follow-nmea --client-cid=2 | gpsd -bnN /dev/stdin
- Screen doesn't work in Linux but works in lk2nd.
- Your device may have a display panel that wasn't enabled yet as msm8916 team only enables known working display panels. You can check the config files in linux-panel-drivers repository to see if the panel that is listed on lk2nd screen is enabled there. Contact msm8916 maintainers via Matrix. You can also build the panel driver yourself, consult the MSM8916 Mainlining guide for that.
- CPU runs at most at 998 MHz but it should be capable of running at 1200 MHz.
- While the specifications of MSM8916 have 1200 MHz as max clock speed, currently the max MHz the CPU will operate with pmOS is 998 MHz. There are WIP changes available to make it work (https://github.com/Minecrell/linux/commits/cpr59).
- Device is slow to turn display on after it was left for a while. Calls don't wake it up as well.
- Suspend is not yet fully implemented, please see the "Suspend" section below.
Suspend is not yet fully implemented. For example, incomming calls do not wake up the phone (see pmaports issue #1157). It's recommended to disable suspend.
In Phosh, it can be disabled in Settings/Tweaks -> Power -> Automatic Suspend.
Or you can execute this in a terminal:
$ gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-battery-type 'nothing' $ gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-type 'nothing'
For SSH sessions:
$ DISPLAY=:0 gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-battery-type 'nothing' $ DISPLAY=:0 gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-type 'nothing'
For Plasma Mobile, disabling suspend in the settings currently doesn't work. Use command
kcmshell5 powerdevilprofilesconfig in the terminal to call another settings page that works.
- MSM8916 is a great platform to get started with mainlining! It has a dedicated MSM8916 Mainlining guide that explains how to get started.