]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
kvm tools: Initialize and use VESA and VNC
authorJohn Floren <john@jfloren.net>
Mon, 23 May 2011 12:15:18 +0000 (15:15 +0300)
committerPekka Enberg <penberg@kernel.org>
Mon, 23 May 2011 14:07:39 +0000 (17:07 +0300)
Requirements - Kernel compiled with:
CONFIG_FB_BOOT_VESA_SUPPORT=y
CONFIG_FB_VESA=y
CONFIG_FRAMEBUFFER_CONSOLE=y

Start VNC server by starting kvm tools with "--vnc".
Connect to the VNC server by running: "vncviewer :0".

Since there is no support for input devices at this time,
it may be useful starting kvm tools with an additional
' -p "console=ttyS0" ' parameter so that it would be possible
to use a serial console alongside with a graphic one.

Signed-off-by: John Floren <john@jfloren.net>
[ turning code into patches and cleanup ]
Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
tools/kvm/kvm-run.c

index 288e1fbe530a37a9f3af47ff09ea20ab03b4fea9..adbb25b9ffdd9b4a4e00d3af07565b86e99dc809 100644 (file)
@@ -28,6 +28,7 @@
 #include <kvm/barrier.h>
 #include <kvm/symbol.h>
 #include <kvm/virtio-9p.h>
+#include <kvm/vesa.h>
 
 /* header files for gitish interface  */
 #include <kvm/kvm-run.h>
@@ -66,6 +67,7 @@ static const char *virtio_9p_dir;
 static bool single_step;
 static bool readonly_image[MAX_DISK_IMAGES];
 static bool virtio_rng;
+static bool vnc;
 extern bool ioport_debug;
 extern int  active_console;
 
@@ -110,6 +112,7 @@ static const struct option options[] = {
        OPT_STRING('\0', "kvm-dev", &kvm_dev, "kvm-dev", "KVM device file"),
        OPT_STRING('\0', "virtio-9p", &virtio_9p_dir, "root dir",
                        "Enable 9p over virtio"),
+       OPT_BOOLEAN('\0', "vnc", &vnc, "Enable VNC framebuffer"),
 
        OPT_GROUP("Kernel options:"),
        OPT_STRING('k', "kernel", &kernel_filename, "kernel",
@@ -413,6 +416,7 @@ int kvm_cmd_run(int argc, const char **argv, const char *prefix)
        char *hi;
        int i;
        void *ret;
+       u16 vidmode = 0;
 
        signal(SIGALRM, handle_sigalrm);
        signal(SIGQUIT, handle_sigquit);
@@ -511,7 +515,13 @@ int kvm_cmd_run(int argc, const char **argv, const char *prefix)
        kvm->nrcpus = nrcpus;
 
        memset(real_cmdline, 0, sizeof(real_cmdline));
-       strcpy(real_cmdline, "notsc noapic noacpi pci=conf1 console=ttyS0 earlyprintk=serial");
+       strcpy(real_cmdline, "notsc noapic noacpi pci=conf1");
+       if (vnc) {
+               strcat(real_cmdline, " video=vesafb console=tty0");
+               vidmode = 0x312;
+       } else {
+               strcat(real_cmdline, " console=ttyS0 earlyprintk=serial");
+       }
        strcat(real_cmdline, " ");
        if (kernel_cmdline)
                strlcat(real_cmdline, kernel_cmdline, sizeof(real_cmdline));
@@ -543,7 +553,7 @@ int kvm_cmd_run(int argc, const char **argv, const char *prefix)
        printf("  # kvm run -k %s -m %Lu -c %d\n", kernel_filename, ram_size / 1024 / 1024, nrcpus);
 
        if (!kvm__load_kernel(kvm, kernel_filename, initrd_filename,
-                               real_cmdline))
+                               real_cmdline, vidmode))
                die("unable to load kernel %s", kernel_filename);
 
        kvm->vmlinux            = vmlinux_filename;
@@ -597,6 +607,9 @@ int kvm_cmd_run(int argc, const char **argv, const char *prefix)
 
        kvm__init_ram(kvm);
 
+       if (vnc)
+               vesa__init(kvm);
+
        thread_pool__init(nr_online_cpus);
 
        for (i = 0; i < nrcpus; i++) {