https://wiki.postmarketos.org/api.php?action=feedcontributions&user=Opendata&feedformat=atompostmarketOS - User contributions [en]2024-03-28T18:11:16ZUser contributionsMediaWiki 1.39.6https://wiki.postmarketos.org/index.php?title=Mainlining_FAQ&diff=3523Mainlining FAQ2018-06-14T15:53:16Z<p>Opendata: /* How to let the bootloader initialize the panel? */</p>
<hr />
<div><blockquote><br />
'''"Mainlining isn't always fun, but it's hella rewarding"'''<br />
</blockquote><br />
<br />
Various information collected from [[Matrix_and_IRC|#postmarketOS]]. See [[The Mainline Kernel]] for a more howto-style page.<br />
<br />
== How to start? ==<br />
* [[Serial_debugging|Serial cable]] highly recommended<br />
* First step will be to find out how much your device is already supported by mainline<br />
* Check if your soc is supported.. that will be basic building block<br />
* There's really no point doing display till you have uart or USB working<br />
<br />
== Writing dmesg to RAM and reading it out after reboot ==<br />
During the mainlining process you need to be able to get the <code>dmesg</code> output from the device. Typically this is done with a serial cable (see below). Sometimes making such a cable is relatively easy by using the audio jack, but in other cases it requires opening the device or is not possible at all. Here is a less comfortable alternative.<br />
<br />
In Android kernels it is possible to write the output of <code>dmesg</code> to memory, and read it out after reboot from <code>/proc/last_kmsg</code>. So while you are mainlining, you can use Android's <code>ram_console</code> driver from your downstream kernel to dump <code>dmesg</code> to memory as well, then reboot to the downstream kernel and read out <code>/proc/last_kmesg</code>. Quote from decatf:<br />
<blockquote><br />
The Android ram_console does this. It should exist in many if not most Android kernels. The driver is registered the board/machine init. I am still using it even on kernel 4.16. On my device I can force reboot to a downstream recovery kernel and read last_kmsg from a kernel that booted nothing but the bare device tree and the ram_console driver.<br />
<br />
* Allocate the same memory block as your downstream or recovery kernel. Do this by specifying reserved-memory in device tree.<br />
https://github.com/Decatf/linux/blob/tegra-next-p4wifi_pmos/arch/arm/boot/dts/tegra20-samsung_p3.dts#L47-L50<br />
* Initialize the ram_console driver with the appropriate memory address and size in the <code>machine_init</code> function for your device.<br />
https://github.com/Decatf/linux/blob/next-p4wifi_pmos/arch/arm/mach-tegra/board-p4wifi.c#L480-L481<br />
* Make sure the driver is using the same ram console signature as your downstream kernel.<br />
https://github.com/Decatf/linux/blob/next-p4wifi_pmos/drivers/staging/android/ram_console.c#L41<br />
</blockquote><br />
<br />
On more recent devices Android has transitioned over to using the mainline kernels pstore ramoops functionality. If your device is recent enough that the recovery uses pstore then you only need to add a node for the ramoops driver to device tree.<br />
<br />
The memory allocation address of the ram_console and pstore are logged to dmesg. The memory address in following example corresponds to the samsung-p4wifi device in the steps above. To find the memory allocation address of ram_console:<br />
<br />
<syntaxhighlight lang="shell-session"><br />
$ dmesg | grep ram_console<br />
[ 0.906530] ram_console: got buffer at 2e600000, size 100000<br />
</syntaxhighlight><br />
<br />
To find the memory allocation address of pstore ramoops:<br />
<syntaxhighlight lang="shell-session"><br />
$ dmesg | grep attached<br />
[ 0.074293] ramoops: attached 0x100000@0x2e500000, ecc: 0/0<br />
</syntaxhighlight><br />
<br />
== Serial cable ==<br />
=== Can I do it without a serial cable? ===<br />
* in theory, yes by dumping dmesg to RAM (see above)<br />
* once it reliably boots though, and USB comes up properly, you can use the USB serial gadget in the kernel (see below)<br />
<br />
=== How to get serial output? (serial cable) ===<br />
* enable the serial device for your kernel (e.g. for OMAP: CONFIG_SERIAL_OMAP and CONFIG_SERIAL_OMAP_CONSOLE)<br />
* add console=ttySAC0,115200 to the kernel cmdline<br />
* it might also be ttyO0 (uppercase O for OMAP chipset)<br />
<br />
=== How to get serial output over USB? (USB serial gadget) ===<br />
The Linux kernel can act like a serial device, and it's possible to output what you would get on the serial port over that fake serial device directly via USB to your PC.<br />
* set CONFIG_USB_G_SERIAL=y and enable USB as console, and add console=ttyGS0,115200 to the cmdline<br />
<br />
=== Is it possible to boot kernels with a serial cable? ===<br />
* No. Just flash with a normal cable and switch to the serial cable to read the log output.<br />
* Once it reliably boots though, and USB comes up properly, you can use the USB serial gadget in the kernel<br />
<br />
== There's no device tree source (dts) in the kernel fork for my device, how do I make one? ==<br />
<br />
Previous kernels used <code>board-*.c</code> files instead of the <code>dts</code> files. These are in folders such as <code>arch/arm/mach-omap2</code> ([https://android.googlesource.com/kernel/omap/+/android-omap-tuna-3.0/arch/arm/mach-omap2/ example]).<br />
The idea is that you'll need to convert these to <code>dts</code> files. Doing so manually for each of them is a huge and error-prone task, better use one of the following techniques:<br />
* Strip down <code>dts</code> from similar hardware (n900 in case of omap3?) and try to get it to boot<br />
* Add support to an existing mainline driver (e.g. mms1'''4'''4 and mms1'''1'''4 are probably pretty similar) rather than forward-porting the old driver<br />
* Forward-port the board files to recent kernels (new kernels still understand board files for some hardware, but not for all!), then strip them down to a bare minimum you can still test (where serial or usb is still working, so you know that the device boots), and then convert that do <code>dts</code>.<br />
<br />
Finding the best approach is very hardware specific. If you know C and think you have tried some of the methods above without success, consider asking the maintainers of the chipset in the kernel. Regarding OMAP, Pavel [https://github.com/postmarketOS/pmbootstrap/issues/1021#issuecomment-354669394 offered] that you could CC him.<br />
<br />
See also: {{github|1021}}<br />
<br />
<br />
Consider updating your device's kernel to the latest Android stable version first ([https://github.com/android-linux-stable/notes these instruction] might make it easier to convert the board files to dtbs) and then going to real mainline from there.<br />
<br />
== What options are needed to get USB network? ==<br />
* USB_ETH IIRC <br />
* also check the defconfig in aports/main/linux-postmarketos-mainline <br />
<br />
== How to make OpenRC print its output to the serial port? ==<br />
* just set <code>RC_LOGGING</code> to true in /etc/rc.conf<br />
* (it's the init system log like Starting etc.....[ok])<br />
<br />
== How can I compile kernel sources from a local git repo? ==<br />
* Clone the kernel with git (~5GB!)<br />
* Use the following command to build the mainline kernel package with the checked out sources<br />
<syntaxhighlight lang="shell-session"><br />
$ pmbootstrap build linux-postmarketos-mainline --src=~/code/linux<br />
</syntaxhighlight><br />
* [https://github.com/postmarketOS/pmbootstrap/pull/1210#issuecomment-364590002 Implementation details]<br />
<br />
== How can I repackage the initramfs with custom modules? ==<br />
Run a normal installation to generate the initramfs:<br />
<br />
<syntaxhighlight lang="shell-session"><br />
$ pmbootstrap install<br />
</syntaxhighlight><br />
<br />
And then writing a short shell script, that repackages the postmarketOS initramfs with the modules you compiled.<br />
After reading through it, adjust it as needed and execute it as root:<br />
<br />
<syntaxhighlight lang="bash"><br />
#!/bin/sh<br />
# Config<br />
device="oneplus-bacon"<br />
tmpdir="/tmp/pmOS-initfs-with-mainline-modules"<br />
work="$(pmbootstrap -q config work)"<br />
<br />
# Create temp folder<br />
[ -d "$tmpdir" ] && rm -rf "$tmpdir"<br />
mkdir -p "$tmpdir"<br />
<br />
# Extract the pmOS initramfs<br />
cp -v "$work/chroot_rootfs_$device/boot/initramfs-"* initramfs.gz<br />
gzip -d initramfs.gz<br />
cpio -i < initramfs<br />
<br />
# Remove existing modules<br />
rm -rf initramfs lib/modules<br />
<br />
#<br />
# CHANGEME: you need to write the commands that copy the kernel modules from your<br />
# kernel source folder into the initramfs here!<br />
#<br />
<br />
# Package the initramfs again<br />
cd "$tmpdir"<br />
find . -print0 | busybox cpio --quiet -o -H newc | gzip -1 > initramfs-repackaged<br />
</syntaxhighlight><br />
<br />
== How to merge kernel configs? ==<br />
The idea is, that we have a shared <code>linux-postmarketos-stable</code> package, which all mainlined devices use. Check [[Kernel_configuration#Automatically_merging_kernel_configuration]] for instructions on how to merge kernel configs somewhat efficiently with a script.<br />
<br />
== How to flash each postmarketOS partition from the rootfs to a different partition on the phone ==<br />
Usually pmOS writes the whole rootfs (which has its own /boot and / partitions) to one partition on the device ([[Partition-layout|more]]). If your mainline kernel isn't able to find the postmarketOS partition by label (even if you have enabled device mapper in the kernel config), then you could use the following workaround to flash each partition from the rootfs image to a real partition on the device.<br />
<br />
<syntaxhighlight lang="shell-session"><br />
$ pmbootstrap install<br />
$ pmbootstrap export<br />
$ losetup /dev/loop0 <pathtoimage><br />
$ dd if=/dev/loop0p1 of=boot_partition.img<br />
$ dd if=/dev/loop0p2 of=root_partition.img<br />
$ fastboot flash system root_partition.img<br />
$ fastboot flash cache boot_partition.img<br />
</syntaxhighlight><br />
<br />
== Display panel ==<br />
=== How to let the bootloader initialize the panel? ===<br />
opendata found a cool hack to let the bootloader initialize the display, which makes everything a lot easier. It only works with Sony Shinano and Rhine devices.<br />
<br />
* Make sure to base of downstream 3.4 kernel<br />
* Basically extract the dts from your downstream 3.4 kernel<br />
* Use DTC to convert it to a dts<br />
* Then delete everything after main header apart from display stuff (mdp, gpu) and anything in the spmi node<br />
* Then in the spmi node delete everything apart from wled and pm8941@0 gpios<br />
* That should be enough for bootloader to init display<br />
* Example:<br />
** 1. Stock downstream: https://ptpb.pw/hRmy.dts<br />
** 2. Minimum for display init: https://ptpb.pw/f2ye.dts<br />
** 3. mainline dts with second added into it: https://ptpb.pw/q28L.dts<br />
** Then just add it to simple panel with video mode and video hse<br />
<br />
=== Can I use the simple panel driver? ===<br />
* If your device shows the boot splash with mainline, simple panel should work<br />
* Adapt [https://github.com/flto/linux/commit/41bcfbe5f8f00a4a93e0a838456da51a50965e03 this commit] to make it use your panels values (hfp hbp etc)<br />
* now in flags add: <code>MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_HSE</code></div>Opendatahttps://wiki.postmarketos.org/index.php?title=Mainlining_FAQ&diff=3522Mainlining FAQ2018-06-14T15:52:36Z<p>Opendata: /* How to let the bootloader initialize the panel? */</p>
<hr />
<div><blockquote><br />
'''"Mainlining isn't always fun, but it's hella rewarding"'''<br />
</blockquote><br />
<br />
Various information collected from [[Matrix_and_IRC|#postmarketOS]]. See [[The Mainline Kernel]] for a more howto-style page.<br />
<br />
== How to start? ==<br />
* [[Serial_debugging|Serial cable]] highly recommended<br />
* First step will be to find out how much your device is already supported by mainline<br />
* Check if your soc is supported.. that will be basic building block<br />
* There's really no point doing display till you have uart or USB working<br />
<br />
== Writing dmesg to RAM and reading it out after reboot ==<br />
During the mainlining process you need to be able to get the <code>dmesg</code> output from the device. Typically this is done with a serial cable (see below). Sometimes making such a cable is relatively easy by using the audio jack, but in other cases it requires opening the device or is not possible at all. Here is a less comfortable alternative.<br />
<br />
In Android kernels it is possible to write the output of <code>dmesg</code> to memory, and read it out after reboot from <code>/proc/last_kmsg</code>. So while you are mainlining, you can use Android's <code>ram_console</code> driver from your downstream kernel to dump <code>dmesg</code> to memory as well, then reboot to the downstream kernel and read out <code>/proc/last_kmesg</code>. Quote from decatf:<br />
<blockquote><br />
The Android ram_console does this. It should exist in many if not most Android kernels. The driver is registered the board/machine init. I am still using it even on kernel 4.16. On my device I can force reboot to a downstream recovery kernel and read last_kmsg from a kernel that booted nothing but the bare device tree and the ram_console driver.<br />
<br />
* Allocate the same memory block as your downstream or recovery kernel. Do this by specifying reserved-memory in device tree.<br />
https://github.com/Decatf/linux/blob/tegra-next-p4wifi_pmos/arch/arm/boot/dts/tegra20-samsung_p3.dts#L47-L50<br />
* Initialize the ram_console driver with the appropriate memory address and size in the <code>machine_init</code> function for your device.<br />
https://github.com/Decatf/linux/blob/next-p4wifi_pmos/arch/arm/mach-tegra/board-p4wifi.c#L480-L481<br />
* Make sure the driver is using the same ram console signature as your downstream kernel.<br />
https://github.com/Decatf/linux/blob/next-p4wifi_pmos/drivers/staging/android/ram_console.c#L41<br />
</blockquote><br />
<br />
On more recent devices Android has transitioned over to using the mainline kernels pstore ramoops functionality. If your device is recent enough that the recovery uses pstore then you only need to add a node for the ramoops driver to device tree.<br />
<br />
The memory allocation address of the ram_console and pstore are logged to dmesg. The memory address in following example corresponds to the samsung-p4wifi device in the steps above. To find the memory allocation address of ram_console:<br />
<br />
<syntaxhighlight lang="shell-session"><br />
$ dmesg | grep ram_console<br />
[ 0.906530] ram_console: got buffer at 2e600000, size 100000<br />
</syntaxhighlight><br />
<br />
To find the memory allocation address of pstore ramoops:<br />
<syntaxhighlight lang="shell-session"><br />
$ dmesg | grep attached<br />
[ 0.074293] ramoops: attached 0x100000@0x2e500000, ecc: 0/0<br />
</syntaxhighlight><br />
<br />
== Serial cable ==<br />
=== Can I do it without a serial cable? ===<br />
* in theory, yes by dumping dmesg to RAM (see above)<br />
* once it reliably boots though, and USB comes up properly, you can use the USB serial gadget in the kernel (see below)<br />
<br />
=== How to get serial output? (serial cable) ===<br />
* enable the serial device for your kernel (e.g. for OMAP: CONFIG_SERIAL_OMAP and CONFIG_SERIAL_OMAP_CONSOLE)<br />
* add console=ttySAC0,115200 to the kernel cmdline<br />
* it might also be ttyO0 (uppercase O for OMAP chipset)<br />
<br />
=== How to get serial output over USB? (USB serial gadget) ===<br />
The Linux kernel can act like a serial device, and it's possible to output what you would get on the serial port over that fake serial device directly via USB to your PC.<br />
* set CONFIG_USB_G_SERIAL=y and enable USB as console, and add console=ttyGS0,115200 to the cmdline<br />
<br />
=== Is it possible to boot kernels with a serial cable? ===<br />
* No. Just flash with a normal cable and switch to the serial cable to read the log output.<br />
* Once it reliably boots though, and USB comes up properly, you can use the USB serial gadget in the kernel<br />
<br />
== There's no device tree source (dts) in the kernel fork for my device, how do I make one? ==<br />
<br />
Previous kernels used <code>board-*.c</code> files instead of the <code>dts</code> files. These are in folders such as <code>arch/arm/mach-omap2</code> ([https://android.googlesource.com/kernel/omap/+/android-omap-tuna-3.0/arch/arm/mach-omap2/ example]).<br />
The idea is that you'll need to convert these to <code>dts</code> files. Doing so manually for each of them is a huge and error-prone task, better use one of the following techniques:<br />
* Strip down <code>dts</code> from similar hardware (n900 in case of omap3?) and try to get it to boot<br />
* Add support to an existing mainline driver (e.g. mms1'''4'''4 and mms1'''1'''4 are probably pretty similar) rather than forward-porting the old driver<br />
* Forward-port the board files to recent kernels (new kernels still understand board files for some hardware, but not for all!), then strip them down to a bare minimum you can still test (where serial or usb is still working, so you know that the device boots), and then convert that do <code>dts</code>.<br />
<br />
Finding the best approach is very hardware specific. If you know C and think you have tried some of the methods above without success, consider asking the maintainers of the chipset in the kernel. Regarding OMAP, Pavel [https://github.com/postmarketOS/pmbootstrap/issues/1021#issuecomment-354669394 offered] that you could CC him.<br />
<br />
See also: {{github|1021}}<br />
<br />
<br />
Consider updating your device's kernel to the latest Android stable version first ([https://github.com/android-linux-stable/notes these instruction] might make it easier to convert the board files to dtbs) and then going to real mainline from there.<br />
<br />
== What options are needed to get USB network? ==<br />
* USB_ETH IIRC <br />
* also check the defconfig in aports/main/linux-postmarketos-mainline <br />
<br />
== How to make OpenRC print its output to the serial port? ==<br />
* just set <code>RC_LOGGING</code> to true in /etc/rc.conf<br />
* (it's the init system log like Starting etc.....[ok])<br />
<br />
== How can I compile kernel sources from a local git repo? ==<br />
* Clone the kernel with git (~5GB!)<br />
* Use the following command to build the mainline kernel package with the checked out sources<br />
<syntaxhighlight lang="shell-session"><br />
$ pmbootstrap build linux-postmarketos-mainline --src=~/code/linux<br />
</syntaxhighlight><br />
* [https://github.com/postmarketOS/pmbootstrap/pull/1210#issuecomment-364590002 Implementation details]<br />
<br />
== How can I repackage the initramfs with custom modules? ==<br />
Run a normal installation to generate the initramfs:<br />
<br />
<syntaxhighlight lang="shell-session"><br />
$ pmbootstrap install<br />
</syntaxhighlight><br />
<br />
And then writing a short shell script, that repackages the postmarketOS initramfs with the modules you compiled.<br />
After reading through it, adjust it as needed and execute it as root:<br />
<br />
<syntaxhighlight lang="bash"><br />
#!/bin/sh<br />
# Config<br />
device="oneplus-bacon"<br />
tmpdir="/tmp/pmOS-initfs-with-mainline-modules"<br />
work="$(pmbootstrap -q config work)"<br />
<br />
# Create temp folder<br />
[ -d "$tmpdir" ] && rm -rf "$tmpdir"<br />
mkdir -p "$tmpdir"<br />
<br />
# Extract the pmOS initramfs<br />
cp -v "$work/chroot_rootfs_$device/boot/initramfs-"* initramfs.gz<br />
gzip -d initramfs.gz<br />
cpio -i < initramfs<br />
<br />
# Remove existing modules<br />
rm -rf initramfs lib/modules<br />
<br />
#<br />
# CHANGEME: you need to write the commands that copy the kernel modules from your<br />
# kernel source folder into the initramfs here!<br />
#<br />
<br />
# Package the initramfs again<br />
cd "$tmpdir"<br />
find . -print0 | busybox cpio --quiet -o -H newc | gzip -1 > initramfs-repackaged<br />
</syntaxhighlight><br />
<br />
== How to merge kernel configs? ==<br />
The idea is, that we have a shared <code>linux-postmarketos-stable</code> package, which all mainlined devices use. Check [[Kernel_configuration#Automatically_merging_kernel_configuration]] for instructions on how to merge kernel configs somewhat efficiently with a script.<br />
<br />
== How to flash each postmarketOS partition from the rootfs to a different partition on the phone ==<br />
Usually pmOS writes the whole rootfs (which has its own /boot and / partitions) to one partition on the device ([[Partition-layout|more]]). If your mainline kernel isn't able to find the postmarketOS partition by label (even if you have enabled device mapper in the kernel config), then you could use the following workaround to flash each partition from the rootfs image to a real partition on the device.<br />
<br />
<syntaxhighlight lang="shell-session"><br />
$ pmbootstrap install<br />
$ pmbootstrap export<br />
$ losetup /dev/loop0 <pathtoimage><br />
$ dd if=/dev/loop0p1 of=boot_partition.img<br />
$ dd if=/dev/loop0p2 of=root_partition.img<br />
$ fastboot flash system root_partition.img<br />
$ fastboot flash cache boot_partition.img<br />
</syntaxhighlight><br />
<br />
== Display panel ==<br />
=== How to let the bootloader initialize the panel? ===<br />
opendata found a cool hack to let the bootloader initialize the display, which makes everything a lot easier. It only works with Sony Shinano and Rhine devices.<br />
<br />
* Make sure to base of downstream 3.4 kernel<br />
* Basically extract the dts from your downstream 3.4 kernel<br />
* Use DTC to convert it to a dts<br />
* Then delete everything after main header apart from display stuff (mdp, gpu) and anything in the spmi node<br />
* Then in the spmi node delete everything apart from wled and pm8941@1 gpios<br />
* That should be enough for bootloader to init display<br />
* Example:<br />
** 1. Stock downstream: https://ptpb.pw/hRmy.dts<br />
** 2. Minimum for display init: https://ptpb.pw/f2ye.dts<br />
** 3. mainline dts with second added into it: https://ptpb.pw/q28L.dts<br />
** Then just add it to simple panel with video mode and video hse<br />
<br />
=== Can I use the simple panel driver? ===<br />
* If your device shows the boot splash with mainline, simple panel should work<br />
* Adapt [https://github.com/flto/linux/commit/41bcfbe5f8f00a4a93e0a838456da51a50965e03 this commit] to make it use your panels values (hfp hbp etc)<br />
* now in flags add: <code>MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_HSE</code></div>Opendatahttps://wiki.postmarketos.org/index.php?title=Mainlining_FAQ&diff=3521Mainlining FAQ2018-06-14T15:52:07Z<p>Opendata: /* How to let the bootloader initialize the panel? */</p>
<hr />
<div><blockquote><br />
'''"Mainlining isn't always fun, but it's hella rewarding"'''<br />
</blockquote><br />
<br />
Various information collected from [[Matrix_and_IRC|#postmarketOS]]. See [[The Mainline Kernel]] for a more howto-style page.<br />
<br />
== How to start? ==<br />
* [[Serial_debugging|Serial cable]] highly recommended<br />
* First step will be to find out how much your device is already supported by mainline<br />
* Check if your soc is supported.. that will be basic building block<br />
* There's really no point doing display till you have uart or USB working<br />
<br />
== Writing dmesg to RAM and reading it out after reboot ==<br />
During the mainlining process you need to be able to get the <code>dmesg</code> output from the device. Typically this is done with a serial cable (see below). Sometimes making such a cable is relatively easy by using the audio jack, but in other cases it requires opening the device or is not possible at all. Here is a less comfortable alternative.<br />
<br />
In Android kernels it is possible to write the output of <code>dmesg</code> to memory, and read it out after reboot from <code>/proc/last_kmsg</code>. So while you are mainlining, you can use Android's <code>ram_console</code> driver from your downstream kernel to dump <code>dmesg</code> to memory as well, then reboot to the downstream kernel and read out <code>/proc/last_kmesg</code>. Quote from decatf:<br />
<blockquote><br />
The Android ram_console does this. It should exist in many if not most Android kernels. The driver is registered the board/machine init. I am still using it even on kernel 4.16. On my device I can force reboot to a downstream recovery kernel and read last_kmsg from a kernel that booted nothing but the bare device tree and the ram_console driver.<br />
<br />
* Allocate the same memory block as your downstream or recovery kernel. Do this by specifying reserved-memory in device tree.<br />
https://github.com/Decatf/linux/blob/tegra-next-p4wifi_pmos/arch/arm/boot/dts/tegra20-samsung_p3.dts#L47-L50<br />
* Initialize the ram_console driver with the appropriate memory address and size in the <code>machine_init</code> function for your device.<br />
https://github.com/Decatf/linux/blob/next-p4wifi_pmos/arch/arm/mach-tegra/board-p4wifi.c#L480-L481<br />
* Make sure the driver is using the same ram console signature as your downstream kernel.<br />
https://github.com/Decatf/linux/blob/next-p4wifi_pmos/drivers/staging/android/ram_console.c#L41<br />
</blockquote><br />
<br />
On more recent devices Android has transitioned over to using the mainline kernels pstore ramoops functionality. If your device is recent enough that the recovery uses pstore then you only need to add a node for the ramoops driver to device tree.<br />
<br />
The memory allocation address of the ram_console and pstore are logged to dmesg. The memory address in following example corresponds to the samsung-p4wifi device in the steps above. To find the memory allocation address of ram_console:<br />
<br />
<syntaxhighlight lang="shell-session"><br />
$ dmesg | grep ram_console<br />
[ 0.906530] ram_console: got buffer at 2e600000, size 100000<br />
</syntaxhighlight><br />
<br />
To find the memory allocation address of pstore ramoops:<br />
<syntaxhighlight lang="shell-session"><br />
$ dmesg | grep attached<br />
[ 0.074293] ramoops: attached 0x100000@0x2e500000, ecc: 0/0<br />
</syntaxhighlight><br />
<br />
== Serial cable ==<br />
=== Can I do it without a serial cable? ===<br />
* in theory, yes by dumping dmesg to RAM (see above)<br />
* once it reliably boots though, and USB comes up properly, you can use the USB serial gadget in the kernel (see below)<br />
<br />
=== How to get serial output? (serial cable) ===<br />
* enable the serial device for your kernel (e.g. for OMAP: CONFIG_SERIAL_OMAP and CONFIG_SERIAL_OMAP_CONSOLE)<br />
* add console=ttySAC0,115200 to the kernel cmdline<br />
* it might also be ttyO0 (uppercase O for OMAP chipset)<br />
<br />
=== How to get serial output over USB? (USB serial gadget) ===<br />
The Linux kernel can act like a serial device, and it's possible to output what you would get on the serial port over that fake serial device directly via USB to your PC.<br />
* set CONFIG_USB_G_SERIAL=y and enable USB as console, and add console=ttyGS0,115200 to the cmdline<br />
<br />
=== Is it possible to boot kernels with a serial cable? ===<br />
* No. Just flash with a normal cable and switch to the serial cable to read the log output.<br />
* Once it reliably boots though, and USB comes up properly, you can use the USB serial gadget in the kernel<br />
<br />
== There's no device tree source (dts) in the kernel fork for my device, how do I make one? ==<br />
<br />
Previous kernels used <code>board-*.c</code> files instead of the <code>dts</code> files. These are in folders such as <code>arch/arm/mach-omap2</code> ([https://android.googlesource.com/kernel/omap/+/android-omap-tuna-3.0/arch/arm/mach-omap2/ example]).<br />
The idea is that you'll need to convert these to <code>dts</code> files. Doing so manually for each of them is a huge and error-prone task, better use one of the following techniques:<br />
* Strip down <code>dts</code> from similar hardware (n900 in case of omap3?) and try to get it to boot<br />
* Add support to an existing mainline driver (e.g. mms1'''4'''4 and mms1'''1'''4 are probably pretty similar) rather than forward-porting the old driver<br />
* Forward-port the board files to recent kernels (new kernels still understand board files for some hardware, but not for all!), then strip them down to a bare minimum you can still test (where serial or usb is still working, so you know that the device boots), and then convert that do <code>dts</code>.<br />
<br />
Finding the best approach is very hardware specific. If you know C and think you have tried some of the methods above without success, consider asking the maintainers of the chipset in the kernel. Regarding OMAP, Pavel [https://github.com/postmarketOS/pmbootstrap/issues/1021#issuecomment-354669394 offered] that you could CC him.<br />
<br />
See also: {{github|1021}}<br />
<br />
<br />
Consider updating your device's kernel to the latest Android stable version first ([https://github.com/android-linux-stable/notes these instruction] might make it easier to convert the board files to dtbs) and then going to real mainline from there.<br />
<br />
== What options are needed to get USB network? ==<br />
* USB_ETH IIRC <br />
* also check the defconfig in aports/main/linux-postmarketos-mainline <br />
<br />
== How to make OpenRC print its output to the serial port? ==<br />
* just set <code>RC_LOGGING</code> to true in /etc/rc.conf<br />
* (it's the init system log like Starting etc.....[ok])<br />
<br />
== How can I compile kernel sources from a local git repo? ==<br />
* Clone the kernel with git (~5GB!)<br />
* Use the following command to build the mainline kernel package with the checked out sources<br />
<syntaxhighlight lang="shell-session"><br />
$ pmbootstrap build linux-postmarketos-mainline --src=~/code/linux<br />
</syntaxhighlight><br />
* [https://github.com/postmarketOS/pmbootstrap/pull/1210#issuecomment-364590002 Implementation details]<br />
<br />
== How can I repackage the initramfs with custom modules? ==<br />
Run a normal installation to generate the initramfs:<br />
<br />
<syntaxhighlight lang="shell-session"><br />
$ pmbootstrap install<br />
</syntaxhighlight><br />
<br />
And then writing a short shell script, that repackages the postmarketOS initramfs with the modules you compiled.<br />
After reading through it, adjust it as needed and execute it as root:<br />
<br />
<syntaxhighlight lang="bash"><br />
#!/bin/sh<br />
# Config<br />
device="oneplus-bacon"<br />
tmpdir="/tmp/pmOS-initfs-with-mainline-modules"<br />
work="$(pmbootstrap -q config work)"<br />
<br />
# Create temp folder<br />
[ -d "$tmpdir" ] && rm -rf "$tmpdir"<br />
mkdir -p "$tmpdir"<br />
<br />
# Extract the pmOS initramfs<br />
cp -v "$work/chroot_rootfs_$device/boot/initramfs-"* initramfs.gz<br />
gzip -d initramfs.gz<br />
cpio -i < initramfs<br />
<br />
# Remove existing modules<br />
rm -rf initramfs lib/modules<br />
<br />
#<br />
# CHANGEME: you need to write the commands that copy the kernel modules from your<br />
# kernel source folder into the initramfs here!<br />
#<br />
<br />
# Package the initramfs again<br />
cd "$tmpdir"<br />
find . -print0 | busybox cpio --quiet -o -H newc | gzip -1 > initramfs-repackaged<br />
</syntaxhighlight><br />
<br />
== How to merge kernel configs? ==<br />
The idea is, that we have a shared <code>linux-postmarketos-stable</code> package, which all mainlined devices use. Check [[Kernel_configuration#Automatically_merging_kernel_configuration]] for instructions on how to merge kernel configs somewhat efficiently with a script.<br />
<br />
== How to flash each postmarketOS partition from the rootfs to a different partition on the phone ==<br />
Usually pmOS writes the whole rootfs (which has its own /boot and / partitions) to one partition on the device ([[Partition-layout|more]]). If your mainline kernel isn't able to find the postmarketOS partition by label (even if you have enabled device mapper in the kernel config), then you could use the following workaround to flash each partition from the rootfs image to a real partition on the device.<br />
<br />
<syntaxhighlight lang="shell-session"><br />
$ pmbootstrap install<br />
$ pmbootstrap export<br />
$ losetup /dev/loop0 <pathtoimage><br />
$ dd if=/dev/loop0p1 of=boot_partition.img<br />
$ dd if=/dev/loop0p2 of=root_partition.img<br />
$ fastboot flash system root_partition.img<br />
$ fastboot flash cache boot_partition.img<br />
</syntaxhighlight><br />
<br />
== Display panel ==<br />
=== How to let the bootloader initialize the panel? ===<br />
opendata found a cool hack to let the bootloader initialize the display, which makes everything a lot easier. It only works with Sony Shinano and Rhine devices.<br />
<br />
* Make sure to base of downstream 3.4 kernel<br />
* Basically extract the dts from your downstream 3.4 kernel<br />
* Use DTC to convert it to a dts<br />
* Then delete everything after main header apart from display stuff (mdp, gpu) and anything in the spmi node<br />
* Then in the spmi node delete everything apart from wled and pm8941@1 gpios<br />
* That should be enough for bootloader to init display<br />
* Example:<br />
** 1. Stock downstream: https://ptpb.pw/hRmy.dts<br />
** 2. Minimum for display init: https://ptpb.pw/f2ye.dts<br />
** 3. mainline dts with second added intonit: https://ptpb.pw/q28L.dts<br />
** Then just add it to simple panel with video mode and video hse<br />
<br />
=== Can I use the simple panel driver? ===<br />
* If your device shows the boot splash with mainline, simple panel should work<br />
* Adapt [https://github.com/flto/linux/commit/41bcfbe5f8f00a4a93e0a838456da51a50965e03 this commit] to make it use your panels values (hfp hbp etc)<br />
* now in flags add: <code>MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_HSE</code></div>Opendatahttps://wiki.postmarketos.org/index.php?title=Mainlining_FAQ&diff=3520Mainlining FAQ2018-06-14T15:49:35Z<p>Opendata: It is fun :)</p>
<hr />
<div><blockquote><br />
'''"Mainlining isn't always fun, but it's hella rewarding"'''<br />
</blockquote><br />
<br />
Various information collected from [[Matrix_and_IRC|#postmarketOS]]. See [[The Mainline Kernel]] for a more howto-style page.<br />
<br />
== How to start? ==<br />
* [[Serial_debugging|Serial cable]] highly recommended<br />
* First step will be to find out how much your device is already supported by mainline<br />
* Check if your soc is supported.. that will be basic building block<br />
* There's really no point doing display till you have uart or USB working<br />
<br />
== Writing dmesg to RAM and reading it out after reboot ==<br />
During the mainlining process you need to be able to get the <code>dmesg</code> output from the device. Typically this is done with a serial cable (see below). Sometimes making such a cable is relatively easy by using the audio jack, but in other cases it requires opening the device or is not possible at all. Here is a less comfortable alternative.<br />
<br />
In Android kernels it is possible to write the output of <code>dmesg</code> to memory, and read it out after reboot from <code>/proc/last_kmsg</code>. So while you are mainlining, you can use Android's <code>ram_console</code> driver from your downstream kernel to dump <code>dmesg</code> to memory as well, then reboot to the downstream kernel and read out <code>/proc/last_kmesg</code>. Quote from decatf:<br />
<blockquote><br />
The Android ram_console does this. It should exist in many if not most Android kernels. The driver is registered the board/machine init. I am still using it even on kernel 4.16. On my device I can force reboot to a downstream recovery kernel and read last_kmsg from a kernel that booted nothing but the bare device tree and the ram_console driver.<br />
<br />
* Allocate the same memory block as your downstream or recovery kernel. Do this by specifying reserved-memory in device tree.<br />
https://github.com/Decatf/linux/blob/tegra-next-p4wifi_pmos/arch/arm/boot/dts/tegra20-samsung_p3.dts#L47-L50<br />
* Initialize the ram_console driver with the appropriate memory address and size in the <code>machine_init</code> function for your device.<br />
https://github.com/Decatf/linux/blob/next-p4wifi_pmos/arch/arm/mach-tegra/board-p4wifi.c#L480-L481<br />
* Make sure the driver is using the same ram console signature as your downstream kernel.<br />
https://github.com/Decatf/linux/blob/next-p4wifi_pmos/drivers/staging/android/ram_console.c#L41<br />
</blockquote><br />
<br />
On more recent devices Android has transitioned over to using the mainline kernels pstore ramoops functionality. If your device is recent enough that the recovery uses pstore then you only need to add a node for the ramoops driver to device tree.<br />
<br />
The memory allocation address of the ram_console and pstore are logged to dmesg. The memory address in following example corresponds to the samsung-p4wifi device in the steps above. To find the memory allocation address of ram_console:<br />
<br />
<syntaxhighlight lang="shell-session"><br />
$ dmesg | grep ram_console<br />
[ 0.906530] ram_console: got buffer at 2e600000, size 100000<br />
</syntaxhighlight><br />
<br />
To find the memory allocation address of pstore ramoops:<br />
<syntaxhighlight lang="shell-session"><br />
$ dmesg | grep attached<br />
[ 0.074293] ramoops: attached 0x100000@0x2e500000, ecc: 0/0<br />
</syntaxhighlight><br />
<br />
== Serial cable ==<br />
=== Can I do it without a serial cable? ===<br />
* in theory, yes by dumping dmesg to RAM (see above)<br />
* once it reliably boots though, and USB comes up properly, you can use the USB serial gadget in the kernel (see below)<br />
<br />
=== How to get serial output? (serial cable) ===<br />
* enable the serial device for your kernel (e.g. for OMAP: CONFIG_SERIAL_OMAP and CONFIG_SERIAL_OMAP_CONSOLE)<br />
* add console=ttySAC0,115200 to the kernel cmdline<br />
* it might also be ttyO0 (uppercase O for OMAP chipset)<br />
<br />
=== How to get serial output over USB? (USB serial gadget) ===<br />
The Linux kernel can act like a serial device, and it's possible to output what you would get on the serial port over that fake serial device directly via USB to your PC.<br />
* set CONFIG_USB_G_SERIAL=y and enable USB as console, and add console=ttyGS0,115200 to the cmdline<br />
<br />
=== Is it possible to boot kernels with a serial cable? ===<br />
* No. Just flash with a normal cable and switch to the serial cable to read the log output.<br />
* Once it reliably boots though, and USB comes up properly, you can use the USB serial gadget in the kernel<br />
<br />
== There's no device tree source (dts) in the kernel fork for my device, how do I make one? ==<br />
<br />
Previous kernels used <code>board-*.c</code> files instead of the <code>dts</code> files. These are in folders such as <code>arch/arm/mach-omap2</code> ([https://android.googlesource.com/kernel/omap/+/android-omap-tuna-3.0/arch/arm/mach-omap2/ example]).<br />
The idea is that you'll need to convert these to <code>dts</code> files. Doing so manually for each of them is a huge and error-prone task, better use one of the following techniques:<br />
* Strip down <code>dts</code> from similar hardware (n900 in case of omap3?) and try to get it to boot<br />
* Add support to an existing mainline driver (e.g. mms1'''4'''4 and mms1'''1'''4 are probably pretty similar) rather than forward-porting the old driver<br />
* Forward-port the board files to recent kernels (new kernels still understand board files for some hardware, but not for all!), then strip them down to a bare minimum you can still test (where serial or usb is still working, so you know that the device boots), and then convert that do <code>dts</code>.<br />
<br />
Finding the best approach is very hardware specific. If you know C and think you have tried some of the methods above without success, consider asking the maintainers of the chipset in the kernel. Regarding OMAP, Pavel [https://github.com/postmarketOS/pmbootstrap/issues/1021#issuecomment-354669394 offered] that you could CC him.<br />
<br />
See also: {{github|1021}}<br />
<br />
<br />
Consider updating your device's kernel to the latest Android stable version first ([https://github.com/android-linux-stable/notes these instruction] might make it easier to convert the board files to dtbs) and then going to real mainline from there.<br />
<br />
== What options are needed to get USB network? ==<br />
* USB_ETH IIRC <br />
* also check the defconfig in aports/main/linux-postmarketos-mainline <br />
<br />
== How to make OpenRC print its output to the serial port? ==<br />
* just set <code>RC_LOGGING</code> to true in /etc/rc.conf<br />
* (it's the init system log like Starting etc.....[ok])<br />
<br />
== How can I compile kernel sources from a local git repo? ==<br />
* Clone the kernel with git (~5GB!)<br />
* Use the following command to build the mainline kernel package with the checked out sources<br />
<syntaxhighlight lang="shell-session"><br />
$ pmbootstrap build linux-postmarketos-mainline --src=~/code/linux<br />
</syntaxhighlight><br />
* [https://github.com/postmarketOS/pmbootstrap/pull/1210#issuecomment-364590002 Implementation details]<br />
<br />
== How can I repackage the initramfs with custom modules? ==<br />
Run a normal installation to generate the initramfs:<br />
<br />
<syntaxhighlight lang="shell-session"><br />
$ pmbootstrap install<br />
</syntaxhighlight><br />
<br />
And then writing a short shell script, that repackages the postmarketOS initramfs with the modules you compiled.<br />
After reading through it, adjust it as needed and execute it as root:<br />
<br />
<syntaxhighlight lang="bash"><br />
#!/bin/sh<br />
# Config<br />
device="oneplus-bacon"<br />
tmpdir="/tmp/pmOS-initfs-with-mainline-modules"<br />
work="$(pmbootstrap -q config work)"<br />
<br />
# Create temp folder<br />
[ -d "$tmpdir" ] && rm -rf "$tmpdir"<br />
mkdir -p "$tmpdir"<br />
<br />
# Extract the pmOS initramfs<br />
cp -v "$work/chroot_rootfs_$device/boot/initramfs-"* initramfs.gz<br />
gzip -d initramfs.gz<br />
cpio -i < initramfs<br />
<br />
# Remove existing modules<br />
rm -rf initramfs lib/modules<br />
<br />
#<br />
# CHANGEME: you need to write the commands that copy the kernel modules from your<br />
# kernel source folder into the initramfs here!<br />
#<br />
<br />
# Package the initramfs again<br />
cd "$tmpdir"<br />
find . -print0 | busybox cpio --quiet -o -H newc | gzip -1 > initramfs-repackaged<br />
</syntaxhighlight><br />
<br />
== How to merge kernel configs? ==<br />
The idea is, that we have a shared <code>linux-postmarketos-stable</code> package, which all mainlined devices use. Check [[Kernel_configuration#Automatically_merging_kernel_configuration]] for instructions on how to merge kernel configs somewhat efficiently with a script.<br />
<br />
== How to flash each postmarketOS partition from the rootfs to a different partition on the phone ==<br />
Usually pmOS writes the whole rootfs (which has its own /boot and / partitions) to one partition on the device ([[Partition-layout|more]]). If your mainline kernel isn't able to find the postmarketOS partition by label (even if you have enabled device mapper in the kernel config), then you could use the following workaround to flash each partition from the rootfs image to a real partition on the device.<br />
<br />
<syntaxhighlight lang="shell-session"><br />
$ pmbootstrap install<br />
$ pmbootstrap export<br />
$ losetup /dev/loop0 <pathtoimage><br />
$ dd if=/dev/loop0p1 of=boot_partition.img<br />
$ dd if=/dev/loop0p2 of=root_partition.img<br />
$ fastboot flash system root_partition.img<br />
$ fastboot flash cache boot_partition.img<br />
</syntaxhighlight><br />
<br />
== Display panel ==<br />
=== How to let the bootloader initialize the panel? ===<br />
opendata found a cool hack to let the bootloader initialize the display, which makes everything a lot easier. It only works with Sony Shinano and Rhine devices.<br />
<br />
* Make sure to base of downstream 3.4 kernel<br />
* Basically extract the dts from your downstream 3.4 kernel<br />
* Use DTC to convert it to a dts<br />
* Then delete everything after main header apart from display stuff and anything in the spmi nodr<br />
* Then in spmi node delete everything apart from wled and pm8941@1 gpios<br />
* That should be enough for bootloader to init display<br />
* Example:<br />
** 1. Stock downstream: https://ptpb.pw/hRmy.dts<br />
** 2. Minimum for display init: https://ptpb.pw/f2ye.dts<br />
** 3. mainline dts with second added intonit: https://ptpb.pw/q28L.dts<br />
** Then just add it to simple panel with video mode and video hse<br />
<br />
=== Can I use the simple panel driver? ===<br />
* If your device shows the boot splash with mainline, simple panel should work<br />
* Adapt [https://github.com/flto/linux/commit/41bcfbe5f8f00a4a93e0a838456da51a50965e03 this commit] to make it use your panels values (hfp hbp etc)<br />
* now in flags add: <code>MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_HSE</code></div>Opendatahttps://wiki.postmarketos.org/index.php?title=Mainlining_Guide&diff=3347Mainlining Guide2018-05-16T20:22:33Z<p>Opendata: </p>
<hr />
<div>== Introduction ==<br />
{{note|Please have realistic expectations: Booting mainline even if nothing else is working is already a great achievement!}}<br />
<br />
This guide will walk you through mainlining your device. Starting by collecting all required information, setting up your build environment and picking a mentor that will guide you through the tricky parts. For the devices where this will work, you should be fine with basic shell knowledge, and you will be rewarded with learning a lot of new stuff and (if it works out) booting the mainline kernel on your device!<br />
<br />
== Requirements ==<br />
=== postmarketOS port ===<br />
To make the instructions easier, this guide assumes that postmarketOS was already ported with a downstream kernel to your device, and that you can [[USB_Network|enter a shell after it booted via USB]] (SSH or telnet). Downstream kernels are the ones from the vendor, that ship with the device, and all derivatives from that (e.g. your typical Android / LineageOS ROM). You can check if it was ported already on the [[devices]] page, and start a [[Porting_guide|new port]] if necessary.<br />
<br />
=== Mentor ===<br />
The mainlining process varies greatly for each device, which means we can't just write down straight forward instructions here. But luckily there are skilled people who have a bigger picture of a specific [https://en.wikipedia.org/wiki/System_on_a_chip SoC] and they know how to help you out efficiently. Head over to your device's wiki page (as linked in the [[devices|device overview]]) and look at the chipset the device has (infobox on the top right).<br />
<br />
{| class="wikitable"<br />
! SoC<br />
! Mentors from [[Matrix_and_IRC|#postmarketOS]]<br />
! Mentors elsewhere<br />
|-<br />
| Qualcomm (msm...)<br />
| opendata26, bshah<br />
| ##linux-msm on Freenode<br />
|-<br />
| OMAP3<br />
| pavel<br />
|-<br />
| Exynos<br />
| forkbomb<br />
|}<br />
<br />
Make sure that your SoC is in the list (if it isn't then we don't have an easy way for mainlining right now, sorry). Let's do some more preparation now, so everything is in place before you kindly ask your mentor to help you with the process.<br />
<br />
== Preparation ==<br />
=== Serial cable ===<br />
It is recommended to have a working [[Serial_debugging|serial cable]] for your device. In case you can not make one, it might be possible to [[Mainlining_FAQ#Writing_dmesg_to_RAM_and_reading_it_out_after_reboot|use a workaround]] for retrieving log messages but that isn't straight forward.<br />
<br />
=== pmbootstrap setup ===<br />
If you have not done this already, please download and initialize <code>pmbootstrap</code>. You can stay with the defaults, just make sure to select the right device, and (to save you some time) <code>none</code> as user interface. Replace <code>~/code</code> with the path where you would like to store the source code.<br />
<syntaxhighlight lang="shell-session"><br />
$ cd ~/code<br />
$ git clone https://github.com/postmarketOS/pmbootstrap<br />
$ cd pmbootstrap<br />
$ alias pmbootstrap=$PWD/pmbootstrap.py<br />
$ pmbootstrap init<br />
</syntaxhighlight><br />
<br />
Generate an initramfs with the debug-shell hook:<br />
<syntaxhighlight lang="shell-session"><br />
$ pmbootstrap initfs hook_add debug-shell<br />
$ pmbootstrap export<br />
</syntaxhighlight><br />
<br />
=== Kernel ===<br />
Download a copy of <code>linux-next</code>:<br />
<syntaxhighlight lang="shell-session"><br />
$ cd ~/code<br />
$ git clone https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git linux<br />
$ cd linux<br />
</syntaxhighlight><br />
<br />
If you have already checked out the regular linux repository, you can add the <code>linux-next</code> branch as follows:<br />
<syntaxhighlight lang="shell-session"><br />
$ cd ~/code/linux<br />
$ git remote add linux-next https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git<br />
$ git fetch --tags linux-next<br />
$ git checkout -b development linux-next/master<br />
</syntaxhighlight><br />
<br />
After running the commands of one of the two blocks above, add a new branch for your device (replace <code>lg-mako</code> with your device's name):<br />
<syntaxhighlight lang="shell-session"><br />
$ cd ~/code/linux<br />
$ git checkout -b "device-lg-mako"<br />
</syntaxhighlight><br />
<br />
=== envkernel.sh ===<br />
Usually when compiling a kernel, you would install [https://kernelnewbies.org/KernelBuild all dependencies] and a cross compiler in your host system. To make it easier, we have the <code>envkernel.sh</code> script (for firsh shell: <code>envkernel.fish</code>). It sets up an Alpine Linux chroot with all the dependencies by using <code>pmbootstrap</code> internally, exports the environment variables to use the right cross compiler and creates an alias to <code>make</code>. This means, whenever you type <code>make</code> after sourcing that script, it will actually run <code>make</code> in the chroot. Please try the script out once to make sure everything is working as expected:<br />
<syntaxhighlight lang="shell-session"><br />
$ cd ~/code/linux<br />
$ source ~/code/pmbootstrap/helpers/envkernel.sh<br />
Initializing Alpine chroot (details: 'pmbootstrap log')<br />
pmbootstrap envkernel.sh activated successfully.<br />
* kernel source: /home/user/code/linux<br />
* output folder: /home/user/code/linux/.output<br />
* architecture: arm (samsung-i9100 is armhf)<br />
* aliases: make, kernelroot, pmbootstrap, pmbroot (see 'type make' etc.)<br />
$ make defconfig<br />
*** pmbootstrap envkernel.sh active for /home/user/code/linux! ***<br />
make: Entering directory '/mnt/linux'<br />
make[1]: Entering directory '/mnt/linux/.output'<br />
getconf: LFS_CFLAGS: unknown variable<br />
getconf: LFS_LDFLAGS: unknown variable<br />
getconf: LFS_LIBS: unknown variable<br />
HOSTCC scripts/basic/fixdep<br />
GEN ./Makefile<br />
HOSTCC scripts/kconfig/conf.o<br />
YACC scripts/kconfig/zconf.tab.c<br />
LEX scripts/kconfig/zconf.lex.c<br />
HOSTCC scripts/kconfig/zconf.tab.o<br />
HOSTLD scripts/kconfig/conf<br />
*** Default configuration is based on 'multi_v7_defconfig'<br />
#<br />
# configuration written to .config<br />
#<br />
make[1]: Leaving directory '/mnt/linux/.output'<br />
make: Leaving directory '/mnt/linux'<br />
</syntaxhighlight><br />
<br />
=== Got everything? ===<br />
Please double check with the following checklist that you meet '''all the requirements''' before proceeding further. If you need any help with the above, just ask [[Matrix_and_IRC|in the channel]] or [https://github.com/postmarketOS/pmbootstrap/issues on GitHub] as usually.<br />
<br />
* [[#Serial_cable|Serial cable]] (or suitable workaround)<br />
* [[#pmbootstrap setup|Device ported to postmarketOS]]<br />
* [[#Mentor|Mentor]]<br />
* [[#pmbootstrap setup|Initramfs with debug-shell generated]]<br />
* [[#envkernel.sh|envkernel.sh test run]]<br />
<br />
== Contact your mentor ==<br />
Hop on [[Matrix_and_IRC|Matrix or IRC]] and ask the mentor if they have time to walk you through the further steps. This should be obvious, but remember to be nice and understanding if the mentor does not have time right away, they are supporting you for free so you'll need to be grateful and patient.<br />
<br />
The following steps are meant to be taken together with the mentor.<br />
<br />
== Device Tree Source ==<br />
=== Start with an existing file ===<br />
The [[DTS]] file describes how the peripherals of the device are connected to the SoC. Your mentor probably knows which file you should use to start your work on. This may either be a file in the existing Linux source tree, or a file your mentor uploaded somewhere.<br />
<br />
Example for copying an existing file:<br />
<syntaxhighlight lang="shell-session"><br />
$ cd ~/code/linux/arch/arm/boot/dts<br />
$ cp qcom-apq8064-asus-nexus7-flo.dts qcom-apq8064-lge-nexus4-mako.dts<br />
</syntaxhighlight><br />
<br />
Let's commit that directly, so it will be easy to see what you have changed later on by running <code>git diff</code> (adjust the description of the commit accordingly):<br />
<syntaxhighlight lang="shell-session"><br />
$ git add -A<br />
$ git commit -m "Starting with: qcom-apq8064-asus-nexus7-flo.dts"<br />
</syntaxhighlight><br />
<br />
=== Adjust model and compatible ===<br />
Open the DTS file in an editor and replace the <code>model</code> and <code>compatible</code> strings at the top of the file:<br />
<br />
<syntaxhighlight lang="c"><br />
// SPDX-License-Identifier: GPL-2.0<br />
#include "qcom-apq8064-v2.0.dtsi"<br />
#include <dt-bindings/gpio/gpio.h><br />
#include <dt-bindings/input/input.h><br />
#include <dt-bindings/pinctrl/qcom,pmic-gpio.h><br />
/ {<br />
model = "Asus Nexus7(flo)";<br />
compatible = "asus,nexus7-flo", "qcom,apq8064";<br />
<br />
// ...<br />
</syntaxhighlight><br />
<br />
In the example, we replace <code>model</code> with <code>"LGE Nexus4 (mako)"</code> and the first string after compatible with <code>"lge,nexus4-mako</code> (we leave the second string in place, as this is the name of the SoC, which is the same).<br />
<br />
And again, let's commit this change. It's recommended to commit after every change you make to the DTS files so you can revert easily to the last known working state if necessary:<br />
<syntaxhighlight lang="shell-session"><br />
$ git add -A<br />
$ git commit -m "Adjusted model and compatible"<br />
</syntaxhighlight><br />
<br />
=== Minimal booting version ===<br />
Your mentor will instruct you how to modify the file further, so you have a minimal configuration that allows you to boot into the mainline kernel if everything went right. Almost nothing will work at this point, except for initializing RAM and serial output. We will work our way to enabling one feature after another throughout the process.<br />
<br />
== Adjust DTS Makefile ==<br />
Open <code>arch/arm/boot/dts/Makefile</code> in an editor and add one line for your new device tree. First find the right location by searching for the prefix in the file (e.g. all <code>qcom-</code> lines are in the <code>dtb-$(CONFIG_ARCH_QCOM) += \</code> section). Then insert the name of your <code>dts</code> file there, but use <code>dtb</code> as extenssion and don't forget the backslash <code>\</code> at the end of the line. Save, check the diff (it should be similar to the one below) and commit your change:<br />
<br />
<syntaxhighlight lang="shell-session"><br />
$ git diff<br />
diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile<br />
index 3b4cc1b64a1e..af74d95b63fa 100644<br />
--- a/arch/arm/boot/dts/Makefile<br />
+++ b/arch/arm/boot/dts/Makefile<br />
@@ -756,6 +756,7 @@ dtb-$(CONFIG_ARCH_QCOM) += \<br />
qcom-apq8064-ifc6410.dtb \<br />
qcom-apq8064-sony-xperia-yuga.dtb \<br />
qcom-apq8064-asus-nexus7-flo.dtb \<br />
+ qcom-apq8064-lge-nexus4-mako.dtb \<br />
qcom-apq8074-dragonboard.dtb \<br />
qcom-apq8084-ifc6540.dtb \<br />
qcom-apq8084-mtp.dtb \<br />
$ git add arch/arm/boot/dts/Makefile<br />
$ git commit -m "Enable my new DTS in the Makefile"<br />
</syntaxhighlight><br />
<br />
== Testing ==<br />
=== Defconfig and compilation ===<br />
Ask your mentor for the right defconfig to use. Then configure the kernel to use the defconfig and finally build it. Example:<br />
<br />
<syntaxhighlight lang="shell-session"><br />
$ cd ~/code/linux<br />
$ source ~/code/pmbootstrap/helpers/envkernel.sh<br />
$ make qcom_defconfig<br />
$ make -j5<br />
</syntaxhighlight><br />
<br />
<br />
<br />
=== Execute on the device ===<br />
This greatly depends on your device, and you can figure out the correct method by looking at your [[deviceinfo]] and at the <code>postmarketos-mkinitfs</code> code if necessary. But typically for fastboot based Android devices, you can patch the <code>boot.img</code> and boot it as follows.<br />
<br />
==== Patch boot.img ====<br />
Prepare your current shell session once:<br />
<syntaxhighlight lang="shell-session"><br />
$ pmbootstrap chroot -- apk add abootimg android-tools mkbootimg<br />
$ export DEVICE="$(pmbootstrap config device)"<br />
$ export WORK="$(pmbootstrap config work)"<br />
$ export TEMP="$WORK/chroot_native/tmp/mainline/"<br />
$ mkdir -p "$TEMP"<br />
</syntaxhighlight><br />
<br />
Then run one of the following every time you would like to replace the kernel inside the <code>boot.img</code> file. The non-[[QCDT]] version is easier, so check if you have a QCDT or not in the <code>deviceinfo</code> first.<br />
<br />
===== non-QCDT devices =====<br />
Now append the DTB (device tree blob), which has been generated from your DTS file, to the kernel, then create a bootimage from it. Replace <code>qcom-apq8064-lge-nexus4-mako</code> accordingly, and mind the <code>dtb</code> at the end instead of <code>dts</code>:<br />
<syntaxhighlight lang="shell-session"><br />
$ cd ~/code/linux/.output/arch/arm/boot<br />
$ cat zImage dts/qcom-apq8064-lge-nexus4-mako.dtb > ~/code/linux/.zImage-dtb<br />
$ cp ~/code/linux/.zImage-dtb "$TEMP"/zImage-dtb<br />
$ cp "/tmp/postmarketOS-export/boot.img-$DEVICE" "$TEMP/boot.img"<br />
$ pmbootstrap chroot<br />
# abootimg -u /tmp/mainline/boot.img -k /tmp/mainline/zImage-dtb<br />
reading kernel from /tmp/mainline/zImage-dtb<br />
Writing Boot Image /tmp/mainline/boot.img<br />
# exit<br />
[20:00:00] Done<br />
</syntaxhighlight><br />
<br />
===== QCDT devices =====<br />
All flasher offsets must be replaced with the values from the [[deviceinfo]] (you might want to save the command as a shell script for quick usage).<br />
<syntaxhighlight lang="shell-session"><br />
$ cp ~/code/linux/.output/arch/arm/boot/zImage "$TEMP"/zImage<br />
$ cp "/tmp/postmarketOS-export/boot.img-$DEVICE" "$TEMP/boot.img"<br />
$ pmbootstrap chroot -- mkbootimg \<br />
--kernel "/tmp/mainline/zImage" \<br />
--ramdisk "/tmp/mainline/initramfs" \<br />
--base "0x00000000" \<br />
--second_offset "0x00f00000" \<br />
--cmdline "console=ttyMSM0,115200,n8 PMOS_NO_OUTPUT_REDIRECT" \<br />
--kernel_offset "0x00008000" \<br />
--ramdisk_offset "0x02000000" \<br />
--tags_offset "0x01e00000" \<br />
--pagesize "2048" \<br />
-o "/tmp/mainline/boot.img"<br />
</syntaxhighlight><br />
<br />
==== Boot ====<br />
First start <code>dmesg -w</code> (see below). Then bring your device into fastboot mode, connect it via USB and boot (or flash) the kernel:<br />
<syntaxhighlight lang="shell-session"><br />
$ pmbootstrap flasher list_devices<br />
$ pmbootstrap chroot -- fastboot boot /tmp/mainline/boot.img<br />
</syntaxhighlight><br />
<br />
The <code>list_devices</code> line instructs <code>pmbootstrap</code> to mount the USB device nodes inside the chroot, so without this line being executed at least once in the session, fastboot will not find any devices (see {{github|1345}}).<br />
<br />
=== dmesg on your PC ===<br />
Before booting the first time, run <code>dmesg -w</code> on your PC. If everything went right, you should see something like the following as soon as the device boots:<br />
<br />
<pre><br />
[27166.665566] usb 3-9: new high-speed USB device number 16 using xhci_hcd<br />
[27166.793111] usb 3-9: New USB device found, idVendor=0525, idProduct=a4a7<br />
[27166.793117] usb 3-9: New USB device strings: Mfr=1, Product=2, SerialNumber=0<br />
[27166.793121] usb 3-9: Product: Gadget Serial v2.4<br />
[27166.793125] usb 3-9: Manufacturer: Linux 4.16.0-rc5-next-20180314-dirty with ci_hdrc_msm<br />
[27166.809593] cdc_acm 3-9:2.0: ttyACM0: USB ACM device<br />
[27166.809777] usbcore: registered new interface driver cdc_acm<br />
[27166.809778] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters<br />
</pre><br />
<br />
= TODO =<br />
* Mention this is ARM only<br />
* Explain how to get dmesg from the device via telnet (<code>dhcpcd interface --nohook ipv6</code> might be necessary etc.)<br />
* Add steps to upstream the changes made into the kernel (there are already good tutorials out there)<br />
* Add step to integrate the changes with the pmbootstrap source tree (might need changes in pmbootstrap architecture for that)<br />
* Describe how to add a "Mainline section" to each device specific page (with a template!) - something like [http://elektranox.org/droid4/ this overview] would be great to have for every device. This can be done while doing the first kernel compilation when following this guide, because that takes a while anyway. Get the components from:<br />
** downstream dts or teardown results like from ifixit<br />
** decipher from downstream dmesg<br />
** <code>grep compatible</code> in downstream DTS decompiled also works</div>Opendatahttps://wiki.postmarketos.org/index.php?title=Mainlining_Guide&diff=3346Mainlining Guide2018-05-16T20:20:36Z<p>Opendata: </p>
<hr />
<div>== Introduction ==<br />
{{note|Please have realistic expectations: Booting mainline even if nothing else is working is already a great achievement!}}<br />
<br />
This guide will walk you through mainlining your device. Starting by collecting all required information, setting up your build environment and picking a mentor that will guide you through the tricky parts. For the devices where this will work, you should be fine with basic shell knowledge, and you will be rewarded with learning a lot of new stuff and (if it works out) booting the mainline kernel on your device!<br />
<br />
== Requirements ==<br />
=== postmarketOS port ===<br />
To make the instructions easier, this guide assumes that postmarketOS was already ported with a downstream kernel to your device, and that you can [[USB_Network|enter a shell after it booted via USB]] (SSH or telnet). Downstream kernels are the ones from the vendor, that ship with the device, and all derivatives from that (e.g. your typical Android / LineageOS ROM). You can check if it was ported already on the [[devices]] page, and start a [[Porting_guide|new port]] if necessary.<br />
<br />
=== Mentor ===<br />
The mainlining process varies greatly for each device, which means we can't just write down straight forward instructions here. But luckily there are skilled people who have a bigger picture of a specific [https://en.wikipedia.org/wiki/System_on_a_chip SoC] and they know how to help you out efficiently. Head over to your device's wiki page (as linked in the [[devices|device overview]]) and look at the chipset the device has (infobox on the top right).<br />
<br />
{| class="wikitable"<br />
! SoC<br />
! Mentors from [[Matrix_and_IRC|#postmarketOS]]<br />
! Mentors elsewhere<br />
|-<br />
| Qualcomm (msm...)<br />
| opendata26, bshah<br />
| ##linux-msm on Freenode<br />
|-<br />
| OMAP3<br />
| pavel<br />
|-<br />
| Exynos<br />
| forkbomb<br />
|}<br />
<br />
Make sure that your SoC is in the list (if it isn't then we don't have an easy way for mainlining right now, sorry). Let's do some more preparation now, so everything is in place before you kindly ask your mentor to help you with the process.<br />
<br />
== Preparation ==<br />
=== Serial cable ===<br />
It is recommended to have a working [[Serial_debugging|serial cable]] for your device. In case you can not make one, it might be possible to [[Mainlining_FAQ#Writing_dmesg_to_RAM_and_reading_it_out_after_reboot|use a workaround]] for retrieving log messages but that isn't straight forward.<br />
<br />
=== pmbootstrap setup ===<br />
If you have not done this already, please download and initialize <code>pmbootstrap</code>. You can stay with the defaults, just make sure to select the right device, and (to save you some time) <code>none</code> as user interface. Replace <code>~/code</code> with the path where you would like to store the source code.<br />
<syntaxhighlight lang="shell-session"><br />
$ cd ~/code<br />
$ git clone https://github.com/postmarketOS/pmbootstrap<br />
$ cd pmbootstrap<br />
$ alias pmbootstrap=$PWD/pmbootstrap.py<br />
$ pmbootstrap init<br />
</syntaxhighlight><br />
<br />
Generate an initramfs with the debug-shell hook:<br />
<syntaxhighlight lang="shell-session"><br />
$ pmbootstrap initfs hook_add debug-shell<br />
$ pmbootstrap export<br />
</syntaxhighlight><br />
<br />
=== Kernel ===<br />
Download a copy of <code>linux-next</code>:<br />
<syntaxhighlight lang="shell-session"><br />
$ cd ~/code<br />
$ git clone https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git linux<br />
$ cd linux<br />
</syntaxhighlight><br />
<br />
If you have already checked out the regular linux repository, you can add the <code>linux-next</code> branch as follows:<br />
<syntaxhighlight lang="shell-session"><br />
$ cd ~/code/linux<br />
$ git remote add linux-next https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git<br />
$ git fetch --tags linux-next<br />
$ git checkout -b development linux-next/master<br />
</syntaxhighlight><br />
<br />
After running the commands of one of the two blocks above, add a new branch for your device (replace <code>lg-mako</code> with your device's name):<br />
<syntaxhighlight lang="shell-session"><br />
$ cd ~/code/linux<br />
$ git checkout -b "device-lg-mako"<br />
</syntaxhighlight><br />
<br />
=== envkernel.sh ===<br />
Usually when compiling a kernel, you would install [https://kernelnewbies.org/KernelBuild all dependencies] and a cross compiler in your host system. To make it easier, we have the <code>envkernel.sh</code> script (for firsh shell: <code>envkernel.fish</code>). It sets up an Alpine Linux chroot with all the dependencies by using <code>pmbootstrap</code> internally, exports the environment variables to use the right cross compiler and creates an alias to <code>make</code>. This means, whenever you type <code>make</code> after sourcing that script, it will actually run <code>make</code> in the chroot. Please try the script out once to make sure everything is working as expected:<br />
<syntaxhighlight lang="shell-session"><br />
$ cd ~/code/linux<br />
$ source ~/code/pmbootstrap/helpers/envkernel.sh<br />
Initializing Alpine chroot (details: 'pmbootstrap log')<br />
pmbootstrap envkernel.sh activated successfully.<br />
* kernel source: /home/user/code/linux<br />
* output folder: /home/user/code/linux/.output<br />
* architecture: arm (samsung-i9100 is armhf)<br />
* aliases: make, kernelroot, pmbootstrap, pmbroot (see 'type make' etc.)<br />
$ make defconfig<br />
*** pmbootstrap envkernel.sh active for /home/user/code/linux! ***<br />
make: Entering directory '/mnt/linux'<br />
make[1]: Entering directory '/mnt/linux/.output'<br />
getconf: LFS_CFLAGS: unknown variable<br />
getconf: LFS_LDFLAGS: unknown variable<br />
getconf: LFS_LIBS: unknown variable<br />
HOSTCC scripts/basic/fixdep<br />
GEN ./Makefile<br />
HOSTCC scripts/kconfig/conf.o<br />
YACC scripts/kconfig/zconf.tab.c<br />
LEX scripts/kconfig/zconf.lex.c<br />
HOSTCC scripts/kconfig/zconf.tab.o<br />
HOSTLD scripts/kconfig/conf<br />
*** Default configuration is based on 'multi_v7_defconfig'<br />
#<br />
# configuration written to .config<br />
#<br />
make[1]: Leaving directory '/mnt/linux/.output'<br />
make: Leaving directory '/mnt/linux'<br />
</syntaxhighlight><br />
<br />
=== Got everything? ===<br />
Please double check with the following checklist that you meet '''all the requirements''' before proceeding further. If you need any help with the above, just ask [[Matrix_and_IRC|in the channel]] or [https://github.com/postmarketOS/pmbootstrap/issues on GitHub] as usually.<br />
<br />
* [[#Serial_cable|Serial cable]] (or suitable workaround)<br />
* [[#pmbootstrap setup|Device ported to postmarketOS]]<br />
* [[#Mentor|Mentor]]<br />
* [[#pmbootstrap setup|Initramfs with debug-shell generated]]<br />
* [[#envkernel.sh|envkernel.sh test run]]<br />
<br />
== Contact your mentor ==<br />
Hop on [[Matrix_and_IRC|Matrix or IRC]] and ask the mentor if they have time to walk you through the further steps. This should be obvious, but remember to be nice and understanding if the mentor does not have time right away, they are supporting you for free so you'll need to be grateful and patient.<br />
<br />
The following steps are meant to be taken together with the mentor.<br />
<br />
== Device Tree Source ==<br />
=== Start with an existing file ===<br />
The [[DTS]] file describes how the peripherals of the device are connected to the SoC. Your mentor probably knows which file you should use to start your work on. This may either be a file in the existing Linux source tree, or a file your mentor uploaded somewhere.<br />
<br />
Example for copying an existing file:<br />
<syntaxhighlight lang="shell-session"><br />
$ cd ~/code/linux/arch/arm/boot/dts<br />
$ cp qcom-apq8064-asus-nexus7-flo.dts qcom-apq8064-lge-nexus4-mako.dts<br />
</syntaxhighlight><br />
<br />
Let's commit that directly, so it will be easy to see what you have changed later on by running <code>git diff</code> (adjust the description of the commit accordingly):<br />
<syntaxhighlight lang="shell-session"><br />
$ git add -A<br />
$ git commit -m "Starting with: qcom-apq8064-asus-nexus7-flo.dts"<br />
</syntaxhighlight><br />
<br />
=== Adjust model and compatible ===<br />
Open the DTS file in an editor and replace the <code>model</code> and <code>compatible</code> strings at the top of the file:<br />
<br />
<syntaxhighlight lang="c"><br />
// SPDX-License-Identifier: GPL-2.0<br />
#include "qcom-apq8064-v2.0.dtsi"<br />
#include <dt-bindings/gpio/gpio.h><br />
#include <dt-bindings/input/input.h><br />
#include <dt-bindings/pinctrl/qcom,pmic-gpio.h><br />
/ {<br />
model = "Asus Nexus7(flo)";<br />
compatible = "asus,nexus7-flo", "qcom,apq8064";<br />
<br />
// ...<br />
</syntaxhighlight><br />
<br />
In the example, we replace <code>model</code> with <code>"LGE Nexus4 (mako)"</code> and the first string after compatible with <code>"lge,nexus4-mako</code> (we leave the second string in place, as this is the name of the SoC, which is the same).<br />
<br />
And again, let's commit this change. It's recommended to commit after every change you make to the DTS files so you can revert easily to the last known working state if necessary:<br />
<syntaxhighlight lang="shell-session"><br />
$ git add -A<br />
$ git commit -m "Adjusted model and compatible"<br />
</syntaxhighlight><br />
<br />
=== Minimal booting version ===<br />
Your mentor will instruct you how to modify the file further, so you have a minimal configuration that allows you to boot into the mainline kernel if everything went right. Almost nothing will work at this point, except for initializing RAM and serial output. We will work our way to enabling one feature after another throughout the process.<br />
<br />
== Adjust DTS Makefile ==<br />
Open <code>arch/arm/boot/dts/Makefile</code> in an editor and add one line for your new device tree. First find the right location by searching for the prefix in the file (e.g. all <code>qcom-</code> lines are in the <code>dtb-$(CONFIG_ARCH_QCOM) += \</code> section). Then insert the name of your <code>dts</code> file there, but use <code>dtb</code> as extenssion and don't forget the backslash <code>\</code> at the end of the line. Save, check the diff (it should be similar to the one below) and commit your change:<br />
<br />
<syntaxhighlight lang="shell-session"><br />
$ git diff<br />
diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile<br />
index 3b4cc1b64a1e..af74d95b63fa 100644<br />
--- a/arch/arm/boot/dts/Makefile<br />
+++ b/arch/arm/boot/dts/Makefile<br />
@@ -756,6 +756,7 @@ dtb-$(CONFIG_ARCH_QCOM) += \<br />
qcom-apq8064-ifc6410.dtb \<br />
qcom-apq8064-sony-xperia-yuga.dtb \<br />
qcom-apq8064-asus-nexus7-flo.dtb \<br />
+ qcom-apq8064-lge-nexus4-mako.dtb \<br />
qcom-apq8074-dragonboard.dtb \<br />
qcom-apq8084-ifc6540.dtb \<br />
qcom-apq8084-mtp.dtb \<br />
$ git add arch/arm/boot/dts/Makefile<br />
$ git commit -m "Enable my new DTS in the Makefile"<br />
</syntaxhighlight><br />
<br />
== Testing ==<br />
=== Defconfig and compilation ===<br />
Ask your mentor for the right defconfig to use. Then configure the kernel to use the defconfig and finally build it. Example:<br />
<br />
<syntaxhighlight lang="shell-session"><br />
$ cd ~/code/linux<br />
$ source ~/code/pmbootstrap/helpers/envkernel.sh<br />
$ make qcom_defconfig<br />
$ make -j5<br />
</syntaxhighlight><br />
<br />
<br />
<br />
=== Execute on the device ===<br />
This greatly depends on your device, and you can figure out the correct method by looking at your [[deviceinfo]] and at the <code>postmarketos-mkinitfs</code> code if necessary. But typically for fastboot based Android devices, you can patch the <code>boot.img</code> and boot it as follows.<br />
<br />
==== Patch boot.img ====<br />
Prepare your current shell session once:<br />
<syntaxhighlight lang="shell-session"><br />
$ pmbootstrap chroot -- apk add abootimg android-tools mkbootimg<br />
$ export DEVICE="$(pmbootstrap config device)"<br />
$ export WORK="$(pmbootstrap config work)"<br />
$ export TEMP="$WORK/chroot_native/tmp/mainline/"<br />
$ mkdir -p "$TEMP"<br />
</syntaxhighlight><br />
<br />
Then run one of the following every time you would like to replace the kernel inside the <code>boot.img</code> file. The non-[[QCDT]] version is easier, so check if you have a QCDT or not in the <code>deviceinfo</code> first.<br />
<br />
===== non-QCDT devices =====<br />
<br />
====== Append DTB ======<br />
Now append the DTB (device tree blob), which has been generated from your DTS file, to the kernel. Replace <code>qcom-apq8064-lge-nexus4-mako</code> accordingly, and mind the <code>dtb</code> at the end instead of <code>dts</code>:<br />
<syntaxhighlight lang="shell-session"><br />
$ cd ~/code/linux/.output/arch/arm/boot<br />
$ cat zImage dts/qcom-apq8064-lge-nexus4-mako.dtb > ~/code/linux/.zImage-dtb<br />
</syntaxhighlight><br />
<br />
<syntaxhighlight lang="shell-session"><br />
$ cp ~/code/linux/.zImage-dtb "$TEMP"/zImage-dtb<br />
$ cp "/tmp/postmarketOS-export/boot.img-$DEVICE" "$TEMP/boot.img"<br />
$ pmbootstrap chroot<br />
# abootimg -u /tmp/mainline/boot.img -k /tmp/mainline/zImage-dtb<br />
reading kernel from /tmp/mainline/zImage-dtb<br />
Writing Boot Image /tmp/mainline/boot.img<br />
# exit<br />
[20:00:00] Done<br />
</syntaxhighlight><br />
<br />
===== QCDT devices =====<br />
All flasher offsets must be replaced with the values from the [[deviceinfo]] (you might want to save the command as a shell script for quick usage).<br />
<syntaxhighlight lang="shell-session"><br />
$ cp ~/code/linux/.output/arch/arm/boot/zImage "$TEMP"/zImage<br />
$ cp "/tmp/postmarketOS-export/boot.img-$DEVICE" "$TEMP/boot.img"<br />
$ pmbootstrap chroot -- mkbootimg \<br />
--kernel "/tmp/mainline/zImage" \<br />
--ramdisk "/tmp/mainline/initramfs" \<br />
--base "0x00000000" \<br />
--second_offset "0x00f00000" \<br />
--cmdline "console=ttyMSM0,115200,n8 PMOS_NO_OUTPUT_REDIRECT" \<br />
--kernel_offset "0x00008000" \<br />
--ramdisk_offset "0x02000000" \<br />
--tags_offset "0x01e00000" \<br />
--pagesize "2048" \<br />
-o "/tmp/mainline/boot.img"<br />
</syntaxhighlight><br />
<br />
==== Boot ====<br />
First start <code>dmesg -w</code> (see below). Then bring your device into fastboot mode, connect it via USB and boot (or flash) the kernel:<br />
<syntaxhighlight lang="shell-session"><br />
$ pmbootstrap flasher list_devices<br />
$ pmbootstrap chroot -- fastboot boot /tmp/mainline/boot.img<br />
</syntaxhighlight><br />
<br />
The <code>list_devices</code> line instructs <code>pmbootstrap</code> to mount the USB device nodes inside the chroot, so without this line being executed at least once in the session, fastboot will not find any devices (see {{github|1345}}).<br />
<br />
=== dmesg on your PC ===<br />
Before booting the first time, run <code>dmesg -w</code> on your PC. If everything went right, you should see something like the following as soon as the device boots:<br />
<br />
<pre><br />
[27166.665566] usb 3-9: new high-speed USB device number 16 using xhci_hcd<br />
[27166.793111] usb 3-9: New USB device found, idVendor=0525, idProduct=a4a7<br />
[27166.793117] usb 3-9: New USB device strings: Mfr=1, Product=2, SerialNumber=0<br />
[27166.793121] usb 3-9: Product: Gadget Serial v2.4<br />
[27166.793125] usb 3-9: Manufacturer: Linux 4.16.0-rc5-next-20180314-dirty with ci_hdrc_msm<br />
[27166.809593] cdc_acm 3-9:2.0: ttyACM0: USB ACM device<br />
[27166.809777] usbcore: registered new interface driver cdc_acm<br />
[27166.809778] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters<br />
</pre><br />
<br />
= TODO =<br />
* Mention this is ARM only<br />
* Explain how to get dmesg from the device via telnet (<code>dhcpcd interface --nohook ipv6</code> might be necessary etc.)<br />
* Add steps to upstream the changes made into the kernel (there are already good tutorials out there)<br />
* Add step to integrate the changes with the pmbootstrap source tree (might need changes in pmbootstrap architecture for that)<br />
* Describe how to add a "Mainline section" to each device specific page (with a template!) - something like [http://elektranox.org/droid4/ this overview] would be great to have for every device. This can be done while doing the first kernel compilation when following this guide, because that takes a while anyway. Get the components from:<br />
** downstream dts or teardown results like from ifixit<br />
** decipher from downstream dmesg<br />
** <code>grep compatible</code> in downstream DTS decompiled also works</div>Opendatahttps://wiki.postmarketos.org/index.php?title=Sony_Xperia_Z2_(sony-sirius)&diff=3179Sony Xperia Z2 (sony-sirius)2018-05-01T19:14:25Z<p>Opendata: </p>
<hr />
<div>[[Category:Not booting]]<br />
{{Infobox device<br />
| manufacturer = Sony<br />
| name = Xperia Z2<br />
| codename = sirius<br />
| image = File:Sirius.png<br />
| imagecaption = Sony Xperia Z2<br />
| releaseyear = 2014<br />
| originalsoftware = Android 4.4.4 on Linux 3.4<br />
| chipset = Qualcomm MSM8974AB Snapdragon 801<br />
| cpu = Quad-core 2.3 GHz Krait 400<br />
| gpu = Adreno 330<br />
| storage = 16 GB<br />
| display = 1080x1980 IPS<br />
| memory = 3 GB<br />
}}<br />
== Contributors ==<br />
<br />
* flto<br />
* opendata26<br />
* bamse<br />
* bshah<br />
<br />
== What works ==<br />
<br />
* Compiling the kernel<br />
* Fastboot flash<br />
* SSH<br />
* Setting Brightness<br />
* Freedreno<br />
* WiFi<br />
* Battery Capacity<br />
* Temperature Sensors<br />
* Display<br />
* Touch Screen<br />
* Venus<br />
* Probably more<br />
<br />
'''Current status''':<br />
Uses mainline and works very well, kernel is on pmos github.<br />
<br />
== Links ==<br />
<br />
* [https://github.com/rcstar6696/android_kernel_sony_msm8974 Kernel Source]</div>Opendatahttps://wiki.postmarketos.org/index.php?title=File:Sirius.png&diff=3178File:Sirius.png2018-05-01T19:14:02Z<p>Opendata: </p>
<hr />
<div></div>Opendatahttps://wiki.postmarketos.org/index.php?title=Sony_Xperia_Z2_(sony-sirius)&diff=3177Sony Xperia Z2 (sony-sirius)2018-05-01T18:54:14Z<p>Opendata: /* What works */</p>
<hr />
<div>[[Category:Not booting]]<br />
{{Infobox device<br />
| manufacturer = Sony<br />
| name = Xperia Z2<br />
| codename = sirius<br />
| image = File:Sony Xperia Z2.png<br />
| imagecaption = Sony Xperia Z2<br />
| releaseyear = 2014<br />
| originalsoftware = Android 4.4.4 on Linux 3.10<br />
| chipset = Qualcomm MSM8974AB Snapdragon 801<br />
| cpu = Quad-core 2.3 GHz Krait 400<br />
| gpu = Adreno 330<br />
| storage = 16 GB<br />
| display = 1080x1980 IPS<br />
| memory = 3 GB<br />
}}<br />
== Contributors ==<br />
<br />
* flto<br />
* opendata26<br />
* bamse<br />
* bshah<br />
<br />
== What works ==<br />
<br />
* Compiling the kernel<br />
* Fastboot flash<br />
* SSH<br />
* Setting Brightness<br />
* Freedreno<br />
* WiFi<br />
* Battery Capacity<br />
* Temperature Sensors<br />
* Display<br />
* Touch Screen<br />
* Venus<br />
* Probably more<br />
<br />
'''Current status''':<br />
Uses mainline and works very well, kernel is on pmos github.<br />
<br />
== Links ==<br />
<br />
* [https://github.com/rcstar6696/android_kernel_sony_msm8974 Kernel Source]</div>Opendatahttps://wiki.postmarketos.org/index.php?title=Sony_Xperia_Z2_(sony-sirius)&diff=3176Sony Xperia Z2 (sony-sirius)2018-05-01T18:51:55Z<p>Opendata: /* Contributors */</p>
<hr />
<div>[[Category:Not booting]]<br />
{{Infobox device<br />
| manufacturer = Sony<br />
| name = Xperia Z2<br />
| codename = sirius<br />
| image = File:Sony Xperia Z2.png<br />
| imagecaption = Sony Xperia Z2<br />
| releaseyear = 2014<br />
| originalsoftware = Android 4.4.4 on Linux 3.10<br />
| chipset = Qualcomm MSM8974AB Snapdragon 801<br />
| cpu = Quad-core 2.3 GHz Krait 400<br />
| gpu = Adreno 330<br />
| storage = 16 GB<br />
| display = 1080x1980 IPS<br />
| memory = 3 GB<br />
}}<br />
== Contributors ==<br />
<br />
* flto<br />
* opendata26<br />
* bamse<br />
* bshah<br />
<br />
== What works ==<br />
<br />
* Compiling the kernel<br />
* Fastboot flash<br />
* SSH<br />
* Setting Brightness<br />
<br />
'''Current status''': The framebuffer doesent seem to work correctly (it just sits on boot logo) running cat <code>/dev/urandom &gt; /dev/fb0</code> does nothing and running <code>cat /dev/urandom &gt; /dev/fb2</code> makes the screen go black<br /><br />
the same happens with <code>cat /sys/devices/virtual/graphics/fb0/mode &gt; /sys/devices/virtual/graphics/fb0/modes</code><br />
<br />
'''What i've tried''':<br />
<br />
* Using 3.10 instead of 3.4 (Gives same isue as anami -&gt; [https://github.com/postmarketOS/pmbootstrap/pull/348/files try out this fix!])<br />
* Setting fb settings same as twrp (does nothing)<br />
<br />
== Links ==<br />
<br />
* [https://github.com/rcstar6696/android_kernel_sony_msm8974 Kernel Source]</div>Opendatahttps://wiki.postmarketos.org/index.php?title=Devices&diff=3175Devices2018-05-01T18:51:24Z<p>Opendata: </p>
<hr />
<div>__NOTOC__<br />
Please [[Help:Device Page|add devices you're porting here]], and write your porting progress in the wiki page. The status values and columns are described below the table.<br />
<br />
== Feature matrix ==<br />
It is possible to boot these devices at the very least. To confirm that, either the screen or networking/serial output must be working. If your device fulfills these requirements and is not yet on the list, please add it to the table below and then make a [https://help.github.com/articles/about-pull-requests/ pull-request].<br />
<br />
{| class="wikitable sortable feature-colors"<br />
! rowspan="2" | Device<br />
! rowspan="2" | Codename<br />
! colspan="18" | Status<br />
|-<br />
! USB Net !! Flashing !! Touch !! Screen !! Wifi !! XWayland !! FDE !! Mainline !! Battery !! 3D !! Accelerometers !! Audio !! Bluetooth !! Camera !! GPS !! Mobile Data !! SMS !! Calls <br />
|-<br />
|style="white-space: nowrap;" | [[Amazon Kindle Fire HDX|Amazon Kindle Fire HDX 7"]]<br />
|style="white-space: nowrap;" | amazon-thor<br />
| Y || Y || Y || Y || P || || P || || || || || || || || || || - || - <br />
|-<br />
|style="white-space: nowrap;" | [[Asus-tf101-(ASUS-Transformer-TF101)|ASUS Eee Pad Transformer]]<br />
|style="white-space: nowrap;" | asus-tf101<br />
| || || || Y || || || || || || || || || || || || || - || - <br />
|-<br />
|style="white-space: nowrap;" | [[Asus Zenfone 5 (asus-t00f)|ASUS Zenfone 5]]<br />
|style="white-space: nowrap;" | asus-t00f<br />
| Y || || Y || Y || || || Y || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Fairphone 2 (fairphone-fp2)|Fairphone 2]]<br />
| style="white-space: nowrap;" | fairphone-fp2<br />
| Y || Y || Y || Y || Y || Y || || P || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Geeksphone Peak (gp-peak)|Geeksphone Peak]]🔼<br />
| style="white-space: nowrap;" | gp-peak<br />
| Y || Y || Y || Y || || Y || Y || || || || || Y || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Galaxy Nexus GSM (samsung-maguro)|Google Galaxy Nexus (GSM)]]<br />
| style="white-space: nowrap;" | samsung-maguro<br />
| Y || Y || Y || Y || Y || Y || Y || || Y || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Glass (Explorer Edition)]]<br />
| style="white-space: nowrap;" | google-glass<br />
| Y || Y || P || Y || Y || Y || Y || || || || || Y || Y || Y || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 4 (lg-mako)|Google Nexus 4]]<br />
| style="white-space: nowrap;" | lg-mako<br />
| Y || Y || Y || Y || || || Y || || Y || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 5 (lg-hammerhead)|Google Nexus 5 (GSM)]]<br />
| style="white-space: nowrap;" | lg-hammerhead<br />
| Y || Y || Y || P || || || || P || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 5X(lg-bullhead)|Google Nexus 5X]]<br />
| style="white-space: nowrap;" | lg-bullhead<br />
| Y || Y || Y || Y || || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 6 (motorola-shamu)|Google Nexus 6]]<br />
| style="white-space: nowrap;" | motorola-shamu<br />
| Y || Y || Y || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 6P]]<br />
| style="white-space: nowrap;" | huawei-angler<br />
| Y || P || Y || Y || Y || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 7 2012 (asus-grouper)|Google Nexus 7 (2012)]]<br />
| style="white-space: nowrap;" | asus-grouper<br />
| Y || Y || Y || Y || P || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 7 2013 (asus-flo)|Google Nexus 7 (2013)]]<br />
| style="white-space: nowrap;" | asus-flo<br />
| Y || Y || Y || Y || Y || Y || P || P || || Y || || || || || || - || - || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 9 (htc-flounder)|Google Nexus 9]]<br />
| style="white-space: nowrap;" | htc-flounder<br />
| Y || Y || || P || || || || || || || || || || || || - || - || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 10 (samsung-manta)|Google Nexus 10]]<br />
| style="white-space: nowrap;" | samsung-manta<br />
| Y || Y || || Y || Y || Y || || || || || || || || || || - || - || <br />
|-<br />
| style="white-space: nowrap;" | [[HTC_Desire_816_single_SIM_(htc-a5ul)|HTC Desire 816]]<br />
| style="white-space: nowrap;" | htc-a5ul<br />
| Y || || || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[HTC Desire (htc-bravo)|HTC Desire]]<br />
| style="white-space: nowrap;" | htc-bravo<br />
| Y || P || Y || Y || || Y || Y || || - || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[HTC Desire HD (htc-ace)|HTC Desire HD]]<br />
| style="white-space: nowrap;" | htc-ace<br />
| Y || || Y || Y || Y || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[HTC_Incredible_S_(htc-vivo)|HTC Incredible S]]<br />
| style="white-space: nowrap;" | htc-vivo<br />
| Y || Y || || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[HTC One M8 (htc-m8)|HTC One M8]]<br />
| style="white-space: nowrap;" | htc-m8<br />
| Y || Y || Y || Y || || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Huawei-Ascend-Y530|Huawei Ascend Y530]]<br />
| style="white-space: nowrap;" | huawei-y530<br />
| Y || P || Y || Y || Y || Y || P || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[InFocus New Tab F1 (infocus-flatfish)|InFocus New Tab F1]]🔼<br />
|style="white-space: nowrap;" | infocus-flatfish<br />
| Y || Y || Y || P || || Y || Y || || || || || P || || || || - || - || -<br />
|-<br />
|style="white-space: nowrap;" | [[Jolla_Phone_(jolla-sbj)|Jolla Phone]]<br />
|style="white-space: nowrap;" | jolla-sbj<br />
| P || P || || || || || || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[LeEco_Le_2|LeEco Le 2]]<br />
|style="white-space: nowrap;" | leeco-s2<br />
| Y || Y || || || || || || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[Lenovo K6 Power (lenovo-karate)|Lenovo K6 Power]]<br />
|style="white-space: nowrap;" | lenovo-karate<br />
| Y || Y || Y || Y || Y || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[LG_G_Watch_(lg-dory)|LG G Watch]]<br />
| style="white-space: nowrap;" | lg-dory<br />
| Y || Y || Y || Y || - || Y || || || || || Y || - || || - || - || - || - || -<br />
|-<br />
| style="white-space: nowrap;" | [[LG G Watch R (lg-lenok)|LG G Watch R]]<br />
| style="white-space: nowrap;" | lg-lenok<br />
| Y || Y || Y || Y || || Y || || || || || || - || || - || - || - || - || -<br />
|-<br />
| style="white-space: nowrap;" | [[LG G3 Europe (lg-d855)|LG G3 Europe]]<br />
| style="white-space: nowrap;" | lg-d855<br />
| Y || P || Y || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[LG G4 International (lg-h815)|LG G4 International]]<br />
| style="white-space: nowrap;" | lg-h815<br />
| Y || Y || Y || P || || || || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[LG L65 Dual SIM D285 (lg-d285)|LG L65 Dual SIM D285]]<br />
|style="white-space: nowrap;" | lg-d285<br />
| Y || || Y || Y || || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Motorola_Droid_4_(motorola-maserati)|Motorola Droid 4]]<br />
| style="white-space: nowrap;" | motorola-maserati<br />
| Y || || || || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Moto G 2013 (motorola-falcon)|Moto G 2013]]<br />
| style="white-space: nowrap;" | motorola-falcon<br />
| Y || Y || Y || Y || || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Moto G 4G 2013 (motorola-peregrine)|Moto G 4G 2013]]<br />
| style="white-space: nowrap;" | motorola-peregrine<br />
| Y || Y || Y || Y || Y || Y || Y || || || || || || || || || || || <br />
|-|-<br />
| style="white-space: nowrap;" | [[Moto G 2014 (motorola-titan)|Moto G 2014]]<br />
| style="white-space: nowrap;" | motorola-titan<br />
| Y || P || Y || P || P || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Moto G 2015 (motorola-osprey)|Moto G 2015]]<br />
| style="white-space: nowrap;" | motorola-osprey<br />
| Y || Y || Y || P || || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Motorola Moto G4(motorola-athene)|Moto G4]]<br />
| style="white-space: nowrap;" | motorola-athene<br />
| Y || P || || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Moto G4 Play (motorola-harpia)|Moto G4 Play]]<br />
| style="white-space: nowrap;" | motorola-harpia<br />
| Y || Y || Y || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Motorola Moto G5 Plus(motorola-potter)|Moto G5 Plus]]<br />
| style="white-space: nowrap;" | motorola-potter<br />
| Y || P || || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Mozilla Flame (t2m-flame)|Mozilla Flame]]🔼<br />
| style="white-space: nowrap;" | t2m-flame<br />
| Y || Y || Y || Y || P || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Nextbit Robin|Nextbit Robin]]<br />
| style="white-space: nowrap;" | nextbit-robin<br />
| Y || Y || Y || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Nokia N900]]🔼<br />
| style="white-space: nowrap;" | nokia-n900<br />
| Y || || Y || Y || Y || Y || Y || Y || || || Y || Y || || || P || Y || P || <br />
|-<br />
| style="white-space: nowrap;" | [[Nokia N9]]🔼 / [[Nokia N950]]🔼<br />
| style="white-space: nowrap;" | nokia-n9<br />
| Y || || Y || Y || Y || Y || || Y || || P || || || || || || || || <br />
|-<br />
| style="white:space: nowrap;" | [[OnePlus One (oneplus-bacon)|OnePlus One]]<br />
| style="white-space: nowrap;" | oneplus-bacon<br />
| Y || Y || Y || P || || || || P || || || || || || || || || || <br />
|-<br />
| style="white:space: nowrap;" | [[OnePlus Two (oneplus-oneplus2)|OnePlus Two]]<br />
| style="white-space: nowrap;" | oneplus-oneplus2<br />
| Y || Y || Y || Y || || Y || || || || || || || || || || || || <br />
|-<br />
| style="white:space: nowrap;" | [[OnePlus X (oneplus-onyx)|OnePlus X]]<br />
| style="white-space: nowrap;" | oneplus-onyx<br />
| Y || Y || Y || P || || || P || || || || || || || || || || || <br />
|-<br />
| style="white:space: nowrap;" | [[Ouya (ouya-ouya)|Ouya]]<br />
| style="white-space: nowrap;" | ouya-ouya<br />
| Y || Y || - || Y || || Y || || || || || || || || - || || - || - || - <br />
|-<br />
| style="white-space: nowrap;" | [[QEMU aarch64 (qemu-aarch64 )|QEMU aarch64]]🔼<br />
| style="white-space: nowrap;" | qemu-aarch64<br />
| - || - || - || Y || - || Y || P || Y || || || - || || - || - || - || - || - || - <br />
|-<br />
| style="white-space: nowrap;" | [[QEMU amd64 (qemu-amd64)|QEMU AMD64]]🔼<br />
| style="white-space: nowrap;" | qemu-amd64<br />
| - || - || - || Y || - || Y || P || Y || || || - || || - || - || - || - || - || - <br />
|-<br />
| style="white-space: nowrap;" | [[QEMU ARM (qemu-vexpress)|QEMU ARM]]🔼<br />
| style="white-space: nowrap;" | qemu-vexpress<br />
| - || - || - || Y || - || Y || P || Y || || || - || || - || - || - || - || - || - <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy Ace II X (samsung-kylessopen)|Samsung Galaxy Ace II x]]<br />
| style="white-space: nowrap;" | samsung-kylessopen<br />
| Y || Y || Y || Y || || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy Mini 2 (samsung-s6500d)|Samsung Galaxy Mini 2]]<br />
| style="white-space: nowrap;" | samsung-s6500d<br />
| Y || Y || P || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Galaxy Note II (samsung-n7100)|Samsung Galaxy Note II]]<br />
| style="white-space: nowrap;" | samsung-n7100<br />
| Y || Y || Y || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy Note 8.0 (Wi-Fi) (samsung-n5110)|Samsung Galaxy Note 8.0 (Wi-Fi)]]<br />
| style="white-space: nowrap;" | samsung-n5110<br />
| Y || Y || Y || Y || Y || Y || || || || || || P || P || || || - || - || -<br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy S Advance (samsung-i9070)|Samsung Galaxy S Advance]]<br />
| style="white-space: nowrap;" | samsung-i9070<br />
| Y || Y || Y || Y || Y || Y || Y || || Y || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy SII (samsung-i9100)|Samsung Galaxy SII]]<br />
| style="white-space: nowrap;" | samsung-i9100, -d710<br />
| Y || || Y || Y || Y || Y || P || || || || Y || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung-i747m|Samsung Galaxy SIII (i747m)]]<br />
| style="white-space: nowrap;" | samsung-i747m, -i747<br />
| Y || Y || Y || Y || Y || Y || P || || || || || P || P || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy SIII LTE (samsung-i9305)|Samsung Galaxy SIII (LTE)]]<br />
| style="white-space: nowrap;" | samsung-i9305, -i9300<br />
| Y || || Y || Y || Y || Y || Y || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy SIII mini (samsung-i8190)|Samsung Galaxy SIII mini]]<br />
| style="white-space: nowrap;" | samsung-i8190<br />
| Y || Y || Y || Y || || || Y || || Y || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung-i9505-(Samsung-Galaxy-S4-int)|Samsung Galaxy S4 (International)]]<br />
| style="white-space: nowrap;" | samsung-i9505<br />
| Y || || Y || Y || Y || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy S4 Mini LTE]]<br />
| style="white-space: nowrap;" | samsung-i9195<br />
| Y || Y || || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung_Galaxy_S5_(samsung-klte)|Samsung Galaxy S5]]<br />
| style="white-space: nowrap;" | samsung-klte<br />
| Y || Y || Y || Y || || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy SL (samsung-i9003)|Samsung Galaxy SL]]<br />
| style="white-space: nowrap;" | samsung-i9003<br />
| Y || P || Y || Y || || Y || P || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy Tab 10.1" (samsung-p4wifi)|Samsung Galaxy Tab 10.1"]]<br />
| style="white-space: nowrap;" | samsung-p4wifi, -p4, -p4tmo<br />
| Y || Y || Y || Y || Y || || || P || || || || P || Y || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy Tab 2 10.1" (3G and Wifi) (samsung-espresso10)|Samsung Galaxy Tab 2 10.1"]]<br />
| style="white-space: nowrap;" | samsung-espresso10<br />
| Y || P || Y || Y || P || || Y || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Sony Ericsson Xperia Arc (semc-anzu)|Sony Ericsson Xperia Arc]]<br />
| style="white-space: nowrap;" | semc-anzu<br />
| Y || Y || Y || Y || P || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Sony Xperia T3 (sony-seagull)|Sony Xperia T3]]<br />
| style="white-space: nowrap;" | sony-seagull<br />
| Y || Y || Y || Y || || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Sony Xperia Z (sony-yuga)|Sony Xperia Z]]<br />
| style="white-space: nowrap;" | sony-yuga<br />
| Y || Y || Y || Y || || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Sony Xperia Z1 (sony-honami)|Sony Xperia Z1]]<br />
| style="white-space: nowrap;" | sony-honami<br />
| Y || Y || Y || Y || Y || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Sony Xperia Z1 Compact (sony-amami)|Sony Xperia Z1 Compact]]<br />
| style="white-space: nowrap;" | sony-amami<br />
| Y || Y || Y || Y || Y || Y || || P || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Sony Xperia Z2 (sony-sirius)|Sony Xperia Z2]]<br />
| style="white-space: nowrap;" | sony-sirius<br />
| Y || Y || Y || Y || Y || Y || Y || Y || || Y || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Sony Xperia Z2 Tablet (sony-castor-windy)|Sony Xperia Z2 Tablet]]<br />
| style="white-space: nowrap;" | sony-castor-windy<br />
| Y || Y || Y || Y || Y || Y || Y || Y || Y || Y || || || Y || || - || - || - || -<br />
|-<br />
|style="white-space: nowrap;" | [[Sony Xperia Z3C (sony-aries)|Sony Xperia Z3 Compact]]<br />
|style="white-space: nowrap;" | sony-aries<br />
| || Y || Y || Y || || || || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[Sony Xperia Z3 Tablet Compact (sony-scorpion)|Sony Xperia Z3 Tablet Compact]]<br />
|style="white-space: nowrap;" | sony-scorpion<br />
| Y || Y || Y || Y || || || || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[Teclast X80 Pro (teclast-x80pro) |Teclast X80 Pro]]<br />
|style="white-space: nowrap;" | teclast-x80pro<br />
| - || Y || Y || Y || Y || Y || Y || Y || || Y || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[Wiko_Lenny_3_(wiko-lenny3)|Wiko Lenny 3]]<br />
|style="white-space: nowrap;" | wiko-lenny3<br />
| Y || P || Y || Y || || Y || || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[Xiaomi_Redmi_1S_(xiaomi-armani)|Xiaomi Redmi 1S]]<br />
|style="white-space: nowrap;" | xiaomi-armani<br />
| Y || Y || Y || Y || Y || Y || || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[Xiaomi_RedMi3_(xiaomi-ido)|Xiaomi RedMi 3]]<br />
|style="white-space: nowrap;" | xiaomi-ido<br />
| Y || Y || P || Y || || || Y || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[Xiaomi_RedMi4x_(xiaomi-santoni)|Xiaomi RedMi 4x]]<br />
|style="white-space: nowrap;" | xiaomi-santoni<br />
| || Y || Y || Y || || || || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[Xiaomi_Redmi_Note_4_(mido)|Xiaomi Redmi Note 4]]<br />
|style="white-space: nowrap;" | xiaomi-mido<br />
| Y || Y || Y || Y || Y || || || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[ZTE_Kis_3_(zte-kis3)|ZTE Kis 3]]<br />
|style="white-space: nowrap;" | zte-kis3<br />
| Y || Y || || || || || || || || || || || || || || || || <br />
|}<br />
<!--<br />
NOTE: Please keep the table above alphabetically sorted.<br />
--><br />
<br />
=== Status Legend ===<br />
{| class="wikitable feature-colors"<br />
! Code<br />
! Meaning<br />
|-<br />
| Y<br />
| Yes, fully implemented<br />
|-<br />
| P<br />
| Partially implemented<br />
|-<br />
| -<br />
| Not applicable -- device does not have feature<br />
|-<br />
| style="text-align: center" | 🔼<br />
| non-Android based device<br />
|}<br />
<br />
=== Status Columns ===<br />
{| class="wikitable"<br />
! Column<br />
! Meaning<br />
|-<br />
| USB Net<br />
| After connecting the device with USB to your PC, you can [[Inspecting_the_initramfs|connect to it via telnet (initramfs)]] or [[USB_Network|SSH (booted system)]].<br />
|-<br />
| Flashing<br />
| It is possible to flash the device with `pmbootstrap flasher`.<br />
|-<br />
| Touch<br />
| Touching the screen is recognized properly.<br />
|-<br />
| Screen<br />
| The device's display is working.<br />
|-<br />
| Wifi<br />
| Connecting to wireless network is possible.<br />
|-<br />
| XWayland<br />
| Showing X11 applications in a Wayland compositor (Weston, KWin, ...) works.<br />
|-<br />
| FDE<br />
| Full disk encryption and unlocking with [[osk-sdl]].<br />
|-<br />
| Mainline<br />
| Instead of a Linux kernel fork, it is possible to run [[The_Mainline_Kernel|mainline]].<br />
|-<br />
| Battery<br />
| Charging the battery with [[charging-sdl]] is possible (this seems to be largely untested, please update your device's column if charging is possible).<br />
|-<br />
| 3D<br />
| Hardware accelerated 3D graphics<br />
|-<br />
| Accelerometers<br />
| The sensor that measures [https://en.wikipedia.org/wiki/Proper_acceleration proper acceleration] works.<br />
|-<br />
| Audio<br />
| Using the device's speakers/headphone jack works.<br />
|-<br />
| Bluetooth<br />
| It's possible to pair and use other devices via the bluetooth protocol.<br />
|-<br />
| Camera<br />
| Taking photos and videos works.<br />
|-<br />
| GPS<br />
| The [https://en.wikipedia.org/wiki/Global_Positioning_System Global Positioning System] sensor works.<br />
|-<br />
| Mobile Data<br />
| Connecting to the Internet via cellular network.<br />
|-<br />
| SMS<br />
| Sending and receiving short messages works as intended.<br />
|-<br />
| Calls<br />
| Talking to other people over the cellular network.<br />
|}<br />
<br />
== Not booting ==<br />
These devices are not integrated into the postmarketOS source tree yet. That is either because the devices do not boot at all, or because it does boot, but there has not been done a successful pull-request to integrate the code. In the latter case, if you have the device and can verify that it can be booted, please [https://help.github.com/articles/about-pull-requests/ make a pull-request].<br />
<br />
{| class="wikitable sortable"<br />
! Device<br />
! Codename<br />
! Status<br />
|-<br />
| [[Apple-iPod-Touch-1G|Apple iPod Touch 1G]]🔼<br />
| apple-ipt1g<br />
|<br />
|-<br />
| [[Archos_80_G9_(archos-a80)|Archos 80 G9]]<br />
| archos-a80<br />
| Still figuring out the flashing stuff<br />
|-<br />
| [[ASUS_Transformer_Pad_(asus-tf300t)|ASUS Transformer Pad]]<br />
| asus-tf300t<br />
| Framebuffer doesn't work<br />
|-<br />
| [[Asus-tf700t-(ASUS-Transformer-TF700t)|ASUS Transformer Infinity]]<br />
| asus-tf700t<br />
| Kernel compiles, not tested<br />
|-<br />
| [[Asus_Zenwatch_2_(asus-wi501q)|ASUS Zenwatch 2]]<br />
| asus-wi501q<br />
| Boot partition too small<br />
|-<br />
| [[BlackBerry-Bold-Touch-9900-(Dakota)|BlackBerry Bold Touch 9900]]🔼<br />
| blackberry-dakota<br />
|<br />
|-<br />
| [[Aquaris-U|bq Aquaris U]]<br />
| chaozu<br />
| kernel compiles, more is not yet tested<br />
|-<br />
| [[Coolpad-Sky-3-E502-(Modena-2)|Coolpad Modena 2]]<br />
| coolpad-modena2<br />
|<br />
|-<br />
| [[Geeksphone Revolution (gp-revolution)|Geeksphone Revolution]]<br />
| gp-revolution<br />
| Kernel compiles but does not boot<br />
|-<br />
| [[Google Pixel]]<br />
| google-pixel<br />
| Kernel compiles, untested on hardware as of 2018-03-28<br />
|-<br />
| [[Generic PC]] hardware (inc. BIOS based Windows tablets)🔼<br />
| N/A<br />
| Should be able to boot by converting existing Alpine image<br />
|-<br />
| [[Hp-tenderloin-(HP-Touchpad)|HP Touchpad]]🔼<br />
| hp-tenderloin<br />
| Need novacom packaged for Alpine<br />
|-<br />
| [[Htc-buzz-(HTC-Buzz)|HTC Buzz/Wildfire]]<br />
| htc-buzz<br />
| Kernel compiles. But ARMv6 devices without FPU are not supported by Alpine's armhf<br />
|-<br />
| [[HTC_HD2_(htc-leo)|HTC HD2]]🔼<br />
| htc-leo<br />
| kernel compiles. working on flashing.<br />
|-<br />
| [[Htc-vision-(HTC-Desire-Z)|HTC Desire Z]]<br />
| htc-vision<br />
| Kernel compiles, not tested<br />
|-<br />
| [[Htc-monarudo-(HTC-Droid-DNA)|HTC Droid DNA]]<br />
| htc-monarudo<br />
|<br />
|-<br />
| [[Huawei_Honor_5X_(huawei-kiwi)|Huawei Honor 5X]]<br />
| huawei-kiwi<br />
| Kernel compiles, graphic output does not work<br />
|-<br />
| [[Landrover-a9|Land Rover A9]]<br />
| landrover-a9<br />
|<br />
|-<br />
| [[LG_Joy_(lg-h220)|LG Joy]]<br />
| lg-h220<br />
|<br />
|- <br />
| [[LG K7_(lg-m1)|LG K7]]<br />
| lg-m1<br />
| display works, touchscreen doesn't work<br />
|-<br />
| [[Moto X|Moto X]]<br />
| motorola-ghost<br />
|<br />
|-<br />
| [[Moto X 2014|Moto X 2014]]<br />
| motorola-x-2014<br />
|<br />
|-<br />
| [[Motorola E Second Gen]]<br />
| motorola-surnia<br />
|<br />
|-<br />
| [[NEC Terrain]]<br />
| nec-ne-201a1a<br />
|<br />
|-<br />
| [[Qemu Nokia N900|Qemu N900]]🔼<br />
| qemu-rx51<br />
|<br />
|-<br />
| [[Raspberry Pi]] (inc. PiTab, Noodle Pi..)🔼<br />
| rpi<br />
| Boots by converting existing Alpine image<br />
|-<br />
| [[Samsung_Exhibit_II_4G_(samsung-t679)|Samsung Exhibit II 4G]]<br />
| samsung-t679<br />
| Kernel compiles; flashing and booting are to be tested soon. <br />
|-<br />
| [[Samsung Galaxy Ace i (samsung-s5830i)|Samsung Galaxy Ace i]]<br />
| samsung-s5830i<br />
| Kernel compiles, haven't tried flashing yet.<br />
|-<br />
| [[Samsung_Galaxy_S_(samsung-i9000)|Samsung Galaxy S]]<br />
| samsung-i9000<br />
| Kernel compiles & boots; framebuffer, touchscreen and wifi (partial) working <br />
|-<br />
| [[Samsung-g800f-(Samsung-Galaxy-S5-mini)|Samsung Galaxy S5 mini]]<br />
| samsung-g800f<br />
|<br />
|-<br />
| [[Samsung-g930f-(Samsung-Galaxy-S7)|Samsung Galaxy S7]]<br />
| samsung-g930f<br />
| Kernel compiles; Not tested<br />
|-<br />
| [[Samsung-S7562|Samsung Galaxy S Duos]]<br />
| samsung-s7562<br />
|<br />
|-<br />
| [[Samsung_Galaxy_Star_(samsung-mint)|Samsung Galaxy Star]]<br />
| samsung-mint<br />
| Prebuilt kernel reboots to recovery, pmOS kernel stucks at bootloader logo<br />
|-<br />
| [[Samsung_Galaxy_Tab_S2_9.7_Wifi_(samsung-gts210vewifi)|Samsung Galaxy Tab S2 9.7 Wifi]]<br />
| samsung-gts210vewifi<br />
| Kernel compiles, booting and SSH connectivity ok, touchscreen not yet<br />
|-<br />
| [[Xperia-E-Dual|Sony Xperia E Dual]]<br />
| sony-nanhu<br />
|<br />
|-<br />
| [[Xperia-J-(sony-jlo)|Sony Xperia J]]<br />
| sony-jlo<br />
|<br />
|-<br />
| [[Sony SmartWatch 3 (sony-tetra)|Sony SmartWatch 3]]<br />
| sony-tetra<br />
| Kernel compiles, not tested<br />
|}<br />
<!--<br />
NOTE: Please keep the table above alphabetically sorted.<br />
--><br />
<br />
==Other supported hardware==<br />
There are a variety of devices which pmOS users will likely plug into their phones. If the device is free software compliant (drivers and firmware), we should ensure it works with the OS. This is particularly relevant if the hardware offers an alternative to a non-free piece of hardware which is part of a supported device, such as external wifi adapters and gps units. These devices are listed below.<br />
<br />
===External wifi adapters===<br />
<br />
Atheros [[AR9271]] chipset<br />
<br />
===External GPS units===<br />
<br />
[[Category:Hardware]]<br />
<br />
===See also===<br />
* [[Milestones]] for the current goals and activities<br />
* [[Device Wishlist]]<br />
* [[The-big-list-of-who-has-what-device]]<br />
* [[Symbian]]</div>Opendatahttps://wiki.postmarketos.org/index.php?title=Devices&diff=3174Devices2018-05-01T18:49:52Z<p>Opendata: </p>
<hr />
<div>__NOTOC__<br />
Please [[Help:Device Page|add devices you're porting here]], and write your porting progress in the wiki page. The status values and columns are described below the table.<br />
<br />
== Feature matrix ==<br />
It is possible to boot these devices at the very least. To confirm that, either the screen or networking/serial output must be working. If your device fulfills these requirements and is not yet on the list, please add it to the table below and then make a [https://help.github.com/articles/about-pull-requests/ pull-request].<br />
<br />
{| class="wikitable sortable feature-colors"<br />
! rowspan="2" | Device<br />
! rowspan="2" | Codename<br />
! colspan="18" | Status<br />
|-<br />
! USB Net !! Flashing !! Touch !! Screen !! Wifi !! XWayland !! FDE !! Mainline !! Battery !! 3D !! Accelerometers !! Audio !! Bluetooth !! Camera !! GPS !! Mobile Data !! SMS !! Calls <br />
|-<br />
|style="white-space: nowrap;" | [[Amazon Kindle Fire HDX|Amazon Kindle Fire HDX 7"]]<br />
|style="white-space: nowrap;" | amazon-thor<br />
| Y || Y || Y || Y || P || || P || || || || || || || || || || - || - <br />
|-<br />
|style="white-space: nowrap;" | [[Asus-tf101-(ASUS-Transformer-TF101)|ASUS Eee Pad Transformer]]<br />
|style="white-space: nowrap;" | asus-tf101<br />
| || || || Y || || || || || || || || || || || || || - || - <br />
|-<br />
|style="white-space: nowrap;" | [[Asus Zenfone 5 (asus-t00f)|ASUS Zenfone 5]]<br />
|style="white-space: nowrap;" | asus-t00f<br />
| Y || || Y || Y || || || Y || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Fairphone 2 (fairphone-fp2)|Fairphone 2]]<br />
| style="white-space: nowrap;" | fairphone-fp2<br />
| Y || Y || Y || Y || Y || Y || || P || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Geeksphone Peak (gp-peak)|Geeksphone Peak]]🔼<br />
| style="white-space: nowrap;" | gp-peak<br />
| Y || Y || Y || Y || || Y || Y || || || || || Y || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Galaxy Nexus GSM (samsung-maguro)|Google Galaxy Nexus (GSM)]]<br />
| style="white-space: nowrap;" | samsung-maguro<br />
| Y || Y || Y || Y || Y || Y || Y || || Y || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Glass (Explorer Edition)]]<br />
| style="white-space: nowrap;" | google-glass<br />
| Y || Y || P || Y || Y || Y || Y || || || || || Y || Y || Y || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 4 (lg-mako)|Google Nexus 4]]<br />
| style="white-space: nowrap;" | lg-mako<br />
| Y || Y || Y || Y || || || Y || || Y || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 5 (lg-hammerhead)|Google Nexus 5 (GSM)]]<br />
| style="white-space: nowrap;" | lg-hammerhead<br />
| Y || Y || Y || P || || || || P || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 5X(lg-bullhead)|Google Nexus 5X]]<br />
| style="white-space: nowrap;" | lg-bullhead<br />
| Y || Y || Y || Y || || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 6 (motorola-shamu)|Google Nexus 6]]<br />
| style="white-space: nowrap;" | motorola-shamu<br />
| Y || Y || Y || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 6P]]<br />
| style="white-space: nowrap;" | huawei-angler<br />
| Y || P || Y || Y || Y || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 7 2012 (asus-grouper)|Google Nexus 7 (2012)]]<br />
| style="white-space: nowrap;" | asus-grouper<br />
| Y || Y || Y || Y || P || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 7 2013 (asus-flo)|Google Nexus 7 (2013)]]<br />
| style="white-space: nowrap;" | asus-flo<br />
| Y || Y || Y || Y || Y || Y || P || P || || Y || || || || || || - || - || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 9 (htc-flounder)|Google Nexus 9]]<br />
| style="white-space: nowrap;" | htc-flounder<br />
| Y || Y || || P || || || || || || || || || || || || - || - || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 10 (samsung-manta)|Google Nexus 10]]<br />
| style="white-space: nowrap;" | samsung-manta<br />
| Y || Y || || Y || Y || Y || || || || || || || || || || - || - || <br />
|-<br />
| style="white-space: nowrap;" | [[HTC_Desire_816_single_SIM_(htc-a5ul)|HTC Desire 816]]<br />
| style="white-space: nowrap;" | htc-a5ul<br />
| Y || || || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[HTC Desire (htc-bravo)|HTC Desire]]<br />
| style="white-space: nowrap;" | htc-bravo<br />
| Y || P || Y || Y || || Y || Y || || - || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[HTC Desire HD (htc-ace)|HTC Desire HD]]<br />
| style="white-space: nowrap;" | htc-ace<br />
| Y || || Y || Y || Y || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[HTC_Incredible_S_(htc-vivo)|HTC Incredible S]]<br />
| style="white-space: nowrap;" | htc-vivo<br />
| Y || Y || || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[HTC One M8 (htc-m8)|HTC One M8]]<br />
| style="white-space: nowrap;" | htc-m8<br />
| Y || Y || Y || Y || || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Huawei-Ascend-Y530|Huawei Ascend Y530]]<br />
| style="white-space: nowrap;" | huawei-y530<br />
| Y || P || Y || Y || Y || Y || P || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[InFocus New Tab F1 (infocus-flatfish)|InFocus New Tab F1]]🔼<br />
|style="white-space: nowrap;" | infocus-flatfish<br />
| Y || Y || Y || P || || Y || Y || || || || || P || || || || - || - || -<br />
|-<br />
|style="white-space: nowrap;" | [[Jolla_Phone_(jolla-sbj)|Jolla Phone]]<br />
|style="white-space: nowrap;" | jolla-sbj<br />
| P || P || || || || || || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[LeEco_Le_2|LeEco Le 2]]<br />
|style="white-space: nowrap;" | leeco-s2<br />
| Y || Y || || || || || || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[Lenovo K6 Power (lenovo-karate)|Lenovo K6 Power]]<br />
|style="white-space: nowrap;" | lenovo-karate<br />
| Y || Y || Y || Y || Y || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[LG_G_Watch_(lg-dory)|LG G Watch]]<br />
| style="white-space: nowrap;" | lg-dory<br />
| Y || Y || Y || Y || - || Y || || || || || Y || - || || - || - || - || - || -<br />
|-<br />
| style="white-space: nowrap;" | [[LG G Watch R (lg-lenok)|LG G Watch R]]<br />
| style="white-space: nowrap;" | lg-lenok<br />
| Y || Y || Y || Y || || Y || || || || || || - || || - || - || - || - || -<br />
|-<br />
| style="white-space: nowrap;" | [[LG G3 Europe (lg-d855)|LG G3 Europe]]<br />
| style="white-space: nowrap;" | lg-d855<br />
| Y || P || Y || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[LG G4 International (lg-h815)|LG G4 International]]<br />
| style="white-space: nowrap;" | lg-h815<br />
| Y || Y || Y || P || || || || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[LG L65 Dual SIM D285 (lg-d285)|LG L65 Dual SIM D285]]<br />
|style="white-space: nowrap;" | lg-d285<br />
| Y || || Y || Y || || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Motorola_Droid_4_(motorola-maserati)|Motorola Droid 4]]<br />
| style="white-space: nowrap;" | motorola-maserati<br />
| Y || || || || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Moto G 2013 (motorola-falcon)|Moto G 2013]]<br />
| style="white-space: nowrap;" | motorola-falcon<br />
| Y || Y || Y || Y || || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Moto G 4G 2013 (motorola-peregrine)|Moto G 4G 2013]]<br />
| style="white-space: nowrap;" | motorola-peregrine<br />
| Y || Y || Y || Y || Y || Y || Y || || || || || || || || || || || <br />
|-|-<br />
| style="white-space: nowrap;" | [[Moto G 2014 (motorola-titan)|Moto G 2014]]<br />
| style="white-space: nowrap;" | motorola-titan<br />
| Y || P || Y || P || P || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Moto G 2015 (motorola-osprey)|Moto G 2015]]<br />
| style="white-space: nowrap;" | motorola-osprey<br />
| Y || Y || Y || P || || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Motorola Moto G4(motorola-athene)|Moto G4]]<br />
| style="white-space: nowrap;" | motorola-athene<br />
| Y || P || || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Moto G4 Play (motorola-harpia)|Moto G4 Play]]<br />
| style="white-space: nowrap;" | motorola-harpia<br />
| Y || Y || Y || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Motorola Moto G5 Plus(motorola-potter)|Moto G5 Plus]]<br />
| style="white-space: nowrap;" | motorola-potter<br />
| Y || P || || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Mozilla Flame (t2m-flame)|Mozilla Flame]]🔼<br />
| style="white-space: nowrap;" | t2m-flame<br />
| Y || Y || Y || Y || P || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Nextbit Robin|Nextbit Robin]]<br />
| style="white-space: nowrap;" | nextbit-robin<br />
| Y || Y || Y || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Nokia N900]]🔼<br />
| style="white-space: nowrap;" | nokia-n900<br />
| Y || || Y || Y || Y || Y || Y || Y || || || Y || Y || || || P || Y || P || <br />
|-<br />
| style="white-space: nowrap;" | [[Nokia N9]]🔼 / [[Nokia N950]]🔼<br />
| style="white-space: nowrap;" | nokia-n9<br />
| Y || || Y || Y || Y || Y || || Y || || P || || || || || || || || <br />
|-<br />
| style="white:space: nowrap;" | [[OnePlus One (oneplus-bacon)|OnePlus One]]<br />
| style="white-space: nowrap;" | oneplus-bacon<br />
| Y || Y || Y || P || || || || P || || || || || || || || || || <br />
|-<br />
| style="white:space: nowrap;" | [[OnePlus Two (oneplus-oneplus2)|OnePlus Two]]<br />
| style="white-space: nowrap;" | oneplus-oneplus2<br />
| Y || Y || Y || Y || || Y || || || || || || || || || || || || <br />
|-<br />
| style="white:space: nowrap;" | [[OnePlus X (oneplus-onyx)|OnePlus X]]<br />
| style="white-space: nowrap;" | oneplus-onyx<br />
| Y || Y || Y || P || || || P || || || || || || || || || || || <br />
|-<br />
| style="white:space: nowrap;" | [[Ouya (ouya-ouya)|Ouya]]<br />
| style="white-space: nowrap;" | ouya-ouya<br />
| Y || Y || - || Y || || Y || || || || || || || || - || || - || - || - <br />
|-<br />
| style="white-space: nowrap;" | [[QEMU aarch64 (qemu-aarch64 )|QEMU aarch64]]🔼<br />
| style="white-space: nowrap;" | qemu-aarch64<br />
| - || - || - || Y || - || Y || P || Y || || || - || || - || - || - || - || - || - <br />
|-<br />
| style="white-space: nowrap;" | [[QEMU amd64 (qemu-amd64)|QEMU AMD64]]🔼<br />
| style="white-space: nowrap;" | qemu-amd64<br />
| - || - || - || Y || - || Y || P || Y || || || - || || - || - || - || - || - || - <br />
|-<br />
| style="white-space: nowrap;" | [[QEMU ARM (qemu-vexpress)|QEMU ARM]]🔼<br />
| style="white-space: nowrap;" | qemu-vexpress<br />
| - || - || - || Y || - || Y || P || Y || || || - || || - || - || - || - || - || - <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy Ace II X (samsung-kylessopen)|Samsung Galaxy Ace II x]]<br />
| style="white-space: nowrap;" | samsung-kylessopen<br />
| Y || Y || Y || Y || || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy Mini 2 (samsung-s6500d)|Samsung Galaxy Mini 2]]<br />
| style="white-space: nowrap;" | samsung-s6500d<br />
| Y || Y || P || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Galaxy Note II (samsung-n7100)|Samsung Galaxy Note II]]<br />
| style="white-space: nowrap;" | samsung-n7100<br />
| Y || Y || Y || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy Note 8.0 (Wi-Fi) (samsung-n5110)|Samsung Galaxy Note 8.0 (Wi-Fi)]]<br />
| style="white-space: nowrap;" | samsung-n5110<br />
| Y || Y || Y || Y || Y || Y || || || || || || P || P || || || - || - || -<br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy S Advance (samsung-i9070)|Samsung Galaxy S Advance]]<br />
| style="white-space: nowrap;" | samsung-i9070<br />
| Y || Y || Y || Y || Y || Y || Y || || Y || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy SII (samsung-i9100)|Samsung Galaxy SII]]<br />
| style="white-space: nowrap;" | samsung-i9100, -d710<br />
| Y || || Y || Y || Y || Y || P || || || || Y || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung-i747m|Samsung Galaxy SIII (i747m)]]<br />
| style="white-space: nowrap;" | samsung-i747m, -i747<br />
| Y || Y || Y || Y || Y || Y || P || || || || || P || P || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy SIII LTE (samsung-i9305)|Samsung Galaxy SIII (LTE)]]<br />
| style="white-space: nowrap;" | samsung-i9305, -i9300<br />
| Y || || Y || Y || Y || Y || Y || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy SIII mini (samsung-i8190)|Samsung Galaxy SIII mini]]<br />
| style="white-space: nowrap;" | samsung-i8190<br />
| Y || Y || Y || Y || || || Y || || Y || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung-i9505-(Samsung-Galaxy-S4-int)|Samsung Galaxy S4 (International)]]<br />
| style="white-space: nowrap;" | samsung-i9505<br />
| Y || || Y || Y || Y || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy S4 Mini LTE]]<br />
| style="white-space: nowrap;" | samsung-i9195<br />
| Y || Y || || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung_Galaxy_S5_(samsung-klte)|Samsung Galaxy S5]]<br />
| style="white-space: nowrap;" | samsung-klte<br />
| Y || Y || Y || Y || || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy SL (samsung-i9003)|Samsung Galaxy SL]]<br />
| style="white-space: nowrap;" | samsung-i9003<br />
| Y || P || Y || Y || || Y || P || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy Tab 10.1" (samsung-p4wifi)|Samsung Galaxy Tab 10.1"]]<br />
| style="white-space: nowrap;" | samsung-p4wifi, -p4, -p4tmo<br />
| Y || Y || Y || Y || Y || || || P || || || || P || Y || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy Tab 2 10.1" (3G and Wifi) (samsung-espresso10)|Samsung Galaxy Tab 2 10.1"]]<br />
| style="white-space: nowrap;" | samsung-espresso10<br />
| Y || P || Y || Y || P || || Y || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Sony Ericsson Xperia Arc (semc-anzu)|Sony Ericsson Xperia Arc]]<br />
| style="white-space: nowrap;" | semc-anzu<br />
| Y || Y || Y || Y || P || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Sony Xperia T3 (sony-seagull)|Sony Xperia T3]]<br />
| style="white-space: nowrap;" | sony-seagull<br />
| Y || Y || Y || Y || || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Sony Xperia Z (sony-yuga)|Sony Xperia Z]]<br />
| style="white-space: nowrap;" | sony-yuga<br />
| Y || Y || Y || Y || || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Sony Xperia Z1 (sony-honami)|Sony Xperia Z1]]<br />
| style="white-space: nowrap;" | sony-honami<br />
| Y || Y || Y || Y || Y || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Sony Xperia Z1 Compact (sony-amami)|Sony Xperia Z1 Compact]]<br />
| style="white-space: nowrap;" | sony-amami<br />
| Y || Y || Y || Y || Y || Y || || P || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Sony Xperia Z2 (sony-sirius)|Sony Xperia Z2]]<br />
| style="white-space: nowrap;" | sony-sirius<br />
| Y || Y || Y || Y || Y || Y || Y || Y || Y || Y || || || Y || || - || - || - || -<br />
|-<br />
| style="white-space: nowrap;" | [[Sony Xperia Z2 Tablet (sony-castor-windy)|Sony Xperia Z2 Tablet]]<br />
| style="white-space: nowrap;" | sony-castor-windy<br />
| Y || Y || Y || Y || Y || Y || Y || Y || Y || Y || || || Y || || - || - || - || -<br />
|-<br />
|style="white-space: nowrap;" | [[Sony Xperia Z3C (sony-aries)|Sony Xperia Z3 Compact]]<br />
|style="white-space: nowrap;" | sony-aries<br />
| || Y || Y || Y || || || || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[Sony Xperia Z3 Tablet Compact (sony-scorpion)|Sony Xperia Z3 Tablet Compact]]<br />
|style="white-space: nowrap;" | sony-scorpion<br />
| Y || Y || Y || Y || || || || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[Teclast X80 Pro (teclast-x80pro) |Teclast X80 Pro]]<br />
|style="white-space: nowrap;" | teclast-x80pro<br />
| - || Y || Y || Y || Y || Y || Y || Y || || Y || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[Wiko_Lenny_3_(wiko-lenny3)|Wiko Lenny 3]]<br />
|style="white-space: nowrap;" | wiko-lenny3<br />
| Y || P || Y || Y || || Y || || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[Xiaomi_Redmi_1S_(xiaomi-armani)|Xiaomi Redmi 1S]]<br />
|style="white-space: nowrap;" | xiaomi-armani<br />
| Y || Y || Y || Y || Y || Y || || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[Xiaomi_RedMi3_(xiaomi-ido)|Xiaomi RedMi 3]]<br />
|style="white-space: nowrap;" | xiaomi-ido<br />
| Y || Y || P || Y || || || Y || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[Xiaomi_RedMi4x_(xiaomi-santoni)|Xiaomi RedMi 4x]]<br />
|style="white-space: nowrap;" | xiaomi-santoni<br />
| || Y || Y || Y || || || || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[Xiaomi_Redmi_Note_4_(mido)|Xiaomi Redmi Note 4]]<br />
|style="white-space: nowrap;" | xiaomi-mido<br />
| Y || Y || Y || Y || Y || || || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[ZTE_Kis_3_(zte-kis3)|ZTE Kis 3]]<br />
|style="white-space: nowrap;" | zte-kis3<br />
| Y || Y || || || || || || || || || || || || || || || || <br />
|}<br />
<!--<br />
NOTE: Please keep the table above alphabetically sorted.<br />
--><br />
<br />
=== Status Legend ===<br />
{| class="wikitable feature-colors"<br />
! Code<br />
! Meaning<br />
|-<br />
| Y<br />
| Yes, fully implemented<br />
|-<br />
| P<br />
| Partially implemented<br />
|-<br />
| -<br />
| Not applicable -- device does not have feature<br />
|-<br />
| style="text-align: center" | 🔼<br />
| non-Android based device<br />
|}<br />
<br />
=== Status Columns ===<br />
{| class="wikitable"<br />
! Column<br />
! Meaning<br />
|-<br />
| USB Net<br />
| After connecting the device with USB to your PC, you can [[Inspecting_the_initramfs|connect to it via telnet (initramfs)]] or [[USB_Network|SSH (booted system)]].<br />
|-<br />
| Flashing<br />
| It is possible to flash the device with `pmbootstrap flasher`.<br />
|-<br />
| Touch<br />
| Touching the screen is recognized properly.<br />
|-<br />
| Screen<br />
| The device's display is working.<br />
|-<br />
| Wifi<br />
| Connecting to wireless network is possible.<br />
|-<br />
| XWayland<br />
| Showing X11 applications in a Wayland compositor (Weston, KWin, ...) works.<br />
|-<br />
| FDE<br />
| Full disk encryption and unlocking with [[osk-sdl]].<br />
|-<br />
| Mainline<br />
| Instead of a Linux kernel fork, it is possible to run [[The_Mainline_Kernel|mainline]].<br />
|-<br />
| Battery<br />
| Charging the battery with [[charging-sdl]] is possible (this seems to be largely untested, please update your device's column if charging is possible).<br />
|-<br />
| 3D<br />
| Hardware accelerated 3D graphics<br />
|-<br />
| Accelerometers<br />
| The sensor that measures [https://en.wikipedia.org/wiki/Proper_acceleration proper acceleration] works.<br />
|-<br />
| Audio<br />
| Using the device's speakers/headphone jack works.<br />
|-<br />
| Bluetooth<br />
| It's possible to pair and use other devices via the bluetooth protocol.<br />
|-<br />
| Camera<br />
| Taking photos and videos works.<br />
|-<br />
| GPS<br />
| The [https://en.wikipedia.org/wiki/Global_Positioning_System Global Positioning System] sensor works.<br />
|-<br />
| Mobile Data<br />
| Connecting to the Internet via cellular network.<br />
|-<br />
| SMS<br />
| Sending and receiving short messages works as intended.<br />
|-<br />
| Calls<br />
| Talking to other people over the cellular network.<br />
|}<br />
<br />
== Not booting ==<br />
These devices are not integrated into the postmarketOS source tree yet. That is either because the devices do not boot at all, or because it does boot, but there has not been done a successful pull-request to integrate the code. In the latter case, if you have the device and can verify that it can be booted, please [https://help.github.com/articles/about-pull-requests/ make a pull-request].<br />
<br />
{| class="wikitable sortable"<br />
! Device<br />
! Codename<br />
! Status<br />
|-<br />
| [[Apple-iPod-Touch-1G|Apple iPod Touch 1G]]🔼<br />
| apple-ipt1g<br />
|<br />
|-<br />
| [[Archos_80_G9_(archos-a80)|Archos 80 G9]]<br />
| archos-a80<br />
| Still figuring out the flashing stuff<br />
|-<br />
| [[ASUS_Transformer_Pad_(asus-tf300t)|ASUS Transformer Pad]]<br />
| asus-tf300t<br />
| Framebuffer doesn't work<br />
|-<br />
| [[Asus-tf700t-(ASUS-Transformer-TF700t)|ASUS Transformer Infinity]]<br />
| asus-tf700t<br />
| Kernel compiles, not tested<br />
|-<br />
| [[Asus_Zenwatch_2_(asus-wi501q)|ASUS Zenwatch 2]]<br />
| asus-wi501q<br />
| Boot partition too small<br />
|-<br />
| [[BlackBerry-Bold-Touch-9900-(Dakota)|BlackBerry Bold Touch 9900]]🔼<br />
| blackberry-dakota<br />
|<br />
|-<br />
| [[Aquaris-U|bq Aquaris U]]<br />
| chaozu<br />
| kernel compiles, more is not yet tested<br />
|-<br />
| [[Coolpad-Sky-3-E502-(Modena-2)|Coolpad Modena 2]]<br />
| coolpad-modena2<br />
|<br />
|-<br />
| [[Geeksphone Revolution (gp-revolution)|Geeksphone Revolution]]<br />
| gp-revolution<br />
| Kernel compiles but does not boot<br />
|-<br />
| [[Google Pixel]]<br />
| google-pixel<br />
| Kernel compiles, untested on hardware as of 2018-03-28<br />
|-<br />
| [[Generic PC]] hardware (inc. BIOS based Windows tablets)🔼<br />
| N/A<br />
| Should be able to boot by converting existing Alpine image<br />
|-<br />
| [[Hp-tenderloin-(HP-Touchpad)|HP Touchpad]]🔼<br />
| hp-tenderloin<br />
| Need novacom packaged for Alpine<br />
|-<br />
| [[Htc-buzz-(HTC-Buzz)|HTC Buzz/Wildfire]]<br />
| htc-buzz<br />
| Kernel compiles. But ARMv6 devices without FPU are not supported by Alpine's armhf<br />
|-<br />
| [[HTC_HD2_(htc-leo)|HTC HD2]]🔼<br />
| htc-leo<br />
| kernel compiles. working on flashing.<br />
|-<br />
| [[Htc-vision-(HTC-Desire-Z)|HTC Desire Z]]<br />
| htc-vision<br />
| Kernel compiles, not tested<br />
|-<br />
| [[Htc-monarudo-(HTC-Droid-DNA)|HTC Droid DNA]]<br />
| htc-monarudo<br />
|<br />
|-<br />
| [[Huawei_Honor_5X_(huawei-kiwi)|Huawei Honor 5X]]<br />
| huawei-kiwi<br />
| Kernel compiles, graphic output does not work<br />
|-<br />
| [[Landrover-a9|Land Rover A9]]<br />
| landrover-a9<br />
|<br />
|-<br />
| [[LG_Joy_(lg-h220)|LG Joy]]<br />
| lg-h220<br />
|<br />
|- <br />
| [[LG K7_(lg-m1)|LG K7]]<br />
| lg-m1<br />
| display works, touchscreen doesn't work<br />
|-<br />
| [[Moto X|Moto X]]<br />
| motorola-ghost<br />
|<br />
|-<br />
| [[Moto X 2014|Moto X 2014]]<br />
| motorola-x-2014<br />
|<br />
|-<br />
| [[Motorola E Second Gen]]<br />
| motorola-surnia<br />
|<br />
|-<br />
| [[NEC Terrain]]<br />
| nec-ne-201a1a<br />
|<br />
|-<br />
| [[Qemu Nokia N900|Qemu N900]]🔼<br />
| qemu-rx51<br />
|<br />
|-<br />
| [[Raspberry Pi]] (inc. PiTab, Noodle Pi..)🔼<br />
| rpi<br />
| Boots by converting existing Alpine image<br />
|-<br />
| [[Samsung_Exhibit_II_4G_(samsung-t679)|Samsung Exhibit II 4G]]<br />
| samsung-t679<br />
| Kernel compiles; flashing and booting are to be tested soon. <br />
|-<br />
| [[Samsung Galaxy Ace i (samsung-s5830i)|Samsung Galaxy Ace i]]<br />
| samsung-s5830i<br />
| Kernel compiles, haven't tried flashing yet.<br />
|-<br />
| [[Samsung_Galaxy_S_(samsung-i9000)|Samsung Galaxy S]]<br />
| samsung-i9000<br />
| Kernel compiles & boots; framebuffer, touchscreen and wifi (partial) working <br />
|-<br />
| [[Samsung-g800f-(Samsung-Galaxy-S5-mini)|Samsung Galaxy S5 mini]]<br />
| samsung-g800f<br />
|<br />
|-<br />
| [[Samsung-g930f-(Samsung-Galaxy-S7)|Samsung Galaxy S7]]<br />
| samsung-g930f<br />
| Kernel compiles; Not tested<br />
|-<br />
| [[Samsung-S7562|Samsung Galaxy S Duos]]<br />
| samsung-s7562<br />
|<br />
|-<br />
| [[Samsung_Galaxy_Star_(samsung-mint)|Samsung Galaxy Star]]<br />
| samsung-mint<br />
| Prebuilt kernel reboots to recovery, pmOS kernel stucks at bootloader logo<br />
|-<br />
| [[Samsung_Galaxy_Tab_S2_9.7_Wifi_(samsung-gts210vewifi)|Samsung Galaxy Tab S2 9.7 Wifi]]<br />
| samsung-gts210vewifi<br />
| Kernel compiles, booting and SSH connectivity ok, touchscreen not yet<br />
|-<br />
| [[Xperia-E-Dual|Sony Xperia E Dual]]<br />
| sony-nanhu<br />
|<br />
|-<br />
| [[Xperia-J-(sony-jlo)|Sony Xperia J]]<br />
| sony-jlo<br />
|<br />
|-<br />
| [[Sony SmartWatch 3 (sony-tetra)|Sony SmartWatch 3]]<br />
| sony-tetra<br />
| Kernel compiles, not tested<br />
|-<br />
| [[Xperia-Z2|Sony Xperia Z2]]<br />
| sony-sirius<br />
|<br />
<br />
|}<br />
<!--<br />
NOTE: Please keep the table above alphabetically sorted.<br />
--><br />
<br />
==Other supported hardware==<br />
There are a variety of devices which pmOS users will likely plug into their phones. If the device is free software compliant (drivers and firmware), we should ensure it works with the OS. This is particularly relevant if the hardware offers an alternative to a non-free piece of hardware which is part of a supported device, such as external wifi adapters and gps units. These devices are listed below.<br />
<br />
===External wifi adapters===<br />
<br />
Atheros [[AR9271]] chipset<br />
<br />
===External GPS units===<br />
<br />
[[Category:Hardware]]<br />
<br />
===See also===<br />
* [[Milestones]] for the current goals and activities<br />
* [[Device Wishlist]]<br />
* [[The-big-list-of-who-has-what-device]]<br />
* [[Symbian]]</div>Opendatahttps://wiki.postmarketos.org/index.php?title=Devices&diff=3164Devices2018-04-28T10:43:05Z<p>Opendata: </p>
<hr />
<div>__NOTOC__<br />
Please [[Help:Device Page|add devices you're porting here]], and write your porting progress in the wiki page. The status values and columns are described below the table.<br />
<br />
== Feature matrix ==<br />
It is possible to boot these devices at the very least. To confirm that, either the screen or networking/serial output must be working. If your device fulfills these requirements and is not yet on the list, please add it to the table below and then make a [https://help.github.com/articles/about-pull-requests/ pull-request].<br />
<br />
{| class="wikitable sortable feature-colors"<br />
! rowspan="2" | Device<br />
! rowspan="2" | Codename<br />
! colspan="18" | Status<br />
|-<br />
! USB Net !! Flashing !! Touch !! Screen !! Wifi !! XWayland !! FDE !! Mainline !! Battery !! 3D !! Accelerometers !! Audio !! Bluetooth !! Camera !! GPS !! Mobile Data !! SMS !! Calls <br />
|-<br />
|style="white-space: nowrap;" | [[Amazon Kindle Fire HDX|Amazon Kindle Fire HDX 7"]]<br />
|style="white-space: nowrap;" | amazon-thor<br />
| Y || Y || Y || Y || P || || P || || || || || || || || || || - || - <br />
|-<br />
|style="white-space: nowrap;" | [[Asus-tf101-(ASUS-Transformer-TF101)|ASUS Eee Pad Transformer]]<br />
|style="white-space: nowrap;" | asus-tf101<br />
| || || || Y || || || || || || || || || || || || || - || - <br />
|-<br />
|style="white-space: nowrap;" | [[Asus Zenfone 5 (asus-t00f)|ASUS Zenfone 5]]<br />
|style="white-space: nowrap;" | asus-t00f<br />
| Y || || Y || Y || || || Y || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Fairphone 2 (fairphone-fp2)|Fairphone 2]]<br />
| style="white-space: nowrap;" | fairphone-fp2<br />
| Y || Y || Y || Y || Y || Y || || P || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Geeksphone Peak (gp-peak)|Geeksphone Peak]]🔼<br />
| style="white-space: nowrap;" | gp-peak<br />
| Y || Y || Y || Y || || Y || Y || || || || || Y || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Galaxy Nexus GSM (samsung-maguro)|Google Galaxy Nexus (GSM)]]<br />
| style="white-space: nowrap;" | samsung-maguro<br />
| Y || Y || Y || Y || Y || Y || Y || || Y || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Glass (Explorer Edition)]]<br />
| style="white-space: nowrap;" | google-glass<br />
| Y || Y || P || Y || Y || Y || Y || || || || || Y || Y || Y || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 4 (lg-mako)|Google Nexus 4]]<br />
| style="white-space: nowrap;" | lg-mako<br />
| Y || Y || Y || Y || || || Y || || Y || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 5 (lg-hammerhead)|Google Nexus 5 (GSM)]]<br />
| style="white-space: nowrap;" | lg-hammerhead<br />
| Y || Y || Y || P || || || || P || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 5X(lg-bullhead)|Google Nexus 5X]]<br />
| style="white-space: nowrap;" | lg-bullhead<br />
| Y || Y || Y || Y || || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 6 (motorola-shamu)|Google Nexus 6]]<br />
| style="white-space: nowrap;" | motorola-shamu<br />
| Y || Y || Y || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 6P]]<br />
| style="white-space: nowrap;" | huawei-angler<br />
| Y || P || Y || Y || Y || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 7 2012 (asus-grouper)|Google Nexus 7 (2012)]]<br />
| style="white-space: nowrap;" | asus-grouper<br />
| Y || Y || Y || Y || P || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 7 2013 (asus-flo)|Google Nexus 7 (2013)]]<br />
| style="white-space: nowrap;" | asus-flo<br />
| Y || Y || Y || Y || Y || Y || P || P || || Y || || || || || || - || - || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 9 (htc-flounder)|Google Nexus 9]]<br />
| style="white-space: nowrap;" | htc-flounder<br />
| Y || Y || || P || || || || || || || || || || || || - || - || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 10 (samsung-manta)|Google Nexus 10]]<br />
| style="white-space: nowrap;" | samsung-manta<br />
| Y || Y || || Y || Y || Y || || || || || || || || || || - || - || <br />
|-<br />
| style="white-space: nowrap;" | [[HTC_Desire_816_single_SIM_(htc-a5ul)|HTC Desire 816]]<br />
| style="white-space: nowrap;" | htc-a5ul<br />
| Y || || || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[HTC Desire (htc-bravo)|HTC Desire]]<br />
| style="white-space: nowrap;" | htc-bravo<br />
| Y || P || Y || Y || || Y || Y || || - || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[HTC Desire HD (htc-ace)|HTC Desire HD]]<br />
| style="white-space: nowrap;" | htc-ace<br />
| Y || || Y || Y || Y || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[HTC_Incredible_S_(htc-vivo)|HTC Incredible S]]<br />
| style="white-space: nowrap;" | htc-vivo<br />
| Y || Y || || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[HTC One M8 (htc-m8)|HTC One M8]]<br />
| style="white-space: nowrap;" | htc-m8<br />
| Y || Y || Y || Y || || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Huawei-Ascend-Y530|Huawei Ascend Y530]]<br />
| style="white-space: nowrap;" | huawei-y530<br />
| Y || P || Y || Y || Y || Y || P || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[InFocus New Tab F1 (infocus-flatfish)|InFocus New Tab F1]]🔼<br />
|style="white-space: nowrap;" | infocus-flatfish<br />
| Y || Y || Y || P || || Y || Y || || || || || P || || || || - || - || -<br />
|-<br />
|style="white-space: nowrap;" | [[Jolla_Phone_(jolla-sbj)|Jolla Phone]]<br />
|style="white-space: nowrap;" | jolla-sbj<br />
| P || P || || || || || || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[LeEco_Le_2|LeEco Le 2]]<br />
|style="white-space: nowrap;" | leeco-s2<br />
| Y || Y || || || || || || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[Lenovo K6 Power (lenovo-karate)|Lenovo K6 Power]]<br />
|style="white-space: nowrap;" | lenovo-karate<br />
| Y || Y || Y || Y || Y || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[LG_G_Watch_(lg-dory)|LG G Watch]]<br />
| style="white-space: nowrap;" | lg-dory<br />
| Y || Y || Y || Y || - || Y || || || || || Y || - || || - || - || - || - || -<br />
|-<br />
| style="white-space: nowrap;" | [[LG G Watch R (lg-lenok)|LG G Watch R]]<br />
| style="white-space: nowrap;" | lg-lenok<br />
| Y || Y || Y || Y || || Y || || || || || || - || || - || - || - || - || -<br />
|-<br />
| style="white-space: nowrap;" | [[LG G3 Europe (lg-d855)|LG G3 Europe]]<br />
| style="white-space: nowrap;" | lg-d855<br />
| Y || P || Y || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[LG G4 International (lg-h815)|LG G4 International]]<br />
| style="white-space: nowrap;" | lg-h815<br />
| Y || Y || Y || P || || || || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[LG L65 Dual SIM D285 (lg-d285)|LG L65 Dual SIM D285]]<br />
|style="white-space: nowrap;" | lg-d285<br />
| Y || || Y || Y || || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Motorola_Droid_4_(motorola-maserati)|Motorola Droid 4]]<br />
| style="white-space: nowrap;" | motorola-maserati<br />
| Y || || || || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Moto G 2013 (motorola-falcon)|Moto G 2013]]<br />
| style="white-space: nowrap;" | motorola-falcon<br />
| Y || Y || Y || Y || || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Moto G 4G 2013 (motorola-peregrine)|Moto G 4G 2013]]<br />
| style="white-space: nowrap;" | motorola-peregrine<br />
| Y || Y || Y || Y || Y || Y || Y || || || || || || || || || || || <br />
|-|-<br />
| style="white-space: nowrap;" | [[Moto G 2014 (motorola-titan)|Moto G 2014]]<br />
| style="white-space: nowrap;" | motorola-titan<br />
| Y || P || Y || P || P || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Moto G 2015 (motorola-osprey)|Moto G 2015]]<br />
| style="white-space: nowrap;" | motorola-osprey<br />
| Y || Y || Y || P || || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Motorola Moto G4(motorola-athene)|Moto G4]]<br />
| style="white-space: nowrap;" | motorola-athene<br />
| Y || P || || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Moto G4 Play (motorola-harpia)|Moto G4 Play]]<br />
| style="white-space: nowrap;" | motorola-harpia<br />
| Y || Y || Y || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Motorola Moto G5 Plus(motorola-potter)|Moto G5 Plus]]<br />
| style="white-space: nowrap;" | motorola-potter<br />
| Y || P || || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Mozilla Flame (t2m-flame)|Mozilla Flame]]🔼<br />
| style="white-space: nowrap;" | t2m-flame<br />
| Y || Y || Y || Y || P || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Nextbit Robin|Nextbit Robin]]<br />
| style="white-space: nowrap;" | nextbit-robin<br />
| Y || Y || Y || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Nokia N900]]🔼<br />
| style="white-space: nowrap;" | nokia-n900<br />
| Y || || Y || Y || Y || Y || || Y || || || Y || Y || || || P || P || P || <br />
|-<br />
| style="white-space: nowrap;" | [[Nokia N9]]🔼 / [[Nokia N950]]🔼<br />
| style="white-space: nowrap;" | nokia-n9<br />
| Y || || Y || Y || Y || Y || || Y || || P || || || || || || || || <br />
|-<br />
| style="white:space: nowrap;" | [[OnePlus One (oneplus-bacon)|OnePlus One]]<br />
| style="white-space: nowrap;" | oneplus-bacon<br />
| Y || Y || Y || P || || || || P || || || || || || || || || || <br />
|-<br />
| style="white:space: nowrap;" | [[OnePlus Two (oneplus-oneplus2)|OnePlus Two]]<br />
| style="white-space: nowrap;" | oneplus-oneplus2<br />
| Y || Y || Y || Y || || Y || || || || || || || || || || || || <br />
|-<br />
| style="white:space: nowrap;" | [[OnePlus X (oneplus-onyx)|OnePlus X]]<br />
| style="white-space: nowrap;" | oneplus-onyx<br />
| Y || Y || Y || P || || || P || || || || || || || || || || || <br />
|-<br />
| style="white:space: nowrap;" | [[Ouya (ouya-ouya)|Ouya]]<br />
| style="white-space: nowrap;" | ouya-ouya<br />
| Y || Y || - || Y || || Y || || || || || || || || - || || - || - || - <br />
|-<br />
| style="white-space: nowrap;" | [[QEMU aarch64 (qemu-aarch64 )|QEMU aarch64]]🔼<br />
| style="white-space: nowrap;" | qemu-aarch64<br />
| - || - || - || Y || - || Y || P || Y || || || - || || - || - || - || - || - || - <br />
|-<br />
| style="white-space: nowrap;" | [[QEMU amd64 (qemu-amd64)|QEMU AMD64]]🔼<br />
| style="white-space: nowrap;" | qemu-amd64<br />
| - || - || - || Y || - || Y || P || Y || || || - || || - || - || - || - || - || - <br />
|-<br />
| style="white-space: nowrap;" | [[QEMU ARM (qemu-vexpress)|QEMU ARM]]🔼<br />
| style="white-space: nowrap;" | qemu-vexpress<br />
| - || - || - || Y || - || Y || P || Y || || || - || || - || - || - || - || - || - <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy Ace II X (samsung-kylessopen)|Samsung Galaxy Ace II x]]<br />
| style="white-space: nowrap;" | samsung-kylessopen<br />
| Y || Y || Y || Y || || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy Mini 2 (samsung-s6500d)|Samsung Galaxy Mini 2]]<br />
| style="white-space: nowrap;" | samsung-s6500d<br />
| Y || Y || P || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Galaxy Note II (samsung-n7100)|Samsung Galaxy Note II]]<br />
| style="white-space: nowrap;" | samsung-n7100<br />
| Y || Y || Y || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy Note 8.0 (Wi-Fi) (samsung-n5110)|Samsung Galaxy Note 8.0 (Wi-Fi)]]<br />
| style="white-space: nowrap;" | samsung-n5110<br />
| Y || Y || Y || Y || Y || Y || || || || || || P || P || || || - || - || -<br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy S Advance (samsung-i9070)|Samsung Galaxy S Advance]]<br />
| style="white-space: nowrap;" | samsung-i9070<br />
| Y || Y || Y || Y || Y || Y || Y || || Y || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy SII (samsung-i9100)|Samsung Galaxy SII]]<br />
| style="white-space: nowrap;" | samsung-i9100, -d710<br />
| Y || || Y || Y || Y || Y || P || || || || Y || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung-i747m|Samsung Galaxy SIII (i747m)]]<br />
| style="white-space: nowrap;" | samsung-i747m, -i747<br />
| Y || Y || Y || Y || Y || Y || P || || || || || P || P || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy SIII LTE (samsung-i9305)|Samsung Galaxy SIII (LTE)]]<br />
| style="white-space: nowrap;" | samsung-i9305, -i9300<br />
| Y || || Y || Y || Y || Y || Y || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy SIII mini (samsung-i8190)|Samsung Galaxy SIII mini]]<br />
| style="white-space: nowrap;" | samsung-i8190<br />
| Y || Y || Y || Y || || || Y || || Y || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung-i9505-(Samsung-Galaxy-S4-int)|Samsung Galaxy S4 (International)]]<br />
| style="white-space: nowrap;" | samsung-i9505<br />
| Y || || Y || Y || Y || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy S4 Mini LTE]]<br />
| style="white-space: nowrap;" | samsung-i9195<br />
| Y || Y || || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung_Galaxy_S5_(samsung-klte)|Samsung Galaxy S5]]<br />
| style="white-space: nowrap;" | samsung-klte<br />
| Y || Y || Y || Y || || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy SL (samsung-i9003)|Samsung Galaxy SL]]<br />
| style="white-space: nowrap;" | samsung-i9003<br />
| Y || P || Y || Y || || Y || P || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy Tab 10.1" (samsung-p4wifi)|Samsung Galaxy Tab 10.1"]]<br />
| style="white-space: nowrap;" | samsung-p4wifi, -p4, -p4tmo<br />
| Y || Y || Y || Y || Y || || || P || || || || P || Y || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy Tab 2 10.1" (3G and Wifi) (samsung-espresso10)|Samsung Galaxy Tab 2 10.1"]]<br />
| style="white-space: nowrap;" | samsung-espresso10<br />
| Y || P || Y || Y || P || || Y || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Sony Ericsson Xperia Arc (semc-anzu)|Sony Ericsson Xperia Arc]]<br />
| style="white-space: nowrap;" | semc-anzu<br />
| Y || Y || Y || Y || P || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Sony Xperia T3 (sony-seagull)|Sony Xperia T3]]<br />
| style="white-space: nowrap;" | sony-seagull<br />
| Y || Y || Y || Y || || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Sony Xperia Z (sony-yuga)|Sony Xperia Z]]<br />
| style="white-space: nowrap;" | sony-yuga<br />
| Y || Y || Y || Y || || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Sony Xperia Z1 (sony-honami)|Sony Xperia Z1]]<br />
| style="white-space: nowrap;" | sony-honami<br />
| Y || Y || Y || Y || Y || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Sony Xperia Z1 Compact (sony-amami)|Sony Xperia Z1 Compact]]<br />
| style="white-space: nowrap;" | sony-amami<br />
| Y || Y || Y || Y || Y || Y || || P || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Sony Xperia Z2 Tablet (sony-castor-windy)|Sony Xperia Z2 Tablet]]<br />
| style="white-space: nowrap;" | sony-castor-windy<br />
| Y || Y || Y || Y || Y || Y || Y || Y || Y || Y || || || Y || || - || - || - || -<br />
|-<br />
|style="white-space: nowrap;" | [[Sony Xperia Z3C (sony-aries)|Sony Xperia Z3 Compact]]<br />
|style="white-space: nowrap;" | sony-aries<br />
| || Y || Y || Y || || || || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[Sony Xperia Z3 Tablet Compact (sony-scorpion)|Sony Xperia Z3 Tablet Compact]]<br />
|style="white-space: nowrap;" | sony-scorpion<br />
| Y || Y || Y || Y || || || || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[Teclast X80 Pro (teclast-x80pro) |Teclast X80 Pro]]<br />
|style="white-space: nowrap;" | teclast-x80pro<br />
| - || Y || Y || Y || Y || Y || Y || Y || || Y || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[Wiko_Lenny_3_(wiko-lenny3)|Wiko Lenny 3]]<br />
|style="white-space: nowrap;" | wiko-lenny3<br />
| Y || P || Y || Y || || Y || || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[Xiaomi_Redmi_1S_(xiaomi-armani)|Xiaomi Redmi 1S]]<br />
|style="white-space: nowrap;" | xiaomi-armani<br />
| Y || Y || Y || Y || Y || Y || || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[Xiaomi_RedMi3_(xiaomi-ido)|Xiaomi RedMi 3]]<br />
|style="white-space: nowrap;" | xiaomi-ido<br />
| Y || Y || P || Y || || || Y || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[Xiaomi_RedMi4x_(xiaomi-santoni)|Xiaomi RedMi 4x]]<br />
|style="white-space: nowrap;" | xiaomi-santoni<br />
| || Y || Y || Y || || || || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[Xiaomi_Redmi_Note_4_(mido)|Xiaomi Redmi Note 4]]<br />
|style="white-space: nowrap;" | xiaomi-mido<br />
| Y || Y || Y || Y || Y || || || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[ZTE_Kis_3_(zte-kis3)|ZTE Kis 3]]<br />
|style="white-space: nowrap;" | zte-kis3<br />
| Y || Y || || || || || || || || || || || || || || || || <br />
|}<br />
<!--<br />
NOTE: Please keep the table above alphabetically sorted.<br />
--><br />
<br />
=== Status Legend ===<br />
{| class="wikitable feature-colors"<br />
! Code<br />
! Meaning<br />
|-<br />
| Y<br />
| Yes, fully implemented<br />
|-<br />
| P<br />
| Partially implemented<br />
|-<br />
| -<br />
| Not applicable -- device does not have feature<br />
|-<br />
| style="text-align: center" | 🔼<br />
| non-Android based device<br />
|}<br />
<br />
=== Status Columns ===<br />
{| class="wikitable"<br />
! Column<br />
! Meaning<br />
|-<br />
| USB Net<br />
| After connecting the device with USB to your PC, you can [[Inspecting_the_initramfs|connect to it via telnet (initramfs)]] or [[USB_Network|SSH (booted system)]].<br />
|-<br />
| Flashing<br />
| It is possible to flash the device with `pmbootstrap flasher`.<br />
|-<br />
| Touch<br />
| Touching the screen is recognized properly.<br />
|-<br />
| Screen<br />
| The device's display is working.<br />
|-<br />
| Wifi<br />
| Connecting to wireless network is possible.<br />
|-<br />
| XWayland<br />
| Showing X11 applications in a Wayland compositor (Weston, KWin, ...) works.<br />
|-<br />
| FDE<br />
| Full disk encryption and unlocking with [[osk-sdl]].<br />
|-<br />
| Mainline<br />
| Instead of a Linux kernel fork, it is possible to run [[The_Mainline_Kernel|mainline]].<br />
|-<br />
| Battery<br />
| Charging the battery with [[charging-sdl]] is possible (this seems to be largely untested, please update your device's column if charging is possible).<br />
|-<br />
| 3D<br />
| Hardware accelerated 3D graphics<br />
|-<br />
| Accelerometers<br />
| The sensor that measures [https://en.wikipedia.org/wiki/Proper_acceleration proper acceleration] works.<br />
|-<br />
| Audio<br />
| Using the device's speakers/headphone jack works.<br />
|-<br />
| Bluetooth<br />
| It's possible to pair and use other devices via the bluetooth protocol.<br />
|-<br />
| Camera<br />
| Taking photos and videos works.<br />
|-<br />
| GPS<br />
| The [https://en.wikipedia.org/wiki/Global_Positioning_System Global Positioning System] sensor works.<br />
|-<br />
| Mobile Data<br />
| Connecting to the Internet via cellular network.<br />
|-<br />
| SMS<br />
| Sending and receiving short messages works as intended.<br />
|-<br />
| Calls<br />
| Talking to other people over the cellular network.<br />
|}<br />
<br />
== Not booting ==<br />
These devices are not integrated into the postmarketOS source tree yet. That is either because the devices do not boot at all, or because it does boot, but there has not been done a successful pull-request to integrate the code. In the latter case, if you have the device and can verify that it can be booted, please [https://help.github.com/articles/about-pull-requests/ make a pull-request].<br />
<br />
{| class="wikitable sortable"<br />
! Device<br />
! Codename<br />
! Status<br />
|-<br />
| [[Apple-iPod-Touch-1G|Apple iPod Touch 1G]]🔼<br />
| apple-ipt1g<br />
|<br />
|-<br />
| [[Archos_80_G9_(archos-a80)|Archos 80 G9]]<br />
| archos-a80<br />
| Still figuring out the flashing stuff<br />
|-<br />
| [[ASUS_Transformer_Pad_(asus-tf300t)|ASUS Transformer Pad]]<br />
| asus-tf300t<br />
| Framebuffer doesn't work<br />
|-<br />
| [[Asus-tf700t-(ASUS-Transformer-TF700t)|ASUS Transformer Infinity]]<br />
| asus-tf700t<br />
| Kernel compiles, not tested<br />
|-<br />
| [[Asus_Zenwatch_2_(asus-wi501q)|ASUS Zenwatch 2]]<br />
| asus-wi501q<br />
| Boot partition too small<br />
|-<br />
| [[BlackBerry-Bold-Touch-9900-(Dakota)|BlackBerry Bold Touch 9900]]🔼<br />
| blackberry-dakota<br />
|<br />
|-<br />
| [[Aquaris-U|bq Aquaris U]]<br />
| chaozu<br />
| kernel compiles, more is not yet tested<br />
|-<br />
| [[Coolpad-Sky-3-E502-(Modena-2)|Coolpad Modena 2]]<br />
| coolpad-modena2<br />
|<br />
|-<br />
| [[Geeksphone Revolution (gp-revolution)|Geeksphone Revolution]]<br />
| gp-revolution<br />
| Kernel compiles but does not boot<br />
|-<br />
| [[Google Pixel]]<br />
| google-pixel<br />
| Kernel compiles, untested on hardware as of 2018-03-28<br />
|-<br />
| [[Generic PC]] hardware (inc. BIOS based Windows tablets)🔼<br />
| N/A<br />
| Should be able to boot by converting existing Alpine image<br />
|-<br />
| [[Hp-tenderloin-(HP-Touchpad)|HP Touchpad]]🔼<br />
| hp-tenderloin<br />
| Need novacom packaged for Alpine<br />
|-<br />
| [[Htc-buzz-(HTC-Buzz)|HTC Buzz/Wildfire]]<br />
| htc-buzz<br />
| Kernel compiles. But ARMv6 devices without FPU are not supported by Alpine's armhf<br />
|-<br />
| [[HTC_HD2_(htc-leo)|HTC HD2]]🔼<br />
| htc-leo<br />
| kernel compiles. working on flashing.<br />
|-<br />
| [[Htc-vision-(HTC-Desire-Z)|HTC Desire Z]]<br />
| htc-vision<br />
| Kernel compiles, not tested<br />
|-<br />
| [[Htc-monarudo-(HTC-Droid-DNA)|HTC Droid DNA]]<br />
| htc-monarudo<br />
|<br />
|-<br />
| [[Huawei_Honor_5X_(huawei-kiwi)|Huawei Honor 5X]]<br />
| huawei-kiwi<br />
| Kernel compiles, graphic output does not work<br />
|-<br />
| [[Landrover-a9|Land Rover A9]]<br />
| landrover-a9<br />
|<br />
|-<br />
| [[LG_Joy_(lg-h220)|LG Joy]]<br />
| lg-h220<br />
|<br />
|- <br />
| [[LG K7_(lg-m1)|LG K7]]<br />
| lg-m1<br />
| display works, touchscreen doesn't work<br />
|-<br />
| [[Moto X|Moto X]]<br />
| motorola-ghost<br />
|<br />
|-<br />
| [[Moto X 2014|Moto X 2014]]<br />
| motorola-x-2014<br />
|<br />
|-<br />
| [[Motorola E Second Gen]]<br />
| motorola-surnia<br />
|<br />
|-<br />
| [[NEC Terrain]]<br />
| nec-ne-201a1a<br />
|<br />
|-<br />
| [[Qemu Nokia N900|Qemu N900]]🔼<br />
| qemu-rx51<br />
|<br />
|-<br />
| [[Raspberry Pi]] (inc. PiTab, Noodle Pi..)🔼<br />
| rpi<br />
| Boots by converting existing Alpine image<br />
|-<br />
| [[Samsung_Exhibit_II_4G_(samsung-t679)|Samsung Exhibit II 4G]]<br />
| samsung-t679<br />
| Kernel compiles; flashing and booting are to be tested soon. <br />
|-<br />
| [[Samsung Galaxy Ace i (samsung-s5830i)|Samsung Galaxy Ace i]]<br />
| samsung-s5830i<br />
| Kernel compiles, haven't tried flashing yet.<br />
|-<br />
| [[Samsung_Galaxy_S_(samsung-i9000)|Samsung Galaxy S]]<br />
| samsung-i9000<br />
| Kernel compiles & boots; framebuffer, touchscreen and wifi (partial) working <br />
|-<br />
| [[Samsung-g800f-(Samsung-Galaxy-S5-mini)|Samsung Galaxy S5 mini]]<br />
| samsung-g800f<br />
|<br />
|-<br />
| [[Samsung-g930f-(Samsung-Galaxy-S7)|Samsung Galaxy S7]]<br />
| samsung-g930f<br />
| Kernel compiles; Not tested<br />
|-<br />
| [[Samsung-S7562|Samsung Galaxy S Duos]]<br />
| samsung-s7562<br />
|<br />
|-<br />
| [[Samsung_Galaxy_Star_(samsung-mint)|Samsung Galaxy Star]]<br />
| samsung-mint<br />
| Prebuilt kernel reboots to recovery, pmOS kernel stucks at bootloader logo<br />
|-<br />
| [[Samsung_Galaxy_Tab_S2_9.7_Wifi_(samsung-gts210vewifi)|Samsung Galaxy Tab S2 9.7 Wifi]]<br />
| samsung-gts210vewifi<br />
| Kernel compiles, booting and SSH connectivity ok, touchscreen not yet<br />
|-<br />
| [[Xperia-E-Dual|Sony Xperia E Dual]]<br />
| sony-nanhu<br />
|<br />
|-<br />
| [[Xperia-J-(sony-jlo)|Sony Xperia J]]<br />
| sony-jlo<br />
|<br />
|-<br />
| [[Sony SmartWatch 3 (sony-tetra)|Sony SmartWatch 3]]<br />
| sony-tetra<br />
| Kernel compiles, not tested<br />
|-<br />
| [[Xperia-Z2|Sony Xperia Z2]]<br />
| sony-sirius<br />
|<br />
<br />
|}<br />
<!--<br />
NOTE: Please keep the table above alphabetically sorted.<br />
--><br />
<br />
==Other supported hardware==<br />
There are a variety of devices which pmOS users will likely plug into their phones. If the device is free software compliant (drivers and firmware), we should ensure it works with the OS. This is particularly relevant if the hardware offers an alternative to a non-free piece of hardware which is part of a supported device, such as external wifi adapters and gps units. These devices are listed below.<br />
<br />
===External wifi adapters===<br />
<br />
Atheros [[AR9271]] chipset<br />
<br />
===External GPS units===<br />
<br />
[[Category:Hardware]]<br />
<br />
===See also===<br />
* [[Milestones]] for the current goals and activities<br />
* [[Device Wishlist]]<br />
* [[The-big-list-of-who-has-what-device]]<br />
* [[Symbian]]</div>Opendatahttps://wiki.postmarketos.org/index.php?title=Mainlining_Guide&diff=2754Mainlining Guide2018-03-16T20:55:57Z<p>Opendata: </p>
<hr />
<div>{{note|This is a draft of an idea, not reviewed by people who have actually done some mainlining yet. The commands are not tested at this point. '''The steps are not meant to be followed until this is reviewed!'''}}<br />
<br />
== Introduction ==<br />
This guide will walk you through mainlining your device. Starting by collecting all required information, setting up your build environment and picking a mentor that will guide you through the tricky parts. For the devices where this will work, you should be fine with basic shell knowledge, and you will be rewarded with learning a lot of new stuff and booting the mainline kernel on your device!<br />
<br />
== Requirements ==<br />
=== postmarketOS port ===<br />
To make the instructions easier, this guide assumes that postmarketOS was already ported with a downstream kernel to your device, and that you can [[USB_Network|enter a shell after it booted via USB]] (SSH or telnet). Downstream kernels are the ones from the vendor, that ship with the device, and all derivatives from that (e.g. your typical Android / LineageOS ROM). You can check if it was ported already on the [[devices]] page, and start a [[Porting_guide|new port]] if necessary.<br />
<br />
=== Mainlining section ===<br />
Please follow [[Help:Device_Mainline_Information_Guide|these instructions]] to extend your device's wiki page with a mainlining section that has all required information before proceeding. It will serve both as reference of which peripherals are in the device, and as progress indicator of what the status is on each of these components.<br />
<br />
=== Mentor ===<br />
The mainlining process varies greatly for each device, which means we can't just write down straight forward instructions here. But luckily there are skilled people who have a bigger picture of a specific [https://en.wikipedia.org/wiki/System_on_a_chip SoC] and they know how to help you out efficiently.<br />
<br />
{| class="wikitable"<br />
! SoC<br />
! Mentors<br />
|-<br />
| Qualcomm (msm...)<br />
| opendata26 ([[Matrix_and_IRC|#postmarketOS]]), bamse on ##linux-msm and robclark on the same channel for graphics related things.<br />
|-<br />
| OMAP3<br />
| pavel?<br />
|}<br />
<br />
Make sure that your SoC is in the list (if it isn't then we don't have an easy way for mainlining right now, sorry). Let's do some more preparation now, so everything is in place before you kindly ask your mentor to help you with the process.<br />
<br />
== Preparation ==<br />
=== pmbootstrap setup ===<br />
If you have not done this already, please download and initialize <code>pmbootstrap</code>. You can stay with the defaults, just make sure to select the right device, and (to save you some time) <code>none</code> as user interface. Replace <code>~/code</code> with the path where you would like to store the source code.<br />
<syntaxhighlight lang="shell-session"><br />
$ cd ~/code<br />
$ git clone https://github.com/postmarketOS/pmbootstrap<br />
$ cd pmbootstrap<br />
$ alias pmbootstrap=$PWD/pmbootstrap.py<br />
$ pmbootstrap init<br />
</syntaxhighlight><br />
<br />
Generate an initramfs with the debug-shell hook:<br />
<syntaxhighlight lang="shell-session"><br />
$ pmbootstrap initfs hook_add debug-shell<br />
$ pmbootstrap export<br />
</syntaxhighlight><br />
<br />
=== Development tools on host system ===<br />
{{note|See also: [https://kernelnewbies.org/KernelBuild What tools do I need? - kernelnewbies.org]}}<br />
The idea of <code>pmbootstrap</code> is, that you don't need to install anything on your host system, and we do everything in Alpine chroots. But this does not work with the process outlined in this guide yet, so we need to diverge from that idea during this step. Please install the following tools on your host system with your package manager:<br />
<br />
* libncurses5-dev<br />
* gcc<br />
* make<br />
* bc<br />
* libssl-dev<br />
* gcc cross-compiler, depending on your device architecture:<br />
** <code>aarch64</code> device: look for a <code>aarch64</code>/<code>arm64</code> cross-compiler<br />
** <code>armhf</code> device: look for a <code>armhf</code>/<code>armv6</code>/<code>armv7</code> cross-compiler<br />
<br />
=== Kernel ===<br />
Download a copy of <code>linux-next</code>:<br />
<syntaxhighlight lang="shell-session"><br />
$ cd ~/code<br />
$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-next.git linux<br />
$ cd linux<br />
</syntaxhighlight><br />
<br />
If you have already checked out the regular linux repository, you can add the <code>linux-next</code> branch as follows:<br />
<syntaxhighlight lang="shell-session"><br />
$ cd ~/code/linux<br />
$ git remote add linux-next https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git<br />
$ git fetch --tags linux-next<br />
$ git checkout -b development linux-next/master<br />
</syntaxhighlight><br />
<br />
After running the commands of one of the two blocks above, add a new branch for your device (replace <code>lg-mako</code> with your device's name):<br />
<syntaxhighlight lang="shell-session"><br />
$ cd ~/code/linux<br />
$ git checkout -b "device-lg-mako"<br />
</syntaxhighlight><br />
<br />
During the mainlining process, you will be required to fire up <code>menuconfig</code> and to compile everything. Let's do this once to make sure that everything works. You can exit menuconfig right away after it starts. If anything does not run through, you are most likely missing a dependency as listed in the step above.<br />
<br />
==== Menuconfig ====<br />
<code>armhf</code> device:<br />
<syntaxhighlight lang="shell-session"><br />
$ export ARCH=arm<br />
$ export CROSS_COMPILE="arm-none-eabi-"<br />
$ make defconfig<br />
$ make menuconfig<br />
</syntaxhighlight><br />
<br />
<code>aarch64</code> device:<br />
<syntaxhighlight lang="shell-session"><br />
$ export ARCH=arm64<br />
$ export CROSS_COMPILE="aarch64-none-eabi-"<br />
$ make defconfig<br />
$ make menuconfig<br />
</syntaxhighlight><br />
<br />
==== Kernel compilation ====<br />
{{note|Make sure you did the exports from [[#Menuconfig]] above!}}<br />
Replace <code>3</code> with the amount of CPUs on your host machine plus one (e.g. quad-core: means <code>-j5</code>).<br />
<syntaxhighlight lang="shell-session"><br />
$ make -j3<br />
</syntaxhighlight><br />
<br />
=== Got everything? ===<br />
Please double check with the following checklist that you meet '''all the requirements''' before proceeding further. If you need any help with the above, just ask [[Matrix_and_IRC|in the channel]] or [https://github.com/postmarketOS/pmbootstrap/issues on GitHub] as usually.<br />
<br />
* [[#pmbootstrap setup|Device ported to postmarketOS]]<br />
* [[#Mainlining section|Mainlining section added to device page]]<br />
* [[#Mentor|Mentor]]<br />
* [[#pmbootstrap setup|Initramfs with debug-shell generated]]<br />
* [[#Development tools on host system|Development tools on host system]]<br />
* [[#Menuconfig|Menuconfig]] tested<br />
* [[#Kernel compilation|Kernel compilation]] tested<br />
<br />
== Contact your mentor ==<br />
Hop on [[Matrix_and_IRC|Matrix or IRC]] and ask the mentor if they have time to walk you through the further steps. This should be obvious, but remember to be nice and understanding if the mentor does not have time right away, they are supporting you for free so you'll need to be grateful and patient.<br />
<br />
The following steps are meant to be taken together with the mentor.<br />
<br />
== Device Tree Source ==<br />
=== Start with an existing file ===<br />
The DTS file describes how the peripherals of the device are connected to the SoC. Your mentor probably knows which file you should use to start your work on. This may either be a file in the existing Linux source tree, or a file your mentor uploaded somewhere.<br />
<br />
Example for copying an existing file:<br />
<syntaxhighlight lang="shell-session"><br />
$ cd ~/code/linux/arch/arm/boot/dts<br />
$ cp qcom-apq8064-asus-nexus7-flo.dts qcom-apq8064-lg-nexus4-mako.dts<br />
</syntaxhighlight><br />
<br />
Let's commit that directly, so it will be easy to see what you have changed later on by running <code>git diff</code> (adjust the description of the commit accordingly):<br />
<syntaxhighlight lang="shell-session"><br />
$ git add -A<br />
$ git commit -m "Starting with: qcom-apq8064-asus-nexus7-flo.dts"<br />
</syntaxhighlight><br />
<br />
=== Adjust model and compatible ===<br />
Open the DTS file in an editor and replace the <code>model</code> and <code>compatible</code> strings at the top of the file:<br />
<br />
<syntaxhighlight lang="c"><br />
// SPDX-License-Identifier: GPL-2.0<br />
#include "qcom-apq8064-v2.0.dtsi"<br />
#include <dt-bindings/gpio/gpio.h><br />
#include <dt-bindings/input/input.h><br />
#include <dt-bindings/pinctrl/qcom,pmic-gpio.h><br />
/ {<br />
model = "Asus Nexus7(flo)";<br />
compatible = "asus,nexus7-flo", "qcom,apq8064";<br />
<br />
// ...<br />
</syntaxhighlight><br />
<br />
In the example, we replace <code>model</code> with <code>"LG Nexus4(mako)"</code> and the first string after compatible with <code>"lg,nexus4-mako</code> (we leave the second string in place, as this is the name of the SoC, which is the same).<br />
<br />
And again, let's commit this change. It's recommended to commit after every change you make to the DTS files so you can revert easily to the last known working state if necessary:<br />
<syntaxhighlight lang="shell-session"><br />
$ git add -A<br />
$ git commit -m "Adjusted model and compatible"<br />
</syntaxhighlight><br />
<br />
=== Minimal booting version ===<br />
Your mentor will instruct you how to modify the file further, so you have a minimal configuration that allows you to boot into the mainline kernel if everything went right. Almost nothing will work at this point, except for initializing RAM and serial output. We will work our way to enabling one feature after another throughout the process.<br />
<br />
== Testing ==<br />
=== Defconfig and compilation ===<br />
Ask your mentor for the right defconfig to use and export the variables as in [[#Menuconfig|menuconfig]] (mind the <code>armhf</code> and <code>aarch64</code> differences). Then configure the kernel to use the defconfig and finally build it (like in [[#Kernel compilation|kernel compilation]] above). Example:<br />
<br />
<syntaxhighlight lang="shell-session"><br />
$ export ARCH=arm<br />
$ export CROSS_COMPILE="arm-none-eabi-"<br />
$ make qcom_defconfig<br />
$ make -j5<br />
</syntaxhighlight><br />
<br />
=== Append DTB ===<br />
Now append the DTB (device tree blob), which has been generated from your DTS file, to the kernel:<br />
<syntaxhighlight lang="shell-session"><br />
$ cat arch/arm/boot/zImage arch/arm/boot/dts/qcom-msm8974-sony-xperia-castor.dtb > zImage-dtb<br />
</syntaxhighlight><br />
<br />
=== Execute on the device ===<br />
This greatly depends on your device, and you can figure out the correct method by looking at your [[deviceinfo]] and at the <code>postmarketos-mkinitfs</code> code if necessary. But typically for fastboot based Android devices, you can patch the <code>boot.img</code> file as follows.<br />
<br />
==== Fasboot example ====<br />
Prepare your current shell session once:<br />
<syntaxhighlight lang="shell-session"><br />
$ pmbootstrap chroot -- apk add abootimg android-tools<br />
$ export DEVICE="$(pmbootstrap config device)"<br />
$ export WORK="$(pmbootstrap config work)"<br />
$ export TEMP="$PMBWORK/chroot_native/tmp/mainline/"<br />
$ mkdir -p "$TEMP"<br />
</syntaxhighlight><br />
<br />
Then run the following everytime you would like to replace the kernel inside the <code>boot.img</code> file and flash it to the device:<br />
<syntaxhighlight lang="shell-session"><br />
$ cp ~/code/linux/zImage-dtb "$TEMP"<br />
$ cp "/tmp/postmarketOS-export/boot.img-$DEVICE" "$TEMP/boot.img"<br />
$ pmbootstrap chroot<br />
# abootimg -u /tmp/mainline/boot.img -k /tmp/mainline/zImage-dtb<br />
# fastboot boot /tmp/mainline/boot.img<br />
</syntaxhighlight><br />
<br />
=== dmesg on your PC ===<br />
Before booting the first time, run <code>dmesg -w</code> on your PC. If everything went right, you should see something like the following as soon as the device boots:<br />
<br />
<pre><br />
[27166.665566] usb 3-9: new high-speed USB device number 16 using xhci_hcd<br />
[27166.793111] usb 3-9: New USB device found, idVendor=0525, idProduct=a4a7<br />
[27166.793117] usb 3-9: New USB device strings: Mfr=1, Product=2, SerialNumber=0<br />
[27166.793121] usb 3-9: Product: Gadget Serial v2.4<br />
[27166.793125] usb 3-9: Manufacturer: Linux 4.16.0-rc5-next-20180314-dirty with ci_hdrc_msm<br />
[27166.809593] cdc_acm 3-9:2.0: ttyACM0: USB ACM device<br />
[27166.809777] usbcore: registered new interface driver cdc_acm<br />
[27166.809778] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters<br />
</pre><br />
<br />
= TODO =<br />
* "Mainline section" link is just a stub<br />
* Extend initramfs debug-shell hook to dump dmesg to RAM with userspace tools, so it can be read from /proc/lastkmesg from an Android kernel (that way we don't need serial working to get USB going, right?)<br />
* Add steps to upstream the changes made into the kernel (there are already good tutorials out there)<br />
* Add step to integrate the changes with the pmbootstrap source tree (might need changes in pmbootstrap architecture for that)</div>Opendatahttps://wiki.postmarketos.org/index.php?title=Mainlining_Guide&diff=2752Mainlining Guide2018-03-16T20:53:36Z<p>Opendata: </p>
<hr />
<div>{{note|This is a draft of an idea, not reviewed by people who have actually done some mainlining yet. The commands are not tested at this point. '''The steps are not meant to be followed until this is reviewed!'''}}<br />
<br />
== Introduction ==<br />
This guide will walk you through mainlining your device. Starting by collecting all required information, setting up your build environment and picking a mentor that will guide you through the tricky parts. For the devices where this will work, you should be fine with basic shell knowledge, and you will be rewarded with learning a lot of new stuff and booting the mainline kernel on your device!<br />
<br />
== Requirements ==<br />
=== postmarketOS port ===<br />
To make the instructions easier, this guide assumes that postmarketOS was already ported with a downstream kernel to your device, and that you can [[USB_Network|enter a shell after it booted via USB]] (SSH or telnet). Downstream kernels are the ones from the vendor, that ship with the device, and all derivatives from that (e.g. your typical Android / LineageOS ROM). You can check if it was ported already on the [[devices]] page, and start a [[Porting_guide|new port]] if necessary.<br />
<br />
=== Mainlining section ===<br />
Please follow [[Help:Device_Mainline_Information_Guide|these instructions]] to extend your device's wiki page with a mainlining section that has all required information before proceeding. It will serve both as reference of which peripherals are in the device, and as progress indicator of what the status is on each of these components.<br />
<br />
=== Mentor ===<br />
The mainlining process varies greatly for each device, which means we can't just write down straight forward instructions here. But luckily there are skilled people who have a bigger picture of a specific [https://en.wikipedia.org/wiki/System_on_a_chip SoC] and they know how to help you out efficiently.<br />
<br />
{| class="wikitable"<br />
! SoC<br />
! Mentors<br />
|-<br />
| Qualcomm (msm...)<br />
| opendata26 ([[Matrix_and_IRC|#postmarketOS]]), bamse on ##linux-msm, robclark on the same channel for graphics related things.<br />
|-<br />
| OMAP3<br />
| pavel?<br />
|}<br />
<br />
Make sure that your SoC is in the list (if it isn't then we don't have an easy way for mainlining right now, sorry). Let's do some more preparation now, so everything is in place before you kindly ask your mentor to help you with the process.<br />
<br />
== Preparation ==<br />
=== pmbootstrap setup ===<br />
If you have not done this already, please download and initialize <code>pmbootstrap</code>. You can stay with the defaults, just make sure to select the right device, and (to save you some time) <code>none</code> as user interface. Replace <code>~/code</code> with the path where you would like to store the source code.<br />
<syntaxhighlight lang="shell-session"><br />
$ cd ~/code<br />
$ git clone https://github.com/postmarketOS/pmbootstrap<br />
$ cd pmbootstrap<br />
$ alias pmbootstrap=$PWD/pmbootstrap.py<br />
$ pmbootstrap init<br />
</syntaxhighlight><br />
<br />
Generate an initramfs with the debug-shell hook:<br />
<syntaxhighlight lang="shell-session"><br />
$ pmbootstrap initfs hook_add debug-shell<br />
$ pmbootstrap export<br />
</syntaxhighlight><br />
<br />
=== Development tools on host system ===<br />
{{note|See also: [https://kernelnewbies.org/KernelBuild What tools do I need? - kernelnewbies.org]}}<br />
The idea of <code>pmbootstrap</code> is, that you don't need to install anything on your host system, and we do everything in Alpine chroots. But this does not work with the process outlined in this guide yet, so we need to diverge from that idea during this step. Please install the following tools on your host system with your package manager:<br />
<br />
* libncurses5-dev<br />
* gcc<br />
* make<br />
* bc<br />
* libssl-dev<br />
* gcc cross-compiler, depending on your device architecture:<br />
** <code>aarch64</code> device: look for a <code>aarch64</code>/<code>arm64</code> cross-compiler<br />
** <code>armhf</code> device: look for a <code>armhf</code>/<code>armv6</code>/<code>armv7</code> cross-compiler<br />
<br />
=== Kernel ===<br />
Download a copy of <code>linux-next</code>:<br />
<syntaxhighlight lang="shell-session"><br />
$ cd ~/code<br />
$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-next.git linux<br />
$ cd linux<br />
</syntaxhighlight><br />
<br />
If you have already checked out the regular linux repository, you can add the <code>linux-next</code> branch as follows:<br />
<syntaxhighlight lang="shell-session"><br />
$ cd ~/code/linux<br />
$ git remote add linux-next https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git<br />
$ git fetch --tags linux-next<br />
$ git checkout -b development linux-next/master<br />
</syntaxhighlight><br />
<br />
After running the commands of one of the two blocks above, add a new branch for your device (replace <code>lg-mako</code> with your device's name):<br />
<syntaxhighlight lang="shell-session"><br />
$ cd ~/code/linux<br />
$ git checkout -b "device-lg-mako"<br />
</syntaxhighlight><br />
<br />
During the mainlining process, you will be required to fire up <code>menuconfig</code> and to compile everything. Let's do this once to make sure that everything works. You can exit menuconfig right away after it starts. If anything does not run through, you are most likely missing a dependency as listed in the step above.<br />
<br />
==== Menuconfig ====<br />
<code>armhf</code> device:<br />
<syntaxhighlight lang="shell-session"><br />
$ export ARCH=arm<br />
$ export CROSS_COMPILE="arm-none-eabi-"<br />
$ make defconfig<br />
$ make menuconfig<br />
</syntaxhighlight><br />
<br />
<code>aarch64</code> device:<br />
<syntaxhighlight lang="shell-session"><br />
$ export ARCH=arm64<br />
$ export CROSS_COMPILE="aarch64-none-eabi-"<br />
$ make defconfig<br />
$ make menuconfig<br />
</syntaxhighlight><br />
<br />
==== Kernel compilation ====<br />
{{note|Make sure you did the exports from [[#Menuconfig]] above!}}<br />
Replace <code>3</code> with the amount of CPUs on your host machine plus one (e.g. quad-core: means <code>-j5</code>).<br />
<syntaxhighlight lang="shell-session"><br />
$ make -j3<br />
</syntaxhighlight><br />
<br />
=== Got everything? ===<br />
Please double check with the following checklist that you meet '''all the requirements''' before proceeding further. If you need any help with the above, just ask [[Matrix_and_IRC|in the channel]] or [https://github.com/postmarketOS/pmbootstrap/issues on GitHub] as usually.<br />
<br />
* [[#pmbootstrap setup|Device ported to postmarketOS]]<br />
* [[#Mainlining section|Mainlining section added to device page]]<br />
* [[#Mentor|Mentor]]<br />
* [[#pmbootstrap setup|Initramfs with debug-shell generated]]<br />
* [[#Development tools on host system|Development tools on host system]]<br />
* [[#Menuconfig|Menuconfig]] tested<br />
* [[#Kernel compilation|Kernel compilation]] tested<br />
<br />
== Contact your mentor ==<br />
Hop on [[Matrix_and_IRC|Matrix or IRC]] and ask the mentor if they have time to walk you through the further steps. This should be obvious, but remember to be nice and understanding if the mentor does not have time right away, they are supporting you for free so you'll need to be grateful and patient.<br />
<br />
The following steps are meant to be taken together with the mentor.<br />
<br />
== Device Tree Source ==<br />
=== Start with an existing file ===<br />
The DTS file describes how the peripherals of the device are connected to the SoC. Your mentor probably knows which file you should use to start your work on. This may either be a file in the existing Linux source tree, or a file your mentor uploaded somewhere.<br />
<br />
Example for copying an existing file:<br />
<syntaxhighlight lang="shell-session"><br />
$ cd ~/code/linux/arch/arm/boot/dts<br />
$ cp qcom-apq8064-asus-nexus7-flo.dts qcom-apq8064-lg-nexus4-mako.dts<br />
</syntaxhighlight><br />
<br />
Let's commit that directly, so it will be easy to see what you have changed later on by running <code>git diff</code> (adjust the description of the commit accordingly):<br />
<syntaxhighlight lang="shell-session"><br />
$ git add -A<br />
$ git commit -m "Starting with: qcom-apq8064-asus-nexus7-flo.dts"<br />
</syntaxhighlight><br />
<br />
=== Adjust model and compatible ===<br />
Open the DTS file in an editor and replace the <code>model</code> and <code>compatible</code> strings at the top of the file:<br />
<br />
<syntaxhighlight lang="c"><br />
// SPDX-License-Identifier: GPL-2.0<br />
#include "qcom-apq8064-v2.0.dtsi"<br />
#include <dt-bindings/gpio/gpio.h><br />
#include <dt-bindings/input/input.h><br />
#include <dt-bindings/pinctrl/qcom,pmic-gpio.h><br />
/ {<br />
model = "Asus Nexus7(flo)";<br />
compatible = "asus,nexus7-flo", "qcom,apq8064";<br />
<br />
// ...<br />
</syntaxhighlight><br />
<br />
In the example, we replace <code>model</code> with <code>"LG Nexus4(mako)"</code> and the first string after compatible with <code>"lg,nexus4-mako</code> (we leave the second string in place, as this is the name of the SoC, which is the same).<br />
<br />
And again, let's commit this change. It's recommended to commit after every change you make to the DTS files so you can revert easily to the last known working state if necessary:<br />
<syntaxhighlight lang="shell-session"><br />
$ git add -A<br />
$ git commit -m "Adjusted model and compatible"<br />
</syntaxhighlight><br />
<br />
=== Minimal booting version ===<br />
Your mentor will instruct you how to modify the file further, so you have a minimal configuration that allows you to boot into the mainline kernel if everything went right. Almost nothing will work at this point, except for initializing RAM and serial output. We will work our way to enabling one feature after another throughout the process.<br />
<br />
== Testing ==<br />
=== Defconfig and compilation ===<br />
Ask your mentor for the right defconfig to use and export the variables as in [[#Menuconfig|menuconfig]] (mind the <code>armhf</code> and <code>aarch64</code> differences). Then configure the kernel to use the defconfig and finally build it (like in [[#Kernel compilation|kernel compilation]] above). Example:<br />
<br />
<syntaxhighlight lang="shell-session"><br />
$ export ARCH=arm<br />
$ export CROSS_COMPILE="arm-none-eabi-"<br />
$ make qcom_defconfig<br />
$ make -j5<br />
</syntaxhighlight><br />
<br />
=== Append DTB ===<br />
Now append the DTB (device tree blob), which has been generated from your DTS file, to the kernel:<br />
<syntaxhighlight lang="shell-session"><br />
$ cat arch/arm/boot/zImage arch/arm/boot/dts/qcom-msm8974-sony-xperia-castor.dtb > zImage-dtb<br />
</syntaxhighlight><br />
<br />
=== Execute on the device ===<br />
This greatly depends on your device, and you can figure out the correct method by looking at your [[deviceinfo]] and at the <code>postmarketos-mkinitfs</code> code if necessary. But typically for fastboot based Android devices, you can patch the <code>boot.img</code> file as follows.<br />
<br />
==== Fasboot example ====<br />
Prepare your current shell session once:<br />
<syntaxhighlight lang="shell-session"><br />
$ pmbootstrap chroot -- apk add abootimg android-tools<br />
$ export DEVICE="$(pmbootstrap config device)"<br />
$ export WORK="$(pmbootstrap config work)"<br />
$ export TEMP="$PMBWORK/chroot_native/tmp/mainline/"<br />
$ mkdir -p "$TEMP"<br />
</syntaxhighlight><br />
<br />
Then run the following everytime you would like to replace the kernel inside the <code>boot.img</code> file and flash it to the device:<br />
<syntaxhighlight lang="shell-session"><br />
$ cp ~/code/linux/zImage-dtb "$TEMP"<br />
$ cp "/tmp/postmarketOS-export/boot.img-$DEVICE" "$TEMP/boot.img"<br />
$ pmbootstrap chroot<br />
# abootimg -u /tmp/mainline/boot.img -k /tmp/mainline/zImage-dtb<br />
# fastboot boot /tmp/mainline/boot.img<br />
</syntaxhighlight><br />
<br />
=== dmesg on your PC ===<br />
Before booting the first time, run <code>dmesg -w</code> on your PC. If everything went right, you should see something like the following as soon as the device boots:<br />
<br />
<pre><br />
[27166.665566] usb 3-9: new high-speed USB device number 16 using xhci_hcd<br />
[27166.793111] usb 3-9: New USB device found, idVendor=0525, idProduct=a4a7<br />
[27166.793117] usb 3-9: New USB device strings: Mfr=1, Product=2, SerialNumber=0<br />
[27166.793121] usb 3-9: Product: Gadget Serial v2.4<br />
[27166.793125] usb 3-9: Manufacturer: Linux 4.16.0-rc5-next-20180314-dirty with ci_hdrc_msm<br />
[27166.809593] cdc_acm 3-9:2.0: ttyACM0: USB ACM device<br />
[27166.809777] usbcore: registered new interface driver cdc_acm<br />
[27166.809778] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters<br />
</pre><br />
<br />
= TODO =<br />
* "Mainline section" link is just a stub<br />
* Extend initramfs debug-shell hook to dump dmesg to RAM with userspace tools, so it can be read from /proc/lastkmesg from an Android kernel (that way we don't need serial working to get USB going, right?)<br />
* Add steps to upstream the changes made into the kernel (there are already good tutorials out there)<br />
* Add step to integrate the changes with the pmbootstrap source tree (might need changes in pmbootstrap architecture for that)</div>Opendatahttps://wiki.postmarketos.org/index.php?title=Mainlining_Guide&diff=2751Mainlining Guide2018-03-16T20:52:13Z<p>Opendata: make <defconfig> auto selects options and its qcom_defconfig not msm8974</p>
<hr />
<div>{{note|This is a draft of an idea, not reviewed by people who have actually done some mainlining yet. The commands are not tested at this point. '''The steps are not meant to be followed until this is reviewed!'''}}<br />
<br />
== Introduction ==<br />
This guide will walk you through mainlining your device. Starting by collecting all required information, setting up your build environment and picking a mentor that will guide you through the tricky parts. For the devices where this will work, you should be fine with basic shell knowledge, and you will be rewarded with learning a lot of new stuff and booting the mainline kernel on your device!<br />
<br />
== Requirements ==<br />
=== postmarketOS port ===<br />
To make the instructions easier, this guide assumes that postmarketOS was already ported with a downstream kernel to your device, and that you can [[USB_Network|enter a shell after it booted via USB]] (SSH or telnet). Downstream kernels are the ones from the vendor, that ship with the device, and all derivatives from that (e.g. your typical Android / LineageOS ROM). You can check if it was ported already on the [[devices]] page, and start a [[Porting_guide|new port]] if necessary.<br />
<br />
=== Mainlining section ===<br />
Please follow [[Help:Device_Mainline_Information_Guide|these instructions]] to extend your device's wiki page with a mainlining section that has all required information before proceeding. It will serve both as reference of which peripherals are in the device, and as progress indicator of what the status is on each of these components.<br />
<br />
=== Mentor ===<br />
The mainlining process varies greatly for each device, which means we can't just write down straight forward instructions here. But luckily there are skilled people who have a bigger picture of a specific [https://en.wikipedia.org/wiki/System_on_a_chip SoC] and they know how to help you out efficiently.<br />
<br />
{| class="wikitable"<br />
! SoC<br />
! Mentors<br />
|-<br />
| Qualcomm (msm...)<br />
| opendata26 ([[Matrix_and_IRC|#postmarketOS]]), linux-msm folks?<br />
|-<br />
| OMAP3<br />
| pavel?<br />
|}<br />
<br />
Make sure that your SoC is in the list (if it isn't then we don't have an easy way for mainlining right now, sorry). Let's do some more preparation now, so everything is in place before you kindly ask your mentor to help you with the process.<br />
<br />
== Preparation ==<br />
=== pmbootstrap setup ===<br />
If you have not done this already, please download and initialize <code>pmbootstrap</code>. You can stay with the defaults, just make sure to select the right device, and (to save you some time) <code>none</code> as user interface. Replace <code>~/code</code> with the path where you would like to store the source code.<br />
<syntaxhighlight lang="shell-session"><br />
$ cd ~/code<br />
$ git clone https://github.com/postmarketOS/pmbootstrap<br />
$ cd pmbootstrap<br />
$ alias pmbootstrap=$PWD/pmbootstrap.py<br />
$ pmbootstrap init<br />
</syntaxhighlight><br />
<br />
Generate an initramfs with the debug-shell hook:<br />
<syntaxhighlight lang="shell-session"><br />
$ pmbootstrap initfs hook_add debug-shell<br />
$ pmbootstrap export<br />
</syntaxhighlight><br />
<br />
=== Development tools on host system ===<br />
{{note|See also: [https://kernelnewbies.org/KernelBuild What tools do I need? - kernelnewbies.org]}}<br />
The idea of <code>pmbootstrap</code> is, that you don't need to install anything on your host system, and we do everything in Alpine chroots. But this does not work with the process outlined in this guide yet, so we need to diverge from that idea during this step. Please install the following tools on your host system with your package manager:<br />
<br />
* libncurses5-dev<br />
* gcc<br />
* make<br />
* bc<br />
* libssl-dev<br />
* gcc cross-compiler, depending on your device architecture:<br />
** <code>aarch64</code> device: look for a <code>aarch64</code>/<code>arm64</code> cross-compiler<br />
** <code>armhf</code> device: look for a <code>armhf</code>/<code>armv6</code>/<code>armv7</code> cross-compiler<br />
<br />
=== Kernel ===<br />
Download a copy of <code>linux-next</code>:<br />
<syntaxhighlight lang="shell-session"><br />
$ cd ~/code<br />
$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-next.git linux<br />
$ cd linux<br />
</syntaxhighlight><br />
<br />
If you have already checked out the regular linux repository, you can add the <code>linux-next</code> branch as follows:<br />
<syntaxhighlight lang="shell-session"><br />
$ cd ~/code/linux<br />
$ git remote add linux-next https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git<br />
$ git fetch --tags linux-next<br />
$ git checkout -b development linux-next/master<br />
</syntaxhighlight><br />
<br />
After running the commands of one of the two blocks above, add a new branch for your device (replace <code>lg-mako</code> with your device's name):<br />
<syntaxhighlight lang="shell-session"><br />
$ cd ~/code/linux<br />
$ git checkout -b "device-lg-mako"<br />
</syntaxhighlight><br />
<br />
During the mainlining process, you will be required to fire up <code>menuconfig</code> and to compile everything. Let's do this once to make sure that everything works. You can exit menuconfig right away after it starts. If anything does not run through, you are most likely missing a dependency as listed in the step above.<br />
<br />
==== Menuconfig ====<br />
<code>armhf</code> device:<br />
<syntaxhighlight lang="shell-session"><br />
$ export ARCH=arm<br />
$ export CROSS_COMPILE="arm-none-eabi-"<br />
$ make defconfig<br />
$ make menuconfig<br />
</syntaxhighlight><br />
<br />
<code>aarch64</code> device:<br />
<syntaxhighlight lang="shell-session"><br />
$ export ARCH=arm64<br />
$ export CROSS_COMPILE="aarch64-none-eabi-"<br />
$ make defconfig<br />
$ make menuconfig<br />
</syntaxhighlight><br />
<br />
==== Kernel compilation ====<br />
{{note|Make sure you did the exports from [[#Menuconfig]] above!}}<br />
Replace <code>3</code> with the amount of CPUs on your host machine plus one (e.g. quad-core: means <code>-j5</code>).<br />
<syntaxhighlight lang="shell-session"><br />
$ make -j3<br />
</syntaxhighlight><br />
<br />
=== Got everything? ===<br />
Please double check with the following checklist that you meet '''all the requirements''' before proceeding further. If you need any help with the above, just ask [[Matrix_and_IRC|in the channel]] or [https://github.com/postmarketOS/pmbootstrap/issues on GitHub] as usually.<br />
<br />
* [[#pmbootstrap setup|Device ported to postmarketOS]]<br />
* [[#Mainlining section|Mainlining section added to device page]]<br />
* [[#Mentor|Mentor]]<br />
* [[#pmbootstrap setup|Initramfs with debug-shell generated]]<br />
* [[#Development tools on host system|Development tools on host system]]<br />
* [[#Menuconfig|Menuconfig]] tested<br />
* [[#Kernel compilation|Kernel compilation]] tested<br />
<br />
== Contact your mentor ==<br />
Hop on [[Matrix_and_IRC|Matrix or IRC]] and ask the mentor if they have time to walk you through the further steps. This should be obvious, but remember to be nice and understanding if the mentor does not have time right away, they are supporting you for free so you'll need to be grateful and patient.<br />
<br />
The following steps are meant to be taken together with the mentor.<br />
<br />
== Device Tree Source ==<br />
=== Start with an existing file ===<br />
The DTS file describes how the peripherals of the device are connected to the SoC. Your mentor probably knows which file you should use to start your work on. This may either be a file in the existing Linux source tree, or a file your mentor uploaded somewhere.<br />
<br />
Example for copying an existing file:<br />
<syntaxhighlight lang="shell-session"><br />
$ cd ~/code/linux/arch/arm/boot/dts<br />
$ cp qcom-apq8064-asus-nexus7-flo.dts qcom-apq8064-lg-nexus4-mako.dts<br />
</syntaxhighlight><br />
<br />
Let's commit that directly, so it will be easy to see what you have changed later on by running <code>git diff</code> (adjust the description of the commit accordingly):<br />
<syntaxhighlight lang="shell-session"><br />
$ git add -A<br />
$ git commit -m "Starting with: qcom-apq8064-asus-nexus7-flo.dts"<br />
</syntaxhighlight><br />
<br />
=== Adjust model and compatible ===<br />
Open the DTS file in an editor and replace the <code>model</code> and <code>compatible</code> strings at the top of the file:<br />
<br />
<syntaxhighlight lang="c"><br />
// SPDX-License-Identifier: GPL-2.0<br />
#include "qcom-apq8064-v2.0.dtsi"<br />
#include <dt-bindings/gpio/gpio.h><br />
#include <dt-bindings/input/input.h><br />
#include <dt-bindings/pinctrl/qcom,pmic-gpio.h><br />
/ {<br />
model = "Asus Nexus7(flo)";<br />
compatible = "asus,nexus7-flo", "qcom,apq8064";<br />
<br />
// ...<br />
</syntaxhighlight><br />
<br />
In the example, we replace <code>model</code> with <code>"LG Nexus4(mako)"</code> and the first string after compatible with <code>"lg,nexus4-mako</code> (we leave the second string in place, as this is the name of the SoC, which is the same).<br />
<br />
And again, let's commit this change. It's recommended to commit after every change you make to the DTS files so you can revert easily to the last known working state if necessary:<br />
<syntaxhighlight lang="shell-session"><br />
$ git add -A<br />
$ git commit -m "Adjusted model and compatible"<br />
</syntaxhighlight><br />
<br />
=== Minimal booting version ===<br />
Your mentor will instruct you how to modify the file further, so you have a minimal configuration that allows you to boot into the mainline kernel if everything went right. Almost nothing will work at this point, except for initializing RAM and serial output. We will work our way to enabling one feature after another throughout the process.<br />
<br />
== Testing ==<br />
=== Defconfig and compilation ===<br />
Ask your mentor for the right defconfig to use and export the variables as in [[#Menuconfig|menuconfig]] (mind the <code>armhf</code> and <code>aarch64</code> differences). Then configure the kernel to use the defconfig and finally build it (like in [[#Kernel compilation|kernel compilation]] above). Example:<br />
<br />
<syntaxhighlight lang="shell-session"><br />
$ export ARCH=arm<br />
$ export CROSS_COMPILE="arm-none-eabi-"<br />
$ make qcom_defconfig<br />
$ make -j5<br />
</syntaxhighlight><br />
<br />
=== Append DTB ===<br />
Now append the DTB (device tree blob), which has been generated from your DTS file, to the kernel:<br />
<syntaxhighlight lang="shell-session"><br />
$ cat arch/arm/boot/zImage arch/arm/boot/dts/qcom-msm8974-sony-xperia-castor.dtb > zImage-dtb<br />
</syntaxhighlight><br />
<br />
=== Execute on the device ===<br />
This greatly depends on your device, and you can figure out the correct method by looking at your [[deviceinfo]] and at the <code>postmarketos-mkinitfs</code> code if necessary. But typically for fastboot based Android devices, you can patch the <code>boot.img</code> file as follows.<br />
<br />
==== Fasboot example ====<br />
Prepare your current shell session once:<br />
<syntaxhighlight lang="shell-session"><br />
$ pmbootstrap chroot -- apk add abootimg android-tools<br />
$ export DEVICE="$(pmbootstrap config device)"<br />
$ export WORK="$(pmbootstrap config work)"<br />
$ export TEMP="$PMBWORK/chroot_native/tmp/mainline/"<br />
$ mkdir -p "$TEMP"<br />
</syntaxhighlight><br />
<br />
Then run the following everytime you would like to replace the kernel inside the <code>boot.img</code> file and flash it to the device:<br />
<syntaxhighlight lang="shell-session"><br />
$ cp ~/code/linux/zImage-dtb "$TEMP"<br />
$ cp "/tmp/postmarketOS-export/boot.img-$DEVICE" "$TEMP/boot.img"<br />
$ pmbootstrap chroot<br />
# abootimg -u /tmp/mainline/boot.img -k /tmp/mainline/zImage-dtb<br />
# fastboot boot /tmp/mainline/boot.img<br />
</syntaxhighlight><br />
<br />
=== dmesg on your PC ===<br />
Before booting the first time, run <code>dmesg -w</code> on your PC. If everything went right, you should see something like the following as soon as the device boots:<br />
<br />
<pre><br />
[27166.665566] usb 3-9: new high-speed USB device number 16 using xhci_hcd<br />
[27166.793111] usb 3-9: New USB device found, idVendor=0525, idProduct=a4a7<br />
[27166.793117] usb 3-9: New USB device strings: Mfr=1, Product=2, SerialNumber=0<br />
[27166.793121] usb 3-9: Product: Gadget Serial v2.4<br />
[27166.793125] usb 3-9: Manufacturer: Linux 4.16.0-rc5-next-20180314-dirty with ci_hdrc_msm<br />
[27166.809593] cdc_acm 3-9:2.0: ttyACM0: USB ACM device<br />
[27166.809777] usbcore: registered new interface driver cdc_acm<br />
[27166.809778] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters<br />
</pre><br />
<br />
= TODO =<br />
* "Mainline section" link is just a stub<br />
* Extend initramfs debug-shell hook to dump dmesg to RAM with userspace tools, so it can be read from /proc/lastkmesg from an Android kernel (that way we don't need serial working to get USB going, right?)<br />
* Add steps to upstream the changes made into the kernel (there are already good tutorials out there)<br />
* Add step to integrate the changes with the pmbootstrap source tree (might need changes in pmbootstrap architecture for that)</div>Opendatahttps://wiki.postmarketos.org/index.php?title=Devices&diff=2424Devices2018-02-05T11:03:27Z<p>Opendata: /* Feature matrix */</p>
<hr />
<div>__NOTOC__<br />
Please [[Help:Device Page|add devices you're porting here]], and write your porting progress in the wiki page.<br />
<br />
== Feature matrix ==<br />
These devices are included in the postmarketOS source tree, and it is at least possible to boot them. To confirm that, either the screen or networking/serial output must be working. If your device fulfills these requirements and is not yet on the list, please make a [https://help.github.com/articles/about-pull-requests/ pull-request] and edit the list after it has been accepted.<br />
<br />
{| class="wikitable sortable feature-colors"<br />
! rowspan="2" | Device<br />
! rowspan="2" | Codename<br />
! colspan="18" | Status<br />
|-<br />
! Usb net !! Flashing !! Touch !! Screen !! Wifi !! XWayland !! FDE !! Mainline !! Battery !! 3D !! Accelerometers !! Audio !! Bluetooth !! Camera !! GPS !! Mobile data !! SMS !! Voice <br />
|-<br />
|style="white-space: nowrap;" | [[Amazon Kindle Fire HDX|Amazon Kindle Fire HDX 7"]]<br />
|style="white-space: nowrap;" | amazon-thor<br />
| Y || Y || Y || Y || P || || P || || || || || || || || || || - || - <br />
|-<br />
|style="white-space: nowrap;" | [[Asus-tf101-(ASUS-Transformer-TF101)|ASUS Eee Pad Transformer]]<br />
|style="white-space: nowrap;" | asus-tf101<br />
| || || || Y || || || || || || || || || || || || || - || - <br />
|-<br />
|style="white-space: nowrap;" | [[Asus Zenfone 5 (asus-t00f)|ASUS Zenfone 5]]<br />
|style="white-space: nowrap;" | asus-t00f<br />
| Y || || Y || Y || || || Y || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Fairphone 2 (fairphone-fp2)|Fairphone 2]]<br />
| style="white-space: nowrap;" | fairphone-fp2<br />
| Y || Y || Y || Y || Y || Y || || P || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Galaxy Nexus GSM (samsung-maguro)|Google Galaxy Nexus (GSM)]]<br />
| style="white-space: nowrap;" | samsung-maguro<br />
| Y || Y || Y || Y || Y || Y || Y || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Glass (Explorer Edition)]]<br />
| style="white-space: nowrap;" | google-glass<br />
| Y || Y || P || Y || Y || Y || Y || || Y || || || Y || Y || Y || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 4 (lg-mako)|Google Nexus 4]]<br />
| style="white-space: nowrap;" | lg-mako<br />
| Y || Y || Y || Y || || || Y || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 5 (lg-hammerhead)|Google Nexus 5 (GSM)]]<br />
| style="white-space: nowrap;" | lg-hammerhead<br />
| Y || Y || Y || P || || || || P || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 6 (motorola-shamu)|Google Nexus 6]]<br />
| style="white-space: nowrap;" | motorola-shamu<br />
| Y || Y || Y || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 6P]]<br />
| style="white-space: nowrap;" | huawei-angler<br />
| Y || P || Y || Y || Y || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 7 2012 (asus-grouper)|Google Nexus 7 (2012)]]<br />
| style="white-space: nowrap;" | asus-grouper<br />
| Y || Y || Y || Y || P || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 7 2013 (asus-flo)|Google Nexus 7 (2013)]]<br />
| style="white-space: nowrap;" | asus-flo<br />
| Y || Y || Y || Y || Y || Y || P || P || || Y || || || || || || - || - || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 10 (samsung-manta)|Google Nexus 10]]<br />
| style="white-space: nowrap;" | samsung-manta<br />
| Y || Y || || Y || Y || Y || || || || || || || || || || - || - || <br />
|-<br />
| style="white-space: nowrap;" | [[HTC Desire (htc-bravo)|HTC Desire]]<br />
| style="white-space: nowrap;" | htc-bravo<br />
| Y || P || Y || Y || || Y || Y || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[HTC Desire HD (htc-ace)|HTC Desire HD]]<br />
| style="white-space: nowrap;" | htc-ace<br />
| Y || || Y || Y || Y || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Huawei-Ascend-Y530|Huawei Ascend Y530]]<br />
| style="white-space: nowrap;" | huawei-y530<br />
| Y || P || Y || Y || Y || Y || P || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[LeEco_Le_2|LeEco Le 2]]<br />
|style="white-space: nowrap;" | leeco-s2<br />
| Y || Y || || || || || || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[Lenovo K6 Power (lenovo-karate)|Lenovo K6 Power]]<br />
|style="white-space: nowrap;" | lenovo-karate<br />
| Y || Y || Y || Y || Y || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[LG_G_Watch_(lg-dory)|LG G Watch]]<br />
| style="white-space: nowrap;" | lg-dory<br />
| Y || Y || Y || Y || - || Y || || || || || Y || || || - || - || - || - || <br />
|-<br />
| style="white-space: nowrap;" | [[LG G Watch R (lg-lenok)|LG G Watch R]]<br />
| style="white-space: nowrap;" | lg-lenok<br />
| Y || Y || Y || Y || || Y || || || || || || || || - || - || - || - || <br />
|-<br />
| style="white-space: nowrap;" | [[LG G3 Europe (lg-d855)|LG G3 Europe]]<br />
| style="white-space: nowrap;" | lg-d855<br />
| Y || P || Y || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[LG G4 International (lg-h815)|LG G4 International]]<br />
| style="white-space: nowrap;" | lg-h815<br />
| Y || Y || Y || P || || || || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[LG L65 Dual SIM D285 (lg-d285)|LG L65 Dual SIM D285]]<br />
|style="white-space: nowrap;" | lg-d285<br />
| Y || || Y || Y || || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Moto G 2013 (motorola-falcon)|Moto G 2013]]<br />
| style="white-space: nowrap;" | motorola-falcon<br />
| Y || Y || Y || Y || || Y || || || || || || || || || || || || <br />
|-|-<br />
| style="white-space: nowrap;" | [[Moto G 2014 (motorola-titan)|Moto G 2014]]<br />
| style="white-space: nowrap;" | motorola-titan<br />
| Y || P || Y || P || P || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Moto G 2015 (motorola-osprey)|Moto G 2015]]<br />
| style="white-space: nowrap;" | motorola-osprey<br />
| Y || Y || Y || P || || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Motorola Moto G5 Plus(motorola-potter)|Moto G5 Plus]]<br />
| style="white-space: nowrap;" | motorola-potter<br />
| Y || P || || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Mozilla Flame (t2m-flame)|Mozilla Flame]]🔼<br />
| style="white-space: nowrap;" | t2m-flame<br />
| Y || Y || Y || Y || P || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Nextbit Robin|Nextbit Robin]]<br />
| style="white-space: nowrap;" | nextbit-robin<br />
| Y || Y || Y || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Nokia N900]]🔼<br />
| style="white-space: nowrap;" | nokia-n900<br />
| Y || Y || Y || Y || Y || Y || || Y || P || || Y || Y || || || P || P || P || <br />
|-<br />
| style="white:space: nowrap;" | [[OnePlus One (oneplus-bacon)|OnePlus One]]<br />
| style="white-space: nowrap;" | oneplus-bacon<br />
| Y || Y || Y || P || || || || P || || || || || || || || || || <br />
|-<br />
| style="white:space: nowrap;" | [[OnePlus X (oneplus-onyx)|OnePlus X]]<br />
| style="white-space: nowrap;" | oneplus-onyx<br />
| Y || Y || Y || P || || || P || || || || || || || || || || || <br />
|-<br />
| style="white:space: nowrap;" | [[Ouya (ouya-ouya)|Ouya]]<br />
| style="white-space: nowrap;" | ouya-ouya<br />
| Y || Y || - || Y || || Y || || || || || || || || - || || - || - || - <br />
|-<br />
| style="white-space: nowrap;" | [[QEMU aarch64 (qemu-aarch64 )|QEMU aarch64]]🔼<br />
| style="white-space: nowrap;" | qemu-aarch64<br />
| - || - || - || Y || - || Y || P || Y || || || - || || - || - || - || - || - || - <br />
|-<br />
| style="white-space: nowrap;" | [[QEMU amd64 (qemu-amd64)|QEMU AMD64]]🔼<br />
| style="white-space: nowrap;" | qemu-amd64<br />
| - || - || - || Y || - || Y || P || Y || || || - || || - || - || - || - || - || - <br />
|-<br />
| style="white-space: nowrap;" | [[QEMU ARM (qemu-vexpress)|QEMU ARM]]🔼<br />
| style="white-space: nowrap;" | qemu-vexpress<br />
| - || - || - || Y || - || Y || P || Y || || || - || || - || - || - || - || - || - <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy Mini 2 (samsung-s6500d)|Samsung Galaxy Mini 2]]<br />
| style="white-space: nowrap;" | samsung-s6500d<br />
| Y || Y || P || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Galaxy Note II (samsung-n7100)|Samsung Galaxy Note II]]<br />
| style="white-space: nowrap;" | samsung-n7100<br />
| Y || Y || Y || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy S Advance (samsung-i9070)|Samsung Galaxy S Advance]]<br />
| style="white-space: nowrap;" | samsung-i9070<br />
| Y || Y || Y || Y || Y || Y || Y || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy SII (samsung-i9100)|Samsung Galaxy SII]]<br />
| style="white-space: nowrap;" | samsung-i9100, -d710<br />
| Y || || Y || Y || Y || Y || P || || || || Y || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung-i747m|Samsung Galaxy SIII (i747m)]]<br />
| style="white-space: nowrap;" | samsung-i747m, -i747<br />
| Y || Y || Y || Y || Y || Y || P || || || || || P || P || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy SIII LTE (samsung-i9305)|Samsung Galaxy SIII (LTE)]]<br />
| style="white-space: nowrap;" | samsung-i9305, -i9300<br />
| Y || || Y || Y || Y || Y || Y || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung-i9505-(Samsung-Galaxy-S4-int)|Samsung Galaxy S4 (International)]]<br />
| style="white-space: nowrap;" | samsung-i9505<br />
| Y || || Y || Y || Y || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy S4 Mini LTE]]<br />
| style="white-space: nowrap;" | samsung-i9195<br />
| || Y || || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung_Galaxy_S5_(samsung-klte)|Samsung Galaxy S5]]<br />
| style="white-space: nowrap;" | samsung-klte<br />
| Y || Y || Y || Y || || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy SL (samsung-i9003)|Samsung Galaxy SL]]<br />
| style="white-space: nowrap;" | samsung-i9003<br />
| Y || P || Y || Y || || Y || P || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy Tab 2 10.1" (3G and Wifi) (samsung-espresso10)|Samsung Galaxy Tab 2 10.1"]]<br />
| style="white-space: nowrap;" | samsung-espresso10<br />
| Y || P || Y || Y || P || || Y || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Sony Ericsson Xperia Arc (semc-anzu)|Sony Ericsson Xperia Arc]]<br />
| style="white-space: nowrap;" | semc-anzu<br />
| Y || Y || Y || Y || P || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Sony Xperia Z (sony-yuga)|Sony Xperia Z]]<br />
| style="white-space: nowrap;" | sony-yuga<br />
| Y || Y || Y || Y || || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Sony Xperia Z1 (sony-honami)|Sony Xperia Z1]]<br />
| style="white-space: nowrap;" | sony-honami<br />
| Y || Y || Y || Y || Y || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Sony Xperia Z1 Compact (sony-amami)|Sony Xperia Z1 Compact]]<br />
| style="white-space: nowrap;" | sony-amami<br />
| Y || Y || Y || Y || Y || Y || || P || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Sony Xperia Z2 Tablet (sony-castor-windy)|Sony Xperia Z2 Tablet]]<br />
| style="white-space: nowrap;" | sony-castor-windy<br />
| Y || Y || Y || Y || Y || Y || P || Y || || Y || || || || || - || - || - || -<br />
|-<br />
|style="white-space: nowrap;" | [[Sony Xperia Z3C (sony-aries)|Sony Xperia Z3 Compact]]<br />
|style="white-space: nowrap;" | sony-aries<br />
| || Y || Y || Y || || || || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[Sony Xperia Z3 Tablet Compact (sony-scorpion)|Sony Xperia Z3 Tablet Compact]]<br />
|style="white-space: nowrap;" | sony-scorpion<br />
| Y || Y || Y || Y || || || || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[Teclast X80 Pro (teclast-x80pro) |Teclast X80 Pro]]<br />
|style="white-space: nowrap;" | teclast-x80pro<br />
| - || Y || Y || Y || Y || Y || Y || Y || Y || Y || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[Wiko_Lenny_3_(wiko-lenny3)|Wiko Lenny 3]]<br />
|style="white-space: nowrap;" | wiko-lenny3<br />
| Y || P || Y || Y || || Y || || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[Xiaomi_Redmi_1S_(xiaomi-armani)|Xiaomi Redmi 1S]]<br />
|style="white-space: nowrap;" | xiaomi-armani<br />
| Y || Y || Y || Y || Y || Y || || || Y || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[Xiaomi_RedMi3_(xiaomi-ido)|Xiaomi RedMi 3]]<br />
|style="white-space: nowrap;" | xiaomi-ido<br />
| Y || Y || P || Y || || || Y || || Y || || || || || || || || || <br />
|}<br />
<!--<br />
NOTE: Please keep the table above alphabetically sorted.<br />
--><br />
<br />
=== Status Legend ===<br />
<br />
{| class="wikitable feature-colors"<br />
! Code<br />
! Meaning<br />
|-<br />
| Y<br />
| Yes, fully implemented<br />
|-<br />
| P<br />
| Partially implemented<br />
|-<br />
| -<br />
| Not applicable -- device does not have feature<br />
|-<br />
| style="text-align: center" | 🔼<br />
| non-Android based device<br />
|}<br />
<br />
== Not booting ==<br />
These devices are not integrated into the postmarketOS source tree yet. That is either because the devices do not boot at all, or because it does boot, but there has not been done a successful pull-request to integrate the code. In the latter case, if you have the device and can verify that it can be booted, please [https://help.github.com/articles/about-pull-requests/ make a pull-request].<br />
<br />
{| class="wikitable sortable"<br />
! Device<br />
! Codename<br />
! Status<br />
|-<br />
| [[Apple-iPod-Touch-1G|Apple iPod Touch 1G]]🔼<br />
| apple-ipt1g<br />
|<br />
|-<br />
| [[Archos_80_G9_(archos-a80)|Archos 80 G9]]<br />
| archos-a80<br />
| Still figuring out the flashing stuff<br />
|-<br />
| [[ASUS_Transformer_Pad_(asus-tf300t)|ASUS Transformer Pad]]<br />
| asus-tf300t<br />
| Framebuffer doesn't work<br />
|-<br />
| [[Asus-tf700t-(ASUS-Transformer-TF700t)|ASUS Transformer Infinity]]<br />
| asus-tf700t<br />
| Kernel compiles, not tested<br />
|-<br />
| [[Asus_Zenwatch_2_(asus-wi501q)|ASUS Zenwatch 2]]<br />
| asus-wi501q<br />
| Boot partition too small<br />
|-<br />
| [[BlackBerry-Bold-Touch-9900-(Dakota)|BlackBerry Bold Touch 9900]]🔼<br />
| blackberry-dakota<br />
|<br />
|-<br />
| [[Aquaris-U|bq Aquaris U]]<br />
| chaozu<br />
| kernel compiles, more is not yet tested<br />
|-<br />
| [[Coolpad-Sky-3-E502-(Modena-2)|Coolpad Modena 2]]<br />
| coolpad-modena2<br />
|<br />
|-<br />
| [[Hp-tenderloin-(HP-Touchpad)|HP Touchpad]]🔼<br />
| hp-tenderloin<br />
| Need novacom packaged for Alpine<br />
|-<br />
| [[Htc-vision-(HTC-Desire-Z)|HTC Desire Z]]<br />
| htc-vision<br />
| Kernel compiles, not tested<br />
|-<br />
| [[Htc-monarudo-(HTC-Droid-DNA)|HTC Droid DNA]]<br />
| htc-monarudo<br />
|<br />
|-<br />
| [[Htc-m8-(HTC-One-M8)|HTC One M8]]<br />
| htc-m8<br />
| Kernel compiles, not tested<br />
|-<br />
| [[Huawei_Honor_5X_(huawei-kiwi)|Huawei Honor 5X]]<br />
| huawei-kiwi<br />
| Kernel compiles, graphic output does not work<br />
|-<br />
| [[Google_Nexus_5X(lg-bullhead)|Google Nexus 5X]]<br />
| lg-bullhead<br />
| Kernel compiles and flashes succesfully, but device is stuck in a boot loop<br />
|-<br />
| [[Jolla_Phone_(jolla-sbj)|Jolla Phone]]🔼<br />
| jolla-sbj<br />
| Kernel compiles, can't get fastboot to work<br />
|-<br />
| [[Landrover-a9|Land Rover A9]]<br />
| landrover-a9<br />
|<br />
|-<br />
| [[LG_Joy_(lg-h220)|LG Joy]]<br />
| lg-h220<br />
|<br />
|-<br />
| [[Moto X|Moto X]]<br />
| motorola-ghost<br />
|<br />
|-<br />
| [[Moto X 2014|Moto X 2014]]<br />
| motorola-x-2014<br />
|<br />
|-<br />
| [[Motorola E Second Gen]]<br />
| motorola-surnia<br />
|<br />
|-<br />
| [[NEC Terrain]]<br />
| nec-ne-201a1a<br />
|<br />
|-<br />
| [[Nokia N9]]🔼<br />
| nokia-n9<br />
| Basic support has been merged<br />
|-<br />
| [[Nokia N950]]🔼<br />
| nokia-n950<br />
| kernel is booting<br />
|-<br />
| [[Qemu Nokia N900|Qemu N900]]🔼<br />
| qemu-rx51<br />
|<br />
|-<br />
| [[Raspberry Pi]] (inc. PiTab, Noodle Pi..)🔼<br />
| rpi<br />
| Should be able to boot by converting existing Alpine image<br />
|-<br />
| [[Samsung_Exhibit_II_4G_(samsung-t679)|Samsung Exhibit II 4G]]<br />
| samsung-t679<br />
| Kernel compiles; flashing and booting are to be tested soon. <br />
|-<br />
| [[Samsung Galaxy Ace i (samsung-s5830i)|Samsung Galaxy Ace i]]<br />
| samsung-s5830i<br />
| Kernel compiles, haven't tried flashing yet.<br />
|-<br />
| [[Samsung Galaxy Ace II X (samsung-kylessopen)|Samsung Galaxy Ace II X]]<br />
| samsung-kylessopen<br />
| Kernel compiles, flashing works. Does not boot.<br />
|-<br />
| [[Samsung_Galaxy_S_(samsung-i9000)|Samsung Galaxy S]]<br />
| samsung-i9000<br />
| Kernel compiles & boots; framebuffer, touchscreen and wifi (partial) working <br />
|-<br />
| [[Samsung-g800f-(Samsung-Galaxy-S5-mini)|Samsung Galaxy S5 mini]]<br />
| samsung-g800f<br />
|<br />
|-<br />
| [[Samsung-g930f-(Samsung-Galaxy-S7)|Samsung Galaxy S7]]<br />
| samsung-g930f<br />
| Kernel compiles; Not tested<br />
|-<br />
| [[Samsung-S7562|Samsung Galaxy S Duos]]<br />
| samsung-s7562<br />
|<br />
|-<br />
| [[Samsung_Galaxy_Star_(samsung-mint)|Samsung Galaxy Star]]<br />
| samsung-mint<br />
| Prebuilt kernel reboots to recovery, pmOS kernel stucks at bootloader logo<br />
|-<br />
| [[Xperia-E-Dual|Sony Xperia E Dual]]<br />
| sony-nanhu<br />
|<br />
|-<br />
| [[Xperia-J-(sony-jlo)|Sony Xperia J]]<br />
| sony-jlo<br />
|<br />
|-<br />
| [[Xperia-T3|Sony Xperia T3]]<br />
| sony-seagull<br />
|<br />
|-<br />
| [[Xperia-Z2|Sony Xperia Z2]]<br />
| sony-sirius<br />
|<br />
<br />
|}<br />
<!--<br />
NOTE: Please keep the table above alphabetically sorted.<br />
--><br />
<br />
==Other supported hardware==<br />
There are a variety of devices which pmOS users will likely plug into their phones. If the device is free software compliant (drivers and firmware), we should ensure it works with the OS. This is particularly relevant if the hardware offers an alternative to a non-free piece of hardware which is part of a supported device, such as external wifi adapters and gps units. These devices are listed below.<br />
<br />
===External wifi adapters===<br />
<br />
Atheros [[AR9271]] chipset<br />
<br />
===External GPS units===<br />
<br />
[[Category:Hardware]]<br />
<br />
===See also===<br />
[[Milestones]] for the current goals and activities, the [[Device_Wishlist]] and [[The-big-list-of-who-has-what-device]].</div>Opendatahttps://wiki.postmarketos.org/index.php?title=Devices&diff=2423Devices2018-02-05T10:59:26Z<p>Opendata: </p>
<hr />
<div>__NOTOC__<br />
Please [[Help:Device Page|add devices you're porting here]], and write your porting progress in the wiki page.<br />
<br />
== Feature matrix ==<br />
These devices are included in the postmarketOS source tree, and it is at least possible to boot them. To confirm that, either the screen or networking/serial output must be working. If your device fulfills these requirements and is not yet on the list, please make a [https://help.github.com/articles/about-pull-requests/ pull-request] and edit the list after it has been accepted.<br />
<br />
{| class="wikitable sortable feature-colors"<br />
! rowspan="2" | Device<br />
! rowspan="2" | Codename<br />
! colspan="18" | Status<br />
|-<br />
! Usb net !! Flashing !! Touch !! Screen !! Wifi !! XWayland !! FDE !! Mainline !! Battery !! 3D !! Accelerometers !! Audio !! Bluetooth !! Camera !! GPS !! Mobile data !! SMS !! Voice <br />
|-<br />
|style="white-space: nowrap;" | [[Amazon Kindle Fire HDX|Amazon Kindle Fire HDX 7"]]<br />
|style="white-space: nowrap;" | amazon-thor<br />
| Y || Y || Y || Y || P || || P || || || || || || || || || || - || - <br />
|-<br />
|style="white-space: nowrap;" | [[Asus-tf101-(ASUS-Transformer-TF101)|ASUS Eee Pad Transformer]]<br />
|style="white-space: nowrap;" | asus-tf101<br />
| || || || Y || || || || || || || || || || || || || - || - <br />
|-<br />
|style="white-space: nowrap;" | [[Asus Zenfone 5 (asus-t00f)|ASUS Zenfone 5]]<br />
|style="white-space: nowrap;" | asus-t00f<br />
| Y || || Y || Y || || || Y || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Fairphone 2 (fairphone-fp2)|Fairphone 2]]<br />
| style="white-space: nowrap;" | fairphone-fp2<br />
| Y || Y || Y || Y || Y || Y || || P || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Galaxy Nexus GSM (samsung-maguro)|Google Galaxy Nexus (GSM)]]<br />
| style="white-space: nowrap;" | samsung-maguro<br />
| Y || Y || Y || Y || Y || Y || Y || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Glass (Explorer Edition)]]<br />
| style="white-space: nowrap;" | google-glass<br />
| Y || Y || P || Y || Y || Y || Y || || Y || || || Y || Y || Y || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 4 (lg-mako)|Google Nexus 4]]<br />
| style="white-space: nowrap;" | lg-mako<br />
| Y || Y || Y || Y || || || Y || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 5 (lg-hammerhead)|Google Nexus 5 (GSM)]]<br />
| style="white-space: nowrap;" | lg-hammerhead<br />
| Y || Y || Y || P || || || || P || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 6 (motorola-shamu)|Google Nexus 6]]<br />
| style="white-space: nowrap;" | motorola-shamu<br />
| Y || Y || Y || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 6P]]<br />
| style="white-space: nowrap;" | huawei-angler<br />
| Y || P || Y || Y || Y || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 7 2012 (asus-grouper)|Google Nexus 7 (2012)]]<br />
| style="white-space: nowrap;" | asus-grouper<br />
| Y || Y || Y || Y || P || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 7 2013 (asus-flo)|Google Nexus 7 (2013)]]<br />
| style="white-space: nowrap;" | asus-flo<br />
| Y || Y || Y || Y || Y || Y || P || P || || Y || || || || || || - || - || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 10 (samsung-manta)|Google Nexus 10]]<br />
| style="white-space: nowrap;" | samsung-manta<br />
| Y || Y || || Y || Y || Y || || || || || || || || || || - || - || <br />
|-<br />
| style="white-space: nowrap;" | [[HTC Desire (htc-bravo)|HTC Desire]]<br />
| style="white-space: nowrap;" | htc-bravo<br />
| Y || P || Y || Y || || Y || Y || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[HTC Desire HD (htc-ace)|HTC Desire HD]]<br />
| style="white-space: nowrap;" | htc-ace<br />
| Y || || Y || Y || Y || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Huawei-Ascend-Y530|Huawei Ascend Y530]]<br />
| style="white-space: nowrap;" | huawei-y530<br />
| Y || P || Y || Y || Y || Y || P || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[LeEco_Le_2|LeEco Le 2]]<br />
|style="white-space: nowrap;" | leeco-s2<br />
| Y || Y || || || || || || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[Lenovo K6 Power (lenovo-karate)|Lenovo K6 Power]]<br />
|style="white-space: nowrap;" | lenovo-karate<br />
| Y || Y || Y || Y || Y || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[LG_G_Watch_(lg-dory)|LG G Watch]]<br />
| style="white-space: nowrap;" | lg-dory<br />
| Y || Y || Y || Y || - || Y || || || || || Y || || || - || - || - || - || <br />
|-<br />
| style="white-space: nowrap;" | [[LG G Watch R (lg-lenok)|LG G Watch R]]<br />
| style="white-space: nowrap;" | lg-lenok<br />
| Y || Y || Y || Y || || Y || || || || || || || || - || - || - || - || <br />
|-<br />
| style="white-space: nowrap;" | [[LG G3 Europe (lg-d855)|LG G3 Europe]]<br />
| style="white-space: nowrap;" | lg-d855<br />
| Y || P || Y || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[LG G4 International (lg-h815)|LG G4 International]]<br />
| style="white-space: nowrap;" | lg-h815<br />
| Y || Y || Y || P || || || || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[LG L65 Dual SIM D285 (lg-d285)|LG L65 Dual SIM D285]]<br />
|style="white-space: nowrap;" | lg-d285<br />
| Y || || Y || Y || || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Moto G 2013 (motorola-falcon)|Moto G 2013]]<br />
| style="white-space: nowrap;" | motorola-falcon<br />
| Y || Y || Y || Y || || Y || || || || || || || || || || || || <br />
|-|-<br />
| style="white-space: nowrap;" | [[Moto G 2014 (motorola-titan)|Moto G 2014]]<br />
| style="white-space: nowrap;" | motorola-titan<br />
| Y || P || Y || P || P || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Moto G 2015 (motorola-osprey)|Moto G 2015]]<br />
| style="white-space: nowrap;" | motorola-osprey<br />
| Y || Y || Y || P || || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Motorola Moto G5 Plus(motorola-potter)|Moto G5 Plus]]<br />
| style="white-space: nowrap;" | motorola-potter<br />
| Y || P || || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Mozilla Flame (t2m-flame)|Mozilla Flame]]🔼<br />
| style="white-space: nowrap;" | t2m-flame<br />
| Y || Y || Y || Y || P || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Nextbit Robin|Nextbit Robin]]<br />
| style="white-space: nowrap;" | nextbit-robin<br />
| Y || Y || Y || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Nokia N900]]🔼<br />
| style="white-space: nowrap;" | nokia-n900<br />
| Y || Y || Y || Y || Y || Y || || Y || P || || Y || Y || || || P || P || P || <br />
|-<br />
| style="white:space: nowrap;" | [[OnePlus One (oneplus-bacon)|OnePlus One]]<br />
| style="white-space: nowrap;" | oneplus-bacon<br />
| Y || Y || Y || P || || || || P || || || || || || || || || || <br />
|-<br />
| style="white:space: nowrap;" | [[OnePlus X (oneplus-onyx)|OnePlus X]]<br />
| style="white-space: nowrap;" | oneplus-onyx<br />
| Y || Y || Y || P || || || P || || || || || || || || || || || <br />
|-<br />
| style="white:space: nowrap;" | [[Ouya (ouya-ouya)|Ouya]]<br />
| style="white-space: nowrap;" | ouya-ouya<br />
| Y || Y || - || Y || || Y || || || || || || || || - || || - || - || - <br />
|-<br />
| style="white-space: nowrap;" | [[QEMU aarch64 (qemu-aarch64 )|QEMU aarch64]]🔼<br />
| style="white-space: nowrap;" | qemu-aarch64<br />
| - || - || - || Y || - || Y || P || Y || || || - || || - || - || - || - || - || - <br />
|-<br />
| style="white-space: nowrap;" | [[QEMU amd64 (qemu-amd64)|QEMU AMD64]]🔼<br />
| style="white-space: nowrap;" | qemu-amd64<br />
| - || - || - || Y || - || Y || P || Y || || || - || || - || - || - || - || - || - <br />
|-<br />
| style="white-space: nowrap;" | [[QEMU ARM (qemu-vexpress)|QEMU ARM]]🔼<br />
| style="white-space: nowrap;" | qemu-vexpress<br />
| - || - || - || Y || - || Y || P || Y || || || - || || - || - || - || - || - || - <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy Mini 2 (samsung-s6500d)|Samsung Galaxy Mini 2]]<br />
| style="white-space: nowrap;" | samsung-s6500d<br />
| Y || Y || P || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Galaxy Note II (samsung-n7100)|Samsung Galaxy Note II]]<br />
| style="white-space: nowrap;" | samsung-n7100<br />
| Y || Y || Y || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy S Advance (samsung-i9070)|Samsung Galaxy S Advance]]<br />
| style="white-space: nowrap;" | samsung-i9070<br />
| Y || Y || Y || Y || Y || Y || Y || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy SII (samsung-i9100)|Samsung Galaxy SII]]<br />
| style="white-space: nowrap;" | samsung-i9100, -d710<br />
| Y || || Y || Y || Y || Y || P || || || || Y || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung-i747m|Samsung Galaxy SIII (i747m)]]<br />
| style="white-space: nowrap;" | samsung-i747m, -i747<br />
| Y || Y || Y || Y || Y || Y || P || || || || || P || P || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy SIII LTE (samsung-i9305)|Samsung Galaxy SIII (LTE)]]<br />
| style="white-space: nowrap;" | samsung-i9305, -i9300<br />
| Y || || Y || Y || Y || Y || Y || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung-i9505-(Samsung-Galaxy-S4-int)|Samsung Galaxy S4 (International)]]<br />
| style="white-space: nowrap;" | samsung-i9505<br />
| Y || || Y || Y || Y || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy S4 Mini LTE]]<br />
| style="white-space: nowrap;" | samsung-i9195<br />
| || Y || || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung_Galaxy_S5_(samsung-klte)|Samsung Galaxy S5]]<br />
| style="white-space: nowrap;" | samsung-klte<br />
| Y || Y || Y || Y || || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy SL (samsung-i9003)|Samsung Galaxy SL]]<br />
| style="white-space: nowrap;" | samsung-i9003<br />
| Y || P || Y || Y || || Y || P || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy Tab 2 10.1" (3G and Wifi) (samsung-espresso10)|Samsung Galaxy Tab 2 10.1"]]<br />
| style="white-space: nowrap;" | samsung-espresso10<br />
| Y || P || Y || Y || P || || Y || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Sony Ericsson Xperia Arc (semc-anzu)|Sony Ericsson Xperia Arc]]<br />
| style="white-space: nowrap;" | semc-anzu<br />
| Y || Y || Y || Y || P || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Sony Xperia Z (sony-yuga)|Sony Xperia Z]]<br />
| style="white-space: nowrap;" | sony-yuga<br />
| Y || Y || Y || Y || || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Sony Xperia Z1 (sony-honami)|Sony Xperia Z1]]<br />
| style="white-space: nowrap;" | sony-honami<br />
| Y || Y || Y || Y || Y || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Sony Xperia Z1 Compact (sony-amami)|Sony Xperia Z1 Compact]]<br />
| style="white-space: nowrap;" | sony-amami<br />
| Y || Y || Y || Y || Y || Y || || P || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Sony Xperia Z2 Tablet (sony-castor-windy)|Sony Xperia Z2 Tablet]]<br />
| style="white-space: nowrap;" | sony-castor-windy<br />
| Y || Y || Y || Y || Y || Y || P || Y || || Y || || || || || - || - || - || <br />
|-<br />
|style="white-space: nowrap;" | [[Sony Xperia Z3C (sony-aries)|Sony Xperia Z3 Compact]]<br />
|style="white-space: nowrap;" | sony-aries<br />
| || Y || Y || Y || || || || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[Sony Xperia Z3 Tablet Compact (sony-scorpion)|Sony Xperia Z3 Tablet Compact]]<br />
|style="white-space: nowrap;" | sony-scorpion<br />
| Y || Y || Y || Y || || || || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[Teclast X80 Pro (teclast-x80pro) |Teclast X80 Pro]]<br />
|style="white-space: nowrap;" | teclast-x80pro<br />
| - || Y || Y || Y || Y || Y || Y || Y || Y || Y || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[Wiko_Lenny_3_(wiko-lenny3)|Wiko Lenny 3]]<br />
|style="white-space: nowrap;" | wiko-lenny3<br />
| Y || P || Y || Y || || Y || || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[Xiaomi_Redmi_1S_(xiaomi-armani)|Xiaomi Redmi 1S]]<br />
|style="white-space: nowrap;" | xiaomi-armani<br />
| Y || Y || Y || Y || Y || Y || || || Y || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[Xiaomi_RedMi3_(xiaomi-ido)|Xiaomi RedMi 3]]<br />
|style="white-space: nowrap;" | xiaomi-ido<br />
| Y || Y || P || Y || || || Y || || Y || || || || || || || || || <br />
|}<br />
<!--<br />
NOTE: Please keep the table above alphabetically sorted.<br />
--><br />
<br />
=== Status Legend ===<br />
<br />
{| class="wikitable feature-colors"<br />
! Code<br />
! Meaning<br />
|-<br />
| Y<br />
| Yes, fully implemented<br />
|-<br />
| P<br />
| Partially implemented<br />
|-<br />
| -<br />
| Not applicable -- device does not have feature<br />
|-<br />
| style="text-align: center" | 🔼<br />
| non-Android based device<br />
|}<br />
<br />
== Not booting ==<br />
These devices are not integrated into the postmarketOS source tree yet. That is either because the devices do not boot at all, or because it does boot, but there has not been done a successful pull-request to integrate the code. In the latter case, if you have the device and can verify that it can be booted, please [https://help.github.com/articles/about-pull-requests/ make a pull-request].<br />
<br />
{| class="wikitable sortable"<br />
! Device<br />
! Codename<br />
! Status<br />
|-<br />
| [[Apple-iPod-Touch-1G|Apple iPod Touch 1G]]🔼<br />
| apple-ipt1g<br />
|<br />
|-<br />
| [[Archos_80_G9_(archos-a80)|Archos 80 G9]]<br />
| archos-a80<br />
| Still figuring out the flashing stuff<br />
|-<br />
| [[ASUS_Transformer_Pad_(asus-tf300t)|ASUS Transformer Pad]]<br />
| asus-tf300t<br />
| Framebuffer doesn't work<br />
|-<br />
| [[Asus-tf700t-(ASUS-Transformer-TF700t)|ASUS Transformer Infinity]]<br />
| asus-tf700t<br />
| Kernel compiles, not tested<br />
|-<br />
| [[Asus_Zenwatch_2_(asus-wi501q)|ASUS Zenwatch 2]]<br />
| asus-wi501q<br />
| Boot partition too small<br />
|-<br />
| [[BlackBerry-Bold-Touch-9900-(Dakota)|BlackBerry Bold Touch 9900]]🔼<br />
| blackberry-dakota<br />
|<br />
|-<br />
| [[Aquaris-U|bq Aquaris U]]<br />
| chaozu<br />
| kernel compiles, more is not yet tested<br />
|-<br />
| [[Coolpad-Sky-3-E502-(Modena-2)|Coolpad Modena 2]]<br />
| coolpad-modena2<br />
|<br />
|-<br />
| [[Hp-tenderloin-(HP-Touchpad)|HP Touchpad]]🔼<br />
| hp-tenderloin<br />
| Need novacom packaged for Alpine<br />
|-<br />
| [[Htc-vision-(HTC-Desire-Z)|HTC Desire Z]]<br />
| htc-vision<br />
| Kernel compiles, not tested<br />
|-<br />
| [[Htc-monarudo-(HTC-Droid-DNA)|HTC Droid DNA]]<br />
| htc-monarudo<br />
|<br />
|-<br />
| [[Htc-m8-(HTC-One-M8)|HTC One M8]]<br />
| htc-m8<br />
| Kernel compiles, not tested<br />
|-<br />
| [[Huawei_Honor_5X_(huawei-kiwi)|Huawei Honor 5X]]<br />
| huawei-kiwi<br />
| Kernel compiles, graphic output does not work<br />
|-<br />
| [[Google_Nexus_5X(lg-bullhead)|Google Nexus 5X]]<br />
| lg-bullhead<br />
| Kernel compiles and flashes succesfully, but device is stuck in a boot loop<br />
|-<br />
| [[Jolla_Phone_(jolla-sbj)|Jolla Phone]]🔼<br />
| jolla-sbj<br />
| Kernel compiles, can't get fastboot to work<br />
|-<br />
| [[Landrover-a9|Land Rover A9]]<br />
| landrover-a9<br />
|<br />
|-<br />
| [[LG_Joy_(lg-h220)|LG Joy]]<br />
| lg-h220<br />
|<br />
|-<br />
| [[Moto X|Moto X]]<br />
| motorola-ghost<br />
|<br />
|-<br />
| [[Moto X 2014|Moto X 2014]]<br />
| motorola-x-2014<br />
|<br />
|-<br />
| [[Motorola E Second Gen]]<br />
| motorola-surnia<br />
|<br />
|-<br />
| [[NEC Terrain]]<br />
| nec-ne-201a1a<br />
|<br />
|-<br />
| [[Nokia N9]]🔼<br />
| nokia-n9<br />
| Basic support has been merged<br />
|-<br />
| [[Nokia N950]]🔼<br />
| nokia-n950<br />
| kernel is booting<br />
|-<br />
| [[Qemu Nokia N900|Qemu N900]]🔼<br />
| qemu-rx51<br />
|<br />
|-<br />
| [[Raspberry Pi]] (inc. PiTab, Noodle Pi..)🔼<br />
| rpi<br />
| Should be able to boot by converting existing Alpine image<br />
|-<br />
| [[Samsung_Exhibit_II_4G_(samsung-t679)|Samsung Exhibit II 4G]]<br />
| samsung-t679<br />
| Kernel compiles; flashing and booting are to be tested soon. <br />
|-<br />
| [[Samsung Galaxy Ace i (samsung-s5830i)|Samsung Galaxy Ace i]]<br />
| samsung-s5830i<br />
| Kernel compiles, haven't tried flashing yet.<br />
|-<br />
| [[Samsung Galaxy Ace II X (samsung-kylessopen)|Samsung Galaxy Ace II X]]<br />
| samsung-kylessopen<br />
| Kernel compiles, flashing works. Does not boot.<br />
|-<br />
| [[Samsung_Galaxy_S_(samsung-i9000)|Samsung Galaxy S]]<br />
| samsung-i9000<br />
| Kernel compiles & boots; framebuffer, touchscreen and wifi (partial) working <br />
|-<br />
| [[Samsung-g800f-(Samsung-Galaxy-S5-mini)|Samsung Galaxy S5 mini]]<br />
| samsung-g800f<br />
|<br />
|-<br />
| [[Samsung-g930f-(Samsung-Galaxy-S7)|Samsung Galaxy S7]]<br />
| samsung-g930f<br />
| Kernel compiles; Not tested<br />
|-<br />
| [[Samsung-S7562|Samsung Galaxy S Duos]]<br />
| samsung-s7562<br />
|<br />
|-<br />
| [[Samsung_Galaxy_Star_(samsung-mint)|Samsung Galaxy Star]]<br />
| samsung-mint<br />
| Prebuilt kernel reboots to recovery, pmOS kernel stucks at bootloader logo<br />
|-<br />
| [[Xperia-E-Dual|Sony Xperia E Dual]]<br />
| sony-nanhu<br />
|<br />
|-<br />
| [[Xperia-J-(sony-jlo)|Sony Xperia J]]<br />
| sony-jlo<br />
|<br />
|-<br />
| [[Xperia-T3|Sony Xperia T3]]<br />
| sony-seagull<br />
|<br />
|-<br />
| [[Xperia-Z2|Sony Xperia Z2]]<br />
| sony-sirius<br />
|<br />
<br />
|}<br />
<!--<br />
NOTE: Please keep the table above alphabetically sorted.<br />
--><br />
<br />
==Other supported hardware==<br />
There are a variety of devices which pmOS users will likely plug into their phones. If the device is free software compliant (drivers and firmware), we should ensure it works with the OS. This is particularly relevant if the hardware offers an alternative to a non-free piece of hardware which is part of a supported device, such as external wifi adapters and gps units. These devices are listed below.<br />
<br />
===External wifi adapters===<br />
<br />
Atheros [[AR9271]] chipset<br />
<br />
===External GPS units===<br />
<br />
[[Category:Hardware]]<br />
<br />
===See also===<br />
[[Milestones]] for the current goals and activities, the [[Device_Wishlist]] and [[The-big-list-of-who-has-what-device]].</div>Opendatahttps://wiki.postmarketos.org/index.php?title=Devices&diff=2061Devices2018-01-06T11:06:39Z<p>Opendata: /* Feature matrix */</p>
<hr />
<div>__NOTOC__<br />
Please [[Help:Device Page|add devices you're porting here]], and write your porting progress in the wiki page.<br />
<br />
== Feature matrix ==<br />
These devices are included in the postmarketOS source tree, and it is at least possible to boot them. To confirm that, either the screen or networking/serial output must be working. If your device fulfills these requirements and is not yet on the list, please make a [https://help.github.com/articles/about-pull-requests/ pull-request] and edit the list after it has been accepted.<br />
<br />
{| class="wikitable sortable feature-colors"<br />
! rowspan="2" | Device<br />
! rowspan="2" | Codename<br />
! colspan="18" | Status<br />
|-<br />
! Usb net !! Flashing !! Touch !! Screen !! Wifi !! XWayland !! FDE !! Mainline !! Battery !! 3D !! Accelerometers !! Audio !! Bluetooth !! Camera !! GPS !! Mobile data !! SMS !! Voice <br />
|-<br />
|style="white-space: nowrap;" | [[Amazon Kindle Fire HDX|Amazon Kindle Fire HDX 7"]]<br />
|style="white-space: nowrap;" | amazon-thor<br />
| Y || Y || Y || Y || P || || P || || || || || || || || || || - || - <br />
|-<br />
| style="white-space: nowrap;" | [[Fairphone 2 (fairphone-fp2)|Fairphone 2]]<br />
| style="white-space: nowrap;" | fairphone-fp2<br />
| Y || Y || Y || Y || Y || Y || || P || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Galaxy Nexus GSM (samsung-maguro)|Google Galaxy Nexus (GSM)]]<br />
| style="white-space: nowrap;" | samsung-maguro<br />
| Y || Y || Y || Y || Y || Y || Y || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Glass (Explorer Edition)]]<br />
| style="white-space: nowrap;" | google-glass<br />
| Y || Y || P || Y || Y || Y || Y || || Y || || || Y || Y || Y || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 4 (lg-mako)|Google Nexus 4]]<br />
| style="white-space: nowrap;" | lg-mako<br />
| Y || Y || Y || Y || || || Y || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 5 (lg-hammerhead)|Google Nexus 5 (GSM)]]<br />
| style="white-space: nowrap;" | lg-hammerhead<br />
| Y || Y || Y || P || || || || P || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 6 (motorola-shamu)|Google Nexus 6]]<br />
| style="white-space: nowrap;" | motorola-shamu<br />
| Y || Y || || P || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 6P]]<br />
| style="white-space: nowrap;" | huawei-angler<br />
| Y || P || Y || Y || Y || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 7 2012 (asus-grouper)|Google Nexus 7 (2012)]]<br />
| style="white-space: nowrap;" | asus-grouper<br />
| Y || Y || Y || Y || P || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 7 2013 (asus-flo)|Google Nexus 7 (2013)]]<br />
| style="white-space: nowrap;" | asus-flo<br />
| Y || Y || Y || Y || Y || Y || P || P || || Y || || || || || || - || - || <br />
|-<br />
| style="white-space: nowrap;" | [[HTC Desire (htc-bravo)|HTC Desire]]<br />
| style="white-space: nowrap;" | htc-bravo<br />
| Y || P || Y || Y || || Y || Y || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[HTC Desire HD (htc-ace)|HTC Desire HD]]<br />
| style="white-space: nowrap;" | htc-ace<br />
| Y || || Y || Y || Y || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Huawei-Ascend-Y530|Huawei Ascend Y530]]<br />
| style="white-space: nowrap;" | huawei-y530<br />
| Y || P || Y || Y || Y || Y || P || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[LeEco_Le_2|LeEco Le 2]]<br />
|style="white-space: nowrap;" | leeco-s2<br />
| Y || Y || || || || || || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[Lenovo K6 Power (lenovo-karate)|Lenovo K6 Power]]<br />
|style="white-space: nowrap;" | lenovo-karate<br />
| Y || Y || Y || Y || Y || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[LG_G_Watch_(lg-dory)|LG G Watch]]<br />
| style="white-space: nowrap;" | lg-dory<br />
| Y || Y || Y || Y || - || Y || || || || || Y || || || - || - || - || - || <br />
|-<br />
| style="white-space: nowrap;" | [[LG G Watch R (lg-lenok)|LG G Watch R]]<br />
| style="white-space: nowrap;" | lg-lenok<br />
| Y || Y || Y || Y || || Y || || || || || || || || - || - || - || - || <br />
|-<br />
| style="white-space: nowrap;" | [[LG G3 Europe (lg-d855)|LG G3 Europe]]<br />
| style="white-space: nowrap;" | lg-d855<br />
| Y || P || Y || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[LG G4 International (lg-h815)|LG G4 International]]<br />
| style="white-space: nowrap;" | lg-h815<br />
| Y || Y || Y || P || || || || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[LG L65 Dual SIM D285 (lg-d285)|LG L65 Dual SIM D285]]<br />
|style="white-space: nowrap;" | lg-d285<br />
| Y || || Y || Y || || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Moto G 2014 (motorola-titan)|Moto G 2014]]<br />
| style="white-space: nowrap;" | motorola-titan<br />
| Y || P || Y || P || P || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Moto G 2015 (motorola-osprey)|Moto G 2015]]<br />
| style="white-space: nowrap;" | motorola-osprey<br />
| Y || Y || Y || P || || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Mozilla Flame (t2m-flame)|Mozilla Flame]]🔼<br />
| style="white-space: nowrap;" | t2m-flame<br />
| Y || Y || Y || Y || P || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[nokia-rx51 (Nokia N900)|Nokia N900]]🔼<br />
| style="white-space: nowrap;" | nokia-rx51<br />
| Y || Y || Y || Y || Y || Y || || Y || P || || Y || Y || || || P || P || P || <br />
|-<br />
| style="white:space: nowrap;" | [[OnePlus One (oneplus-bacon)|OnePlus One]]<br />
| style="white-space: nowrap;" | oneplus-bacon<br />
| Y || Y || Y || P || || || || P || || || || || || || || || || <br />
|-<br />
| style="white:space: nowrap;" | [[OnePlus X (oneplus-onyx)|OnePlus X]]<br />
| style="white-space: nowrap;" | oneplus-onyx<br />
| Y || Y || Y || P || || || P || || || || || || || || || || || <br />
|-<br />
| style="white:space: nowrap;" | [[Ouya (ouya-ouya)|Ouya]]<br />
| style="white-space: nowrap;" | ouya-ouya<br />
| Y || Y || - || Y || || Y || || || || || || || || - || || - || - || - <br />
|-<br />
| style="white-space: nowrap;" | [[QEMU aarch64 (qemu-aarch64 )|QEMU aarch64]]<br />
| style="white-space: nowrap;" | qemu-aarch64<br />
| - || - || - || Y || - || Y || P || Y || || || - || || - || - || - || - || - || - <br />
|-<br />
| style="white-space: nowrap;" | [[QEMU amd64 (qemu-amd64)|QEMU AMD64]]<br />
| style="white-space: nowrap;" | qemu-amd64<br />
| - || - || - || Y || - || Y || P || Y || || || - || || - || - || - || - || - || - <br />
|-<br />
| style="white-space: nowrap;" | [[QEMU ARM (qemu-vexpress)|QEMU ARM]]<br />
| style="white-space: nowrap;" | qemu-vexpress<br />
| - || - || - || Y || - || Y || P || Y || || || - || || - || - || - || - || - || - <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy Mini 2 (samsung-s6500d)|Samsung Galaxy Mini 2]]<br />
| style="white-space: nowrap;" | samsung-s6500d<br />
| Y || Y || P || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Galaxy Note II (samsung-n7100)|Samsung Galaxy Note II]]<br />
| style="white-space: nowrap;" | samsung-n7100<br />
| Y || Y || Y || Y || || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy S Advance (samsung-i9070)|Samsung Galaxy S Advance]]<br />
| style="white-space: nowrap;" | samsung-i9070<br />
| Y || Y || Y || Y || Y || Y || Y || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy SII (samsung-i9100)|Samsung Galaxy SII]]<br />
| style="white-space: nowrap;" | samsung-i9100, -d710<br />
| Y || || Y || Y || Y || Y || P || || || || Y || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung-i747m|Samsung Galaxy SIII (i747m)]]<br />
| style="white-space: nowrap;" | samsung-i747m, -i747<br />
| Y || Y || Y || Y || Y || Y || P || || || || || P || P || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy SIII LTE (samsung-i9305)|Samsung Galaxy SIII (LTE)]]<br />
| style="white-space: nowrap;" | samsung-i9305, -i9300<br />
| Y || || Y || Y || Y || Y || Y || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung-i9505-(Samsung-Galaxy-S4-int)|Samsung Galaxy S4 (International)]]<br />
| style="white-space: nowrap;" | samsung-i9505<br />
| Y || || Y || Y || Y || || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy SL (samsung-i9003)|Samsung Galaxy SL]]<br />
| style="white-space: nowrap;" | samsung-i9003<br />
| Y || P || Y || Y || || Y || P || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy Tab 2 10.1" (3G and Wifi) (samsung-espresso10)|Samsung Galaxy Tab 2 10.1"]]<br />
| style="white-space: nowrap;" | samsung-espresso10<br />
| Y || P || Y || Y || P || || Y || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Sony Xperia Z (sony-yuga)|Sony Xperia Z]]<br />
| style="white-space: nowrap;" | sony-yuga<br />
| Y || Y || Y || Y || || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Sony Xperia Z1 (sony-honami)|Sony Xperia Z1]]<br />
| style="white-space: nowrap;" | sony-honami<br />
| Y || Y || Y || Y || Y || Y || || || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Sony Xperia Z1 Compact (sony-amami)|Sony Xperia Z1 Compact]]<br />
| style="white-space: nowrap;" | sony-amami<br />
| Y || Y || Y || Y || Y || Y || || P || || || || || || || || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Sony Xperia Z2 Tablet (sony-castor-windy)|Sony Xperia Z2 Tablet]]<br />
| style="white-space: nowrap;" | sony-castor-windy<br />
| Y || Y || Y || Y || Y || Y || P || Y || || Y || || || || || || - || - || <br />
|-<br />
|style="white-space: nowrap;" | [[Sony Xperia Z3C (sony-aries)|Sony Xperia Z3 Compact]]<br />
|style="white-space: nowrap;" | sony-aries<br />
| || Y || Y || Y || || || || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[Teclast X80 Pro (teclast-x80pro) |Teclast X80 Pro]]<br />
|style="white-space: nowrap;" | teclast-x80pro<br />
| - || Y || Y || Y || Y || Y || Y || Y || Y || Y || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[Wiko_Lenny_3_(wiko-lenny3)|Wiko Lenny 3]]<br />
|style="white-space: nowrap;" | wiko-lenny3<br />
| Y || P || Y || Y || || Y || || || || || || || || || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[Xiaomi_RedMi3_(xiaomi-ido)|Xiaomi RedMi 3]]<br />
|style="white-space: nowrap;" | xiaomi-ido<br />
| Y || Y || P || Y || || || Y || || Y || || || || || || || || || <br />
|}<br />
<!--<br />
NOTE: Please keep the table above alphabetically sorted.<br />
--><br />
<br />
=== Status Legend ===<br />
<br />
{| class="wikitable feature-colors"<br />
! Code<br />
! Meaning<br />
|-<br />
| Y<br />
| Yes, fully implemented<br />
|-<br />
| P<br />
| Partially implemented<br />
|-<br />
| -<br />
| Not applicable -- device does not have feature<br />
|-<br />
| style="text-align: center" | 🔼<br />
| non-Android based device<br />
|}<br />
<br />
== Not booting ==<br />
These devices are not integrated into the postmarketOS source tree yet. That is either because the devices do not boot at all, or because it does boot, but there has not been done a successful pull-request to integrate the code. In the latter case, if you have the device and can verify that it can be booted, please [https://help.github.com/articles/about-pull-requests/ make a pull-request].<br />
<br />
{| class="wikitable sortable"<br />
! Device<br />
! Codename<br />
! Status<br />
|-<br />
| [[Apple-iPod-Touch-1G|Apple iPod Touch 1G]]🔼<br />
| apple-ipt1g<br />
|<br />
|-<br />
| [[Archos_80_G9_(archos-a80)|Archos 80 G9]]<br />
| archos-a80<br />
| Still figuring out the flashing stuff<br />
|-<br />
| [[Asus-tf101-(ASUS-Transformer-TF101)|ASUS Eee Pad Transformer]]<br />
| asus-tf101<br />
| Kernel does not compile<br />
|-<br />
| [[ASUS_Transformer_Pad_(asus-tf300t)|ASUS Transformer Pad]]<br />
| asus-tf300t<br />
| Framebuffer doesn't work<br />
|-<br />
| [[Asus-tf700t-(ASUS-Transformer-TF700t)|ASUS Transformer Infinity]]<br />
| asus-tf700t<br />
| Kernel compiles, not tested<br />
|-<br />
| [[Asus_Zenwatch_2_(asus-wi501q)|ASUS Zenwatch 2]]<br />
| asus-wi501q<br />
| Boot partition too small<br />
|-<br />
| [[BlackBerry-Bold-Touch-9900-(Dakota)|BlackBerry Bold Touch 9900]]🔼<br />
| blackberry-dakota<br />
|<br />
|-<br />
| [[Aquaris-U|bq Aquaris U]]<br />
| chaozu<br />
| kernel compiles, more is not yet tested<br />
|-<br />
| [[Coolpad-Sky-3-E502-(Modena-2)|Coolpad Modena 2]]<br />
| coolpad-modena2<br />
|<br />
|-<br />
| [[Hp-tenderloin-(HP-Touchpad)|HP Touchpad]]🔼<br />
| hp-tenderloin<br />
| Need novacom packaged for Alpine<br />
|-<br />
| [[Htc-vision-(HTC-Desire-Z)|HTC Desire Z]]<br />
| htc-vision<br />
| Kernel compiles, not tested<br />
|-<br />
| [[Htc-monarudo-(HTC-Droid-DNA)|HTC Droid DNA]]<br />
| htc-monarudo<br />
|<br />
|-<br />
| [[Huawei_Honor_5X_(huawei-kiwi)|Huawei Honor 5X]]<br />
| huawei-kiwi<br />
| Kernel compiles, graphic output does not work<br />
|-<br />
| [[Google_Nexus_5X(lg-bullhead)|Google Nexus 5X]]<br />
| lg-bullhead<br />
| Kernel compiles and flashes succesfully, but device is stuck in a boot loop<br />
|-<br />
| [[Jolla_Phone_(jolla-sbj)|Jolla Phone]]🔼<br />
| jolla-sbj<br />
| Kernel compiles, can't get fastboot to work<br />
|-<br />
| [[Landrover-a9|Land Rover A9]]<br />
| landrover-a9<br />
|<br />
|-<br />
| [[LG_Joy_(lg-h220)|LG Joy]]<br />
| lg-h220<br />
| <br />
|-<br />
| [[Moto X 2014|Moto X 2014]]<br />
| motorola-x-2014<br />
|<br />
|-<br />
| [[NEC Terrain]]<br />
| nec-ne-201a1a<br />
|<br />
|-<br />
| [[Nokia N9]]🔼<br />
|<br />
| Filip is working on that one<br />
|-<br />
| [[Nokia N950]]🔼<br />
|<br />
| kernel is booting<br />
|-<br />
| [[Qemu Nokia N900|Qemu N900]]<br />
| qemu-rx51<br />
|<br />
|-<br />
| [[Samsung_Exhibit_II_4G_(samsung-t679)|Samsung Exhibit II 4G]]<br />
| samsung-t679<br />
| Kernel compiles; flashing and booting are to be tested soon. <br />
|-<br />
| [[Samsung Galaxy Ace II X (samsung-kylessopen)|Samsung Galaxy Ace II X]]<br />
| samsung-kylessopen<br />
| Kernel compiles, flashing works. Does not boot.<br />
|-<br />
| [[Samsung_Galaxy_S5_(samsung-klte)|Samsung Galaxy S5]]<br />
| samsung-klte<br />
| pmOS works with usb network, framebuffer doesn't work<br />
|-<br />
| [[Samsung-g800f-(Samsung-Galaxy-S5-mini)|Samsung Galaxy S5 mini]]<br />
| samsung-g800f<br />
|<br />
|-<br />
| [[Samsung-S7562|Samsung Galaxy S Duos]]<br />
| samsung-s7562<br />
|<br />
|-<br />
| [[Samsung_Galaxy_Star_(samsung-mint)|Samsung Galaxy Star]]<br />
| samsung-mint<br />
| Prebuilt kernel reboots to recovery, pmOS kernel stucks at bootloader logo<br />
|-<br />
| [[Semc-anzu-(Xperia-Arc)|Sony Ericsson Xperia Arc]]<br />
| semc-anzu<br />
|<br />
|-<br />
| [[Semc-anzu-(Xperia-Arc)|Sony Ericsson Xperia Arc]]<br />
| semc-anzu<br />
|<br />
|-<br />
| [[Xperia-E-Dual|Sony Xperia E Dual]]<br />
| sony-nanhu<br />
|<br />
|-<br />
| [[Xperia-J-(sony-jlo)|Sony Xperia J]]<br />
| sony-jlo<br />
|<br />
|-<br />
| [[Xperia-Z2|Sony Xperia Z2]]<br />
| sony-sirius<br />
|<br />
<br />
|}<br />
<!--<br />
NOTE: Please keep the table above alphabetically sorted.<br />
--><br />
<br />
==Other supported hardware==<br />
There are a variety of devices which pmOS users will likely plug into their phones. If the device is free software compliant (drivers and firmware), we should ensure it works with the OS. This is particularly relevant if the hardware offers an alternative to a non-free piece of hardware which is part of a supported device, such as external wifi adapters and gps units. These devices are listed below.<br />
<br />
===External wifi adapters===<br />
<br />
Atheros [[AR9271]] chipset<br />
<br />
===External GPS units===<br />
<br />
[[Category:Hardware]]</div>Opendatahttps://wiki.postmarketos.org/index.php?title=Devices&diff=1924Devices2017-12-26T17:55:57Z<p>Opendata: /* Feature matrix */</p>
<hr />
<div>__NOTOC__<br />
Please [[Help:Device Page|add devices you're porting here]], and write your porting progress in the wiki page.<br />
<br />
== Feature matrix ==<br />
These devices are included in the postmarketOS source tree, and it is at least possible to boot them. To confirm that, either the screen or networking/serial output must be working. If your device fulfills these requirements and is not yet on the list, please make a [https://help.github.com/articles/about-pull-requests/ pull-request] and edit the list after it has been accepted.<br />
<br />
{| class="wikitable sortable feature-colors"<br />
! rowspan="2" | Device<br />
! rowspan="2" | Codename<br />
! colspan="18" | Status<br />
|-<br />
! 3D !! Accelerometers !! Audio !! Battery !! Bluetooth !! Camera !! FDE !! Flashing !! GPS !! Mainline !! Mobile data !! Screen !! SMS !! Touch !! Usb net !! Voice !! Wifi !! XWayland<br />
|-<br />
|style="white-space: nowrap;" | [[Amazon Kindle Fire HDX|Amazon Kindle Fire HDX 7"]]<br />
|style="white-space: nowrap;" | amazon-thor<br />
| || || || || || || P || Y || || || || Y || - || Y || Y || - || P || <br />
|-<br />
| style="white-space: nowrap;" | [[Fairphone 2 (fairphone-fp2)|Fairphone 2]]<br />
| style="white-space: nowrap;" | fairphone-fp2<br />
| || || || || || || || Y || || P || || Y || || Y || Y || || Y || Y<br />
|-<br />
| style="white-space: nowrap;" | [[Google Galaxy Nexus GSM (samsung-maguro)|Google Galaxy Nexus (GSM)]]<br />
| style="white-space: nowrap;" | samsung-maguro<br />
| || || || || || || Y || Y || || || || Y || || Y || Y || || Y || Y<br />
|-<br />
| style="white-space: nowrap;" | [[Google Glass (Explorer Edition)]]<br />
| style="white-space: nowrap;" | google-glass<br />
| || || Y || Y || Y || Y || Y || Y || || || || Y || || P || Y || || Y || Y<br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 4 (lg-mako)|Google Nexus 4]]<br />
| style="white-space: nowrap;" | lg-mako<br />
| || || || || || || Y || Y || || || || Y || || Y || Y || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 5 (lg-hammerhead)|Google Nexus 5 (GSM)]]<br />
| style="white-space: nowrap;" | lg-hammerhead<br />
| || || || || || || || Y || || P || || P || || Y || Y || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 6P]]<br />
| style="white-space: nowrap;" | huawei-angler<br />
| || || || || || || || P || || || || Y || || Y || Y || || Y || Y<br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 7 2012 (asus-grouper)|Google Nexus 7 (2012)]]<br />
| style="white-space: nowrap;" | asus-grouper<br />
| || || || || || || || Y || || || || Y || || Y || Y || || P || <br />
|-<br />
| style="white-space: nowrap;" | [[Google Nexus 7 2013 (asus-flo)|Google Nexus 7 (2013)]]<br />
| style="white-space: nowrap;" | asus-flo<br />
| Y || || || || || || P || Y || || P || - || Y || - || Y || Y || || Y || Y<br />
|-<br />
| style="white-space: nowrap;" | [[HTC Desire (htc-bravo)|HTC Desire]]<br />
| style="white-space: nowrap;" | htc-bravo<br />
| || || || || || || Y || P || || || || Y || || Y || Y || || || Y<br />
|-<br />
| style="white-space: nowrap;" | [[HTC Desire HD (htc-ace)|HTC Desire HD]]<br />
| style="white-space: nowrap;" | htc-ace<br />
| || || || || || || || || || || || Y || || Y || Y || || Y || Y<br />
|-<br />
| style="white-space: nowrap;" | [[Huawei-Ascend-Y530|Huawei Ascend Y530]]<br />
| style="white-space: nowrap;" | huawei-y530<br />
| || || || || || || P || P || || || || Y || || Y || Y || || Y || Y<br />
|-<br />
|style="white-space: nowrap;" | [[Lenovo K6 Power (lenovo-karate)|Lenovo K6 Power]]<br />
|style="white-space: nowrap;" | lenovo-karate<br />
| || || || || || || || Y || || || || Y || || Y || Y || || Y || Y<br />
|-<br />
| style="white-space: nowrap;" | [[LG_G_Watch_(lg-dory)|LG G Watch]]<br />
| style="white-space: nowrap;" | lg-dory<br />
| || Y || || || || - || || Y || - || || - || Y || - || Y || Y || || - || Y<br />
|-<br />
| style="white-space: nowrap;" | [[LG G Watch R (lg-lenok)|LG G Watch R]]<br />
| style="white-space: nowrap;" | lg-lenok<br />
| || || || || || - || || Y || - || || - || Y || - || Y || Y || || || Y<br />
|-<br />
| style="white-space: nowrap;" | [[LG G3 Europe (lg-d855)|LG G3 Europe]]<br />
| style="white-space: nowrap;" | lg-d855<br />
| || || || || || || || P || || || || Y || || Y || Y || || || <br />
|-<br />
|style="white-space: nowrap;" | [[LG L65 Dual SIM D285 (lg-d285)|LG L65 Dual SIM D285]]<br />
|style="white-space: nowrap;" | lg-d285<br />
| || || || || || || || || || || || Y || || Y || Y || || || Y<br />
|-<br />
| style="white-space: nowrap;" | [[Moto G 2014 (motorola-titan)|Moto G 2014]]<br />
| style="white-space: nowrap;" | motorola-titan<br />
| || || || || || || || P || || || || P || || Y || Y || || P || <br />
|-<br />
| style="white-space: nowrap;" | [[Moto G 2015 (motorola-osprey)|Moto G 2015]]<br />
| style="white-space: nowrap;" | motorola-osprey<br />
| || || || || || || || Y || || || || P || || Y || Y || || || Y<br />
|-<br />
| style="white-space: nowrap;" | [[Mozilla Flame (t2m-flame)|Mozilla Flame]]🔼<br />
| style="white-space: nowrap;" | t2m-flame<br />
| || || || || || || || Y || || || || Y || || Y || Y || || P || <br />
|-<br />
| style="white-space: nowrap;" | [[nokia-rx51 (Nokia N900)|Nokia N900]]🔼<br />
| style="white-space: nowrap;" | nokia-rx51<br />
| || Y || Y || P || || || || Y || P || Y || P || Y || P || Y || Y || || Y || Y<br />
|-<br />
| style="white:space: nowrap;" | [[OnePlus One (oneplus-bacon)|OnePlus One]]<br />
| style="white-space: nowrap;" | oneplus-bacon<br />
| || || || || || || || Y || || || || P || || Y || Y || || || <br />
|-<br />
| style="white:space: nowrap;" | [[OnePlus X (oneplus-onyx)|OnePlus X]]<br />
| style="white-space: nowrap;" | oneplus-onyx<br />
| || || || || || || P || Y || || || || P || || Y || Y || || || <br />
|-<br />
| style="white:space: nowrap;" | [[Ouya (ouya-ouya)|Ouya]]<br />
| style="white-space: nowrap;" | ouya-ouya<br />
| || || || || || - || || Y || || || - || Y || - || - || Y || - || || Y<br />
|-<br />
| style="white-space: nowrap;" | [[QEMU aarch64 (qemu-aarch64 )|QEMU aarch64]]<br />
| style="white-space: nowrap;" | qemu-aarch64<br />
| || - || || || - || - || P || - || - || Y || - || Y || - || - || - || - || - || Y<br />
|-<br />
| style="white-space: nowrap;" | [[QEMU amd64 (qemu-amd64)|QEMU AMD64]]<br />
| style="white-space: nowrap;" | qemu-amd64<br />
| || - || || || - || - || P || - || - || Y || - || Y || - || - || - || - || - || Y<br />
|-<br />
| style="white-space: nowrap;" | [[QEMU ARM (qemu-vexpress)|QEMU ARM]]<br />
| style="white-space: nowrap;" | qemu-vexpress<br />
| || - || || || - || - || P || - || - || Y || - || Y || - || - || - || - || - || Y<br />
|-<br />
| style="white-space: nowrap;" | [[Galaxy Note II (samsung-n7100)|Samsung Galaxy Note II]]<br />
| style="white-space: nowrap;" | samsung-n7100<br />
| || || || || || || || Y || || || || Y || || Y || Y || || || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy S Advance (samsung-i9070)|Samsung Galaxy S Advance]]<br />
| style="white-space: nowrap;" | samsung-i9070<br />
| || || || || || || Y || Y || || || || Y || || Y || Y || || Y || Y<br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy SII (samsung-i9100)|Samsung Galaxy SII]]<br />
| style="white-space: nowrap;" | samsung-i9100, -d710<br />
| || Y || || || || || P || || || || || Y || || Y || Y || || Y || Y<br />
|-<br />
| style="white-space: nowrap;" | [[Samsung-i747m|Samsung Galaxy SIII (i747m)]]<br />
| style="white-space: nowrap;" | samsung-i747m, -i747<br />
| || || P || || P || || P || Y || || || || Y || || Y || Y || || Y || Y<br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy SIII LTE (samsung-i9305)|Samsung Galaxy SIII (LTE)]]<br />
| style="white-space: nowrap;" | samsung-i9305, -i9300<br />
| || || || || || || Y || || || || || Y || || Y || Y || || Y || Y<br />
|-<br />
| style="white-space: nowrap;" | [[Samsung-i9505-(Samsung-Galaxy-S4-int)|Samsung Galaxy S4 (International)]]<br />
| style="white-space: nowrap;" | samsung-i9505<br />
| || || || || || || || || || || || Y || || Y || Y || || Y || <br />
|-<br />
| style="white-space: nowrap;" | [[Samsung Galaxy SL (samsung-i9003)|Samsung Galaxy SL]]<br />
| style="white-space: nowrap;" | samsung-i9003<br />
| || || || || || || P || P || || || || Y || || Y || Y || || || Y<br />
|-<br />
| style="white-space: nowrap;" | [[Sony Xperia Z (sony-yuga)|Sony Xperia Z]]<br />
| style="white-space: nowrap;" | sony-yuga<br />
| || || || || || || || Y || || || || Y || || Y || Y || || || Y<br />
|-<br />
| style="white-space: nowrap;" | [[Sony Xperia Z1 (sony-honami)|Sony Xperia Z1]]<br />
| style="white-space: nowrap;" | sony-honami<br />
| || || || || || || || Y || || || || Y || || Y || Y || || Y || Y<br />
|-<br />
| style="white-space: nowrap;" | [[Sony Xperia Z1 Compact (sony-amami)|Sony Xperia Z1 Compact]]<br />
| style="white-space: nowrap;" | sony-amami<br />
| || || || || || || || Y || || P || || Y || || Y || Y || || Y || Y<br />
|-<br />
| style="white-space: nowrap;" | [[Sony Xperia Z2 Tablet (sony-castor-windy)|Sony Xperia Z2 Tablet]]<br />
| style="white-space: nowrap;" | sony-castor-windy<br />
| Y || || || || || || Y || Y || || Y || - || Y || - || Y || Y || || Y || Y<br />
|-<br />
|style="white-space: nowrap;" | [[Sony Xperia Z3C (sony-aries)|Sony Xperia Z3 Compact]]<br />
|style="white-space: nowrap;" | sony-aries<br />
| || || || || || || || Y || || || || Y || || Y || || || || <br />
|-<br />
|style="white-space: nowrap;" | [[Wiko_Lenny_3_(wiko-lenny3)|Wiko Lenny 3]]<br />
|style="white-space: nowrap;" | wiko-lenny3<br />
| || || || || || || || P || || || || Y || || Y || Y || || || Y<br />
|}<br />
<!--<br />
NOTE: Please keep the table above alphabetically sorted.<br />
--><br />
<br />
=== Status Legend ===<br />
<br />
{| class="wikitable feature-colors"<br />
! Code<br />
! Meaning<br />
|-<br />
| Y<br />
| Yes, fully implemented<br />
|-<br />
| P<br />
| Partially implemented<br />
|-<br />
| -<br />
| Not applicable<br />
|-<br />
| style="text-align: center" | 🔼<br />
| non-Android based device<br />
|}<br />
<br />
== Not booting ==<br />
These devices are not integrated into the postmarketOS source tree yet. That is either because the devices do not boot at all, or because it does boot, but there has not been done a successful pull-request to integrate the code. In the latter case, if you have the device and can verify that it can be booted, please [https://help.github.com/articles/about-pull-requests/ make a pull-request].<br />
<br />
{| class="wikitable sortable"<br />
! Device<br />
! Codename<br />
! Status<br />
|-<br />
| [[Apple-iPod-Touch-1G|Apple iPod Touch 1G]]🔼<br />
| apple-ipt1g<br />
|<br />
|-<br />
| [[Archos_80_G9_(archos-a80)|Archos 80 G9]]<br />
| archos-a80<br />
| Still figuring out the flashing stuff<br />
|-<br />
| [[Asus-tf101-(ASUS-Transformer-TF101)|ASUS Eee Pad Transformer]]<br />
| asus-tf101<br />
| Kernel does not compile<br />
|-<br />
| [[ASUS_Transformer_Pad_(asus-tf300t)|ASUS Transformer Pad]]<br />
| asus-tf300t<br />
| Framebuffer doesn't work<br />
|-<br />
| [[Asus-tf700t-(ASUS-Transformer-TF700t)|ASUS Transformer Infinity]]<br />
| asus-tf700t<br />
| Kernel compiles, not tested<br />
|-<br />
| [[Asus_Zenwatch_2_(asus-wi501q)|ASUS Zenwatch 2]]<br />
| asus-wi501q<br />
| Boot partition too small<br />
|-<br />
| [[BlackBerry-Bold-Touch-9900-(Dakota)|BlackBerry Bold Touch 9900]]🔼<br />
| blackberry-dakota<br />
|<br />
|-<br />
| [[Aquaris-U|bq Aquaris U]]<br />
| chaozu<br />
| kernel compiles, more is not yet tested<br />
|-<br />
| [[Coolpad-Sky-3-E502-(Modena-2)|Coolpad Modena 2]]<br />
| coolpad-modena2<br />
|<br />
|-<br />
| [[Hp-tenderloin-(HP-Touchpad)|HP Touchpad]]🔼<br />
| hp-tenderloin<br />
| Need novacom packaged for Alpine<br />
|-<br />
| [[Htc-vision-(HTC-Desire-Z)|HTC Desire Z]]<br />
| htc-vision<br />
| Kernel compiles, not tested<br />
|-<br />
| [[Htc-monarudo-(HTC-Droid-DNA)|HTC Droid DNA]]<br />
| htc-monarudo<br />
|<br />
|-<br />
| [[Huawei_Honor_5X_(huawei-kiwi)|Huawei Honor 5X]]<br />
| huawei-kiwi<br />
| Kernel compiles, graphic output does not work<br />
|-<br />
| [[Google_Nexus_5X(lg-bullhead)|Google Nexus 5X]]<br />
| lg-bullhead<br />
| Kernel compiles and flashes succesfully, but device is stuck in a boot loop<br />
|-<br />
| [[Jolla_Phone_(jolla-sbj)|Jolla Phone]]🔼<br />
| jolla-sbj<br />
| Kernel compiles, can't get fastboot to work<br />
|-<br />
| [[Landrover-a9|Land Rover A9]]<br />
| landrover-a9<br />
|<br />
|-<br />
| [[LG_Joy_(lg-h220)|LG Joy]]<br />
| lg-h220<br />
| <br />
|-<br />
| [[Moto X 2014|Moto X 2014]]<br />
| motorola-x-2014<br />
|<br />
|-<br />
| [[NEC Terrain]]<br />
| nec-ne-201a1a<br />
|<br />
|-<br />
| [[Nokia N9]]🔼<br />
|<br />
| Filip is working on that one<br />
|-<br />
| [[Nokia N950]]🔼<br />
|<br />
| kernel is booting<br />
|-<br />
| [[Qemu Nokia N900|Qemu N900]]<br />
| qemu-rx51<br />
|<br />
|-<br />
| [[Samsung Galaxy Mini 2 (samsung-s6500d)|Samsung Galaxy Mini 2]]<br />
| samsung-s6500d<br />
| No touch, no input, reboots after a while<br />
|-<br />
| [[Samsung-g800f-(Samsung-Galaxy-S5-mini)|Samsung Galaxy S5 mini]]<br />
| samsung-g800f<br />
|<br />
|-<br />
| [[Samsung-S7562|Samsung Galaxy S Duos]]<br />
| samsung-s7562<br />
|<br />
|-<br />
| [[Samsung_Galaxy_Star_(samsung-mint)|Samsung Galaxy Star]]<br />
| samsung-mint<br />
| Prebuilt kernel reboots to recovery, pmOS kernel stucks at bootloader logo<br />
|-<br />
| [[Samsung Galaxy Tab 2 10.1" (3G and Wifi) (samsung-espresso10)|Samsung Galaxy Tab 2 10.1"]]<br />
| samsung-espresso10<br />
| Successfully boots into a usable weston, but USB and Network does not work (no show in dmesg, lsusb or ifconfig.)<br />
|-<br />
| [[Semc-anzu-(Xperia-Arc)|Sony Ericsson Xperia Arc]]<br />
| semc-anzu<br />
|<br />
|-<br />
| [[Xperia-Z2|Sony Xperia Z2]]<br />
| sony-sirius<br />
|<br />
|-<br />
| [[Xperia-E-Dual|Sony Xperia E Dual]]<br />
| sony-nanhu<br />
|<br />
|}<br />
<!--<br />
NOTE: Please keep the table above alphabetically sorted.<br />
--><br />
<br />
==Other supported hardware==<br />
There are a variety of devices which pmOS users will likely plug into their phones. If the device is free software compliant (drivers and firmware), we should ensure it works with the OS. This is particularly relevant if the hardware offers an alternative to a non-free piece of hardware which is part of a supported device, such as external wifi adapters and gps units. These devices are listed below.<br />
<br />
===External wifi adapters===<br />
<br />
Atheros [[AR9271]] chipset<br />
<br />
===External GPS units===<br />
<br />
[[Category:Hardware]]</div>Opendatahttps://wiki.postmarketos.org/index.php?title=Sony_Xperia_Z2_Tablet_(sony-castor-windy)&diff=1879Sony Xperia Z2 Tablet (sony-castor-windy)2017-12-22T21:10:58Z<p>Opendata: </p>
<hr />
<div>{{Infobox device<br />
| manufacturer = Sony<br />
| name = Xperia Z2 Tablet<br />
| codename = sony-castor-windy<br />
| image = File:Sony Xperia Z2 Tablet.png<br />
| imagecaption = Sony Xperia Z2 Tablet<br />
| releaseyear = 2014<br />
| originalsoftware = Android 4.4.2 on Linux 3.4<br />
| chipset = Qualcomm APQ8074AB Snapdragon 801<br />
| cpu = Quad-core 2.3 GHz Krait 400<br />
| gpu = Adreno 330<br />
| storage = 16/32 GB<br />
| display = 1200x1920 TFT<br />
| memory = 3 GB<br />
}}<br />
<br />
== Contributors ==<br />
<br />
* bjorn andersson (ported device to 4.3)<br />
* robclark (freedreno support)<br />
* opendata26<br />
<br />
== What works ==<br />
<br />
* Booting the system<br />
* Kernel log to the display<br />
* Framebuffer graphics<br />
* Unlocking the root partition<br />
* Display Backlight control<br />
* Wayland on framebuffer<br />
* Module loading<br />
* Wifi (see Additional Info below)<br />
* Notification led<br />
* Freedreno (see Additional Info below)<br />
<br />
== What does not work ==<br />
<br />
* Audio<br />
* Both cameras<br />
<br />
== Installation ==<br />
<br />
# Init pmbootstrap<br />
<br />
<source lang="bash">$ ./pmbootstrap.py init</source><br />
# Start the build process and install flash to the device<br />
<br />
<source lang="bash"># Replace /dev/sdX with the device for your sdcard<br />
$ ./pmbootstrap.py install<br />
$ ./pmbootstrap.py flasher flash_system<br />
$ ./pmbootstrap.py flasher flash_kernel</source><br />
<br />
== Links ==<br />
<br />
* [https://github.com/postmarketOS/pmbootstrap/tree/master/aports/device/device-sony-castor-windy Device package]<br />
* [https://github.com/andersson/kernel Kernel source]<br />
<br />
== Wifi ==<br />
<br />
The <code>linux-firmware</code> (included by default) package is required to provide the brcmfmac firmware necessary for initializing the wifi device.<br />
<br />
Once the device has been successfully initialized, enable it:<br />
<br />
<pre>$ sudo ip link set wlan0 up</pre><br />
Configure wpa_supplicant (only necessary on encrypted networks):<br />
<br />
<pre>$ sudo su -<br />
# wpa_passphrase $YOUR_SSID &gt; /etc/wpa_supplicant/wlan0.conf<br />
&lt;enter passphrase here and press Enter&gt;<br />
# exit</pre><br />
Connect to network using wpa_supplicant:<br />
<br />
<pre>$ sudo wpa_supplicant -i wlan0 -c /etc/wpa_supplicant/wlan0.conf </pre><br />
If your network uses DHCP, start the DHCP client:<br />
<br />
<pre>$ sudo udhcpc -i wlan0</pre><br />
<br />
== Freedreno ==<br />
<br />
Freedreno is only supported with X and kwin atm as weston segfaults<br /><br />
Here are some games being played https://imgur.com/a/ji6jl#jhR61Ww<br />
<br />
<source lang="bash"># Install mesa and X allong with the touchscreen driver<br />
$ sudo apk add mesa mesa-dri-freedreno xorg-server xf86-input-libinput<br />
<br />
# Start X<br />
$ sudo X &</source><br />
<br />
== Setting the date ==<br />
<br />
Since the rtc driver is read only you need to use ntp to set the date<br />
<br />
<source lang="bash"># Install openntpd<br />
$ sudo apk add openntpd<br />
<br />
# Write the current system time to the hardware clock<br />
$ sudo ntp -s</source><br />
<br />
== Helpful Links for Porting ==<br />
<br />
* [https://github.com/andersson/kernel Kernel]<br />
* [http://elixir.free-electrons.com/linux/v4.8.16/source/Documentation/devicetree/bindings/display/msm/mdp5.txt New MDP5 Bindings]</div>Opendatahttps://wiki.postmarketos.org/index.php?title=Sony_Xperia_Z2_Tablet_(sony-castor-windy)&diff=1878Sony Xperia Z2 Tablet (sony-castor-windy)2017-12-22T21:10:01Z<p>Opendata: /* Freedreno */</p>
<hr />
<div>{{Infobox device<br />
| manufacturer = Sony<br />
| name = Xperia Z2 Tablet<br />
| codename = sony-castor-windy<br />
| image = File:Sony Xperia Z2 Tablet.png<br />
| imagecaption = Sony Xperia Z2 Tablet<br />
| releaseyear = 2014<br />
| originalsoftware = Android 4.4.2 on Linux 3.10<br />
| chipset = Qualcomm APQ8074AB Snapdragon 801<br />
| cpu = Quad-core 2.3 GHz Krait 400<br />
| gpu = Adreno 330<br />
| storage = 16/32 GB<br />
| display = 1200x1920 TFT<br />
| memory = 3 GB<br />
}}<br />
== Contributors ==<br />
<br />
* bjorn andersson (ported device to 4.3)<br />
* robclark (freedreno support)<br />
* opendata26<br />
<br />
== What works ==<br />
<br />
* Booting the system<br />
* Kernel log to the display<br />
* Framebuffer graphics<br />
* Unlocking the root partition<br />
* Display Backlight control<br />
* Wayland on framebuffer<br />
* Module loading<br />
* Wifi (see Additional Info below)<br />
* Notification led<br />
* Freedreno (see Additional Info below)<br />
<br />
== What does not work ==<br />
<br />
* Audio<br />
* Both cameras<br />
<br />
== Installation ==<br />
<br />
# Init pmbootstrap<br />
<br />
<source lang="bash">$ ./pmbootstrap.py init</source><br />
# Start the build process and install flash to the device<br />
<br />
<source lang="bash"># Replace /dev/sdX with the device for your sdcard<br />
$ ./pmbootstrap.py install<br />
$ ./pmbootstrap.py flasher flash_system<br />
$ ./pmbootstrap.py flasher flash_kernel</source><br />
<br />
== Links ==<br />
<br />
* [https://github.com/postmarketOS/pmbootstrap/tree/master/aports/device/device-sony-castor-windy Device package]<br />
* [https://github.com/andersson/kernel Kernel source]<br />
<br />
== Wifi ==<br />
<br />
The <code>linux-firmware</code> (included by default) package is required to provide the brcmfmac firmware necessary for initializing the wifi device.<br />
<br />
Once the device has been successfully initialized, enable it:<br />
<br />
<pre>$ sudo ip link set wlan0 up</pre><br />
Configure wpa_supplicant (only necessary on encrypted networks):<br />
<br />
<pre>$ sudo su -<br />
# wpa_passphrase $YOUR_SSID &gt; /etc/wpa_supplicant/wlan0.conf<br />
&lt;enter passphrase here and press Enter&gt;<br />
# exit</pre><br />
Connect to network using wpa_supplicant:<br />
<br />
<pre>$ sudo wpa_supplicant -i wlan0 -c /etc/wpa_supplicant/wlan0.conf </pre><br />
If your network uses DHCP, start the DHCP client:<br />
<br />
<pre>$ sudo udhcpc -i wlan0</pre><br />
<br />
== Freedreno ==<br />
<br />
Freedreno is only supported with X and kwin atm as weston segfaults<br /><br />
Here are some games being played https://imgur.com/a/ji6jl#jhR61Ww<br />
<br />
<source lang="bash"># Install mesa and X allong with the touchscreen driver<br />
$ sudo apk add mesa mesa-dri-freedreno xorg-server xf86-input-libinput<br />
<br />
# Start X<br />
$ sudo X &</source><br />
<br />
== Setting the date ==<br />
<br />
Since the rtc driver is read only you need to use ntp to set the date<br />
<br />
<source lang="bash"># Install openntpd<br />
$ sudo apk add openntpd<br />
<br />
# Write the current system time to the hardware clock<br />
$ sudo ntp -s</source><br />
<br />
== Helpful Links for Porting ==<br />
<br />
* [https://github.com/andersson/kernel Kernel]<br />
* [http://elixir.free-electrons.com/linux/v4.8.16/source/Documentation/devicetree/bindings/display/msm/mdp5.txt New MDP5 Bindings]</div>Opendatahttps://wiki.postmarketos.org/index.php?title=The-big-list-of-who-has-what-device&diff=1815The-big-list-of-who-has-what-device2017-12-12T18:05:19Z<p>Opendata: </p>
<hr />
<div>=== MartijnBraam ===<br />
<br />
* [[Google Nexus 5 (lg-hammerhead)]]<br />
* [[Nokia N900 (nokia-rx51)]]<br />
* [[HTC Desire (htc-bravo)]] (2 times)<br />
* [[Google Galaxy Nexus GSM (samsung-maguro)]] has broken USB port<br />
* [[HP Touchpad (hp-tenderloin)]]<br />
* Huawei Ascend G510 (huawei-g510)<br />
* [[Apple iPod Touch 1G (apple-ipt1g)]]<br />
* [[Jolla Phone (jolla-sbj)|Jolla (jolla-jolla) jolla?]]<br />
* Onda v820wCH<br />
* Unbranded mediatek dual sim device (e1911_v77_zlh1_9p017_6628_v20 smallband MAUI.11AMD.W12.22.SP.V15.P2)<br />
<br />
=== PureTryOut ===<br />
<br />
* [[Sony Xperia Z1 Compact (sony-amami)]] (3 times)<br />
* [[Google Nexus 5X(lg-bullhead)]]<br />
* [[Jolla Phone (jolla-sbj)|Jolla (jolla-jolla) jolla?]]<br />
* Samsung Galaxy Apollo<br />
<br />
=== ata2001 ===<br />
<br />
* [[Sony Xperia Z1 Compact (sony-amami)]]<br />
* [[Moto G 2015 (motorola-osprey)|Motorola Moto G 3rd gen. (motorola-osprey)]]<br />
* Motorola Defy+ (motorola-jordan_plus)<br />
* HTC Desire 510 (htc-a11)<br />
<br />
=== drebrez ===<br />
* [[Samsung Galaxy S Advance (samsung-i9070)]]<br />
* [[Samsung Galaxy S5 (samsung-klte)]]<br />
* [[HTC Desire (htc-bravo)]]<br />
* [[Google Galaxy Nexus GSM (samsung-maguro)]]<br />
* [[Huawei Ascend Y530 (huawei-y530)]]<br />
* [[LG G Watch (lg-dory)]]<br />
* [[BlackBerry Bold Touch 9900 (blackberry-dakota)]]<br />
* [[NGM WeMove Action (ngn-wemove-action)]]<br />
* [[Wiko Lenny 3 (wiko-lenny3)]]<br />
* [[Nokia N900 (nokia-rx51)]]<br />
* [[LG Joy (lg-h220)]]<br />
<br />
=== antonok ===<br />
<br />
* [[Google Nexus 7 2012 (asus-grouper)]]<br />
<br />
=== pave1 Pavel Machek ===<br />
<br />
* Nokia N770, N800, N810, [[Nokia N900 (nokia-rx51)|N900]], [[Nokia N9|N9]], [[Nokia N950|N950]] (if someone wants N770, N800, N810 and will be able to put them to good use, we may talk)<br />
* OpenMoko gta01<br />
<br />
=== z3ntu ===<br />
<br />
* [[Fairphone 2 (fairphone-fp2)]]<br />
* Fairphone 1<br />
* ZTE Racer II<br />
<br />
=== halamix2 ===<br />
* [[Samsung Galaxy Mini 2 (samsung-s6500d)]]<br />
* broken LG L Fino (L70+n A.K.A. L70pn) - broken motherboard, probably eMMC<br />
<br />
=== Opendata26 ===<br />
* [[Sony Xperia Z2 Tablet (sony-castor-windy)]]<br />
* Sony Xperia Z2<br />
* Nvidia shield android tv<br />
* iPod touch 2g (8gb new bootrom)</div>Opendatahttps://wiki.postmarketos.org/index.php?title=The-big-list-of-who-has-what-device&diff=1814The-big-list-of-who-has-what-device2017-12-12T18:04:11Z<p>Opendata: </p>
<hr />
<div>=== MartijnBraam ===<br />
<br />
* [[Google Nexus 5 (lg-hammerhead)]]<br />
* [[Nokia N900 (nokia-rx51)]]<br />
* [[HTC Desire (htc-bravo)]] (2 times)<br />
* [[Google Galaxy Nexus GSM (samsung-maguro)]] has broken USB port<br />
* [[HP Touchpad (hp-tenderloin)]]<br />
* Huawei Ascend G510 (huawei-g510)<br />
* [[Apple iPod Touch 1G (apple-ipt1g)]]<br />
* [[Jolla Phone (jolla-sbj)|Jolla (jolla-jolla) jolla?]]<br />
* Onda v820wCH<br />
* Unbranded mediatek dual sim device (e1911_v77_zlh1_9p017_6628_v20 smallband MAUI.11AMD.W12.22.SP.V15.P2)<br />
<br />
=== PureTryOut ===<br />
<br />
* [[Sony Xperia Z1 Compact (sony-amami)]] (3 times)<br />
* [[Google Nexus 5X(lg-bullhead)]]<br />
* [[Jolla Phone (jolla-sbj)|Jolla (jolla-jolla) jolla?]]<br />
* Samsung Galaxy Apollo<br />
<br />
=== ata2001 ===<br />
<br />
* [[Sony Xperia Z1 Compact (sony-amami)]]<br />
* [[Moto G 2015 (motorola-osprey)|Motorola Moto G 3rd gen. (motorola-osprey)]]<br />
* Motorola Defy+ (motorola-jordan_plus)<br />
* HTC Desire 510 (htc-a11)<br />
<br />
=== drebrez ===<br />
* [[Samsung Galaxy S Advance (samsung-i9070)]]<br />
* [[Samsung Galaxy S5 (samsung-klte)]]<br />
* [[HTC Desire (htc-bravo)]]<br />
* [[Google Galaxy Nexus GSM (samsung-maguro)]]<br />
* [[Huawei Ascend Y530 (huawei-y530)]]<br />
* [[LG G Watch (lg-dory)]]<br />
* [[BlackBerry Bold Touch 9900 (blackberry-dakota)]]<br />
* [[NGM WeMove Action (ngn-wemove-action)]]<br />
* [[Wiko Lenny 3 (wiko-lenny3)]]<br />
* [[Nokia N900 (nokia-rx51)]]<br />
* [[LG Joy (lg-h220)]]<br />
<br />
=== antonok ===<br />
<br />
* [[Google Nexus 7 2012 (asus-grouper)]]<br />
<br />
=== pave1 Pavel Machek ===<br />
<br />
* Nokia N770, N800, N810, [[Nokia N900 (nokia-rx51)|N900]], [[Nokia N9|N9]], [[Nokia N950|N950]] (if someone wants N770, N800, N810 and will be able to put them to good use, we may talk)<br />
* OpenMoko gta01<br />
<br />
=== z3ntu ===<br />
<br />
* [[Fairphone 2 (fairphone-fp2)]]<br />
* Fairphone 1<br />
* ZTE Racer II<br />
<br />
=== halamix2 ===<br />
* [[Samsung Galaxy Mini 2 (samsung-s6500d)]]<br />
* broken LG L Fino (L70+n A.K.A. L70pn) - broken motherboard, probably eMMC<br />
<br />
=== halamix2 ===<br />
* [[Sony Xperia Z2 Tablet (sony-castor-windy)]]<br />
* Sony Xperia Z2<br />
* Nvidia shield android tv<br />
* iPod touch 2g (8gb new bootrom)</div>Opendatahttps://wiki.postmarketos.org/index.php?title=Qualcomm_mainline_porting&diff=1251Qualcomm mainline porting2017-10-28T15:44:48Z<p>Opendata: </p>
<hr />
<div>==WIP==<br />
<br />
== Prerequisites ==<br />
* A working device-tree based downstream kernel<br />
* You know the location of the uart port on your device ([https://www.youtube.com/watch?v=_aedd8SUBgY this video] shows how to find it)<br />
* A device that has one of the following snapdragon processors<br />
** S3<br />
** S4 Pro<br />
** 800<br />
** 801<br />
** 805<br />
** 410<br />
** 808<br />
** 810<br />
** 820<br />
<br />
== 801/800 ==</div>Opendatahttps://wiki.postmarketos.org/index.php?title=Qualcomm_mainline_porting&diff=1250Qualcomm mainline porting2017-10-28T15:41:22Z<p>Opendata: </p>
<hr />
<div>==WIP==<br />
<br />
== Prerequisites ==<br />
* A working device-tree based downstream kernel<br />
* You know the location of the uart port on your device ([https://www.youtube.com/watch?v=_aedd8SUBgY this video] shows how to find it)<br />
* A device that has one of the following snapdragon processors<br />
** S3<br />
** S4 Pro<br />
** 800<br />
** 801<br />
** 805<br />
** 410<br />
** 808<br />
** 810<br />
** 820</div>Opendatahttps://wiki.postmarketos.org/index.php?title=Qualcomm_mainline_porting&diff=1219Qualcomm mainline porting2017-10-26T11:43:23Z<p>Opendata: Created page with "==WIP== == Prerequisites == * A working device-tree based downstream kernel * You know the location of the uart port on your device ([https://www.youtube.com/watch?v=_aedd8SUB..."</p>
<hr />
<div>==WIP==<br />
== Prerequisites ==<br />
* A working device-tree based downstream kernel<br />
* You know the location of the uart port on your device ([https://www.youtube.com/watch?v=_aedd8SUBgY this video] shows how to find it)<br />
* A device that has one of the following snapdragon processors<br />
** S3<br />
** S4 Pro<br />
** 800<br />
** 801<br />
** 805<br />
** 410<br />
** 808<br />
** 810<br />
** 820</div>Opendatahttps://wiki.postmarketos.org/index.php?title=Devices&diff=430Devices2017-08-28T13:56:52Z<p>Opendata: /* Officially supported */</p>
<hr />
<div>Please add devices you're porting here, and write your porting progress in the wiki page.<br />
<br />
== Officially supported ==<br />
<br />
Devices will be officially supported in <code>pmbootstrap</code> when the encrypted root partition can be unlocked and graphical output works.<br />
<br />
{| class="wikitable sortable"<br />
! rowspan="2" | Device<br />
! rowspan="2" | Codename<br />
! colspan="15" | Status<br />
|-<br />
! 3D<br />
! Audio<br />
! Flashing<br />
! Mainline<br />
! Screen<br />
! Touch<br />
! Usbnet<br />
! Wifi<br />
! Xwayland<br />
! Bluetooth<br />
! GPS<br />
! Accelerometers<br />
! Camera<br />
! Mobile data<br />
! Voice<br />
|-<br />
| style="white-space: nowrap;" | [[Google Galaxy Nexus GSM (samsung-maguro)|Google Galaxy Nexus (GSM)]]<br />
| style="white-space: nowrap;" | samsung-maguro<br />
| <br />
| <br />
| Y<br />
| <br />
| Y<br />
| Y<br />
| Y<br />
| Y<br />
| Y<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| style="white-space: nowrap;" | [[Lg-mako-(Google-Nexus-4)|Google Nexus 4]]<br />
| style="white-space: nowrap;" | lg-mako<br />
| <br />
| <br />
| Y<br />
| <br />
| Y<br />
| Y<br />
| Y<br />
| <br />
| <br />
|<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| style="white-space: nowrap;" | [[Lg-hammerhead-(Google-Nexus-5)|Google Nexus 5 (GSM)]]<br />
| style="white-space: nowrap;" | lg-hammerhead<br />
| <br />
| <br />
| Y<br />
| P<br />
| P<br />
| Y<br />
| Y<br />
| <br />
| <br />
|<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| style="white-space: nowrap;" | [[Asus-grouper-(Google-Nexus-7-2012)|Google Nexus 7 (2012)]]<br />
| style="white-space: nowrap;" | asus-grouper<br />
| <br />
| <br />
| Y<br />
| <br />
| Y<br />
| Y<br />
| Y<br />
| P<br />
| <br />
|<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| style="white-space: nowrap;" | [[HTC-Bravo-(HTC-Desire)|HTC Desire]]<br />
| style="white-space: nowrap;" | htc-bravo<br />
| <br />
| <br />
| <br />
| <br />
| Y<br />
| Y<br />
| Y<br />
| <br />
| <br />
|<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| style="white-space: nowrap;" | [[HTC-Ace-(HTC-Desire-HD)|HTC Desire HD]]<br />
| style="white-space: nowrap;" | htc-ace<br />
| <br />
| <br />
| <br />
| <br />
| Y<br />
| Y<br />
| Y<br />
| Y<br />
| Y<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| style="white-space: nowrap;" | [[LG-G3-Global|LG G3 Global]]<br />
| style="white-space: nowrap;" | lg-d855<br />
| <br />
| <br />
| P<br />
| <br />
| Y<br />
| Y<br />
| Y<br />
| <br />
| <br />
|<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| style="white-space: nowrap;" | [[Motorola-titan-(Moto-G-2014)|Moto G 2014]]<br />
| style="white-space: nowrap;" | motorola-titan<br />
| <br />
| <br />
| P<br />
| <br />
| P<br />
| Y<br />
| Y<br />
| P<br />
| <br />
|<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| style="white-space: nowrap;" | [[Mozilla-Flame|Mozilla Flame]]<br />
| style="white-space: nowrap;" | mozilla-flame<br />
| <br />
| <br />
| Y<br />
| <br />
| Y<br />
| P<br />
| Y<br />
| P<br />
| <br />
|<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| style="white-space: nowrap;" | [[nokia-rx51 (Nokia N900)|Nokia N900]]<br />
| style="white-space: nowrap;" | nokia-rx51<br />
| <br />
| Y<br />
| <br />
| Y<br />
| Y<br />
| Y<br />
| Y<br />
| Y<br />
| Y<br />
|<br />
|<br />
| Y<br />
|<br />
|<br />
|<br />
|-<br />
| style="white-space: nowrap;" | [[Qemu-vexpress-(Qemu-with-vexpress-soc)|QEMU (arm)]]<br />
| style="white-space: nowrap;" | qemu-vexpress<br />
| <br />
| <br />
| <br />
| Y<br />
| Y<br />
| <br />
| <br />
| <br />
| Y<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| style="white-space: nowrap;" | [[Qemu-amd64-(QEMU-for-x86 64)|QEMU (x86_64)]]<br />
| style="white-space: nowrap;" | qemu-amd64<br />
| <br />
| <br />
| <br />
| Y<br />
| Y<br />
| <br />
| <br />
| <br />
| Y<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| style="white-space: nowrap;" | [[Samsung-N7100-(Galaxy-Note-II-GSM)|Samsung Galaxy Note 2]]<br />
| style="white-space: nowrap;" | samsung-n7100<br />
| <br />
| <br />
| Y<br />
| <br />
| Y<br />
| Y<br />
| Y<br />
| <br />
| <br />
|<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| style="white-space: nowrap;" | [[Samsung-i9070-(Samsung-Galaxy-S-Advance)|Samsung Galaxy S Advance]]<br />
| style="white-space: nowrap;" | samsung-i9070<br />
| <br />
| <br />
| Y<br />
| <br />
| Y<br />
| Y<br />
| Y<br />
| Y<br />
| Y<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| style="white-space: nowrap;" | [[Samsung-i9100-(Samsung-Galaxy-SII)|Samsung Galaxy SII]]<br />
| style="white-space: nowrap;" | samsung-i9100<br />
| <br />
| <br />
| <br />
| <br />
| Y<br />
| Y<br />
| Y<br />
| <br />
| Y<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| style="white-space: nowrap;" | [[Sony-amami-(Xperia-Z1-Compact)|Sony Xperia Z1 Compact]]<br />
| style="white-space: nowrap;" | sony-amami<br />
| <br />
| <br />
| Y<br />
| <br />
| Y<br />
| Y<br />
| Y<br />
| <br />
| Y<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| style="white-space: nowrap;" | [[Xperia-Z2-Tablet|Sony Xperia Z2 Tablet]]<br />
| style="white-space: nowrap;" | sony-castor-windy<br />
| Y<br />
| <br />
| Y<br />
| P<br />
| Y<br />
| Y<br />
| Y<br />
| Y<br />
| Y<br />
|<br />
|<br />
|<br />
|<br />
| -<br />
| -<br />
|}<br />
<br />
=== Status Legend ===<br />
<br />
{| class="wikitable"<br />
! Code<br />
! Meaning<br />
|-<br />
| Y<br />
| Yes, fully implemented<br />
|-<br />
| P<br />
| Partially implemented<br />
|-<br />
| -<br />
| Not applicable<br />
|}<br />
<br />
== Work in progress ==<br />
<br />
{| class="wikitable sortable"<br />
! Device<br />
! Codename<br />
! Status<br />
|-<br />
| [[Apple-iPod-Touch-1G|Apple iPod Touch 1G]]<br />
| apple-ipt1g<br />
|<br />
|-<br />
| [[Asus-tf101-(ASUS-Transformer-TF101)|ASUS Eee Pad Transformer]]<br />
| asus-tf101<br />
| Kernel does not compile<br />
|-<br />
| [[BlackBerry-Bold-Touch-9900-(Dakota)|BlackBerry Bold Touch 9900]]<br />
| blackberry-dakota<br />
|<br />
|-<br />
| [[Coolpad-Sky-3-E502-(Modena-2)|Coolpad Modena 2]]<br />
| coolpad-modena2<br />
|<br />
|-<br />
| [[Fairphone-2|Fairphone 2]]<br />
| fairphone-fp2<br />
|<br />
|-<br />
| [[Hp-tenderloin-(HP-Touchpad)|HP Touchpad]]<br />
| hp-tenderloin<br />
| Need novacom packaged for Alpine<br />
|-<br />
| [[Htc-vision-(HTC-Desire-Z)|HTC Desire Z]]<br />
| htc-vision<br />
| Kernel compiles, not tested<br />
|-<br />
| [[Htc-monarudo-(HTC-Droid-DNA)|HTC Droid DNA]]<br />
| htc-monarudo<br />
|<br />
|-<br />
| [[Huawei-Ascend-Y530|Huawei Ascend Y530]]<br />
| huawei-y530<br />
|<br />
|-<br />
| [[Jolla-sbj-(Jolla-phone)|Jolla Phone]]<br />
| jolla-sbj<br />
| Kernel compiles, can't get fastboot to work<br />
|-<br />
| [[Landrover-a9|Land Rover A9]]<br />
| landrover-a9<br />
|<br />
|-<br />
| [[Samsung-g800f-(Samsung-Galaxy-S5-mini)|Samsung Galaxy S5 mini]]<br />
| samsung-g800f<br />
|<br />
|-<br />
| [[Samsung-S7562|Samsung Galaxy S Duos]]<br />
| samsung-s7562<br />
|<br />
|-<br />
| [[Semc-anzu-(Xperia-Arc)|Sony Ericsson Xperia Arc]]<br />
| semc-anzu<br />
|<br />
|-<br />
| [[Xperia-Z2|Sony Xperia Z2]]<br />
| sony-sirius<br />
|<br />
|-<br />
| [[Xperia-E-Dual|Sony Xperia E Dual]]<br />
| sony-nanhu<br />
|<br />
|-<br />
| [[Xperia-Z3C|Sony Xperia Z3C]]<br />
| sony-aries<br />
|<br />
|-<br />
| [[Xperia-Z|Sony Xperia Z]]<br />
| sony-yuga<br />
|<br />
|}</div>Opendata