Bootstrap

【linux工具-qemu】记录qemu安装及操作流程

一、在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
;