Juno platform software user guide

1.   Notice

The Juno software stack uses the Yocto project to build a Board Support Package (BSP) and the Poky Linux distribution. The Yocto project uses Bitbake to build the software stack.

2.   Prerequisites

These instructions assume that:
  • Your host PC is running Ubuntu Linux 18.04 LTS.
  • You are running the provided scripts in a bash shell environment.
The following utilities must be available on your host PC:
  • chrpath
  • compression library
  • diffstat
  • gawk
  • makeinfo
  • openssl headers
  • pip
  • repo
  • yocto

To resolve these dependencies, run:

sudo apt-get update
sudo apt-get install chrpath gawk texinfo libssl-dev diffstat wget git-core unzip gcc-multilib \
build-essential socat cpio python python3 python3-pip python3-pexpect xz-utils debianutils \
iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev pylint3 xterm git-lfs openssl \
curl libncurses-dev libz-dev python-pip repo
Note that this software has been tested with
  • repo version 2.11
  • python version 2.7

3.   Provided components

Within the Yocto project, each component included in the Juno software stack is specified as a bitbake recipe. The recipes specific to Juno are located at: <workspace>/layers/meta-arm.

4.   Syncing and Building software stack

Create a new folder that will be your workspace, which will henceforth be referred to as <workspace> in these instructions

mkdir <workspace>
cd <workspace>
repo init -u https://git.linaro.org/landing-teams/working/arm/arm-reference-platforms-manifest.git -m juno-yocto.xml -b refs/tags/JUNO-2021.04.27
repo sync -j$(nproc)
export DISTRO="poky"
export MACHINE="juno"
source setup-environment
bitbake core-image-minimal

The initial clean build will be lengthy, given that all host utilities are to be built as well as the target images. This includes host executables (python, cmake, etc.) and the required toolchain(s)

Once the build is successful, all images will be placed in the <workspace>/build-poky/tmp-poky/deploy/images/juno directory.

Note that the BSP includes the Poky Linux distribution, which offers BusyBox-like utilities.

4.1.   Software Components

4.1.1.   Trusted Firmware-A

Based on Trusted Firmware-A

Recipe <workspace>/layers/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/trusted-firmware-a-juno.inc
  • <workspace>/build-poky/tmp-poky/deploy/image/juno/bl1.bin
  • <workspace>/build-poky/tmp-poky/deploy/image/juno/fip.bin

4.1.2.   System Control Processor (SCP)

Based on SCP Firmware

Recipe <workspace>/layers/meta-arm/meta-arm-bsp/recipes-bsp/scp-firmware/scp-firmware-juno.inc
  • <workspace>/build-poky/tmp-poky/deploy/image/juno/scp_ramfw.bin
  • <workspace>/build-poky/tmp-poky/deploy/image/juno/scp_romfw_bypass.bin

4.1.3.   U-Boot

Based on U-Boot gitlab

Recipe <workspace>/layers/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot_2020.07.bbappend
  • <workspace>/build-poky/tmp-poky/deploy/image/juno/u-boot.bin

4.1.4.   Linux

The recipe responsible for building a 5.4 version of the Yocto Linux kernel

Recipe <workspace>/layers/openembedded-core/meta/recipes-kernel/linux/linux-yocto_5.4.bb
  • <workspace>/build-poky/tmp-poky/deploy/image/juno/Image

4.1.5.   Poky Linux distro

The layer is based on the poky Linux distribution. The provided distribution is based on BusyBox and built using glibc.

Recipe <workspace>/layers/openembedded-core/meta/recipes-core/images/core-image-minimal.bb
  • <workspace>/build-poky/tmp-poky/deploy/image/juno/core-image-minimal-juno.ext4

4.2.   Running the software on Juno

Copy <workspace>/build-poky/tmp-poky/deploy/image/juno/firmware-image-juno.tar.gz into Juno SDCARD

Connect Juno's serial port and USB type B port (both on the back panel) to the computer
Open a terminal emulator (e.g. minicom) on the computer
Power on the Juno board
On the terminal emulator:
Cmd> usb_on

On the host computer:
(adjust path to JUNO mount point as necessary):
rm -rf /media/username/JUNO/* # make a back-up first
tar -xf <workspace>/build-poky/tmp-poky/deploy/image/juno/firmware-image-juno.tar.gz -C /media/username/JUNO/
umount /media/username/JUNO/ # may take some time to sync

4.2.1.   Disk boot

Prepare a USB stick

Insert a USB stick (min. 8GB) to a computer running Linux, Find out which device it is using "lsblk" if the usb stick already has non-GPT partitions, please delete all the partitions manually before issuing below command Write the image to the USB stick and eject:

sudo dd if=<workspace>/build-poky/tmp-poky/deploy/image/juno/core-image-minimal-juno.ext4 of=/dev/sdX bs=1M
sudo eject /dev/sdX

Insert the USB stick in Juno board (bottom-right port on the back panel)

Refer Juno Getting Started documentation

4.2.2.   NFS boot

Prepare NFS root file system

mkdir /path/to/nfsroot
cd /path/to/nfsroot
sudo tar xjf <workspace>/build-poky/tmp-poky/deploy/image/juno/core-image-minimal-juno.tar.bz2 # root is required

Set up an NFS server and export the nfsroot in /etc/exports:

/path/to/nfsroot *(rw,nohide,insecure,no_subtree_check,async,no_root_squash)

Restart the NFS server or run:

sudo exportfs -a

configure u-boot bootcmd


5.   AArch32 builds for Juno development board

yocto support for juno 32-bit is not supported

Copyright (c) 2020, Arm Limited. All rights reserved.