--- wikisrc/ports/evbarm/qemu_arm.mdwn 2017/07/01 07:24:09 1.6 +++ wikisrc/ports/evbarm/qemu_arm.mdwn 2019/12/02 22:55:55 1.7 @@ -4,140 +4,59 @@ This page attempts to document running N [QEMU](http://www.qemu.org/) open source processor emulator. This can be extremely useful for development and testing. -# Introduction -QEMU emulates ARM's Integrator/CP board. You can run NetBSD under it. -Older NetBSD had the problem to run under QEMU's emulated Integrator/CP -board. -Sergio López had created the patch for NetBSD current and had posted -to port-arm mailing list in [6 Febrary, 2013](http://mail-index.NetBSD.org/port-arm/2013/02/06/msg001739.html). - # Requirements -* pkgsrc/emulators/qemu 1.6.2 and 1.7.0 -* INTEGRATOR_CP kernel of NetBSD/evbearm 6.99.28 or later -(some provious versions should work, but not tested) +* qemu 4.1.0 or higher +* disk image + * [NetBSD 9.x armv7](http://nycdn.netbsd.org/pub/NetBSD-daily/netbsd-9/latest/evbarm-earmv7hf/binary/gzimg/armv7.img.gz) + * [NetBSD 9.x arm64](http://nycdn.netbsd.org/pub/NetBSD-daily/netbsd-9/latest/evbarm-aarch64/binary/gzimg/arm64.img.gz) +* Tianocore EDK2 firmware + * [QEMU_EFI.fd for armv7](http://snapshots.linaro.org/components/kernel/leg-virt-tianocore-edk2-upstream/latest/QEMU-ARM/RELEASE_GCC5/QEMU_EFI.fd) + * [QEMU_EFI.fd for arm64](http://snapshots.linaro.org/components/kernel/leg-virt-tianocore-edk2-upstream/latest/QEMU-AARCH64/RELEASE_GCC5/QEMU_EFI.fd) -## Preparing QEMU +# Installing QEMU on NetBSD You can install latest qemu with the following commands. It is assumed that your pkgsrc tree is in /usr/pkgsrc directory. # cd /usr/pkgsrc/emulators/qemu # make install -## Preparing NetBSD userland and kernel -You can create INTEGRATOR_CP kernel, and kernel/userland tarball with -the following commands. -It is assumed that your NetBSD src tree is in /usr/src directory. - - $ cd /usr/src - $ ./build.sh -U -T /usr/tools/evbearm-el -O /usr/obj/evbearm-el \ - -D /usr/NewWorld/evbearm-el -R /usr/release/evbearm-el \ - -m evbearm release - $ ./build.sh -U -T /usr/tools/evbearm-el -O /usr/obj/evbearm-el \ - -D /usr/NewWorld/evbearm-el -R /usr/release/evbearm-el \ - -m evbearm kernel=INTEGRATOR_CP - -# Booting -INTEGRATOR_CP kernel has no disk drive support. -You should setup netboot environment. - -## Setting up netboot environment -You can use existing NetBSD or other Unix like operating system environment -for host netboot. -You can also utilize qemu-system-amd64 or qemu-system-i386 to host -netboot. - -tftp is not needed, kernel is specified in commandline of qemu-system-arm. -Only NFS root is needed. -In detail see [Diskless NetBSD howto's Setting up the NFS server section](http://www.netbsd.org/docs/network/netboot/nfs.html). - - -# Booting INTEGRATOR_CP kernel -You can boot INTEGRATOR_CP kernel with the following commandline. -It is assumed that the host machine uses bge0 to connect to your network. - - # ifconfig bridge0 create - # brconfig bridge0 add bge0 - # ifconfig bridge0 up - # ifconfig tap0 create - # ifconfig tap0 0.0.0.0 up - # brconfig bridge0 add tap0 - $ cp /usr/obj/evbearm-el/sys/arch/evbarm/compile/INTEGRATOR_CP/netbsd.gz.ub . - $ qemu-system-arm -M integratorcp -cpu arm1136 -m 512m -kernel netbsd.gz.ub -serial stdio -net nic -net tap,fd=3 3<>/dev/tap0 - -# After booted -You will get the following boot messages. - - Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, - 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 - The NetBSD Foundation, Inc. All rights reserved. - Copyright (c) 1982, 1986, 1989, 1991, 1993 - The Regents of the University of California. All rights reserved. - - NetBSD 6.99.28 (INTEGRATOR_CP) #0: Sat Jan 11 23:47:15 UTC 2014 - ryo_on@bismuth.elements.tetera.org:/usr/obj/evbearm-el/sys/arch/evbarm/compile/INTEGRATOR_CP - total memory = 255 MB - avail memory = 246 MB - sysctl_createv: sysctl_create(machine_arch) returned 17 - timecounter: Timecounters tick every 10.000 msec - mainbus0 (root) - cpu0 at mainbus0 core 0: ARM1136J-S r1p3 (ARM11J V6J core) - cpu0: DC enabled IC enabled WB disabled EABT - cpu0: isar: [0]=0x140011 [1]=0x12002111 [2]=0x11231111 [3]=0x1102131, [4]=0x141, [5]=0 - cpu0: mmfr: [0]=0x1130003 [1]=0x10030302 [2]=0x1222110 [3]=0 - cpu0: pfr: [0]=0x111 [1]=0x1 - cpu0: 4KB/32B 4-way L1 Instruction cache - cpu0: 64KB/32B 4-way write-through L1 Data cache - vfp0 at cpu0: VFP11 - vfp0: mvfr: [0]=0x11111111 [1]=0 - ifpga0 at mainbus0: Build 0, Rev A, Manufacturer Unknown, ASB, Little-endian, - ifpga0: FPGA unknown, SYSCLK 2.00MHz - ifpga0: vendor 0x0000 product 0x0000 (miscellaneous prehistoric) - pci_configure_bus done - sm0 at ifpga0 addr 0xb8000000 irq 27 - sm0: SMC91C111, revision 1, buffer size: 8192 - sm0: MAC address 52:54:00:12:34:56, default media MII (internal PHY) - plcom0 at ifpga0 addr 0x6000000 irq 1 - plcom0: console - plcom1 at ifpga0 addr 0x7000000 irq 2 - plrtc0 at ifpga0 addr 0x5000000 - pci0 at ifpga0 bus 0 - pci0: i/o space, memory space enabled - timecounter: Timecounter "clockinterrupt" frequency 100 Hz quality 0 - clock: hz=100 stathz = 100 profhz = 500 - timecounter: Timecounter "ifpga" frequency 62500 Hz quality 100 - boot device: - root device: sm0 - dump device: - file system (default generic): - root on sm0 - nfs_boot: trying DHCP/BOOTP - nfs_boot: DHCP next-server: 192.168.81.249 - nfs_boot: my_domain=elements.tetera.org - nfs_boot: my_addr=192.168.81.167 - nfs_boot: my_mask=255.255.255.0 - nfs_boot: gateway=192.168.81.1 - root on 192.168.81.249:/exports/integratorcp - root file system type: nfs - init path (default /sbin/init): - init: trying /sbin/init - - -You will see many error messages from src/sys/arch/evbarm/ifpga/ifpga_clock.c. - - statclockhandler: Statclock overrun - -After NetBSD is booted, you can setup sm0 network interface with dhcpcd command. - - # dhcpcd sm0 - -# Using QEMU to debug the kernel - - there is info elsewhere on the wiki about this; maybe adapt to ARM - and link? +# Preparing the disk image + +The disk image (armv7.img.gz or arm64.img.gz) must first be uncompressed. The *qemu-img* tool can then resize the image to the desired size. On first boot, NetBSD will grow the root file-system to match the size of the disk. + + $ gunzip arm64.img.gz + $ qemu-image resize arm64.img 20g + +# Booting the system (arm64) + + $ qemu-system-aarch64 -M virt -cpu cortex-a53 -smp 4 -m 4g \ + -drive if=none,file=arm64.img,id=hd0 -device virtio-blk-device,drive=hd0 \ + -netdev type=user,id=net0 -device virtio-net-device,netdev=net0,mac=00:11:22:33:44:55 \ + -bios QEMU_EFI.fd -nographic + +# Booting the system (armv7) + + $ qemu-system-arm -M virt -cpu cortex-a15 -smp 4 -m 2g \ + -drive if=none,file=armv7.img,id=hd0 -device virtio-blk-device,drive=hd0 \ + -netdev type=user,id=net0 -device virtio-net-device,netdev=net0,mac=00:11:22:33:44:55 \ + -bios QEMU_EFI.fd -nographic + +# Bridged networking + +To bridge a QEMU guest to your network, you need to create a tap(4) interface for your VM, then connect it to a physical interface with a bridge(4) interface. + +The following example assumes NetBSD as a host OS, and a physical interface named *bge0*. -# Additional links +[[!template id=filecontent name="/etc/ifconfig.bridge0" text=""" +descr "LAN VM bridge" up +!brconfig bridge0 add bge0 +"""]] -# What works +[[!template id=filecontent name="/etc/ifconfig.tap0" text=""" +link f2:0b:a4:d1:f2:69 descr "NetBSD Arm64 VM" up +!brconfig bridge0 add tap0 +"""]] -# What needs work +Then replace the *-netdev* part of the qemu command with: -# more info + -net nic -net tap,ifname=tap0,script=no