QEMU启动RISC-V架构OpenEuler并配置OSC环境

基于Ubuntu 18.04,QEMU 8.0.2,OpenEuler 22.09

安装QEMU

安装基础编译工具

sudo apt install build-essential autoconf automake autotools-dev pkg-config bc curl \
                 gawk git bison flex texinfo gperf libtool patchutils mingw-w64 libmpc-dev \
                 libmpfr-dev libgmp-dev libexpat-dev libfdt-dev zlib1g-dev libglib2.0-dev \
                 libpixman-1-dev libncurses5-dev libncursesw5-dev meson libvirglrenderer-dev libsdl2-dev  -y
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt install python3.8 python3-pip  -y
sudo apt install -f
pip3 install meson

下载QEMU

建立文件夹用于编译:

cd && mkdir -p qemu-build

建立文件夹用于安装:

cd && mkdir -p /home/user/program/riscv64-qemu

可登录官网将版本号换成最新版本即可:

cd qemu-build && wget  "https://download.qemu.org/qemu-8.0.2.tar.xz"
tar -xf qemu-8.0.2.tar.xz --strip-components=1 

安装QEMU

cd qemu-build && ./configure --target-list=riscv32-softmmu,riscv32-linux-user,riscv64-linux-user,riscv64-softmmu \
               --enable-kvm --enable-sdl \
               --prefix=/home/user/program/riscv64-qemu
make install -j $(nproc)

配置环境变量

echo 'export QEMU_HOME=/home/user/program/riscv64-qemu' >> ~/.bashrc && echo 'export PATH=$QEMU_HOME/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

下载 OpenEuler RISC-V 系统镜像

建立目录:

cd && mkdir -p /home/user/openeuler

根据自己的用户名修改user

下载OpenEuler 22.09版本,下载目录下所有文件/home/user/openeuler。如需下载其他版本请进入其他目录选择下载即可。

也可以根据自己的情况进入镜像站列表选择下载速度更快的镜像站下载

最新的23.03版本需要在中科院镜像站下载

文件说明:

  • fw_payload_oe_qemuvirt.elf: 利用 openSBI 将 kernel-5.10 的 image 作为 payload 所制作的 QEMU 启动所需文件
  • openEuler-22.09-qemu-xfce.qcow2.tar.zst: openEuler RISC-V QEMU GUI 镜像压缩包
  • preview_start_vm_xfce.sh: GUI 虚拟机启动脚本
  • openeuler-22.09-qemu.qcow2.tar.zst: openEuler RISC-V QEMU headless 镜像压缩包
  • preview_start_vm.sh: headless 虚拟机启动脚本

解压:

sudo apt-get install zstd
tar -I 'zstdmt' -xvf openEuler-22.09-riscv64-qemu.qcow2.tar.zst

执行启动脚本

chmod +x preview_start_vm.sh
bash preview_start_vm.sh

登录系统

  • 用户名: root
  • 默认密码: openEuler12#$
openEuler 22.09
Kernel 5.10.0 on an riscv64

4penEuler-riscv6
 login: openEuler 22.09
Kernel 5.10.0 on an riscv64

openEuler-riscv64 login: root
Password: 


Welcome to 5.10.0

System information as of time:   Mon Jul  3 07:52:19 PM CST 2023

System load:   0.17
Processes:   117
Memory used:   .6%
Swap used:   0.0%
Usage On:   6%
Users online:   1


[root@openEuler-riscv64 ~]# ls
[root@openEuler-riscv64 ~]# pwd

远程登录系统

ssh -p 12055 root@localhost

配置系统

以下操作均在root用户下执行,如果切换了用户会有提示。因为系统初始状态没有普通用户,也没有sudo,所以需要使用root完成一些基础配置。

修改root密码

原密码太复杂,修改简单密码

passwd root
# 输入两次密码

添加普通用户

# 添加用户 user
useradd -s /bin/bash -d /home/user -m user
passwd user
# 输入两次密码
# 添加管理员权限
usermod -aG wheel user

修改时间

echo "NTP=ntp.aliyun.com" >> /etc/systemd/timesyncd.conf
systemctl restart systemd-timesyncd.service

查看timesyncd运行状态:

systemctl status systemd-timesyncd.service

date命令可查看当前系统时间。验证是否配置成功。

时间务必正确设置,错误的时间会影响诸如https的TLS认证等过程。

配置DNS

vim /etc/resolv.conf
nameserver 119.29.29.29

配置软件包源

配置文件为 /etc/yum.repos.d/openEuler.repo 下

mv /etc/yum.repos.d/openEuler.repo  /etc/yum.repos.d/openEuler.repo.bk && sudo bash -c "cat << EOF > /etc/yum.repos.d/openEuler.repo
# just for test
[mainline]
name=mainline
baseurl=https://mirror.iscas.ac.cn/openeuler-sig-riscv/openEuler-RISC-V/preview/openEuler-22.09-V1-riscv64/repo/22.09/
enabled=1
gpgcheck=0
# just for test
[epol]
name=epol
baseurl=https://mirror.iscas.ac.cn/openeuler-sig-riscv/openEuler-RISC-V/preview/openEuler-22.09-V1-riscv64/repo/22.09/
enabled=1
gpgcheck=0
[extra]
name=extra
baseurl=https://mirror.iscas.ac.cn/openeuler-sig-riscv/openEuler-RISC-V/preview/openEuler-22.09-V1-riscv64/repo/extra/
enabled=1
gpgcheck=0
EOF"

需要注意的是,因为OpenEuler还在快速发展中,镜像地址可能会发生变化,所以需确认地址是否能够正常访问,如无法访问会导致404错误

[repoid]中的repoid为软件仓库(repository)的ID号,所有.repo配置文件中的各repoid不能重复,必须唯一。示例中repoid设置为base。
name为软件仓库描述的字符串。
baseurl为软件仓库的地址。
enabled为是否启用该软件源仓库,可选值为1和0。默认值为1,表示启用该软件源仓库。
gpgcheck可设置为1或0,1表示进行gpg(GNU Private Guard)校验,0表示不进行gpg校验,gpgcheck可以确定rpm包的来源是有效和安全的。
gpgkey为验证签名用的公钥。

磁盘扩容

  1. 在宿主机上安装 qemu-img 工具:
apt install qemu-utils
  1. 在 openEuler RISC-V 虚拟机上安装 growpart 工具:
dnf install cloud-utils-growpart
  1. 关闭QEMU虚拟机
  2. 把 qcow2 文件的容量加200GB:
$ qemu-img resize *.qcow2 +200G
Image resized.
$ qemu-img info *.qcow2
image: openEuler-preview.riscv64.qcow2
file format: qcow2
virtual size: 220 GiB 
disk size: 9.58 GiB
cluster_size: 65536
Format specific information:
    compat: 1.1
    compression type: zlib
    lazy refcounts: false
    refcount bits: 16
    corrupt: false
    extended l2: false
  1. QEMU 启动 openEuler RISC-V。

启动以后,我们先看看分区情况:可以看到根目录对应的分区只使用了 10G。

[root@openEuler-RISCV-rare ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vda    254:0    0  220G  0 disk
└─vda1 254:1    0   10G  0 part /
  1. 扩展分区 vda1,执行
growpart /dev/vda1

执行 lsblk 可以看到 / 所在的 vda1 分区已经扩展到了预期大小

[root@openEuler-RISCV-rare ~]# growpart /dev/vda 1
CHANGED: partition=1 start=2048 old: size=20969472 end=20971520 new: size=419428319 end=419430367
[root@openEuler-RISCV-rare ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vda    254:0    0  220G  0 disk
└─vda1 254:1    0  220G  0 part /
  1. 扩展文件系统:
resize2fs /dev/vda1

BUG

network backend ‘user‘ is not compiled into this binary

git clone https://gitlab.freedesktop.org/slirp/libslirp.git

http://security.ubuntu.com/ubuntu/pool/main/libs/libslirp/libslirp-dev_4.1.0-2ubuntu2.2_amd64.deb

sudo apt-get install libslirp-dev

重新编译QEMU:

cd qemu-build && rm -rf build
cd qemu-build && ./configure --target-list=riscv32-softmmu,riscv32-linux-user,riscv64-linux-user,riscv64-softmmu \
               --enable-kvm --enable-sdl --enable-slirp\
               --prefix=/home/user/program/riscv64-qemu
make install -j $(nproc)

参考文档

RISC-V/doc/tutorials/vm-qemu-oErv.md at master · openeuler-mirror/RISC-V · GitHub

openEuler 22.09技术白皮书