Difference between revisions of "User:Oogwaymaki"

From PINE64
Jump to navigation Jump to search
(Undo revision 6002 by Oogwaymaki (talk))
Tag: Undo
Line 92: Line 92:
the 1rst one should be the "boot" partition containing Uboot stuff, I'd suggest a gigabyte
the 1rst one should be the "boot" partition containing Uboot stuff, I'd suggest a gigabyte
the other 3 could be your choice
the other 3 could be your choice
After creating partitions flash the image:
# cd build/pinephone
Do not use wrong drive, and copy exactly as this erases and puts the new Uboot on the sdcard
the first 512 sectors are partition you do NOT want to write that or you lose your partition
# dd if=u-boot-sunxi-with-spl.bin of=/dev/sdb bs=1024 seek=8 conv=sync
make sure your disk is ok
# fdisk -l
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:/usr/src#
If it looks like above its ok.


Lets start with the first OS were going to use:
Lets start with the first OS were going to use:

Revision as of 00:45, 26 June 2020

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

After creating partitions flash the image:

# cd build/pinephone

Do not use wrong drive, and copy exactly as this erases and puts the new Uboot on the sdcard
the first 512 sectors are partition you do NOT want to write that or you lose your partition
# dd if=u-boot-sunxi-with-spl.bin of=/dev/sdb bs=1024 seek=8 conv=sync


make sure your disk is ok


# fdisk -l
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:/usr/src# 

If it looks like above its ok.

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: