h2. Prerequisites To clone the sources you must be able to ssh to git.linaro.org and be part of the big-little-switcher-private group. Contact "Philip Colmer" for access requests. h2. How to download and build Android sources Recommended method to do a linaro android build is to use linaro android build script(linaro_android_build_cmds.sh). You can download this script from the Downloads section of the build page. Use this script to do a complete ARMv8 Android build for FVP models from scratch. If you prefer to do it manuaaly then follow the "Get the source" and "Build" instructions below. h3. Get the source
  $ sudo add-apt-repository ppa:linaro-maintainers/tools
  $ sudo apt-get update
  $ sudo apt-get install gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc openjdk-7-jdk openjdk-7-jre vim-common python-parted python-yaml wget uuid-dev
  $ curl "https://android.git.linaro.org/gitweb?p=tools/repo.git;a=blob_plain;f=repo;hb=refs/heads/stable" > repo
  $ chmod +x repo
  $ ./repo init -u ssh://$USER@linaro-private.git.linaro.org/srv/linaro-private.git.linaro.org/android/manifest.git -b linaro-android-14.11-release -m armv8-juice-lsk.xml
  $ sed -i "s/linaro-big-little-switcher-bot/$USER/" .repo/manifest.xml
  $ ./repo sync # this may take some time
h3. Build
  $ export CPUS=`grep -c processor /proc/cpuinfo`
  $ export TARGET_PRODUCT=juice
  $ export TARGET_BUILD_VARIANT=eng
  $ . build/envsetup.sh
  $ make -j${CPUS} boottarball systemtarball userdatatarball
h2. Get linaro image tools Run these commands to get all the dependencies for linaro-image-tools
  $ sudo add-apt-repository ppa:linaro-maintainers/tools
  $ sudo apt-get update
  $ sudo apt-get install linaro-image-tools
You can also use the tip of linaro-image-tools from http://git.linaro.org/infrastructure/linaro-image-tools.git h2. How to run Juice images on FVP models h3. Create mmc image to be used on ARM FVP Base AEMv8 models Run linaro image tools pre. $ linaro-android-media-create --image_file mmc.img --image_size 2000M --dev vexpress --system system.tar.bz2 --userdata userdata.tar.bz2 --boot boot.tar.bz2 If you're using tip of linaro image tools pre. $ ./linaro-image-tools/linaro-android-media-create --image_file mmc.img --image_size 2000M --dev vexpress --system system.tar.bz2 --userdata userdata.tar.bz2 --boot boot.tar.bz2 h3. Extract the preboot files pre. tar -jxvf boot.tar.bz2 h3. Setup the runtime environment
  $ export ARMLMD_LICENSE_FILE="8224@localhost"
  $ ssh -L 8224:localhost:8224 -L 18224:localhost:18224 -N $USER@flexlm.linaro.org
h3. Running the models (verified on FVP Base model build 5602)
  $ cd boot
  $ /path/to/FVP_Base_AEMv8A-AEMv8A/models/Linux64_GCC-4.1/FVP_Base_AEMv8A-AEMv8A \
        -C pctl.startup=0.0.0.0 \
        -C bp.secure_memory=0 \
        -C cluster0.NUM_CORES=1 \
        -C cluster1.NUM_CORES=1 \
        -C cache_state_modelled=0 \
        -C bp.pl011_uart0.untimed_fifos=1 \
        -C bp.secureflashloader.fname=fvp_bl1.bin \
        -C bp.flashloader0.fname=fvp_fip.bin \
        -C bp.virtioblockdevice.image_path=../mmc.img
h3. Console redirection To redirect the console open a terminal and run pre. telnet 127.0.0.1 5000 h3. Set UEFI configuration, update kernel/ramdisk path and bootargs Stop the UEFI boot process and configure it for FVP models:
$ telnet 127.0.0.1 -debug 5000 -e ^z
Telnet escape character is 'b'.
Telnet escape character is '^Z'.
Trying 127.0.0.1...
setsockopt (SO_DEBUG): Permission denied
Connected to 127.0.0.1.
Escape character is '^Z'.
  7 seconds
[1] Linaro disk image on virtio
[2] Shell
[3] Boot Manager
Start: 3
[1] Add Boot Device Entry
[2] Update Boot Device Entry
[3] Remove Boot Device Entry
[4] Update FDT path
[5] Return to main menu
Choice: 2
[1] Linaro disk image on virtio
Update entry: 1
File path of the EFI Application or the kernel: kernel
Has FDT support? [y/n] y
Add an initrd: [y/n] y
File path of the initrd: ramdisk.img
Arguments to pass to the binary: console=ttyAMA0 earlyprintk=pl011,0x1c090000 amba-clcd.mode=VGA
Description for this new Entry: Linaro disk image on virtio
[1] Add Boot Device Entry
[2] Update Boot Device Entry
[3] Remove Boot Device Entry
[4] Update FDT path
[5] Return to main menu
Choice: 5
[1] Linaro disk image on virtio
[2] Shell
[3] Boot Manager
Start: 1
   PEI   1122 ms
   DXE    259 ms
   BDS      8 ms
Total Time = 1390 ms

[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Linux version 3.10.40-04438-g6a78140 (pundiramit@flying-dutchman) (gcc version 4.9 20140514 (prerelease) (GCC) ) #1 SMP Mon Jun 2 14:50:25 IST 2014
h3. Black screen The boot screen has been disabled to speed up booting. This means you may not see anything on the CLCD terminal for a while depending on the performance of the machine the model is running on. For example a first boot on a 2 GHz machine with 32 GB of RAM took 20 minutes. Subsequent boots should take approximately half the time to boot. h3. Attach ADB ADB on FVP Base models are supported over network. Follow the instructions here https://wiki.linaro.org/Internal/Projects/Juice/SetupNetworkingOnModelsUsingBridges to setup networking and use adb. h2. How to run Juice images on Juno h3. Plug in the USB stick and flash Juice images on that USB device Run 'dmesg' and find out correct USB /dev node. pre. $ dmesg Look for a line that looks like the following at the end of the log pre. [288582.790722] sdc: sdc1 sdc2 sdc3 sdc4 < sdc5 sdc6 > WARNING: In the next step, make sure you use /dev/"whatever you see above". You can erase your hard drive with the wrong parameter. Run linaro image tools pre. $ linaro-android-media-create --mmc /dev/sdX --dev vexpress --boot boot.tar.bz2 --system system.tar.bz2 --userdata userdata.tar.bz2 If you're using tip of linaro image tools pre. $ ./linaro-image-tools/linaro-android-media-create --mmc /dev/sdX --dev vexpress --boot boot.tar.bz2 --system system.tar.bz2 --userdata userdata.tar.bz2 Now unplug the USB stick and connect it to Juno and boot from it. h3. Configure Juno boot time UEFI configuration Copy Preboot firmwares (bl1.bin and fip.bin) from boot.tar.bz2 to /SOFTWARE/. Stop at UEFI prompt and change few parameters shown below
Select USB device's boot partition to boot from while "Selecting the boot device".
Change kernel in UEFI to "kernel" in the boot partition
Change ramdisk in UEFI to "ramdisk.img" in the boot partition
Change  bootargs to "console=ttyAMA0,115200 earlyprintk=pl011,0x7ff80000"
Note: There is a bug in UEFI where you won't see USB disk partitions while selecting the boot device. You have to press ESCAPE at "Select the boot device" menu item and then continue. It should get your Juno board up and running.