-
Notifications
You must be signed in to change notification settings - Fork 82
Setup Arch Linux RISC V Development Environment
This documentation helps you set up an Arch Linux RISC-V development environment with QEMU usermode and systemd-nspawn.
Currently, this documentation contains instructions for Arch Linux, Debian and Ubuntu.
Arch Linux
- Add [archlinuxcn] repo
We will install packages from [archlinuxcn] later.
Append to /etc/pacman.conf
:
[archlinuxcn]
Server = https://repo.archlinuxcn.org/$arch
There is also a list of public mirrors available.
Add PGP Keys:
$ sudo pacman -Sy && sudo pacman -S archlinuxcn-keyring
- Install packages
$ sudo pacman -S qemu-user-static binfmt-qemu-static
where binfmt-qemu-static
is for registering QEMU interpreter to execute RISC-V ELF files. Other necessary packages like zstd
and systemd-nspawn
are listed in the dependency tree of base
meta package, so they will also be installed by the provided command, hence there's no need to install them explicitly.
Debian and Ubuntu
$ sudo apt install zstd qemu-user-static systemd-container
where zstd
is for decompressing the Arch Linux RISC-V rootfs compressed tarball, and systemd-container
is for the systemd-nspawn
command, which we'll use later to spawn a container using the rootfs.
- Download rootfs
$ curl -O https://archriscv.felixc.at/images/archriscv-20210601.tar.zst
$ sha512sum archriscv-20210601.tar.zst
6f012a169fe6f1ea15aeb3283091466e7992f78d823951ee2170940fa030e7fa2394aee11bf67c29943d21579ab42d2262a3d5ca973b5de8be779f338ba1dd44 archriscv-20210601.tar.zst
- Decompress rootfs
Arch Linux
$ mkdir archriscv
$ sudo bsdtar -xf archriscv-20210601.tar.zst -C archriscv
Debian and Ubuntu
$ mkdir archriscv
$ sudo tar -I zstd -xf archriscv-20210601.tar.zst -C archriscv
$ sudo systemd-nspawn -D ./archriscv -a -U
where -D
provides the root directory for the container, -a
for preventing processes with PID 1 doesn't reap zombie children, -U
for preventing processes in container to use the same UID range as outside the container.
- Check the architecture
# uname -m
riscv64
- System upgrade
# pacman -Syu
- Install necessary packages
For example, install vim:
# pacman -S vim
- Set default editor
# echo 'export EDITOR=vim' >> ~/.bashrc && source ~/.bashrc
- Create a regular user and allow sudo access
# useradd -m <username>
where -m
for create the user's home directory.
Then run visudo
, add under ## User privilege specification
:
username ALL=(ALL) NOPASSWD: ALL
- Switch to the regular user
# exec su username
$ cd ~
$ pwd
/home/username
$ echo 'export EDITOR=vim' >> ~/.bashrc && source ~/.bashrc
Now we are all done.
- Write the program
In vim hello.c
, write:
#include <stdio.h>
int main(int argc, char *argv[])
{
printf("Hello RISC-V!\n");
return 0;
}
- Compile
$ gcc -o hello hello.c
- Check the file format
$ file hello
hello: ELF 64-bit LSB pie executable, UCB RISC-V, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-riscv64-lp64d.so.1, BuildID[sha1]=4a75c57e4e99654dca0d6dc91689dffbbe7dc581, for GNU/Linux 4.15.0, not stripped
RISC-V
is expected in the output.
- Run
$ ./hello
Hello RISC-V!