基于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为验证签名用的公钥。
磁盘扩容
- 在宿主机上安装
qemu-img
工具:
apt install qemu-utils
- 在 openEuler RISC-V 虚拟机上安装
growpart
工具:
dnf install cloud-utils-growpart
- 关闭QEMU虚拟机
- 把 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
- 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 /
- 扩展分区
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 /
- 扩展文件系统:
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