以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
虚拟机C 是一个系统,为了证明虚拟机B可以跑系统
A 提供的环境:
x86-ubuntu(L1)
A 环境下要做什么
启动 qemu-arm ubuntu(L2)
启动 gdb
B 提供的环境
qemu-arm ubuntu(L2)
B 环境下要做什么
启动 qemu-arm ubuntu(L3)
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
wget http:
$ 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
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:
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