Skip to content

使用Qemu和systemd nspawn搭建RISC V轻量级用户模式开发环境

Jiuyang Liu edited this page Oct 6, 2021 · 17 revisions

使用 QEMU 和 systemd nspawn 搭建 RISC-V 轻量级用户模式开发环境


QEMU 是什么

QEMU 是一套由法布里斯·贝拉(Fabrice Bellard)所编写的以 GPL 许可证分发源码的模拟处理器,在 GNU/Linux 平台上使用广泛。Bochs,PearPC 等与其类似,但不具备其许多特性,比如高速度及跨平台的特性,通过 KQEMU 这个闭源的加速器,QEMU 能模拟至接近真实电脑的速度。

systemd-nspawn 是什么

systemd-nspawn 就像是 chroot 命令,是吃了类固醇的 chroot (chroot on steroids) . systemd-nspawn 可用于在一个轻量命名空间容器中运行命令或操作系统。它比 chroot 更强大在于它完全虚拟化了文件系统层次结构、进程树、各种 IPC 子系统以及主机和域名。

环境搭建

一、准备工作

需要准备一台安装有 Linux 操作系统的电脑,这里推荐 Debian、Arch Linux

二、需要安装的软件

安装 QEMU

Debian

安装qemu-user-binfmt,qemu-user-static,systemd-container

$ sudo apt-get install qemu-user-binfmt qemu-user-static systemd-container

apt-get 命令会自动帮你将依赖的软件包装好

Arch Linux

安装binfmt-qemu-static,qemu-user-static

$ sudo pacman -S qemu-user-static binfmt-qemu-static

Arch Linux 用户不用安装systemd-container

注意: 两个软件包在 archlinuxcn 源里面,如果没有添加 archlinuxcn 仓库的话,请看Arch Linux 中文社区仓库,添加 archlinuxcn 仓库,然后在安装软件包。

三、配置你的 RISC-V 环境

下载安装 arch risc-v 根文件系统

$ wget -c http://mirrors.wsyu.edu.cn/archriscv/images/archriscv-20210601.tar.zst

将下载的根文件系统解压缩

  • arch linux 用户

    $ mkdir archriscv
    $ sudo bsdtar -xvf archriscv-20210601.tar.zst -C archriscv
    
  • 非 arch linux 用户

    $ mkdir archriscv
    $ sudo tar -I zstd -xvf archriscv-20210601.tar.zst -C archriscv
    

    如果没有 zstd,则需要安装,安装命令如下

    $ sudo apt-get install zstd
    

四、启动虚拟机

$ sudo systemd-nspawn -D /home/tsuibin/archriscv/ --machine archriscv

五、检查环境及编译一个 RISC-V 程序

检查是否运行运行在 riscv64 模式

# uname -m
riscv64

安装 vim

# sudo pacman -S vim

使用 vim 编写一个简单的 c 程序

# vim hello.c

输入

#include <stdio.h>

int main(int argc, char *argv[])
{
        printf("Hello RISC-V! \n");
        return 0;
}

编译

# gcc hello.c -o hello

检查编译后的文件格式

# 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 的 elf 文件就说明 gcc 正常 运行 hello

# ./hello
Hello RISC-V!

到此,轻量级的 RISC-V 开发环境就搭建好了

Clone this wiki locally