User:Oogwaymaki
Revision as of 00:34, 26 June 2020 by Oogwaymaki (talk | contribs)
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: