It's a minimal meta-sifive layer on top of meta-riscv to provide additional modifications and new disk image targets. Using OE you will be able to:
- build predefined disk images for QEMU and SiFive HiFive Unleashed development board (incl. HiFive Unleashed Expansion Board from Microsemi);
- build custom disk images with additional software packages from various third-party OE layers;
- quickly launch QEMU VM instance with your built disk image;
- build bootloader binaries (ZSBL, FSBL, OpenSBI, U-Boot);
- build Device Tree Binary (DTB);
- build Linux kernel images;
- easily modify disk partition layout.
Berkeley Boot Loader (BBL) is replaced by OpenSBI and uSD (microSD) disk images now also incl. FSBL. ZSBL is also built, but it's not possible to use it as it resides in ROM.
For more information on particular release see ReleaseNotes
directory in freedom-u-sdk repository on GitHub.
For advanced OE usage we advice to look into the following third-party manuals:
Install repo
command from Google if not available on your host system. Please follow the official instructions by Google.
Then install a number of packages for BitBake (OE build tool) to work properly on your host system. BitBake itself depends on Python 3. Once you have Python 3 installed BitBake should be able to tell you most of the missing packages.
For Ubuntu 18.04 (or newer) install python3-distutils package.
Detailed instructions for various distributions can be found in "Required Packages for the Build Host" section in Yocto Project Reference Manual.
This needs to be done every time you want a clean setup based on the latest layers.
mkdir riscv-sifive && cd riscv-sifive
repo init -u git://github.com/sifive/meta-sifive -b master -m tools/manifests/sifive.xml
repo sync
If you want to make modifications to existing layers then creating working branches in all repositories is advisable.
repo start work --all
If you want to pull in the latest changes in all layers.
cd riscv-sifive
repo sync
repo rebase
. ./meta-sifive/setup.sh
There are two disk image targets added by meta-sifive layer:
-
demo-coreip-cli
- basic command line image (recommended); -
demo-coreip-xfce4
- basic graphical disk image with Xfce 4 desktop environment (requires HiFive Unleashed Expansion Board with supported GPUs, for example, Radeon HD 6450 or Radeon HD 5450).
There are two machine targets currently tested:
-
qemuriscv64
- RISC-V 64-bit (RV64GC) for QEMU virt machine; -
freedom-u540
- SiFive HiFive Unleashed development board with or without HiFive Unleashed Expansion Board from Microsemi.
It's not possible to use disk images built for
freedom-u540
with QEMU 4.0 and instructions provided below.Building disk images is CPU intensive, requires <10GB of sources downloaded over the Internet and <110GB of local storage.
Building disk image takes a single command which my take anything from 30 minutes to several hours depending on your hardware. Examples:
MACHINE=qemuriscv64 bitbake demo-coreip-cli
MACHINE=freedom-u540 bitbake demo-coreip-cli
MACHINE=freedom-u540 bitbake demo-coreip-xfce4
OE provides easy to use wrapper for QEMU:
MACHINE=qemuriscv64 runqemu nographic slirp
You will find all available build fragments (incl. disk images) in $BUILDDIR/tmp-glibc/deploy/images/$MACHINE
where MACHINE
is freedom-u540
for this particular case.
Disk images files use <image>-<machine>.<output_format>
format, for example,
demo-coreip-cli-freedom-u540.wic.gz
. We are interested in .wic.gz
disk images for writing to uSD card.
Be very careful while picking /dev/sdX device! Look at dmesg, lsblk, blkid, GNOME Disks, etc. before and after plugging in your uSD card to find a proper device. Double check it to avoid overwriting any of system disks/partitions!
Unmount any mounted partitions from uSD card before writing!
We advice to use 16GB or 32GB uSD cards. 8GB cards (shipped with HiFive Unleashed) can still be used with
demo-coreip-cli
CLI images.
Finally write uSD card:
zcat demo-coreip-cli-freedom-u540.wic.gz | sudo dd of=/dev/sdX bs=512K iflag=fullblock oflag=direct conv=fsync status=progress
You will need to modify MSEL to allow using FSBL and OpenSBI + U-Boot bootloaders from uSD card instead of SPI NAND chip:
USB LED Mode Select Ethernet
+===|___|==****==+-+-+-+-+-+-+=================|******|===+
| | | | | |X| | | | |
| | | | | | | | | | |
| HFXSEL->|X|X|X|X| |X| |______| |
| +-+-+-+-+-+-+ |
| RTCSEL-----/ 0 1 2 3 <--MSEL |
| |
After booting, a SSH daemon is started and an IP address is obtained via DHCP (assuming connection via Ethernet to a DHCP server). You can login from another machine on the same network with ssh root@W.X.Y.Z
(no password). You can also connect via USB by running screen /dev/ttyUSB<X> 115200
, where the correct choice of <X>
= 0,1,2,..., will depend on your machine (you may have to experiment). Again, use login root
with no password (you can set one). Once logged in, you can run ip addr
to learn your IP address.
If you want to file issues, send patches and make feature/enhancement requests use meta-sifive or freedom-u-sdk repositories on GitHub.
You are also welcome to join SiFive Forums there we have HiFive Unleashed category for discussions.
-
Avoid overclocking SOC using CPUFreq if you are using HiFive Unleashed Expansion Board from Microsemi as this will hang the board. Hard reset will be required.
-
You might notice sluggish Xfce4 performance on the first boot if you are using HiFive Unleashed Expansion Board from Microsemi with GPU. Rebooting seems to resolve the issue.