2017-04-18

bootstrap of Allwinner A64

source :
1. [u-boot.git] / board / sunxi / README.pine64
2. Allwinner 64-bit boards README

   1 Pine64 board README
   2 ====================
   3
   4 The Pine64(+) is a single board computer equipped with an AArch64 capable ARMv8
   5 compliant Allwinner A64 SoC.
   6 This chip has ARM Cortex A-53 cores and thus can run both in AArch32
   7 (compatible to 32-bit ARMv7) and AArch64 modes. Upon reset the SoC starts
   8 in AArch32 mode and executes 32-bit code from the Boot ROM (BROM).
   9 This has some implications on U-Boot.
  10
  11 Quick start
  12 ============
  13 - Get hold of a boot0.img file (see below for more details).
  14 - Get the boot0img tool source from the tools directory in [1] and compile
  15   that on your host.
  16 - Build U-Boot:
$ git clone https://github.com/u-boot/u-boot.git
$ cd u-boot
$ export CROSS_COMPILE=aarch64-linux-gun-
$ make pine64_plus_defconfig
$ make
  17 $ export CROSS_COMPILE=aarch64-linux-gnu-
  18 $ make pine64_plus_defconfig
  19 $ make
  20 - You also need a compiled ARM Trusted Firmware (ATF) binary. Checkout the
  21   "allwinner" branch from the github repository [2] and build it:
$ git clone https://github.com/apritzel/arm-trusted-firmware.git
$ cd arm-trusted-firmware
$ git checkout allwinner
$ export CROSS_COMPILE=aarch64-linux-gnu-
$ make PLAT=sun50iw1p1 DEBUG=1 bl31
  22 $ export CROSS_COMPILE=aarch64-linux-gnu-
  23 $ make PLAT=sun50iw1p1 DEBUG=1 bl31
  24   The resulting binary is build/sun50iw1p1/debug/bl31.bin.
  25
  26 Now put an empty (or disposable) micro SD card in your card reader and learn
  27 its device file name, replacing /dev/sd below with the result (that could
  28 be /dev/mmcblk as well):
  29
  30 $ ./boot0img --device /dev/sd -e -u u-boot.bin -B boot0.img \
  31         -d trampoline64:0x44000 -s bl31.bin -a 0x44008 -p 100
  32 (either copying the respective files to the working directory or specifying
  33 the paths directly)
  34
  35 This will create a new partition table (with a 100 MB FAT boot partition),
  36 copies boot0.img, ATF and U-Boot to the proper locations on the SD card and
  37 will fill in the magic Allwinner header to be recognized by boot0.
  38 Prefix the above call with "sudo" if you don't have write access to the
  39 uSD card. You can also use "-o output.img" instead of "--device /dev/sd"
  40 to create an image file and "dd" that to the uSD card.
  41 Omitting the "-p" option will skip the partition table.
  42
  43 Now put this uSD card in the board and power it on. You should be greeted by
  44 the U-Boot prompt.
  45
  46
  47 Main U-Boot
  48 ============
  49 The main U-Boot proper is a real 64-bit ARMv8 port and runs entirely in the
  50 64-bit AArch64 mode. It can load any AArch64 code, EFI applications or arm64
  51 Linux kernel images (often named "Image") using the booti command.
  52 Launching 32-bit code and kernels is technically possible, though not without
  53 drawbacks (or hacks to avoid them) and currently not implemented.
  54
  55 SPL support
  56 ============
  57 The main task of the SPL support is to bring up the DRAM controller and make
  58 DRAM actually accessible. At the moment there is no documentation or source
  59 code available which would do this.
  60 There are currently two ways to overcome this situation: using a tainted 32-bit
  61 SPL (involving some hacks and resulting in a non-redistributable binary, thus
  62 not described here) or using the Allwinner boot0 blob.
  63
  64 boot0 method
  65 -------------
  66 boot0 is Allwiner's secondary program loader and it can be used as some kind
  67 of SPL replacement to get U-Boot up and running.
  68 The binary is a 32 KByte blob and contained on every Pine64 image distributed
  69 so far. It can be easily extracted from a micro SD card or an image file:
  70 # dd if=/dev/sd of=boot0.bin bs=8k skip=1 count=4
  71 where /dev/sd is the device name of the uSD card or the name of the image
  72 file. Apparently Allwinner allows re-distribution of this proprietary code
  73 as-is.
  74 For the time being this boot0 blob is the only redistributable way of making
  75 U-Boot work on the Pine64. Beside loading the various parts of the (original)
  76 firmware it also switches the core into AArch64 mode.
  77 The original boot0 code looks for U-Boot at a certain place on an uSD card
  78 (at 19096 KB), also it expects a header with magic bytes and a checksum.
  79 There is a tool called boot0img[1] which takes a boot0.bin image and a compiled
  80 U-Boot binary (plus other binaries) and will populate that header accordingly.
  81 To make space for the magic header, the pine64_plus_defconfig will make sure
  82 there is sufficient space at the beginning of the U-Boot binary.
  83 boot0img will also take care of putting the different binaries at the right
  84 places on the uSD card and works around unused, but mandatory parts by using
  85 trampoline code. See the output of "boot0img -h" for more information.
  86 boot0img can also patch boot0 to avoid loading U-Boot from 19MB, instead
  87 fetching it from just behind the boot0 binary (-B option).
  88
  89 FEL boot
  90 =========
  91 FEL is the name of the Allwinner defined USB boot protocol built-in the
  92 mask ROM of most Allwinner SoCs. It allows to bootstrap a board solely
  93 by using the USB-OTG interface and a host port on another computer.
  94 Since FEL boot does not work with boot0, it requires the libdram hack, which
  95 is not described here.
  96
  97 [1] https://github.com/apritzel/pine64/
  98 [2] https://github.com/apritzel/arm-trusted-firmware.git

2017-04-16

Linux - how to format multiple file systems within one file?

source : Linux - how to format multiple file systems within one file?

psihodelia:

Linux - how to format multiple file systems within one file?
I need to create a disk image with two empty file systems. I have created it using

dd if=/dev/zero of=./disk.img bs=1MiB count=1024

Next, I have created 2 primary partitions using fdisk disk.img; one is FAT32 and other is EXT3. Now, I have to format both partitions in order to create file-systems to be mounted as -o loop devices. But I can't understand how to format them? I can't use mkfs.vfat on disk.img. So I am totally confused.
SOLUTION: Thanks to answer from @pjc50 I found very simple solution:

sudo aptitude install multipath-tools
sudo kpartx -a disk.img   #it maps (mounts) found partitions to /dev/mapper/loop...
sudo mkfs.vfat -F 32 -n boot /dev/mapper/loop0p1
sudo mkfs.ext3 -L rootfs /dev/mapper/loop0p2

A drawback of this solution is requirement of superuser rights.

-----------------------------------------------------------------------
karatedog:
I would go with the tools I have in mind:
create a new VM in Virtualbox with one disk, that would usually be /dev/sda
boot into the VM with a GParted Live CD
partition and format the disk in the VM to your needs (2 partitions, different file systems, etc.)
then use dd to export /dev/sda to a file
With an educated guess it would take about 15 minutes.

-----------------------------------------------------------------------
Shawn Chin:
You can do so by first mounting your partitions to /dev/loop? using losetup with the -o option to specify a suitable offset to your partition. The offset can be calculated based on the output of fdisk -l disk.img (start_sector * sector_size).
For example:

losetup -o32256 /dev/loop1 ./disk.img   # mount first partition

Once mounted, you can then proceed to format the partition using mkfs.*:

mkfs.vfat -F32 /dev/loop1

For more details and examples, see the following articles:
http://wiki.osdev.org/Loopback_Device#Mounting
http://web2.clarkson.edu/projects/itl/honeypot/ddtutorial.txt
http://wiki.eeeuser.com/howtocustomrestoreimage:pt2mkcustomimage

-----------------------------------------------------------------------
pjc50
It appears you can use the kpartx tools: http://robert.penz.name/73/kpartx-a-tool-for-mounting-partitions-within-an-image-file/
Kpartx can be used to set up device mappings for the partitions of any partitioned block device. It is part of the Linux multipath-tools. With kpartx -l imagefile you get an overview of the partitions in the image file and with kpartx -a imagefile the partitions will accessible via /dev/mapper/loop0pX (X is the number of the partition). You can mount it now with mount /dev/mapper/loop0pX /mnt/ -o loop,ro. After unmounting you can disconnect the mapper devices with kpartx -d imagefile.