5. Running Keystone in RV32¶
Currently we support running Keystone using all three priviledges, which are Machine, Supervisor, and User mode (M/S/U). Currently, we are working on a Machine and User mode implementation on Keystone to better support embedded systems.
5.1. Setup RV32 Environment¶
First, run the rv32-setup.sh
script (located at the top-level directory) to install the RV32 toolchain (which uses the GC extensions).
./rv32-setup.sh
This script will unzip and install the RV32 toolchain and store it in ./riscv32
. The script will also set the $RISCV
environment variable to point to the riscv32
directory. We strongly recommend adding the following to your .bashrc
.
export RISCV=$(pwd)/riscv32
export PATH=$RISCV/bin:$PATH
5.2. Build SDK in RV32¶
We will now have to build the SDK in RV32. Go to your SDK directory and create a build directory. Remember to set your SDK path
mkdir <build directory>
cd <build directory>
export KEYSTONE_SDK_DIR=<install_directory>
cmake .. -DRISCV32=y
make
make install
This will build the SDK in RV32.
5.3. Build Keystone in RV32¶
Similar to the SDK, we may now build the entire Keystone framework in RV32. First, create a build directory and specify the RV32 flag.
mkdir <build directory>
cd <build directory>
cmake .. -DRISCV32=y
make
This will begin building Keystone in RV32.