ARM 虚拟化调试平台搭建 初试 FAIL

资源准备

  • qemu-6.1.0
./configure --target-list=arm-softmmu,aarch64-softmmu --prefix=~/work/qemu/qemu-out2   2>&1 | tee log_configure2.txt
make 2>&1 | tee log_build2.txt
make install 2>&1 | tee log_install2.txt

  • UEFI
http://snapshots.linaro.org/components/kernel/leg-virt-tianocore-edk2-upstream/4355/
ARMv8
	QEMU-AARCH64/RELEASE_CLANG35/QEMU_EFI.fd // 改为 QEMU_EFI_arm64.fd
ARMv7
	QEMU-ARM/RELEASE_CLANG35/QEMU_EFI.fd // 改为 QEMU_EFI_arm32.fd
	
  • ubuntu
https://cloud-images.ubuntu.com/xenial/current/ 下
ARMv8
	xenial-server-cloudimg-arm64-disk1.img
	xenial-server-cloudimg-arm64-uefi1.img

ARMv7
	xenial-server-cloudimg-armhf-disk1.img
	xenial-server-cloudimg-armhf-uefi1.img // 无该文件
		https://github.com/tianocore/edk2 提供了 arm32的UEFI , 实际验证是可以启动的
		但是没有这个文件 , 也就是说 ubuntu 不提供 arm32 从 UEFI 启动 
		但是 "内核文件" 是在 xenial-server-cloudimg-armhf-disk1.img 里面的,所以肯定需要loader
		那么 我猜想 u-boot 应该可以做这个动作
		


也就是
ARMv8 是这么跑的
	BIOS->GRUB->Linux->Rootfs
	BIOS 是 QEMU_EFI.fd
	GRUB Linux 和 Rootfs 都是  xenial-server-cloudimg-arm64-uefi1.img
ARMv7 应该是这么跑的
	u-boot->linux->Rootfs
	u-boot 是 u-boot 代码编译出来的 u-boot 镜像
	linux 和 Rootfs 应该在 xenial-server-cloudimg-armhf-disk1.img 中
					也在   xenial-server-cloudimg-armhf.squashfs

那么下面我就针对 armv7-qemu-ubuntu 往 这个方向努力
	qemu 加载 u-boot virt 开发板镜像
	u-boot virt loader xenial-server-cloudimg-armhf-disk1.img/或xenial-server-cloudimg-armhf.squashfs

	u-boot 采用 u-boot-2021.01 ,CONFIG 采用 qemu_arm_defconfig
	gcc : apt install  gcc-arm-linux-gnueabihf
	make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- qemu_arm_defconfig
	

运行

  • ARMv7
// 实际跑出来 在 UEFI 命令行
qemu-system-arm \
   -M virt \
   -cpu cortex-a15 -nographic -smp 1 -m 512M\
   -bios QEMU_EFI_arm32.fd \
   -drive if=none,file=xenial-server-cloudimg-armhf-uefi1.img,format=qcow2,id=hd0 -device virtio-blk-device,drive=hd0 \
   -netdev user,id=hostnet0,hostfwd=tcp::2222-:22 -device virtio-net-device,netdev=hostnet0



qemu-system-arm \
   -M virt \
   -cpu cortex-a15 -nographic -smp 1 -m 512M\
   -kernel u-boot-2021.01/u-boot \
   -drive if=none,file=xenial-server-cloudimg-armhf-disk1.img,format=qcow2,id=hd0 -device virtio-blk-device,drive=hd0 \
   -netdev user,id=hostnet0,hostfwd=tcp::2222-:22 -device virtio-net-device,netdev=hostnet0



u-boot 跑了 default cmd ,然后 停下来了,打印信息如下,接下来就要看  为什么不能 获取到内核 和 dtb

Hit any key to stop autoboot:  0 
starting USB...
No working controllers found
USB is stopped. Please issue 'usb start' first.
scanning bus for devices...

Device 0: unknown device

Device 0: QEMU VirtIO Block Device
            Type: Hard Disk
            Capacity: 2252.0 MB = 2.1 GB (4612096 x 512)
... is now current device
Scanning virtio 0:1...
Scanning disk virtio-blk#31...
Found 2 disks
Missing RNG device for EFI_RNG_PROTOCOL
No EFI system partition
BootOrder not defined
EFI boot manager: Cannot load any image
starting USB...
No working controllers found
BOOTP broadcast 1
DHCP client bound to address 10.0.2.15 (6 ms)
Using virtio-net#30 device
TFTP from server 10.0.2.2; our IP address is 10.0.2.15
Filename 'boot.scr.uimg'.
Load address: 0x40200000
Loading: *
TFTP error: 'Access violation' (2)
Not retrying...
BOOTP broadcast 1
DHCP client bound to address 10.0.2.15 (0 ms)
Using virtio-net#30 device
TFTP from server 10.0.2.2; our IP address is 10.0.2.15
Filename 'boot.scr.uimg'.
Load address: 0x40400000
Loading: *
TFTP error: 'Access violation' (2)
Not retrying...
=> 


  • ARMv8
// 实际跑出来会运行到 循环打印 16.04
// 实际跑出来已经跑完了 grub 列表
// 应该死在了 grub加载内核 或 内核启动 过程
sudo qemu-system-aarch64 \
   -M virt \
   -cpu cortex-a57 -nographic -smp 1 -m 1024M \
   -bios QEMU_EFI_arm64.fd \
   -drive if=none,file=xenial-server-cloudimg-arm64-uefi1.img,format=qcow2,id=hd0 -device virtio-blk-device,drive=hd0 \
   -netdev user,id=hostnet0,hostfwd=tcp::2222-:22 -device virtio-net-device,netdev=hostnet0

Guess you like

Origin blog.csdn.net/u011011827/article/details/120506496