Enable xm console for vmx guest.
When the serial port is redirect to pty, write the allocated
device to xenstore, then xm console can get it.
TODO:serial port by pty shall not block if there are no reading
on the other end
Signed-off-by: Xiaofeng Ling <xiaofeng.ling@xxxxxxxxx>
# HG changeset patch
# User Xiaofeng Ling <xiaofeng.ling@xxxxxxxxx>
# Node ID 34d300132f3b4dc3944fbe980c97b84671c40e46
# Parent 1e82f5c841ac5cac5598040a5bc305835ff2965c
Enable xm console for vmx guest.
When the serial port is redirect to pty, write the allocated
device to xenstore, then xm console can get it.
TODO:serial port by pty shall not block if there are no reading
on the other end
Signed-off-by: Xiaofeng Ling <xiaofeng.ling@xxxxxxxxx>
diff -r 25599e222c33 tools/examples/xmexample.vmx
--- a/tools/examples/xmexample.vmx Mon Nov 7 18:14:45 2005 +0100
+++ b/tools/examples/xmexample.vmx Tue Nov 8 09:16:22 2005 +0800
@@ -117,6 +117,11 @@
#nographic=0
+#-----------------------------------------------------------------------------
+# serial port re-direct to pty deivce, /dev/pts/n
+# then xm console or minicom can connect
+#serial='pty'
+
#----------------------------------------------------------------------------
# enable ne2000, default = 0(use pcnet)
ne2000=0
diff -r 25599e222c33 tools/ioemu/target-i386-dm/Makefile
--- a/tools/ioemu/target-i386-dm/Makefile Mon Nov 7 18:14:45 2005 +0100
+++ b/tools/ioemu/target-i386-dm/Makefile Tue Nov 8 09:16:22 2005 +0800
@@ -7,7 +7,7 @@
TARGET_PATH=$(SRC_PATH)/target-$(TARGET_ARCH)
VPATH=$(SRC_PATH):$(TARGET_PATH):$(SRC_PATH)/hw:$(SRC_PATH)/audio
DEFINES=-I. -I$(TARGET_PATH) -I$(SRC_PATH)
-DEFINES+= -I$(XEN_ROOT)/tools/libxc
+DEFINES+= -I$(XEN_ROOT)/tools/libxc -I$(XEN_ROOT)/tools/xenstore
ifdef CONFIG_USER_ONLY
VPATH+=:$(SRC_PATH)/linux-user
DEFINES+=-I$(SRC_PATH)/linux-user -I$(SRC_PATH)/linux-user/$(TARGET_ARCH)
@@ -188,7 +188,7 @@
#########################################################
DEFINES+=-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
-LIBS+=-lm -L../../libxc -lxenctrl
+LIBS+=-lm -L../../libxc -lxenctrl -L../../xenstore -lxenstore
ifndef CONFIG_USER_ONLY
LIBS+=-lz
endif
diff -r 25599e222c33 tools/ioemu/vl.c
--- a/tools/ioemu/vl.c Mon Nov 7 18:14:45 2005 +0100
+++ b/tools/ioemu/vl.c Tue Nov 8 09:16:22 2005 +0800
@@ -76,6 +76,7 @@
#endif /* CONFIG_SDL */
#include "xenctrl.h"
+#include "xs.h"
#include "exec-all.h"
//#define DO_TB_FLUSH
@@ -1171,6 +1172,48 @@
return chr;
}
+int store_console_dev(int domid, char *pts)
+{
+ int xc_handle;
+ unsigned int len = 0;
+ struct xs_handle *xs;
+ char *path;
+
+ xs = xs_daemon_open();
+ if (xs == NULL) {
+ fprintf(logfile, "Could not contact XenStore\n");
+ return -1;
+ }
+
+ xc_handle = xc_interface_open();
+ if (xc_handle == -1) {
+ fprintf(logfile, "xc_interface_open() error\n");
+ return -1;
+ }
+
+ path = xs_get_domain_path(xs, domid);
+ if (path == NULL) {
+ fprintf(logfile, "xs_get_domain_path() error\n");
+ return -1;
+ }
+ path = realloc(path, strlen(path) + strlen("/console/tty") + 1);
+ if (path == NULL) {
+ fprintf(logfile, "realloc error\n");
+ return -1;
+ }
+ strcat(path, "/console/tty");
+ if (!xs_write(xs, NULL, path, pts, strlen(pts))) {
+ fprintf(logfile, "xs_write for console fail");
+ return -1;
+ }
+
+ free(path);
+ xs_daemon_close(xs);
+ close(xc_handle);
+
+ return 0;
+}
+
#if defined(__linux__)
CharDriverState *qemu_chr_open_pty(void)
{
@@ -1182,6 +1225,7 @@
return NULL;
}
fprintf(stderr, "char device redirected to %s\n", slave_name);
+ store_console_dev(domid, slave_name);
return qemu_chr_open_fd(master_fd, master_fd);
}
#else
@@ -2701,7 +2745,9 @@
break;
case QEMU_OPTION_nographic:
pstrcpy(monitor_device, sizeof(monitor_device), "stdio");
- pstrcpy(serial_devices[0], sizeof(serial_devices[0]), "stdio");
+ if(!strcmp(serial_devices[0], "vc"))
+ pstrcpy(serial_devices[0], sizeof(serial_devices[0]),
+ "stdio");
nographic = 1;
break;
#ifdef CONFIG_VNC
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|