升级QEMU9.0.0和安装运行openEuler-24.03
一、QEMU 9.0.0编译安装
由于项目需要openEuler 2403 RISC-V 64环境,一般情况下没有riscv64的物理环境,所以选择在QEMU的riscv64虚拟环境下运行openEuler 2403 RISC-V 64。但是
为了支持 UEFI ,需使用 8.1 版本以上的 QEMU。
编译时需要安装 libslirp 依赖库(包名根据发行版不同而不同,openEuler 为 libslirp-devel)并添加 --enable-slirp 参数。
所以需要更新版本的QEMU来支持运行。
QEMU
QEMU(Quick Emulator)是一款免费开源模拟器,其与Bochs,PearPC类似,但拥有高速(配合KVM)、跨平台的特性。
QEMU是一个托管的虚拟机,它使用动态二进制转换技术来模拟处理器,并且提供多种硬件和外设模型,这使它能够运行多种未修改的客户机操作系统,能与KVM配合以接近本地速度运行虚拟机(接近真实电脑的速度)。
查询QEMU版本
qemu-riscv64 -version
qemu-system-riscv64 -version
本人版本之前为6.2.0
源码获取
源码获取依旧有两种方式:
- QEMU官网直接下载
- 通过
wget
在终端上下载(推荐)
wget https://download.qemu.org/qemu-9.0.0.tar.xz
tar xvJf qemu-9.0.0.tar.xz
解压后
安装依赖
目前本人环境为Ubuntu22.04 LTS
,以防万一先安装一些依赖
sudo apt install autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev \
gawk build-essential bison flex texinfo gperf libtool patchutils bc \
zlib1g-dev libexpat-dev git \
libglib2.0-dev libfdt-dev libpixman-1-dev \
libncurses5-dev libncursesw5-dev
在qemu9.0.0目录中打开终端,先运行配置文件检查依赖
./configure --enable-slirp
报错1:
解决方法:
sudo apt install python3-venv
报错2:
解决方法:
sudo apt install ninja-build
报错3:
解决方法:
sudo apt install flex
报错4:
解决方法:
sudo apt install bison
编译安装
默认会编译全部架构
./configure --enable-slirp
sudo make
可以选择部分编译安装,节约时间和硬盘
./configure --target-list=riscv64-softmmu,riscv64-linux-user --enable-slirp
sudo make
注意—enable-slirp是必要的,否则运行openEuler 2403时会出现network backend ‘user‘ is not compiled into this binary
修改环境变量(重要)
之前有通过apt的方式下载QEMU的,编译安装完QEMU9.0.0后查看版本还是没有变化。需要添加环境变量来指明软件路径。QEMU9.0.0编译安装完后,我将build文件夹下的所有内容cp在/opt/qemu。
使用VIM编辑$HOME/.bashrc
vim $HOME/.bashrc
或在用户主目录~下
vim .bashrc
在最后一行加入并保存退出,其中QEMU的路径为/opt/qemu
export PATH="$HOME/workspace/tools/gcc/bin:/opt/qemu:$PATH"
格式为
export PATH="路径1:路径2:$PATH"
注意:不要删$PATH,否则shell用不了。
重启或者source ~/.bashrc,然后检查版本
qemu-riscv64 -version
qemu-riscv64 version 9.0.0
qemu-system-riscv64 -version
QEMU emulator version 9.0.0
二、在QEMU运行openEuler 2403 RISC-V 64
获取镜像
镜像地址是https://mirror.iscas.ac.cn/openeuler-sig-riscv/openEuler-RISC-V/testing/2403LTS-test/v1/QEMU/
wget https://mirror.iscas.ac.cn/openeuler-sig-riscv/openEuler-RISC-V/testing/2403LTS-test/v1/QEMU/openEuler-24.03-V1-base-qemu-testing-uefi.qcow2.zst
zstd -d openEuler-24.03-V1-base-qemu-testing-uefi.qcow2.zst
获取启动脚本
wget https://mirror.iscas.ac.cn/openeuler-sig-riscv/openEuler-RISC-V/testing/2403LTS-test/v1/QEMU/start_vm_uefi.sh
获取uefi固件
wget https://mirror.iscas.ac.cn/openeuler-sig-riscv/openEuler-RISC-V/testing/2403LTS-test/v1/QEMU/RISCV_VIRT_CODE.fd
wget https://mirror.iscas.ac.cn/openeuler-sig-riscv/openEuler-RISC-V/testing/2403LTS-test/v1/QEMU/RISCV_VIRT_VARS.fd
QEMU启动脚本一些参数说明:
- -m 或 —m:指定虚拟机的内存大小。例如,-m 2G 表示分配2GB的内存给虚拟机。
- -smp:指定虚拟机的处理器数量和拓扑结构。例如,-smp 4 表示使用4个处理器。
- -cpu:指定虚拟机使用的CPU型号或架构。例如,-cpu host 表示使用宿主机的CPU。
- -device:指定虚拟机添加和配置虚拟设备。例如,-device virtio-net表示添加一个VirtIO网络设备。
- -bios:指定虚拟机的BIOS文件。例如,-bios /usr/lib/riscv64-linux-gnu/opensbi/generic/fw_jump.elf
- -kernel:指定要用作虚拟机内核的镜像文件。例如,-kernel /usr/lib/u-boot/qemu-riscv64_smode/uboot.elf
- -virtfs:-virtfs [tag|mount_tag][,driver[,mount_options]], 用于配置虚拟文件系统,virtfs允许将主机文件系统的目录或文件与虚拟机进行共享,以便虚拟机可以访问和操作这些文件
- -hda 或 -drive:指定虚拟机的硬盘镜像文件或设备。例如,-hda disk.img 表示使用名为 disk.img 的硬盘镜像文件作为虚拟机的主硬盘。
- -cdrom:指定虚拟机的光驱设备,可以用于加载ISO镜像文件。例如,-cdrom os.iso 表示使用名为 os.iso 的ISO镜像文件作为光驱。
- -boot:指定虚拟机的启动顺序。例如,-boot c 表示从硬盘启动,-boot d 表示从光驱启动。
- -net:配置虚拟机的网络设置。例如,-net nic 表示为虚拟机添加一个网络适配器,-net user 表示使用用户模式网络栈。
- -vnc:启用VNC远程访问功能。例如,-vnc :1 表示在端口5901上启动VNC服务器。
- -usb:启用虚拟机的USB支持。例如,-usb 表示启用USB控制器。
- -snapshot:启用快照模式,允许创建和恢复虚拟机的快照。 -monitor:启动一个与虚拟机交互的监控控制台。例如,-monitor stdio 表示将监控控制台输出重定向到标准输入/输出。
- -nographic:参数用于在无图形化界面的模式下运行虚拟机
- -name:为虚拟机指定一个名称
启动
根据需要在启动脚本设置-m和-smp,然后启动脚本
chmod +x start_vm_uefi.sh
./start_vm_uefi.sh
用户名:root
密码:openEuler12#$