-
Notifications
You must be signed in to change notification settings - Fork 78
使用Qemu和systemd nspawn搭建RISC V轻量级用户模式开发环境
除了本文,你还可以参考:https://github.com/felixonmars/archriscv-packages/wiki/Setup-Arch-Linux-RISC-V-Development-Environment
QEMU 是一套由法布里斯·贝拉(Fabrice Bellard)所编写的以 GPL 许可证分发源码的模拟处理器,在 GNU/Linux 平台上使用广泛。Bochs,PearPC 等与其类似,但不具备其许多特性,比如高速度及跨平台的特性,通过 KQEMU 这个闭源的加速器,QEMU 能模拟至接近真实电脑的速度。
systemd-nspawn
就像是 chroot 命令,是吃了类固醇的 chroot (chroot on steroids) .
systemd-nspawn
可用于在一个轻量命名空间容器中运行命令或操作系统。它比 chroot
更强大在于它完全虚拟化了文件系统层次结构、进程树、各种 IPC 子系统以及主机和域名。
需要准备一台安装有 Linux 操作系统的电脑,这里推荐 Debian、Arch Linux
安装 QEMU
安装 zstd
(用于解压根文件系统),qemu-user-static
,systemd-container
$ sudo apt-get install zstd qemu-user-static systemd-container
apt-get 命令会自动帮你将依赖的软件包装好
安装binfmt-qemu-static
,qemu-user-static
$ sudo pacman -S qemu-user-static qemu-user-static-binfmt
Arch Linux 用户不用安装systemd-container
注意: 两个软件包在 archlinuxcn 源里面,如果没有添加 archlinuxcn 仓库的话,请看Arch Linux 中文社区仓库,添加 archlinuxcn 仓库,然后在安装软件包。
下载安装 arch risc-v 根文件系统
$ wget -c https://archriscv.felixc.at/images/archriscv-20220727.tar.zst
将下载的根文件系统解压缩
-
arch linux 用户
$ mkdir archriscv $ sudo bsdtar -xvf archriscv-20220727.tar.zst -C archriscv
-
非 arch linux 用户
$ mkdir archriscv $ sudo tar -I zstd -xvf archriscv-20220727.tar.zst -C archriscv
$ sudo systemd-nspawn -D ./archriscv/ --machine archriscv -a -U
其中 -a
用于防止 PID=1 的程序不 reap zombie processes, -U
防止 sd-nspawn 内的进程使用 sd-nspawn 外用户的 UID。
$ systemd-nspawn --help
-D --directory=PATH Root directory for the container
-M --machine=NAME Set the machine name for the container
-a --as-pid2 Maintain a stub init as PID1, invoke binary as PID2
-U --private-users=pick Run within user namespace, autoselect UID/GID range
更多信息可参考 systemd-nspawn(1)
检查是否运行运行在 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 开发环境就搭建好了