文章目录
一、在ubuntu24.04上安装qemu
1.1 安装前准备
# 1.查看是否支持虚拟化
lscpu | grep Virtualization
# 若支持虚拟化,会看到VT-X(Intel)或AMD-V(AMD)
lscpu | grep Virtualization
Virtualization: VT-x
Virtualization type: full
# 2.在BIOS中使能虚拟化
1.2 安装
sudo apt update
sudo apt install qemu-kvm libvirt-daemon-system \
libvirt-clients virt-manager
# qemu-kvm是指安装QEMU和KVM
# libvirt-daemon-system用于管理虚拟机
# libvirt-clients用于附加功能
# virt-manager是一个用于管理虚拟机的图形化界面
1.3 配置等
# 将用户添加到KVM组
sudo adduser $USER kvm
# 配置完后需要重启
reboot
二、QEMU的使用
2.1 安装及运行x86架构的镜像
qemu-img create -f qcow2 test-vm.qcow2 10G
# qemu-img 使用qemu-img来创建虚拟机镜像,
# 用来模拟虚拟机的硬盘
# -f 用于指定镜像的格式
# qcow2 是qemu最常用的镜像格式,
# 采用来写时复制技术来优化性能
# test-vm.qcow2 是镜像文件的名字
# 10G 是镜像文件大小
qemu-system-x86_64 test-vm.qcow2
# qemu-system-x86 用来启动x86架构的虚拟机
# 因为未给虚拟机安装操作系统,
# 所以会提示 “No bootable device”
qemu-system-x86_64 -m 2048 -enable-kvm test-vm.qcow2 \
-cdrom ./Win11_23H2_Chinese_Simplified_x64v2.iso
# -m 指定虚拟机内存大小,默认单位是MB
# -enable-kvm 使用KVM进行加速
# -cdrom 添加Win11的安装镜像,也可以是其他安装镜像文件
# 可在弹出的窗口中操作虚拟机,安装操作系统,安装完
# 成后重起虚拟机便会从硬盘 ( test-vm.qcow2 ) 启动
qemu-system-x86_64 -m 2048 -enable-kvm test-vm.qcow2
# 安装完操作系统镜像之后,使用该命令来启动硬盘(test-vm.qcow2)
# 中的操作系统
qemu-img -h
# 查看qemu-img支持的文件格式
2.2 安装及运行RISC-V64架构的镜像
# 参考链接
https://www.cnblogs.com/orangeQWJ/p/18171574
# 1.前期准备
ubuntu镜像下载:
https://cdimage.ubuntu.com/releases/
安装qemu软件opensbi和u-boot-qemu:
sudo apt-get install qemu-system-misc opensbi u-boot-qemu
# qemu-system-misc是QEMU用于模拟虚拟RISC芯片及CLINT,PLIC等设备
# opensbi提供以机器模式运行的SBI运行环境
# u-boot-qemu是实现UEFI API并加载GRUB的固件(uboot)
安装好以后,这两个文件所在路径:
/usr/lib/riscv64-linux-gnu/opensbi/generic/fw_jump.bin
/usr/lib/u-boot/qemu-riscv64_smode/u-boot.bin
# 其中.bin文件是由objdump命令从ELF文件中,拷贝出.text段和.data段
# 及.rodata段,如:
objdump -O binary input.elf output.bin
# -O binary 指定了输出的目标文件格式为二进制格式
# 2.创建一个10GB的虚拟磁盘,并将镜像写入虚拟空磁盘
dd if=/dev/zero of=riscv_disk.img bs=1M count=1024
dd if=ubuntu-22.04.3-preinstalled-server-riscv64+unmatched.img \
of=riscv_disk.img
# 3.启动一个带有2GB RAM,4个CPU核和一个硬盘的RISC-V 64位的虚拟机,
# 使用uboot启动,并设置了网络端口转发
qemu-system-riscv64 \
-M virt \
-m 2048M \
-smp 4 \
-bios ./fw_jump.bin \
-kernel ./u-boot.bin \
-drive file=./riscv_disk.img,format=raw,id=hd0 \
-device virtio-blk-device,drive=hd0 \
-netdev user,id=net0,hostfwd=tcp::2222-:22 \
-device virtio-net-device,netdev=net0 \
-nographic \
-device virtio-rng-pci
# qemu-system-riscv64 用于启动一个RISC-V64位的虚拟机
# -M virt 选择QEMU虚拟机的类型为virt(通用)
# -m 2048M 设置虚拟机的内存大小为2GB
# -smp 4 设置虚拟机的 CPU 核心数为4
# -bios ./fw_jump.bin 指定BIOS文件
# 可指定为/usr/lib/riscv64-linux-gnu/opensbi/generic/fw_jump.bin
# -kernel ./u-boot.bin 指定内核映像文件
# 可指定为/usr/lib/u-boot/qemu-riscv64_smode/u-boot.bin
# -drive file=./riscv_disk.img,format=raw,id=hd0
# 定义一个驱动器,
# file 指定磁盘映像文件,
# format 指定磁盘映像的格式为raw,
# id 给这个驱动器一个标识符
# -device virtio-blk-device,drive=hd0
# 添加一个设备,并关联前面定义的驱动器
# virtio-blk-device 这是一个块设备
# drive 指定与此设备关联的驱动器
# -netdev user,id=net0,hostfwd=tcp::2222-:22
# 定义一个网络设备,
# user 使用用户模式网络堆栈
# id 给这个网络设备一个标识符
# hostfwd 设置端口转发,将宿主机的2222
# 端口转发到虚拟机的22端口
# -device virtio-net-device,netdev=net0
# 添加一个网络设备,并关联前面的网络设备,
# virtio-net-device 这是一个网络设备
# netdev 指定与此设备关联的网络设备
# -nographic 不使用图形界面,仅使用命令行界面
# -device virtio-rng-pci
# 添加一个设备,这是一个随机数生成器
# 以上命令运行成功之后,就直接进入到ubuntu登录界面,
# 第一次的用户及密码为ubuntu/ubuntu
# 4.登录ssh登录qemu虚拟机
ssh ubuntu@localhost -p 2222
# 5. 退出qemu
sudo shutdown -h now
或
Ctrl+A,然后x
2.3 运行RISC-V64架构的裸机程序
TODO
2.4 安装ARM架构的程序
TODO