ARM 虚拟化调试平台 详解

  • 概念详解
armv7(即arm32)为例
这个平台涉及到三个系统

实体机A		:	x86-ubuntu(虚拟机实体机都可以,我的是虚拟机,但是我们假设这是实体机A)
虚拟机B		:	实体机A下运行的 qemu-arm ubuntu(需要更改内核) (虚拟机B)
虚拟机C		:	虚拟机B下运行的 qemu-arm ubuntu (虚拟机C)

同时,为了调试, 实体机下 要运行 gdb , 该gdb 用来调试 虚拟机B
整个系统中只有一个调试对象,那就是 虚拟机B

虚拟机B		要支持虚拟化
实体机A		只是一个硬件平台,为了搭建虚拟机B // 如果我有实体机B,其实实体机A就不需要了
虚拟机C		是一个系统,为了证明虚拟机B可以跑系统

A 提供的环境:
	x86-ubuntu(L1)
A 环境下要做什么
	启动 qemu-arm ubuntu(L2)
	启动 gdb

B 提供的环境
	qemu-arm ubuntu(L2)
B 环境下要做什么
	启动 qemu-arm ubuntu(L3)

  • 实体机A(L1) 需要做的动作


A1.安装必备工具
	sudo apt install -y gcc python pkgconf make bison flex
	sudo apt install -y zlib1g-dev libglib2.0-dev  libpixman-1-dev

A2.	编译qemu 

	编译 x86 下运行的 qemu,用来仿真 arm

A3.获取资源
	获取 ubuntu.qcow2
	// http://cloud-images.ubuntu.com/xenial/current/
	// xenial-server-cloudimg-armhf-disk1.img

	wget  http://snapshots.linaro.org/components/kernel/leg-virt-tianocore-edk2-upstream/latest/QEMU-AARCH64/RELEASE_CLANG35/QEMU_EFI.fd
	// 去找arm32 对应的 QEMU_UFI.fd
	// http://publishing-ie-linaro-org.s3.amazonaws.com/snapshots/components/kernel/leg-virt-tianocore-edk2-upstream/4355/QEMU-ARM/RELEASE_CLANG35/QEMU_EFI.fd?Signature=cydcY5oRJyOd975plrMeD0eun6g%3D&Expires=1632639737&AWSAccessKeyId=AKIAIJR2J6C42QCU7ITA
	// http://snapshots.linaro.org/components/kernel/leg-virt-tianocore-edk2-upstream/4355/QEMU-ARM/RELEASE_CLANG35/
	// https://github.com/tianocore/edk2/releases
	
	// sudo qemu-system-arm \
   -M virt \
   -cpu cortex-a15 -nographic -smp 4 -m 512M \
   -bios QEMU_EFI.fd \
   -drive if=none,file=ubuntu.qcow2,format=qcow2,id=hd0 -device virtio-blk-device,drive=hd0 
	
	// 进入了如下的shell ,这个应该是uefi的shell , 为什么不进入 grub ???
	// sudo qemu-system-arm -M virt  -nographic  -bios QEMU_EFI.fd
$ sudo qemu-system-arm    -M virt    -cpu cortex-a15 -nographic -smp 4 -m 512M    -bios QEMU_EFI.fd    -drive if=none,file=ubuntu.qcow2,format=qcow2,id=hd0 -device virtio-blk-device,drive=hd0 
3h
BdsDxe: failed to load Boot0001 "UEFI Misc Device" from VenHw(93E34C7E-B50E-11DF-9223-2443DFD72085,00): Not Found
BdsDxe: failed to load Boot0002 "UEFI Misc Device 2" from VenHw(837DCA9E-E874-4D82-B29A-23FE0E23D1E2,003E000A00000000): Not Found
BdsDxe: loading Boot0003 "EFI Internal Shell" from Fv(64074AFE-340A-4BE6-94BA-91B5B4D0F71E)/FvFile(7C04A583-9E3E-4F1C-AD65-E05268D0B4D1)
BdsDxe: starting Boot0003 "EFI Internal Shell" from Fv(64074AFE-340A-4BE6-94BA-91B5B4D0F71E)/FvFile(7C04A583-9E3E-4F1C-AD65-E05268D0B4D1)
UEFI Interactive Shell v2.2
EDK II
UEFI v2.70 (EDK II, 0x00010000)
Mapping table
     BLK2: Alias(s):
          VenHw(93E34C7E-B50E-11DF-9223-2443DFD72085,00)
     BLK0: Alias(s):
          VenHw(837DCA9E-E874-4D82-B29A-23FE0E23D1E2,003E000A00000000)
     BLK1: Alias(s):
          VenHw(837DCA9E-E874-4D82-B29A-23FE0E23D1E2,003E000A00000000)/HD(1,MBR,0x68E85B81,0x800,0x465000)

Press ESC in 4 seconds to skip startup.nsh or any other key to continue.
Shell> 




A4. 首先启动 ubuntu
qemu-system-arm \
   -M virt,gic_version=3,virtualization=true,type=virt \
   -cpu cortex-a57 -nographic -smp 8 -m 8800  -bios QEMU_EFI.fd \
   -drive if=none,file=ubuntu.qcow2,format=qcow2,id=hd0 -device virtio-blk-device,drive=hd0 \
   -netdev user,id=hostnet0,hostfwd=tcp::2222-:22 -device virtio-net-device,netdev=hostnet0

A5. 替换ubuntu 中的内核 为你编译的内核(注意config 从 ubuntu 中获取)
	内核配置:
		确保配置中 有 以下内容
		CONFIG_SQUASHFS_XZ
		arm_kvm
	内核编译:
		make deb-pkg
	内核安装:
		sudo dpkg -i linux-image-4.19_4.19.0-1_arm.deb
		sudo dpkg -i linux-headers-4.19.0_4.19.0-1_arm.deb
		sudo grub-set-default 0

A6. 重新启动


A7. 检查重新启动后的系统
	dmesg|grep -i kvm
	ls /dev/kvm

A8. 在 x86 环境下 准备 gdb ,准备调试 启动后的 L1


  • 虚拟机B(L2) 需要做的动作


B1. 安装必备工具
	sudo apt install -y gcc python pkgconf make bison flex
	sudo apt install -y zlib1g-dev libglib2.0-dev  libpixman-1-dev

B2. 编译 arm 下运行的 qemu,用来仿真 arm

B3.获取资源
	获取 ubuntu.qcow2
	wget  http://snapshots.linaro.org/components/kernel/leg-virt-tianocore-edk2-upstream/latest/QEMU-AARCH64/RELEASE_CLANG35/QEMU_EFI.fd

B4. 启动 qemu-ubuntu
qemu-system-arm \
   -M virt,gic_version=3,accel=kvm \
   -cpu cortex-a57 -nographic -smp 4 -m 3000  -bios QEMU_EFI.fd \
   -drive if=none,file=ubuntu.qcow2,format=qcow2,id=hd0 -device virtio-blk-device,drive=hd0 \
   -netdev user,id=hostnet0,hostfwd=tcp::2222-:22 -device virtio-net-device,netdev=hostnet0


猜你喜欢

转载自blog.csdn.net/u011011827/article/details/120485966
今日推荐