[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [Xen-users] XEN/arm XENFB support
Thank you for the info/patch Ian. With some modifications to Qemu, I managed to cross compile qemu-system-arm with XEN support. Based on version: 1c514a7734b7f98625a0d18d5e8ee7581f26e50c (Merge remote branch 'perard/cpu-hotplug-port-v2' into xen-staging-master-7). And got my Qemu backend working. I can see that INPUT_XEN_KBDDEV_FRONTEND is working (d9) 6input: Xen Virtual Keyboard as /devices/virtual/input/input0 (d9) 6input: Xen Virtual Pointer as /devices/virtual/input/input1 And that XEN bus is prompting for VFB (d9) 6xenbus_probe_frontend: Device with no driver: device/vfb/0 But it seems that the xen-fbfront only supports PV and not PVH. (Linux kernel 3.12-RC5) Because the init code is returning on: if (!xen_pv_domain()) return -ENODEV; When I comment this code out. I do get these errors: [ 1698.899496] Failed to unmap pfn:5c081 rc:-2 (XEN) dom10 IPA 0x0000000000000000 (XEN) P2M @ 021b8300 mfn:0x4dc18 (XEN) 1ST[0x0] = 0x000000004da276ff (XEN) 2ND[0x0] = 0x000000006b6856ff (XEN) 3RD[0x0] = 0x0000000000000000 [ 1698.933034] Failed to map pfn to mfn rc:0:-22 pfn:5c349 mfn:0 (XEN) dom10 IPA 0x000000002777c000 (XEN) P2M @ 021b8300 mfn:0x4dc18 (XEN) 1ST[0x0] = 0x000000004da276ff (XEN) 2ND[0x13b] = 0x0000000000000000 [ 1698.951353] Failed to map pfn to mfn rc:0:-22 pfn:5c348 mfn:b6b2777c Yes lots of them, and my VFB is not working tough. So I've searched on the internet if someone got VFB on PVH working. But I couldn't find anything about, so is there someone who got VFB working on PVH (x86) ? -----Original Message----- From: Ian Campbell <Ian.Campbell@xxxxxxxxxx> To: peter <peter@xxxxxxxxxx> Cc: "xen-users@xxxxxxxxxxxxx" <xen-users@xxxxxxxxxxxxx>, "xen-devel@xxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxx>, Lars Kurth <lars.kurth.xen@xxxxxxxxx> Date: Mon, 16 Dec 2013 09:59:09 +0000 Subject: Re: [Xen-devel] [Xen-users] XEN/arm XENFB support > On Mon, 2013-12-16 at 08:45 +0000, Lars Kurth wrote: > > > On Mon, Dec 16, 2013 at 8:16 AM, peter <peter@xxxxxxxxxx> wrote: > > I'm currently playing with XEN/arm on my Allwinner A20 > (cubieboard2) > > I would like to get the XENFB driver working on domU. > > But currently in xen/arm there's no support for VFB, atleast > qemu is not > > supported. > > But this video http://www.youtube.com/watch?v=po1IeElg8tg and > this one > > http://www.youtube.com/watch?v=Km6gBnIqaWo is showing a > working framebuffer. > > So there are people which got a framebuffer working on domU. > > But still i couldn't find anything on the internet how to do > this. > > Is there anyone with experience with VFB on xen/arm ? > > I'm not sure what the first link used but the second was using a form > of > hybrid GPU passthrough/paravirtualisation for which the code has not > been reeleased and AFAIK has nothing to do with VFB. > > I've not tried VFB on ARM yet (busy with other things) but I suspect > that if you were to build upstream qemu on ARM with Xen support enabled > then it would just work. I would recommend giving that a go -- please > let us know how you get on. > > Below is a patch which I wrote ages ago that I have just rebased onto > current xen staging *without retesting*. It is supposed to DTWT and > enable the qemu build for ARM (as well as providing a mechanism to > start > the correct dom0 qemu, which you don't need for vfb). > > As I say I haven't tested, or even built, and in particular I never > tried PVFB with it even what I wrote it, so YMMV. > > Ian. > > > commit 7b5d54c9a5d09c4138bec905c9accea34173ba77 > Author: Ian Campbell <ian.campbell@xxxxxxxxxx> > Date: Wed May 15 16:34:55 2013 +0100 > > tools: build and launch correct qemu for architecture > > xl now provides a launch-dom0-qemu command which avoids the need to > have the > initscripts be aware of the specific qermu binary name, which > differs by > architecture and which also may have been specified by the user via > the > --with-system-qemu=PATH option to configure. > > Perhaps this should be a separate binary hidden in libexec? > > Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx> > > diff --git a/config/arm32.mk b/config/arm32.mk > index aa79d22..f3599a3 100644 > --- a/config/arm32.mk > +++ b/config/arm32.mk > @@ -3,6 +3,8 @@ CONFIG_ARM_32 := y > CONFIG_ARM_$(XEN_OS) := y > > CONFIG_XEN_INSTALL_SUFFIX := > +CONFIG_QEMU_ARCH := arm > +CONFIG_QEMU_TARGET := arm-softmmu > > # -march= -mcpu= > > diff --git a/config/arm64.mk b/config/arm64.mk > index 15b57a4..4ff15e0 100644 > --- a/config/arm64.mk > +++ b/config/arm64.mk > @@ -3,6 +3,8 @@ CONFIG_ARM_64 := y > CONFIG_ARM_$(XEN_OS) := y > > CONFIG_XEN_INSTALL_SUFFIX := > +CONFIG_QEMU_ARCH := aarch64 > +CONFIG_QEMU_TARGET := arm-softmmu > > CFLAGS += #-marm -march= -mcpu= etc > > diff --git a/config/x86_32.mk b/config/x86_32.mk > index 7f76b25..da3111d 100644 > --- a/config/x86_32.mk > +++ b/config/x86_32.mk > @@ -2,6 +2,9 @@ CONFIG_X86 := y > CONFIG_X86_32 := y > CONFIG_X86_$(XEN_OS) := y > > +CONFIG_QEMU_ARCH := i386 > +CONFIG_QEMU_TARGET := i386-softmmu > + > CONFIG_HVM := y > CONFIG_MIGRATE := y > CONFIG_XCUTILS := y > diff --git a/config/x86_64.mk b/config/x86_64.mk > index 11104bd..f59e36d 100644 > --- a/config/x86_64.mk > +++ b/config/x86_64.mk > @@ -2,6 +2,9 @@ CONFIG_X86 := y > CONFIG_X86_64 := y > CONFIG_X86_$(XEN_OS) := y > > +CONFIG_QEMU_ARCH := x86_64 > +CONFIG_QEMU_ARCH := i386-softmmu > + > CONFIG_COMPAT := y > CONFIG_HVM := y > CONFIG_MIGRATE := y > diff --git a/tools/Makefile b/tools/Makefile > index 00c69ee..250b931 100644 > --- a/tools/Makefile > +++ b/tools/Makefile > @@ -107,7 +107,7 @@ distclean: subdirs-distclean > config.cache autom4te.cache > > ifneq ($(XEN_COMPILE_ARCH),$(XEN_TARGET_ARCH)) > -IOEMU_CONFIGURE_CROSS ?= --cpu=$(XEN_TARGET_ARCH) \ > +IOEMU_CONFIGURE_CROSS ?= --cpu=$(CONFIG_QEMU_ARCH) \ > --cross-prefix=$(CROSS_COMPILE) \ > --interp-prefix=$(CROSS_SYS_ROOT) > endif > @@ -186,8 +186,7 @@ subdir-all-qemu-xen-dir: qemu-xen-dir-find > source=.; \ > fi; \ > cd qemu-xen-dir; \ > - $$source/configure --enable-xen --target-list=i386-softmmu \ > - $(QEMU_XEN_ENABLE_DEBUG) \ > + $$source/configure --enable-xen --target-list=$(CONFIG_QEMU_TARGET) \ > --prefix=$(PREFIX) \ > --source-path=$$source \ > --extra-cflags="-I$(XEN_ROOT)/tools/include \ > diff --git a/tools/hotplug/Linux/init.d/xencommons > b/tools/hotplug/Linux/init.d/xencommons > index 4ebd636..f568085 100644 > --- a/tools/hotplug/Linux/init.d/xencommons > +++ b/tools/hotplug/Linux/init.d/xencommons > @@ -116,11 +116,7 @@ do_start () { > echo Starting xenconsoled... > test -z "$XENCONSOLED_TRACE" || XENCONSOLED_ARGS=" > --log=$XENCONSOLED_TRACE" > ${SBINDIR}/xenconsoled --pid-file=$XENCONSOLED_PIDFILE > $XENCONSOLED_ARGS > - echo Starting QEMU as disk backend for dom0 > - test -z "$QEMU_XEN" && QEMU_XEN="${LIBEXEC}/qemu-system-i386" > - $QEMU_XEN -xen-domid 0 -xen-attach -name dom0 -nographic -M xenpv > -daemonize \ > - -monitor /dev/null -serial /dev/null -parallel /dev/null \ > - -pidfile $QEMU_PIDFILE > + xl launch-dom0-qemu $QEMU_XEN > } > do_stop () { > echo Stopping xenconsoled > diff --git a/tools/libxl/Makefile b/tools/libxl/Makefile > index d8495bb..d8b6a5c 100644 > --- a/tools/libxl/Makefile > +++ b/tools/libxl/Makefile > @@ -27,6 +27,7 @@ CFLAGS_LIBXL += $(CFLAGS_libxenguest) > CFLAGS_LIBXL += $(CFLAGS_libxenstore) > CFLAGS_LIBXL += $(CFLAGS_libblktapctl) > CFLAGS_LIBXL += -Wshadow > +CFLAGS_LIBXL += -DCONFIG_QEMU_ARCH=\"$(CONFIG_QEMU_ARCH)\" > > LIBXL_LIBS-$(CONFIG_ARM) += -lfdt > > diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h > index 12d6c31..0287a35 100644 > --- a/tools/libxl/libxl.h > +++ b/tools/libxl/libxl.h > @@ -605,6 +605,9 @@ int libxl_ctx_alloc(libxl_ctx **pctx, int version, > xentoollog_logger *lg); > int libxl_ctx_free(libxl_ctx *ctx /* 0 is OK */); > > +/* exec's device model for dom0 and does not return. */ > +void libxl_launch_dom0_qemu(libxl_ctx *ctx, const char *qemu_path, > const char *pidfile); > + > /* domain related functions */ > > int libxl_domain_create_new(libxl_ctx *ctx, libxl_domain_config > *d_config, > diff --git a/tools/libxl/libxl_dm.c b/tools/libxl/libxl_dm.c > index f6f7bbd..f0b13a9 100644 > --- a/tools/libxl/libxl_dm.c > +++ b/tools/libxl/libxl_dm.c > @@ -38,7 +38,7 @@ static const char *qemu_xen_path(libxl__gc *gc) > #ifdef QEMU_XEN_PATH > return QEMU_XEN_PATH; > #else > - return libxl__abs_path(gc, "qemu-system-i386", > libxl__libexec_path()); > + return libxl__abs_path(gc, "qemu-system-" CONFIG_QEMU_ARCH, > libxl__libexec_path()); > #endif > } > > @@ -1560,6 +1560,37 @@ out: > return ret; > } > > +void libxl_launch_dom0_qemu(libxl_ctx *ctx, const char *qemu_path, > const char *pidfile) > +{ > + GC_INIT(ctx); > + > + flexarray_t *dm_args = flexarray_make(gc, 16, 1); > + > + if (qemu_path == NULL) > + qemu_path = qemu_xen_path(gc); > + > + flexarray_vappend(dm_args, > + "-xen-domid", "0", > + "-xen-attach", > + "-name", "dom0", > + "-nographic", > + "-M" "xenpv", > + "-daemonize", > + "-monitor", "/dev/null", > + "-serial", "/dev/null", > + "-parallel", "/dev/null", > + NULL); > + if (pidfile) > + flexarray_append_pair(dm_args, "-pidfile", libxl__strdup(gc, > pidfile)); > + > + libxl__exec(gc, -1, -1, -1, > + qemu_path, (char **)flexarray_contents(dm_args), > NULL); > + > + /* Shouldn't return */ > + LOG(CRITICAL, "Failed to exec dom0 device model"); > + GC_FREE; > +} > + > /* > * Local variables: > * mode: C > diff --git a/tools/libxl/xl.h b/tools/libxl/xl.h > index c876a33..1d7602c 100644 > --- a/tools/libxl/xl.h > +++ b/tools/libxl/xl.h > @@ -106,6 +106,7 @@ int main_setenforce(int argc, char **argv); > int main_loadpolicy(int argc, char **argv); > int main_remus(int argc, char **argv); > int main_devd(int argc, char **argv); > +int main_launch_dom0_qemu(int argc, char **argv); > > void help(const char *command); > > diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c > index bd26bcc..108dfac 100644 > --- a/tools/libxl/xl_cmdimpl.c > +++ b/tools/libxl/xl_cmdimpl.c > @@ -7313,6 +7313,31 @@ out: > return ret; > } > > +int main_launch_dom0_qemu(int argc, char **argv) > +{ > + int opt; > + const char *qemu = NULL; > + const char *pidfile = NULL; > + > + SWITCH_FOREACH_OPT(opt, "p:", NULL, "launch-dom-qemu", 0) { > + case 'p': > + pidfile = optarg; > + break; > + /* No options */ > + } > + if (optind < argc) > + qemu = argv[optind]; > + > + fprintf(stderr, "argc %d\n", argc); > + fprintf(stderr, "qemu = %s", qemu ? : "<default>"); > + > + fprintf(stdout, "Starting QEMU as disk backend for dom0"); > + > + libxl_launch_dom0_qemu(ctx, qemu, pidfile); > + > + return 0; > +} > + > /* > * Local variables: > * mode: C > diff --git a/tools/libxl/xl_cmdtable.c b/tools/libxl/xl_cmdtable.c > index ebe0220..ab4d56c 100644 > --- a/tools/libxl/xl_cmdtable.c > +++ b/tools/libxl/xl_cmdtable.c > @@ -494,6 +494,12 @@ struct cmd_spec cmd_table[] = { > "[options]", > "-F Run in the foreground", > }, > + { "launch-dom0-qemu", > + &main_launch_dom0_qemu, 0, 1, > + "Start qemu process to service dom0 disk backends", > + "[options] [QEMU_PATH]", > + "-p PIDFILE Write a PIDFILE\n", > + }, > }; > > int cmdtable_len = sizeof(cmd_table)/sizeof(struct cmd_spec); _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |