<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.pine64.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Emil</id>
	<title>PINE64 - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.pine64.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Emil"/>
	<link rel="alternate" type="text/html" href="https://wiki.pine64.org/wiki/Special:Contributions/Emil"/>
	<updated>2026-04-21T06:12:27Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>https://wiki.pine64.org/index.php?title=PinePhone_Pro_Development&amp;diff=12038</id>
		<title>PinePhone Pro Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.pine64.org/index.php?title=PinePhone_Pro_Development&amp;diff=12038"/>
		<updated>2021-12-13T01:25:42Z</updated>

		<summary type="html">&lt;p&gt;Emil: Replace the broken link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page documents the current status of software support for the [[PinePhone Pro]], and provides links to resources to help prospective contributors get started.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
=== Upstreaming Status ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable plainrowheaders&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Function&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;2&amp;quot; | Status&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Component&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Notes&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Bootloader (u-boot)&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#FF0; text-align:center;&amp;quot;| Working. Not upstreamed.&lt;br /&gt;
|&lt;br /&gt;
| https://github.com/dreemurrs-embedded/Pine64-Arch/tree/master/PKGBUILDS/pine64/uboot-pinephonepro uses https://git.sr.ht/~martijnbraam/u-boot.&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Modem&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#FF0; text-align:center;&amp;quot;|Working. Not upstreamed.&lt;br /&gt;
| &lt;br /&gt;
| Support in https://gitlab.com/mobian1/devices/eg25-manager and Megi's kernel.&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | Sound&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#F99; text-align:center;&amp;quot;|Unimplemented.&lt;br /&gt;
|&lt;br /&gt;
| See https://github.com/alsa-project/alsa-ucm-conf/issues/125.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Current Status ==&lt;br /&gt;
&lt;br /&gt;
The following sections give an overview over the current status of different parts of the phone. Some parts are waiting on a driver to be written or ported, others only need various adjustments.&lt;br /&gt;
&lt;br /&gt;
=== Working ===&lt;br /&gt;
&lt;br /&gt;
==== Kernel ====&lt;br /&gt;
&lt;br /&gt;
There's no canonical location for Pinephone Pro Linux kernel development, because Pinephone Pro DT is not mainline, yet. [https://xff.cz/git/linux/log/?h=orange-pi-5.16 megi's kernel tree] is the most complete one, as of November 2021.&lt;br /&gt;
&lt;br /&gt;
https://mainline.space/ tracks mainlining kernels for various phones.&lt;br /&gt;
&lt;br /&gt;
==== Firmware ====&lt;br /&gt;
&lt;br /&gt;
ATF? Likely working due to reuse of Pinebook Pro SoC?&lt;br /&gt;
&lt;br /&gt;
==== Display ====&lt;br /&gt;
&lt;br /&gt;
Working.&lt;br /&gt;
&lt;br /&gt;
==== Modem ====&lt;br /&gt;
&lt;br /&gt;
Working. Supported in:&lt;br /&gt;
* Megi's orange-pi branches: https://megous.com/git/linux.&lt;br /&gt;
* https://gitlab.com/mobian1/devices/eg25-manager&lt;br /&gt;
&lt;br /&gt;
=== Not working ===&lt;br /&gt;
&lt;br /&gt;
==== Sound ====&lt;br /&gt;
&lt;br /&gt;
See https://gitlab.com/pine64-org/pine64-alsa-ucm/-/issues/4.&lt;br /&gt;
&lt;br /&gt;
=== Unknown ===&lt;br /&gt;
&lt;br /&gt;
==== Front camera ====&lt;br /&gt;
&lt;br /&gt;
OV8858 camera. Unknown.&lt;br /&gt;
&lt;br /&gt;
Datasheet: https://cdn.datasheetspdf.com/pdf-down/O/V/8/OV8858-OmniVision.pdf&lt;br /&gt;
&lt;br /&gt;
==== Back camera ====&lt;br /&gt;
&lt;br /&gt;
Sony IMX258. Support unknown.&lt;br /&gt;
&lt;br /&gt;
==== Sensors ====&lt;br /&gt;
&lt;br /&gt;
?&lt;br /&gt;
&lt;br /&gt;
==== Bluetooth ====&lt;br /&gt;
&lt;br /&gt;
?&lt;br /&gt;
&lt;br /&gt;
== Levinboot Based Kernel Development Image ==&lt;br /&gt;
&lt;br /&gt;
This guide will help you get a comfortable environment for testing your kernel builds on Pinephone Pro. It assumes you either already know how to build or cross-build a Linux kernel for arm64, or if you have a way to get a pre-built kernel from somewhere. For a quick test that your setup works, you can use [https://xff.cz/kernels/ megi's pre-built kernels].&lt;br /&gt;
&lt;br /&gt;
Quick and easy way to get started with kernel development and testing is to use CrystalGamma's Levinboot patched with support for Pinephone Pro and 3-option boot selection using volume keys. [https://xnux.eu/log/#049 You will be able to switch between kernels quickly without swapping uSD cards, which is necessary for painless kernel development experience.]&lt;br /&gt;
&lt;br /&gt;
1) Create a following partitioning scheme on a uSD card using &amp;lt;code&amp;gt;sfdisk&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
label: gpt&lt;br /&gt;
first-lba: 64&lt;br /&gt;
table-length: 8&lt;br /&gt;
&lt;br /&gt;
start=64, size=8128, type=D7B1F817-AA75-2F4F-830D-84818A145370, name=&amp;quot;sd-lboot&amp;quot;&lt;br /&gt;
size=60M, type=E5AB07A0-8E5E-46F6-9CE8-41A518929B7C, name=&amp;quot;sd-lpayload1&amp;quot;&lt;br /&gt;
size=60M, type=5f04b556-c920-4b6d-bd77-804efe6fae01, name=&amp;quot;sd-lpayload2&amp;quot;&lt;br /&gt;
size=60M, type=c195cc59-d766-4b78-813f-a0e1519099d8, name=&amp;quot;sd-lpayload3&amp;quot;&lt;br /&gt;
size=14G name=&amp;quot;sd-rootfs1&amp;quot;&lt;br /&gt;
name=&amp;quot;sd-rootfs2&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2) Write Levinboot to &amp;lt;code&amp;gt;sd-lboot&amp;lt;/code&amp;gt; partition using &amp;lt;code&amp;gt;dd&amp;lt;/code&amp;gt;. You can get a pre-built and tested version [https://xff.cz/kernels/pinephone-pro/ here] There are two options &amp;lt;code&amp;gt;levinboot-sd.img&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;levinboot-emmc.img&amp;lt;/code&amp;gt; you can use either one of them for your &amp;lt;code&amp;gt;sd-lboot&amp;lt;/code&amp;gt; partition. They differ in where they load the payloads from (either from SD or eMMC) and not in where they can be flashed to. For uSD card only workflow, you'll want &amp;lt;code&amp;gt;levinboot-sd.img&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
3) Prepare payloads for Levinboot and copy them to appropriate partitions. Partition &amp;lt;code&amp;gt;sd-lpayload1&amp;lt;/code&amp;gt; is used by default, &amp;lt;code&amp;gt;sd-lpayload2&amp;lt;/code&amp;gt; when you hold a volume down key during powerup, and &amp;lt;code&amp;gt;sd-lpayload3&amp;lt;/code&amp;gt; when you hold the volume up key.&lt;br /&gt;
&lt;br /&gt;
Preparing a payload involves getting a TF-A &amp;lt;code&amp;gt;bl31.elf&amp;lt;/code&amp;gt; build, kernel &amp;lt;code&amp;gt;Image&amp;lt;/code&amp;gt; build, &amp;lt;code&amp;gt;DTB&amp;lt;/code&amp;gt; file for Pinephone Pro, and optionally an initramfs archive, modifying DTB to include kernel boot arguments, and compressing these using &amp;lt;code&amp;gt;lz4&amp;lt;/code&amp;gt; in specific order, as shown below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BOOTOPTS=(&lt;br /&gt;
        console=tty1&lt;br /&gt;
&lt;br /&gt;
        earlycon=uart8250,mmio32,0xff1a0000&lt;br /&gt;
        console=ttyS2,1500000n8&lt;br /&gt;
&lt;br /&gt;
        root=PARTLABEL=emmc-rootfs1&lt;br /&gt;
        rootfstype=f2fs&lt;br /&gt;
        rootflags=fastboot&lt;br /&gt;
        rootwait&lt;br /&gt;
        rw&lt;br /&gt;
&lt;br /&gt;
        loglevel=7&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
BOOTOPTS=&amp;quot;${BOOTOPTS[@]}&amp;quot;&lt;br /&gt;
ALGO=&amp;quot;lz4 -zc&amp;quot;&lt;br /&gt;
&lt;br /&gt;
cp -f rk3399-pinephone-pro.dtb board-cfg.dtb&lt;br /&gt;
fdtput -pt s board-cfg.dtb /chosen bootargs &amp;quot;$BOOTOPTS&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(&lt;br /&gt;
        $ALGO bl31.elf&lt;br /&gt;
        $ALGO board-cfg.dtb&lt;br /&gt;
        $ALGO Image&lt;br /&gt;
#       $ALGO initramfs.img&lt;br /&gt;
) &amp;gt; payload.img&lt;br /&gt;
&lt;br /&gt;
dd if=payload.img of=/dev/disk/by-partlabel/sd-payload1 bs=4M oflag=direct&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4) Prepare root filesystem. You can use any Linux distribution for aarch64 for development. For example if you want to use Arch Linux ARM, you would need to format the &amp;lt;code&amp;gt;sd-rootfs1&amp;lt;/code&amp;gt; partition with &amp;lt;code&amp;gt;f2fs&amp;lt;/code&amp;gt; filesystem and extract the Arch Linux ARM rootfs tarball there. That will give you a bootable SD card image for Pinephone Pro.&lt;br /&gt;
&lt;br /&gt;
5) Repeat steps 3 and 4 if you want either more kernel payloads, or more Linux distributions on the same uSD card. I recommend having at least some module-less working kernel in &amp;lt;code&amp;gt;sd-payload3&amp;lt;/code&amp;gt; and perhaps a small userspace in &amp;lt;code&amp;gt;sd-rootfs1&amp;lt;/code&amp;gt; with a pre-configured WiFi connection, that will allow you to always quickly recover if your development kernel fails to boot, just by pressing volume up key during boot and updating the the kernel in one of the primary payload partitions over WiFi.&lt;br /&gt;
&lt;br /&gt;
== Development discussion ==&lt;br /&gt;
&lt;br /&gt;
Most of the discussion happens in #pinedev channel on [https://www.pine64.org/web-irc/ Pine64 IRC server].&lt;br /&gt;
&lt;br /&gt;
See https://xnux.eu/log/ too.&lt;br /&gt;
&lt;br /&gt;
[[Category:PinePhone Pro]][[Category:Rockchip RK3399]]&lt;/div&gt;</summary>
		<author><name>Emil</name></author>
	</entry>
</feed>