Running your own Zephyr binary on LiteX/VexRiscv in Renode¶
Zephyr is a very capable RTOS governed by a Linux Foundation subproject. It is very well supported on the RISC-V architecture, as well as in LiteX.
Building a Zephyr application¶
To install all the dependencies and prepare the environment for building
the Zephyr application follow the official Zephyr Getting Started
Guide
up to point 4. On Linux you can follow the instructions from the point 5
on installing the Software Development Toolchain. The python version
in the FOMU toolchain may not work; remove it from your PATH before
attempting to build zephyr.
For other operating
systems, if you followed the instructions from the Required Software
section of this tutorial, you should have a toolchain in PATH
.
On macOS and Windows you also need to set some additional variables.
For macOS:
export ZEPHYR_TOOLCHAIN_VARIANT=cross-compile
export CROSS_COMPILE=riscv64-unknown-elf-
For Windows:
set ZEPHYR_TOOLCHAIN_VARIANT=cross-compile
set CROSS_COMPILE=riscv64-unknown-elf-
To build the shell
demo application for the LiteX/VexRiscv board run
the following commands on Linux and macOS:
cd ~/zephyrproject/zephyr
source zephyr-env.sh
west build -p auto -b litex_vexriscv samples/subsys/shell/shell_module/
And on Windows:
cd %HOMEPATH%\zephyrproject\zephyr
zephyr-env.cmd
west build -p auto -b litex_vexriscv samples\subsys\shell\shell_module\
The resulting ELF file will be in build/zephyr/zephyr.elf
.
Run the app in Renode¶
To run the app you just compiled, you basically need to replace the
precomipled demo binary with the one you want, by setting the zephyr
variable - see below.
Just like before, start Renode using the renode
command (or
./renode
if you built from sources).
You will see the Monitor, where you should type:
(monitor) $zephyr=@/path/to/zephyrproject/zephyr/build/zephyr/zephyr.elf
(monitor) start @scripts/single-node/litex_vexriscv_zephyr.resc
You should see a new window pop up for the serial port. In it, you should see the Zephyr interactive shell.
Debugging the app in Renode¶
In general, debugging in Renode is done with GDB just like with a physical board - you connect to a debug port and execute GDB commands as usual. For details, see the Renode debugging documentation.