#Run Debian iso on QEMU ARMv8

###Pre-installation

download the debian iso

I used iso name is : debian-8.1.0-arm64-CD-1.iso

create img file and QEFI flash

$ dd if=/dev/zero of=flash0.img bs=1M count=64
$ LINARO_EDK2_URL=http://releases.linaro.org/15.01/components/kernel/uefi-linaro/
$ wget $LINARO_EDK2_URL/release/qemu64-intelbds/QEMU_EFI.fd
$ dd if=QEMU_EFI.fd of=flash0.img conv=notrunc
$ dd if=/dev/zero of=flash1.img bs=1M count=64
$ dd if=/dev/zero of=hda.img bs=1M count=8192

###lanuch.sh:

#!/bin/sh

CDROM_IMG=debian-8.1.0-arm64-CD-1.iso
HDA_IMG=hda.img

make_cdrom_arg()
{
  echo "-drive file=$1,id=cdrom,if=none,media=cdrom" \
    "-device virtio-scsi-device -device scsi-cd,drive=cdrom"
}

make_hda_arg()
{
  echo "-drive if=none,file=$1,id=hd0" \
    "-device virtio-blk-device,drive=hd0"
}

HDA_ARGS=`make_hda_arg $HDA_IMG`
if [ $# -eq 1 ]; then
  case $1 in
    install)
      CDROM_ARGS=`make_cdrom_arg $CDROM_IMG`
      ;;
    *)
      CDROM_ARGS=""
      ;;
  esac
fi

qemu-system-aarch64 -m 1024 -cpu cortex-a57 -M virt -nographic \
  -pflash flash0.img \
  $CDROM_ARGS $HDA_ARGS -netdev user,id=eth0 \
  -device virtio-net-device,netdev=eth0

execute ./lanuch.sh install

Then will show you install screen

###after install

sudo modprobe nbd max_part=63
sudo qemu-nbd -c /dev/nbd0 hda.img
mkdir mnt
sudo mount /dev/nbd0p2 mnt #Your rootfs partition, you can have a try nbd0p1~pN


sudo cp mnt/boot/vmlinuz-3.13.0-53-generic .
sudo cp mnt/boot/initrd.img-3.13.0-53-generic .


sudo umount mnt
sudo qemu-nbd -d /dev/nbd0
rmdir mnt

###trouble shotting nbd.c:nbd_init():L723: Failed to set NBD socket

ps -ef | grep "qemu"

kill qemu-nbd process and retry


qemu: fatal: Trying to execute code outside RAM or ROM at 0xffffffc000080000

there is something wrong with the kernel, do not use vmlinux, use vmlinuz and check the kernel version

###run debian on QEMU

qemu-system-aarch64 -machine virt -cpu cortex-a57 -nographic -smp 1 -m 2048 \
	-pflash flash0.img \
  -drive if=none,file=hda.img,id=hd0 \
  -device virtio-blk-device,drive=hd0 \
	-kernel vmlinuz-3.16.0-4-arm64 \
	-initrd initrd.img-3.16.0-4-arm64 \
	-netdev user,id=unet -device virtio-net-device,netdev=unet \
	--append "console=ttyAMA0 root=/dev/vda2"

###how to share files between QEMU and host

There is a ponderous way to share files between QEMU and host:

create a img for share files.

dd if=/dev/zero of=share.img bs=1M count=1024
mkfs.ext4 share.img
mkdir mnt
mount -o loop share.img mnt

add the img file on the command to boot the QEMU

qemu-system-aarch64 -machine virt -cpu cortex-a57 -nographic -smp 1 -m 2048 \
	-pflash flash0.img \
	-drive file=debian-8.1.0-arm64-CD-1.iso,id=cdrom,if=none,media=cdrom \
	-device virtio-scsi-device -device scsi-cd,drive=cdrom \
  -drive if=none,file=share.img,id=hd1 \
  -device virtio-blk-device,drive=hd1 \
  -drive if=none,file=hda.img,id=hd0 \
  -device virtio-blk-device,drive=hd0 \
	-kernel vmlinuz-3.16.0-4-arm64 \
	-initrd initrd.img-3.16.0-4-arm64 \
	-netdev user,id=unet -device virtio-net-device,netdev=unet \
	--append "console=ttyAMA0 root=/dev/vda2"

###reference

http://blog.eciton.net/uefi/qemu-aarch64-jessie.html


书籍推荐