User:Oogwaymaki

From PINE64
Revision as of 00:34, 26 June 2020 by Oogwaymaki (talk | contribs)
Jump to navigation Jump to search
Summary:

After following these steps:

- You'll have a Custom UBOOT (Crust ENABLED) that allows MultiBOOT Using 3 different OS's depending on key combo of volume up / volume down or none pressing on boot
- You'll be able to experiment on SD Card without Touching your EMMC
- You'll learn how to take a part a PINE PHONE IMAGE (most, and put each OS On one partition
=========================================================================================================


All the information here, has been discussed in the open source community on web sites. I have simply developed a process on how to do this on the pine phone.

We use utilities such as Cross Compilation, Uboot, Patches, which will be credited.

First step, make sure you have a cross compiler for your Computer, for particularly the arm device, you will need to download a few packages, I assume we're using Debian Linux (if your using another OS you can find similar commands by searching on the web or to make it simpler download a docker Debian image, and install the pre-requisites which I will list here for Debian)

You an also use vagrant/virtual box VMware or other virtualization platforms.


First please install these Dependencies:

apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu build-essential autoconf libtool cmake pkg-config git python-dev swig3.0 libpcre3-dev nodejs-dev crossbuild-essential-arm64 git losetup

The following main sources are needed:

This will download quite a few sources needed for Uboot and existing OS's available to PinePhone

https://github.com/crust-firmware/meta.git

We will also apply this patch:

https://megous.com/git/u-boot/patch/?id=0ab6225154c3d8b74f06fb3b181b52a9a64b4602

(I will attach the one I used I had to modify the above patch to work with the code.)

The crust-firmware also says you need to download the or1k compiler:

https://musl.cc/or1k-linux-musl-cross.tgz

I suggest untarring this in the /opt folder.


1. Once you have these dependency:

# cd /usr/src
# git clone https://github.com/crust-firmware/meta.git
# cd /usr/src/meta


Edit the following file Make file 

# Cross compiler
CROSS_aarch64	 = aarch64-linux-musl-
CROSS_or1k	 = or1k-linux-musl-

# General options
DEBUG		?= 0
REPRODUCIBLE	?= 0

# Board selection
BOARD		?= pinebook



Example:

# Cross compiler
CROSS_aarch64	 =  /usr/bin/aarch64-linux-gnu-
CROSS_or1k	 = /opt/or1k-linux-musl-cross/bin/or1k-linux-musl-

# General options
DEBUG		?= 0
REPRODUCIBLE	?= 0

# Board selection
BOARD		?= pinephone

# make

(this should take a 10-30 mins depending on speed..I hope less than 30 mins!!)

After making apply the patch..

# make again

now, go to your sdcard
(use a CLEAN scard NO Partitions)

fdisk /dev/sd#
create 4 primary partitions,
the 1rst one should be the "boot" partition containing Uboot stuff, I'd suggest a gigabyte
the other 3 could be your choice

Lets start with the first OS were going to use:

JUMPDRIVE (allows booting the EMMC and fixing it if we break it!!!)

Download it here:

https://github.com/dreemurrs-embedded/Jumpdrive/releases/download/0.4/pine64-pinephone.img.xz


then use losetup to mount the image to copy the files needed

root@wifirouter:/home/dave# losetup -P -f pine64-pinephone.img 

it'll mount a loop back

root@wifirouter:/home/dave# ls /dev/loop0*
/dev/loop0  /dev/loop0p1

Mount there first image:

root@wifirouter:/home/dave# mkdir /media/jumpdrive
root@wifirouter:/home/dave# mount /dev/loop0p1 /media/jumpdrive/

mount the sd card:

root@wifirouter:/media# mkdir /media/boot
root@wifirouter:/media# fdisk -l

Your pine phone looks like this DO NOT TOUCH EMMC You don't need to

Disk model: e eMMC          
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 4932F07F-4DC2-4A88-BEA9-6E165C4A5136

Device        Start      End  Sectors  Size Type
/dev/sda1       256     4095     3840  1.9M Linux filesystem
/dev/sda2      4097     6144     2048    1M Linux filesystem
/dev/sda3      6146    22460    16315    8M Linux filesystem
/dev/sda4     22461   153515   131055   64M Linux filesystem
/dev/sda5    153516   285156   131641 64.3M Linux filesystem
/dev/sda6    285157   416015   130859 63.9M Linux filesystem
/dev/sda7    416016   546875   130860 63.9M Linux filesystem
/dev/sda8    546876  5546875  5000000  2.4G Linux filesystem
/dev/sda9   5546876 10546875  5000000  2.4G Linux filesystem
/dev/sda10 10546876 28515591 17968716  8.6G Linux filesystem


Disk /dev/sdb: 119.8 GiB, 128579534848 bytes, 251131904 sectors
Disk model: e microSD       
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x50fdd1d4

Device     Boot     Start       End   Sectors  Size Id Type
/dev/sdb1            2048   2099199   2097152    1G 83 Linux
/dev/sdb2         2099200  65013759  62914560   30G 83 Linux
/dev/sdb3        65013760 127928319  62914560   30G 83 Linux
/dev/sdb4       127928320 251131903 123203584 58.8G 83 Linux
root@wifirouter:/media# mount /dev/sdb1 /media/boot/
root@wifirouter:/media# cd /media/boot
root@wifirouter:/media/boot# mkdir boot

root@wifirouter:/media/boot# mkdir -p multiboot/jumpdrive
root@wifirouter:/media/boot# cp * multiboot/jumpdrive 


End result should be like this:

root@wifirouter:/media/boot/multiboot/jumpdrive# ls -la
total 4988
drwxr-xr-x 2 root  root     4096 Jun 25 05:51 .
drwxr-xr-x 3 root  root     4096 Jun 25 05:46 ..
-rwxr-xr-x 1 32011 32011 3991895 Jun 25 05:45 Image.gz
-rwxr-xr-x 1 32011 32011 1068435 Jun 25 05:45 initramfs.gz
-rwxr-xr-x 1 32011 32011   33457 Jun 25 05:45 sun50i-a64-pinephone.dtb
root@wifirouter:/media/boot/multiboot/jumpdrive# pwd

Now, we need to flash Uboot and create Uboot script for booting this:







Sites Referenced/Inspiration:

https://www.96boards.org/documentation/iot/
https://github.com/dreemurrs-embedded/Jumpdrive
https://github.com/dreemurrs-embedded/Pineloader
https://www.thegeekstuff.com/2014/12/patch-command-examples/
https://stackoverflow.com/questions/9980186/how-to-create-a-patch-for-a-whole-directory-to-update-it
https://courses.linuxchix.org/kernel-hacking-2002/11-creating-applying-and-submitting-patches.html

patch from the link above to work: