loading 'VIRT' kernel in qemu

Jason Harmening jason.harmening at gmail.com
Tue Dec 27 21:48:22 UTC 2016


Hi everyone,

I'm making some tweaks to the armv6 pmap to mirror some recent i386
changes.  I don't have arm hardware readily available, so I thought I'd
give qemu a whirl instead of asking other people to test my changes for
me.  Since I need SMP but don't need any specific peripheral hw, the 'VIRT'
kernel seems like my best bet.

I've successfully booted mips[64] under qemu, so naively starting out w/
the same steps I use for mips:

1). build armv6 world and VIRT kernel, install world to temp directory
2). use makefs(8) to build a 4GB (little endian) fs image from temp dir
3). Run qemu:
qemu-system-arm -M virt -kernel <VIRT kernel binary> -hda <fs image>
-nographic -m 1024

...fails immediately:
qemu: fatal: Trying to execute code outside RAM or ROM at 0xc1000100

R00=00000000 R01=00000000 R02=00000000 R03=00000000
R04=00000000 R05=00000000 R06=00000000 R07=00000000
R08=00000000 R09=00000000 R10=00000000 R11=00000000
R12=00000000 R13=00000000 R14=00000000 R15=c1000100

hmm, looks pretty close to KERNVIRTADDR.

Most online docs for qemu-system-arm seem to assume a prebuilt linux kernel
and initrd, the rest are...fragmented-to-nonexistent.  I've seen a few
hints that I might need to wrap the kernel image up along w/ u-boot, but
the u-boot images seem to be very SoC-specific.

Any help would be much appreciated, sorry for the n00b question.

Thanks,
Jason


More information about the freebsd-arm mailing list