Difference between revisions of "PinePhone Pro/Create a multi-distribution image using rk2aw"

From PINE64
Jump to navigation Jump to search
Line 11: Line 11:


''Connect PinePhonePro to linux machine''
''Connect PinePhonePro to linux machine''
  <code>ssh <user>@<phoneip></code>'' # start ssh connection''
  <code>ssh <user>@<phoneip></code>'' # start ssh connection''<br/>
  <code>cd ~/Downloads</code>'' # enter to directory''
  <code>cd ~/Downloads</code>'' # enter to directory''<br/>
  <code>curl -O https://xff.cz/kernels/bootloaders/ppp.tar.gz</code>'' # download installer''
  <code>curl -O https://xff.cz/kernels/bootloaders/ppp.tar.gz</code>'' # download installer''<br/>
  <code>tar -xvzf ppp.tar.gz -C ~/Downloads</code>'' # extract''
  <code>tar -xvzf ppp.tar.gz -C ~/Downloads</code>'' # extract''<br/>
  <code># scp -r ~/Downloads/ppp <user>@<phoneip>:~/Downloads</code>'' # copy to phone, non needed''
  <code># scp -r ~/Downloads/ppp <user>@<phoneip>:~/Downloads</code>'' # copy to phone, non needed''<br/>
  <code>sudo ./spinor-flash-initial-setup.sh</code>'' # flash SPI''
  <code>sudo ./spinor-flash-initial-setup.sh</code>'' # flash SPI''


Line 22: Line 22:
''Get distro compressed images and decompress them. (i.e. Manjaro.phosh.beta34, Mobian.6.1, ArchLinux)''<br/>
''Get distro compressed images and decompress them. (i.e. Manjaro.phosh.beta34, Mobian.6.1, ArchLinux)''<br/>
''Mount distro images both partitions "/boot", "/root" for each distro''<br/>
''Mount distro images both partitions "/boot", "/root" for each distro''<br/>
  <code>lsblk</code>'' # show /loop, /sd references''
  <code>lsblk</code>'' # show /loop, /sd references''<br/>
  <code>blkid</code>'' show UUID for the partition''
  <code>blkid</code>'' show UUID for the partition''
: ├─loop0p1 /media/xxx/BOOT_MNJRO
: ├─loop0p1 /media/xxx/BOOT_MNJRO
Line 32: Line 32:
: └─sdb disk '' (after each dd command you'll see the partition id name to adjust into scripts.)''
: └─sdb disk '' (after each dd command you'll see the partition id name to adjust into scripts.)''


  <code>sudo dd if=/dev/zero of=/dev/sdb count=945728 bs=32768 status=progress</code>'' # quick erase sd card. i.e. # 32GB SDcard (30989615104bytes/32768dim=945728volte)''
  <code>sudo dd if=/dev/zero of=/dev/sdb count=945728 bs=32768 status=progress</code>'' # quick erase sd card. i.e. # 32GB SDcard (30989615104bytes/32768dim=945728volte)''<br/>
  or <code>sudo dd if=/dev/zero of=/dev/sdb count=1 bs=32768 status=progress</code>'' # slow erase sd card. i.e. # 32GB SDcard (30989615104bytes/32768dim=1volta)''
  or <code>sudo dd if=/dev/zero of=/dev/sdb count=1 bs=32768 status=progress</code>'' # slow erase sd card. i.e. # 32GB SDcard (30989615104bytes/32768dim=1volta)''


Line 54: Line 54:


''Copy files for Arch Linux ARM''
''Copy files for Arch Linux ARM''
  <code>sudo su</code>'' # login with your psw''
  <code>sudo su</code>'' # login with your psw''<br/>
  <code>dd if=/dev/loop2p2 of=/dev/sdb2 bs=1M status=progress conv=fsync</code>'' # copy rootfs to sd part2''
  <code>dd if=/dev/loop2p2 of=/dev/sdb2 bs=1M status=progress conv=fsync</code>'' # copy rootfs to sd part2''<br/>
  <code>mount /dev/sdb2 /media/xxx/3d99072c-9fd6-4316-8526-9192e192c441</code>
  <code>mount /dev/sdb2 /media/xxx/3d99072c-9fd6-4316-8526-9192e192c441</code><br/>
  <code>scp -r /media/xxx/52CA-6165/* /media/xxx/3d99072c-9fd6-4316-8526-9192e192c441<del>1</del>/boot</code>'' # copy bootfs to to part2/boot''
  <code>scp -r /media/xxx/52CA-6165/* /media/xxx/3d99072c-9fd6-4316-8526-9192e192c441<del>1</del>/boot</code>'' # copy bootfs to to part2/boot''<br/>
  <code>mv /media/xxx/3d99072c-9fd6-4316-8526-9192e192c441<del>1</del>/boot/boot.scr /media/xxx/3d99072c-9fd6-4316-8526-9192e192c441<del>1</del>/boot/boot.scrORIG</code>'' # hide auto-menu item''
  <code>mv /media/xxx/3d99072c-9fd6-4316-8526-9192e192c441<del>1</del>/boot/boot.scr /media/xxx/3d99072c-9fd6-4316-8526-9192e192c441<del>1</del>/boot/boot.scrORIG</code>'' # hide auto-menu item''<br/>
  <code>nano /media/xxx/3d99072c-9fd6-4316-8526-9192e192c441<del>1</del>/etc/fstab</code>'' # add PARTLABEL=ALARM and delete UUID=xxx from second line, delete /boot entry''
  <code>nano /media/xxx/3d99072c-9fd6-4316-8526-9192e192c441<del>1</del>/etc/fstab</code>'' # add PARTLABEL=ALARM and delete UUID=xxx from second line, delete /boot entry''<br/>
  <code>mkdir /media/xxx/3d99072c-9fd6-4316-8526-9192e192c441<del>1</del>/boot/extlinux</code>'' # add directory''
  <code>mkdir /media/xxx/3d99072c-9fd6-4316-8526-9192e192c441<del>1</del>/boot/extlinux</code>'' # add directory''<br/>
  <code>nano /media/xxx/3d99072c-9fd6-4316-8526-9192e192c441<del>1</del>/boot/extlinux/extlinux.conf</code>'' # add file''
  <code>nano /media/xxx/3d99072c-9fd6-4316-8526-9192e192c441<del>1</del>/boot/extlinux/extlinux.conf</code>'' # add file''<br/>
   <nowiki>#</nowiki>/boot/extlinux/extlinux.conf
   <nowiki>#</nowiki>/boot/extlinux/extlinux.conf
   MENU TITLE Pinephone Pro Boot Menu
   MENU TITLE Pinephone Pro Boot Menu
Line 72: Line 72:


''Copy files for ManJaro''
''Copy files for ManJaro''
  <code>dd if=/dev/loop0p2 of=/dev/sdb3 bs=1M status=progress conv=fsync</code> ''# copy rootfs to sd part3''<br/>
  <code>dd if=/dev/loop0p2 of=/dev/sdb3 bs=1M status=progress conv=fsync</code>'' # copy rootfs to sd part3''<br/>
  <code>mount /dev/sdb3 /media/xxx/ROOT_MNJRO1/</code><br/>
  <code>mount /dev/sdb3 /media/xxx/ROOT_MNJRO1/</code><br/>
  <code>scp -r /media/xxx/BOOT_MNJRO/* /media/xxx/ROOT_MNJRO1/boot</code> ''# copy bootfs to to part3/boot''<br/>
  <code>scp -r /media/xxx/BOOT_MNJRO/* /media/xxx/ROOT_MNJRO1/boot</code>'' # copy bootfs to to part3/boot''<br/>
  <code>nano /media/xxx/ROOT_MNJRO1/etc/fstab</code> ''# change UUID=xxx to PARTLABEL=MANJARO, delete /boot line''<br/>
  <code>nano /media/xxx/ROOT_MNJRO1/etc/fstab</code>'' # change UUID=xxx to PARTLABEL=MANJARO, delete /boot line''<br/>
  <code>mv /media/xxx/ROOT_MNJRO1/boot/boot.scr /media/xxx/ROOT_MNJRO1/boot/boot.scrORIG</code> ''# hide auto-menu item''<br/>
  <code>mv /media/xxx/ROOT_MNJRO1/boot/boot.scr /media/xxx/ROOT_MNJRO1/boot/boot.scrORIG</code>'' # hide auto-menu item''<br/>
  <code>mkdir /media/xxx/ROOT_MNJRO1/boot/extlinux</code> ''# add directory''<br/>
  <code>mkdir /media/xxx/ROOT_MNJRO1/boot/extlinux</code>'' # add directory''<br/>
  <code>nano /media/xxx/ROOT_MNJRO1/boot/extlinux/extlinux.conf</code> ''#add file''
  <code>nano /media/xxx/ROOT_MNJRO1/boot/extlinux/extlinux.conf</code>'' # add file''
: <nowiki>#</nowiki>/boot/extlinux/extlinux.conf
  <nowiki>#</nowiki>/boot/extlinux/extlinux.conf
MENU TITLE Pinephone Pro Boot Menu
  MENU TITLE Pinephone Pro Boot Menu
LABEL l0
  LABEL l0
MENU LABEL ManJaro
  MENU LABEL ManJaro
FDT /boot/dtbs/rockchip/rk3399-pinephone-pro.dtb
  FDT /boot/dtbs/rockchip/rk3399-pinephone-pro.dtb
KERNEL /boot/Image
  KERNEL /boot/Image
INITRD /boot/initramfs-linux.img
  INITRD /boot/initramfs-linux.img
APPEND root=PARTLABEL=MANJARO console=ttyS2,115200 console=tty0 loglevel=4 rw rootwait fbcon=rotate:0 pinephone_keyboard.disable_input
  APPEND root=PARTLABEL=MANJARO console=ttyS2,115200 console=tty0 loglevel=4 rw rootwait fbcon=rotate:0 pinephone_keyboard.disable_input


''Copy files for MObian''
''Copy files for MObian''
<code>dd if=/dev/loop1p2 of=/dev/sdb4 bs=1M status=progress conv=fsync</code> ''# copy rootfs to sd part4''<br/>
<code>dd if=/dev/loop1p2 of=/dev/sdb4 bs=1M status=progress conv=fsync</code>'' # copy rootfs to sd part4''<br/>
<code>mount /dev/sdb4 /media/xxx/rootfs1/</code><br/>
<code>mount /dev/sdb4 /media/xxx/rootfs1/</code><br/>
<code>scp -r /media/xxx/boot/* /media/xxx/rootfs1/boot</code> ''# copy bootfs to to part4/boot''<br/>
<code>scp -r /media/xxx/boot/* /media/xxx/rootfs1/boot</code>'' # copy bootfs to to part4/boot''<br/>
<code>nano /media/xxx/rootfs1/etc/fstab</code> ''# replace UUID=xxx with PARTLABEL=MOBIAN and delete UUID=xxx from second line. Delete /boot line''<br/>
<code>nano /media/xxx/rootfs1/etc/fstab</code>'' # replace UUID=xxx with PARTLABEL=MOBIAN and delete UUID=xxx from second line. Delete /boot line''<br/>
<code>nano /media/xxx/rootfs1/boot/extlinux/extlinux.conf</code> ''# edit path from /bootfs to /part4/boot''<br/>
<code>nano /media/xxx/rootfs1/boot/extlinux/extlinux.conf</code> '' # edit path from /bootfs to /part4/boot''<br/>
>linux '''/boot'''/vmlinuz-6.1-rockchip
  >linux '''/boot'''/vmlinuz-6.1-rockchip
>initrd '''/boot'''/initrd.img-6.1-rockchip
  >initrd '''/boot'''/initrd.img-6.1-rockchip
>fdtdir '''/boot'''/dtb-6.1-rockchip/
  >fdtdir '''/boot'''/dtb-6.1-rockchip/
APPEND root=PARTLABEL=MOBIAN console=ttyS2,115200 console=tty0 loglevel=4 rw rootwait fbcon=rotate:0 pinephone_keyboard.disable_input
  APPEND root=PARTLABEL=MOBIAN console=ttyS2,115200 console=tty0 loglevel=4 rw rootwait fbcon=rotate:0 pinephone_keyboard.disable_input
 
 
 


= Rk2Aw BootLoader & Multi-Distro on eMMC for PinePhonePro =
= Rk2Aw BootLoader & Multi-Distro on eMMC for PinePhonePro =
Line 103: Line 106:


== Flash Rk2Aw BootLoader to SPI ==
== Flash Rk2Aw BootLoader to SPI ==
Same as above. Note this installs rk2aw and a bootloader to SPI NOR flash. Resulting SPI status is as follows:
Same as above. Note this installs rk2aw and a bootloader to SPI NOR flash. Resulting SPI status is as follows:
  <nowiki>#</nowiki> ./rk2aw-spi-flasher  
  <nowiki>#</nowiki> ./rk2aw-spi-flasher  
Line 143: Line 145:
   
   
  total 0
  total 0
  <code>mkdir /mnt/phosh </code>
  <code>mkdir /mnt/phosh</code>
  <code>mkdir /mnt/sxmo </code>
  <code>mkdir /mnt/sxmo</code>
  <code>mkdir /mnt/phosh/boot </code>
  <code>mkdir /mnt/phosh/boot</code>
  <code>mkdir /mnt/phosh/root </code>
  <code>mkdir /mnt/phosh/root</code>
  <code>mkdir /mnt/sxmo/boot </code>
  <code>mkdir /mnt/sxmo/boot</code>
  <code>mkdir /mnt/sxmo/root </code>
  <code>mkdir /mnt/sxmo/root</code>
  <code>mkdir /mnt/ephosh </code>   # e for the partition on the eMMC
  <code>mkdir /mnt/ephosh</code>'' # e for the partition on the eMMC''
  <code>mkdir /mnt/esxmo   </code>  # e for the partition on the eMMC
  <code>mkdir /mnt/esxmo</code>'' # e for the partition on the eMMC''
  <code>mount /dev/loop0p1 /mnt/phosh/boot/ </code>
  <code>mount /dev/loop0p1 /mnt/phosh/boot/</code>
  <code>mount /dev/loop0p2 /mnt/phosh/root/ </code>
  <code>mount /dev/loop0p2 /mnt/phosh/root/</code>
  <code>mount /dev/loop1p1 /mnt/sxmo/boot/ </code>
  <code>mount /dev/loop1p1 /mnt/sxmo/boot/</code>
  <code>mount /dev/loop1p2 /mnt/sxmo/root/ </code>
  <code>mount /dev/loop1p2 /mnt/sxmo/root/</code>
  <code>lsblk </code>
  <code>lsblk</code>


  NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
  NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
Line 175: Line 177:


=== Prepare eMMC ===
=== Prepare eMMC ===
  <code>dd if=/dev/zero of=/dev/mmcblk2 count=32768 bs=32768 status=progress</code>
  <code>dd if=/dev/zero of=/dev/mmcblk2 count=32768 bs=32768 status=progress</code>'' # overwrite the front to clear any bootloaders''
''# overwrite the front to clear any bootloaders''
  985759744 bytes (986 MB, 940 MiB) copied, 3 s, 329 MB/s
  985759744 bytes (986 MB, 940 MiB) copied, 3 s, 329 MB/s
  32768+0 records in
  32768+0 records in
Line 212: Line 213:
  Syncing disks.
  Syncing disks.


<code>lsblk</code>
<code>lsblk</code>
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
  NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
loop0          7:0    0    5G  0 loop  
  loop0          7:0    0    5G  0 loop  
├─loop0p1    259:0    0  122M  0 part /mnt/phosh/boot
  ├─loop0p1    259:0    0  122M  0 part /mnt/phosh/boot
└─loop0p2    259:1    0  4.9G  0 part /mnt/phosh/root
  └─loop0p2    259:1    0  4.9G  0 part /mnt/phosh/root
loop1          7:1    0  3.5G  0 loop  
  loop1          7:1    0  3.5G  0 loop  
├─loop1p1    259:2    0  122M  0 part /mnt/sxmo/boot
  ├─loop1p1    259:2    0  122M  0 part /mnt/sxmo/boot
└─loop1p2    259:3    0  3.4G  0 part /mnt/sxmo/root
  └─loop1p2    259:3    0  3.4G  0 part /mnt/sxmo/root
mmcblk2      179:0    0 115.2G  0 disk  
  mmcblk2      179:0    0 115.2G  0 disk  
├─mmcblk2p1  179:1    0    32G  0 part  
  ├─mmcblk2p1  179:1    0    32G  0 part  
└─mmcblk2p2  179:2    0  83.2G  0 part  
  └─mmcblk2p2  179:2    0  83.2G  0 part  
mmcblk2boot0 179:32  0    4M  1 disk  
  mmcblk2boot0 179:32  0    4M  1 disk  
mmcblk2boot1 179:64  0    4M  1 disk  
  mmcblk2boot1 179:64  0    4M  1 disk  
mmcblk1      179:96  0  59.6G  0 disk  
  mmcblk1      179:96  0  59.6G  0 disk  
├─mmcblk1p1  179:97  0  122M  0 part /boot
  ├─mmcblk1p1  179:97  0  122M  0 part /boot
└─mmcblk1p2  179:98  0  59.5G  0 part /
  └─mmcblk1p2  179:98  0  59.5G  0 part /
zram0        254:0    0  1.5G  0 disk [SWAP]
  zram0        254:0    0  1.5G  0 disk [SWAP]


=== Build phosh partition ===
=== Build phosh partition ===


<code>dd if=/dev/loop0p2 of=/dev/mmcblk2p1 bs=1M status=progress conv=fsync </code>
<code>dd if=/dev/loop0p2 of=/dev/mmcblk2p1 bs=1M status=progress conv=fsync</code>
5225054208 bytes (5.2 GB, 4.9 GiB) copied, 215 s, 24.3 MB/s5238685696 bytes (5.2 GB, 4.9 GiB) copied, 215.606 s, 24.3 MB/s
4996+0 records in
4996+0 records out
5238685696 bytes (5.2 GB, 4.9 GiB) copied, 218.565 s, 24.0 MB/s
 
  <code>mount /dev/mmcblk2p1 /mnt/ephosh/</code>
  <code>mount /dev/mmcblk2p1 /mnt/ephosh/</code>
  <code>scp -r /mnt/phosh/boot/* /mnt/ephosh/boot</code>
  <code>scp -r /mnt/phosh/boot/* /mnt/ephosh/boot</code>
Line 243: Line 239:
  <code>nano /mnt/ephosh/etc/fstab</code> ''# set PARTLABEL for / and comment /boot''
  <code>nano /mnt/ephosh/etc/fstab</code> ''# set PARTLABEL for / and comment /boot''
  <code>cat /mnt/ephosh/etc/fstab</code>
  <code>cat /mnt/ephosh/etc/fstab</code>
# Static information about the filesystems.
  # Static information about the filesystems.
# See fstab(5) for details.
  # See fstab(5) for details.
# <file system> <dir> <type> <options> <dump> <pass>
  # <file system> <dir> <type> <options> <dump> <pass>
PARTLABEL=PHOSH /         ext4     rw,relatime 0 1
  PARTLABEL=PHOSH /   ext4   rw,relatime 0 1
# UUID=52CA-6165     /boot     vfat      rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro 0 2
  # UUID=52CA-6165 /boot vf rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro 0 2
   
   
  <code>mkdir /mnt/ephosh/boot/extlinux</code>
  <code>mkdir /mnt/ephosh/boot/extlinux</code>
  <code>nano /mnt/ephosh/boot/extlinux/extlinux.conf</code>
  <code>nano /mnt/ephosh/boot/extlinux/extlinux.conf</code>
  <code>cat /mnt/ephosh/boot/extlinux/extlinux.conf</code>
  <code>cat /mnt/ephosh/boot/extlinux/extlinux.conf</code>
#/boot/extlinux/extlinux.conf
  #/boot/extlinux/extlinux.conf
MENU TITLE Pinephone Pro Boot Menu
  MENU TITLE Pinephone Pro Boot Menu
LABEL l0
  LABEL l0
MENU LABEL phosh
  MENU LABEL phosh
FDT /boot/dtbs/rockchip/rk3399-pinephone-pro.dtb
  FDT /boot/dtbs/rockchip/rk3399-pinephone-pro.dtb
KERNEL /boot/Image
  KERNEL /boot/Image
INITRD /boot/initramfs-linux.img
  INITRD /boot/initramfs-linux.img
APPEND root=PARTLABEL=PHOSH console=ttyS2,115200 console=tty0 loglevel=4 rw rootwait fbcon=rotate:0 pinephone_keyboard.disable_input
  APPEND root=PARTLABEL=PHOSH console=ttyS2,115200 console=tty0 loglevel=4 rw rootwait fbcon=rotate:0 pinephone_keyboard.disable_input


=== Build sxmo partition ===
=== Build sxmo partition ===
Line 284: Line 280:


  <code>dd if=/dev/loop1p2 of=/dev/mmcblk2p2 bs=1M status=progress conv=fsync</code>
  <code>dd if=/dev/loop1p2 of=/dev/mmcblk2p2 bs=1M status=progress conv=fsync</code>
3613392896 bytes (3.6 GB, 3.4 GiB) copied, 153 s, 23.6 MB/s3628072960 bytes (3.6 GB, 3.4 GiB) copied, 153.543 s, 23.6 MB/s
3460+0 records in
3460+0 records out
3628072960 bytes (3.6 GB, 3.4 GiB) copied, 156.292 s, 23.2 MB/s
  <code>mount /dev/mmcblk2p2 /mnt/esxmo/</code>
  <code>mount /dev/mmcblk2p2 /mnt/esxmo/</code>
  <code>scp -r /mnt/sxmo/boot/* /mnt/esxmo/boot</code>
  <code>scp -r /mnt/sxmo/boot/* /mnt/esxmo/boot</code>
  <code>mv /mnt/esxmo/boot/boot.scr /mnt/esxmo/boot/boot.scrORIG</code>
  <code>mv /mnt/esxmo/boot/boot.scr /mnt/esxmo/boot/boot.scrORIG</code>
  <code>nano /mnt/esxmo/etc/fstab</code> # ''set PARTLABEL for / and comment /boot''
  <code>nano /mnt/esxmo/etc/fstab</code>'' # set PARTLABEL for / and comment /boot''
  <code>cat /mnt/esxmo/etc/fstab</code>
  <code>cat /mnt/esxmo/etc/fstab</code>
# Static information about the filesystems.
  # Static information about the filesystems.
# See fstab(5) for details.
  # See fstab(5) for details.
# <file system> <dir> <type> <options> <dump> <pass>
  # <file system> <dir> <type> <options> <dump> <pass>
PARTLABEL=SXMO /         ext4      rw,relatime 0 1
  PARTLABEL=SXMO /     ext4      rw,relatime 0 1
# UUID=841C-F9DD      /boot    vfat      rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro 0 2
  # UUID=841C-F9DD      /boot    vfat      rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro 0 2


  <code>mkdir /mnt/esxmo/boot/extlinux</code>
  <code>mkdir /mnt/esxmo/boot/extlinux</code>

Revision as of 19:27, 11 August 2023

Rk2Aw BootLoader & Multi-Distro on SD Card for PinePhonePro

References: https://xff.cz/kernels/rk2aw/rk2aw-rk3399-pinephone-pro/INSTALL and https://xnux.eu/rk2aw/

Requirements: SSH connection from linux machine to PinePhonePro, internet connection.

Note: Preloader and userspace utility to flash it are non-free.

Thanks: Megi at https://xnux.eu/log/

Flash Rk2Aw BootLoader to SPI

Connect PinePhonePro to linux machine

ssh <user>@<phoneip> # start ssh connection
cd ~/Downloads # enter to directory
curl -O https://xff.cz/kernels/bootloaders/ppp.tar.gz # download installer
tar -xvzf ppp.tar.gz -C ~/Downloads # extract
# scp -r ~/Downloads/ppp <user>@<phoneip>:~/Downloads # copy to phone, non needed
sudo ./spinor-flash-initial-setup.sh # flash SPI

Flash Multi-Distro SD Card

Get distro compressed images and decompress them. (i.e. Manjaro.phosh.beta34, Mobian.6.1, ArchLinux)
Mount distro images both partitions "/boot", "/root" for each distro

lsblk # show /loop, /sd references
blkid show UUID for the partition
├─loop0p1 /media/xxx/BOOT_MNJRO
└─loop0p2 /media/xxx/ROOT_MNJRO
├─loop1p1 /media/xxx/boot
└─loop1p2 /media/xxx/rootfs
├─loop2p1 /media/xxx/52CA-6165
└─loop2p2 /media/xxx/3d99072c-9fd6-4316-8526-9192e192c441
└─sdb disk (after each dd command you'll see the partition id name to adjust into scripts.)
sudo dd if=/dev/zero of=/dev/sdb count=945728 bs=32768 status=progress # quick erase sd card. i.e. # 32GB SDcard (30989615104bytes/32768dim=945728volte)
or sudo dd if=/dev/zero of=/dev/sdb count=1 bs=32768 status=progress # slow erase sd card. i.e. # 32GB SDcard (30989615104bytes/32768dim=1volta)

Partition sd card (min 6432GB)

sudo sfdisk /dev/sdb/ <<EOF
label: gpt
first-lba: 64
table-length: 8
start=64, size=32704, type=D7B1F817-AA75-2F4F-830D-84818A145370, name="loader", attrs=RequiredPartition
size=10G, name="ALARM", attrs="RequiredPartition,LegacyBIOSBootable"
size=10G, name="MANJARO", attrs="RequiredPartition,LegacyBIOSBootable"
size=+, name="MOBIAN", attrs="RequiredPartition,LegacyBIOSBootable"
EOF
lsblk # list partitions on sd and mounted distro images
Device Start End Sectors Size Type
/dev/sdb1 64 32767 32704 16M unknown
/dev/sdb2 32768 16809983 16777216 8G Linux filesystem
/dev/sdb3 16809984 33587199 16777216 8G Linux filesystem
/dev/sdb4 33587200 60524543 26937344 12.8G Linux filesystem

Copy files for Arch Linux ARM

sudo su # login with your psw
dd if=/dev/loop2p2 of=/dev/sdb2 bs=1M status=progress conv=fsync # copy rootfs to sd part2
mount /dev/sdb2 /media/xxx/3d99072c-9fd6-4316-8526-9192e192c441
scp -r /media/xxx/52CA-6165/* /media/xxx/3d99072c-9fd6-4316-8526-9192e192c4411/boot # copy bootfs to to part2/boot
mv /media/xxx/3d99072c-9fd6-4316-8526-9192e192c4411/boot/boot.scr /media/xxx/3d99072c-9fd6-4316-8526-9192e192c4411/boot/boot.scrORIG # hide auto-menu item
nano /media/xxx/3d99072c-9fd6-4316-8526-9192e192c4411/etc/fstab # add PARTLABEL=ALARM and delete UUID=xxx from second line, delete /boot entry
mkdir /media/xxx/3d99072c-9fd6-4316-8526-9192e192c4411/boot/extlinux # add directory
nano /media/xxx/3d99072c-9fd6-4316-8526-9192e192c4411/boot/extlinux/extlinux.conf # add file
#/boot/extlinux/extlinux.conf MENU TITLE Pinephone Pro Boot Menu LABEL l0 MENU LABEL ALarm FDT /boot/dtbs/rockchip/rk3399-pinephone-pro.dtb KERNEL /boot/Image INITRD /boot/initramfs-linux.img APPEND root=PARTLABEL=ALARM console=ttyS2,115200 console=tty0 loglevel=4 rw rootwait fbcon=rotate:0 pinephone_keyboard.disable_input

Copy files for ManJaro

dd if=/dev/loop0p2 of=/dev/sdb3 bs=1M status=progress conv=fsync # copy rootfs to sd part3
mount /dev/sdb3 /media/xxx/ROOT_MNJRO1/
scp -r /media/xxx/BOOT_MNJRO/* /media/xxx/ROOT_MNJRO1/boot # copy bootfs to to part3/boot
nano /media/xxx/ROOT_MNJRO1/etc/fstab # change UUID=xxx to PARTLABEL=MANJARO, delete /boot line
mv /media/xxx/ROOT_MNJRO1/boot/boot.scr /media/xxx/ROOT_MNJRO1/boot/boot.scrORIG # hide auto-menu item
mkdir /media/xxx/ROOT_MNJRO1/boot/extlinux # add directory
nano /media/xxx/ROOT_MNJRO1/boot/extlinux/extlinux.conf # add file #/boot/extlinux/extlinux.conf MENU TITLE Pinephone Pro Boot Menu LABEL l0 MENU LABEL ManJaro FDT /boot/dtbs/rockchip/rk3399-pinephone-pro.dtb KERNEL /boot/Image INITRD /boot/initramfs-linux.img APPEND root=PARTLABEL=MANJARO console=ttyS2,115200 console=tty0 loglevel=4 rw rootwait fbcon=rotate:0 pinephone_keyboard.disable_input

Copy files for MObian dd if=/dev/loop1p2 of=/dev/sdb4 bs=1M status=progress conv=fsync # copy rootfs to sd part4
mount /dev/sdb4 /media/xxx/rootfs1/
scp -r /media/xxx/boot/* /media/xxx/rootfs1/boot # copy bootfs to to part4/boot
nano /media/xxx/rootfs1/etc/fstab # replace UUID=xxx with PARTLABEL=MOBIAN and delete UUID=xxx from second line. Delete /boot line
nano /media/xxx/rootfs1/boot/extlinux/extlinux.conf # edit path from /bootfs to /part4/boot

  >linux /boot/vmlinuz-6.1-rockchip
  >initrd /boot/initrd.img-6.1-rockchip
  >fdtdir /boot/dtb-6.1-rockchip/
  APPEND root=PARTLABEL=MOBIAN console=ttyS2,115200 console=tty0 loglevel=4 rw rootwait fbcon=rotate:0 pinephone_keyboard.disable_input



Rk2Aw BootLoader & Multi-Distro on eMMC for PinePhonePro

Make sure you boot from the SDcard in your PPP as we are going to be building the eMMC. Note that below, arch is booted from the SDcard and the SDcard shows as /dev/mmcblk1

Flash Rk2Aw BootLoader to SPI

Same as above. Note this installs rk2aw and a bootloader to SPI NOR flash. Resulting SPI status is as follows:

# ./rk2aw-spi-flasher 
Machine: Pine64 PinePhonePro (pine64,pinephone-pro)
SPI NOR Flash:
- Total size: 16384 KiB
- Erase block size: 4 KiB
- Write size: 1
- Manufacturer: gigadevice
- Part name: gd25lq128e
- JEDEC ID: 257018
Bootable images currently present in SPI NOR flash:
Idx Header     Off 1      Size 1     Off 2      Size 2     Notes/content
-------------------------------------------------------------------------------
0   0          2048       6144       0          0          (padded) 0='rk2aw'
5   131072     133120     67584      200704     124928     0='U-Boot TPL' 1='U-Boot SPL'
7   524288     526336     147456     673792     124928     0='ddrbin' 1='U-Boot SPL'
Auto-calculated layout for rk2aw dual bootloader scheme:
Area                 Offset     Size      
---------------------------------------------------
rk2aw primary        0          65536     
rk2aw backup         65536      65536     
spl fallback         131072     393216    
spl primary          524288     389120    
itb fallback         913408     2097152   
itb primary          3010560    2097152

Build multi-distro eMMC

In this example we are going to build 2 partitions on the eMMC, the first with Arch/phosh and the second with Arch/sxmo. We have already downloaded the images from Danct12 and decompressed them.

Mount the images

cd ~/Downloads # enter to directory
sudo su # login with your psw
losetup -P /dev/loop0 archlinux-pinephone-pro-phosh-20230203.img 
losetup -P /dev/loop1 archlinux-pinephone-pro-sxmo-20230203.img 
ls -l /mnt/

total 0
mkdir /mnt/phosh
mkdir /mnt/sxmo
mkdir /mnt/phosh/boot
mkdir /mnt/phosh/root
mkdir /mnt/sxmo/boot
mkdir /mnt/sxmo/root
mkdir /mnt/ephosh # e for the partition on the eMMC
mkdir /mnt/esxmo  # e for the partition on the eMMC
mount /dev/loop0p1 /mnt/phosh/boot/
mount /dev/loop0p2 /mnt/phosh/root/
mount /dev/loop1p1 /mnt/sxmo/boot/
mount /dev/loop1p2 /mnt/sxmo/root/
lsblk
NAME         MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
loop0          7:0    0     5G  0 loop 
├─loop0p1    259:0    0   122M  0 part /mnt/phosh/boot
└─loop0p2    259:1    0   4.9G  0 part /mnt/phosh/root
loop1          7:1    0   3.5G  0 loop 
├─loop1p1    259:2    0   122M  0 part /mnt/sxmo/boot
└─loop1p2    259:3    0   3.4G  0 part /mnt/sxmo/root
mmcblk2      179:0    0 115.2G  0 disk 
├─mmcblk2p1  179:1    0   122M  0 part 
└─mmcblk2p2  179:2    0 115.1G  0 part 
mmcblk2boot0 179:32   0     4M  1 disk 
mmcblk2boot1 179:64   0     4M  1 disk 
mmcblk1      179:96   0  59.6G  0 disk 
├─mmcblk1p1  179:97   0   122M  0 part /boot
└─mmcblk1p2  179:98   0  59.5G  0 part /
zram0        254:0    0   1.5G  0 disk [SWAP]

Prepare eMMC

dd if=/dev/zero of=/dev/mmcblk2 count=32768 bs=32768 status=progress # overwrite the front to clear any bootloaders
985759744 bytes (986 MB, 940 MiB) copied, 3 s, 329 MB/s
32768+0 records in
32768+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 8.14441 s, 132 MB/s
sfdisk /dev/mmcblk2 << EOF
> label: gpt
> first-lba: 64
> table-length: 8
> size=32G, name="PHOSH", attrs="RequiredPartition,LegacyBIOSBootable"
> size=+, name="SXMO", attrs="RequiredPartition,LegacyBIOSBootable"
> EOF
Checking that no-one is using this disk right now ... OK
Disk /dev/mmcblk2: 115.23 GiB, 123731968000 bytes, 241664000 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
>>> Script header accepted.
>>> Created a new GPT disklabel (GUID: 7EB4B1E0-5F49-4F30-9F1E-E9E1F305D461).
The maximal number of partitions is 8 (default is 128).
/dev/mmcblk2p1: Created a new partition 1 of type 'Linux filesystem' and of size 32 GiB.
/dev/mmcblk2p2: Created a new partition 2 of type 'Linux filesystem' and of size 83.2 GiB.
/dev/mmcblk2p3: Done.
New situation:
Disklabel type: gpt
Disk identifier: 7EB4B1E0-5F49-4F30-9F1E-E9E1F305D461
Device            Start       End   Sectors  Size Type
/dev/mmcblk2p1     2048  67110911  67108864   32G Linux filesystem
/dev/mmcblk2p2 67110912 241661951 174551040 83.2G Linux filesystem
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
lsblk
 NAME         MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
 loop0          7:0    0     5G  0 loop 
 ├─loop0p1    259:0    0   122M  0 part /mnt/phosh/boot
 └─loop0p2    259:1    0   4.9G  0 part /mnt/phosh/root
 loop1          7:1    0   3.5G  0 loop 
 ├─loop1p1    259:2    0   122M  0 part /mnt/sxmo/boot
 └─loop1p2    259:3    0   3.4G  0 part /mnt/sxmo/root
 mmcblk2      179:0    0 115.2G  0 disk 
 ├─mmcblk2p1  179:1    0    32G  0 part 
 └─mmcblk2p2  179:2    0  83.2G  0 part 
 mmcblk2boot0 179:32   0     4M  1 disk 
 mmcblk2boot1 179:64   0     4M  1 disk 
 mmcblk1      179:96   0  59.6G  0 disk 
 ├─mmcblk1p1  179:97   0   122M  0 part /boot
 └─mmcblk1p2  179:98   0  59.5G  0 part /
 zram0        254:0    0   1.5G  0 disk [SWAP]

Build phosh partition

dd if=/dev/loop0p2 of=/dev/mmcblk2p1 bs=1M status=progress conv=fsync
mount /dev/mmcblk2p1 /mnt/ephosh/
scp -r /mnt/phosh/boot/* /mnt/ephosh/boot
mv /mnt/ephosh/boot/boot.scr /mnt/ephosh/boot/boot.scrORIG
nano /mnt/ephosh/etc/fstab # set PARTLABEL for / and comment /boot
cat /mnt/ephosh/etc/fstab
 # Static information about the filesystems.
 # See fstab(5) for details.
 # <file system> <dir> <type> <options> <dump> <pass>
 PARTLABEL=PHOSH 	/   ext4   rw,relatime	0 1
 # UUID=52CA-6165  /boot vf rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro	0 2

mkdir /mnt/ephosh/boot/extlinux
nano /mnt/ephosh/boot/extlinux/extlinux.conf
cat /mnt/ephosh/boot/extlinux/extlinux.conf
  #/boot/extlinux/extlinux.conf
  MENU TITLE Pinephone Pro Boot Menu
  LABEL l0
  MENU LABEL phosh
  FDT /boot/dtbs/rockchip/rk3399-pinephone-pro.dtb
  KERNEL /boot/Image
  INITRD /boot/initramfs-linux.img
  APPEND root=PARTLABEL=PHOSH console=ttyS2,115200 console=tty0 loglevel=4 rw rootwait fbcon=rotate:0 pinephone_keyboard.disable_input

Build sxmo partition

We have unmounted all the phosh devices, so

lsblk
NAME         MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
loop0          7:0    0     5G  0 loop 
├─loop0p1    259:0    0   122M  0 part 
└─loop0p2    259:1    0   4.9G  0 part 
loop1          7:1    0   3.5G  0 loop 
├─loop1p1    259:2    0   122M  0 part /mnt/sxmo/boot
└─loop1p2    259:3    0   3.4G  0 part /mnt/sxmo/root
mmcblk2      179:0    0 115.2G  0 disk 
├─mmcblk2p1  179:1    0    32G  0 part 
└─mmcblk2p2  179:2    0  83.2G  0 part 
mmcblk2boot0 179:32   0     4M  1 disk 
mmcblk2boot1 179:64   0     4M  1 disk 
mmcblk1      179:96   0  59.6G  0 disk 
├─mmcblk1p1  179:97   0   122M  0 part /boot
└─mmcblk1p2  179:98   0  59.5G  0 part /
zram0        254:0    0   1.5G  0 disk [SWAP]
dd if=/dev/loop1p2 of=/dev/mmcblk2p2 bs=1M status=progress conv=fsync
mount /dev/mmcblk2p2 /mnt/esxmo/
scp -r /mnt/sxmo/boot/* /mnt/esxmo/boot
mv /mnt/esxmo/boot/boot.scr /mnt/esxmo/boot/boot.scrORIG
nano /mnt/esxmo/etc/fstab # set PARTLABEL for / and comment /boot
cat /mnt/esxmo/etc/fstab
 # Static information about the filesystems.
 # See fstab(5) for details.
 # <file system> <dir> <type> <options> <dump> <pass>
 PARTLABEL=SXMO /     ext4      	rw,relatime	0 1
 # UUID=841C-F9DD      	/boot     	vfat      	rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro	0 2
mkdir /mnt/esxmo/boot/extlinux
nano /mnt/esxmo/boot/extlinux/extlinux.conf
cat /mnt/esxmo/boot/extlinux/extlinux.conf
#/boot/extlinux/extlinux.conf
MENU TITLE Pinephone Pro Boot Menu
LABEL l0
MENU LABEL sxmo
FDT /boot/dtbs/rockchip/rk3399-pinephone-pro.dtb
KERNEL /boot/Image
INITRD /boot/initramfs-linux.img
APPEND root=PARTLABEL=SXMO console=ttyS2,115200 console=tty0 loglevel=4 rw rootwait fbcon=rotate:0 pinephone_keyboard.disable_input

Follow-up comments

  1. On first boot neither phosh nor sxmo resized their partition - sudo resize2fs sorted that.
  2. Any time an update rebuilds the initramfs it is necessary to delete /boot/boot.scr again to keep the rk2aw menu clean.
  3. The end result is a boot screen as follows:
Options to boot phosh or sxmo