Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 13 Jul 2012 19:24:58 +0200
From:      Juergen Lock <nox@jelal.kn-bremen.de>
To:        freebsd-arm@freebsd.org, freebsd-emulation@freebsd.org
Cc:        bapt@freebsd.org, cognet@freebsd.org
Subject:   Progress with qemu arm-bsd-user...
Message-ID:  <20120713172458.GA21987@triton8.kn-bremen.de>

next in thread | raw e-mail | index | archive | help
Hi!

 I know people here would like to be able to run FreeBSD/arm
target executables on x86 hosts like Linux users can using qemu
linux-user, and this is the first step:  I fixed cognet's
arm-bsd-user patches,

	http://www.ci0.org/qemu-bapt.tar.gz

to run a static echo executable which he also built:

	http://www.ci0.org/arm-binaries-2nox.tar.gz

so now probably only syscall handling and fixes for threading
are still missing, the same as for the other bsd-user targets.
Adding handling code for the missing syscalls should be
mostly mechanic (the main part of this is in
/usr/ports/emulators/qemu-devel/work/qemu-*/bsd-user/syscall.c),
and cognet thinks at least for armv6 the threading emulation can
be more or less copied from linux-user too...

 Soo, anyone wants to help? :)

 The patch against the current emulators/qemu-devel port is here:

	http://people.freebsd.org/~nox/tmp/qemu-devel-1.1.1-arm-bsd-user-001.patch

 To run a static arm executable do like:

	qemu-arm -bsd freebsd -strace -d in_asm,out_asm,cpu arm-binaries/echo foo bar

(this can also be invoked from the port's work dir as

	work/qemu-1.1.1/arm-bsd-user/qemu-arm

) - and -strace prints the sycalls and -d in_asm,out_asm,cpu logs
the target- and the translated code as well as the emulated cpu state
in /tmp/qemu.log.

 qemu also has a builtin gdbstub so you can also connect a cross gdb:

	qemu-arm -bsd freebsd -strace -d in_asm,out_asm,cpu -g 1234 arm-binaries/echo foo bar

	(gdb) target remote 127.1:1234

 As always with patching code in ports if you want to only rebuild
the changed parts instead of the whole port from scratch you can
patch away below the port's work/ dir and run:

	rm work/.build_done*
	make

 (but don't forget to save your changes before doing make clean. :)

 Thanx!
	Juergen



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20120713172458.GA21987>