mirror of
https://github.com/clearlinux/kvmtool.git
synced 2026-10-03 23:38:35 +00:00
kvm tools: Boot to host /bin/sh via 9p by default
This patch updates 'kvm run' to boot to host filesystem via 9p '/bin/sh' by
default:
$ ./kvm run
# kvm run -k ../../arch/x86/boot/bzImage -m 320 -c 2 --name guest-3462
[ 0.000000] Linux version 3.1.0-rc1+ (penberg@tiger) (gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5) ) #7 SMP PREEMPT Tue Aug 9 16:39:20 EEST 2011
[ 0.000000] Command line: notsc noapic noacpi pci=conf1 reboot=k panic=1 console=ttyS0 earlyprintk=serial init=/bin/sh root=/dev/vda rw root=/dev/root rootflags=rw,trans=virtio,version=9p2000.u rootfstype=9p
[snip]
[ 1.803261] VFS: Mounted root (9p filesystem) on device 0:13.
[ 1.805153] devtmpfs: mounted
[ 1.808353] Freeing unused kernel memory: 924k freed
[ 1.810592] Write protecting the kernel read-only data: 12288k
[ 1.816268] Freeing unused kernel memory: 632k freed
[ 1.826030] Freeing unused kernel memory: 1448k freed
sh: cannot set terminal process group (-1): Inappropriate ioctl for device
sh: no job control in this shell
sh-4.1#
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Asias He <asias.hejun@gmail.com>
Cc: Cyrill Gorcunov <gorcunov@gmail.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Prasad Joshi <prasadjoshi124@gmail.com>
Cc: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
This commit is contained in:
committed by
Will Deacon
parent
dd78d9ea33
commit
6df1471eb1
+7
-50
@@ -447,46 +447,6 @@ static const char *find_vmlinux(void)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static int root_device(char *dev, long *part)
|
||||
{
|
||||
struct stat st;
|
||||
|
||||
if (stat("/", &st) < 0)
|
||||
return -1;
|
||||
|
||||
*part = minor(st.st_dev);
|
||||
|
||||
sprintf(dev, "/dev/block/%u:0", major(st.st_dev));
|
||||
if (access(dev, R_OK) < 0)
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static char *host_image(char *cmd_line, size_t size)
|
||||
{
|
||||
char *t;
|
||||
char device[PATH_MAX];
|
||||
long part = 0;
|
||||
|
||||
t = malloc(PATH_MAX);
|
||||
if (!t)
|
||||
return NULL;
|
||||
|
||||
/* check for the root file system */
|
||||
if (root_device(device, &part) < 0) {
|
||||
free(t);
|
||||
return NULL;
|
||||
}
|
||||
strncpy(t, device, PATH_MAX);
|
||||
if (!strstr(cmd_line, "root=")) {
|
||||
char tmp[PATH_MAX];
|
||||
snprintf(tmp, sizeof(tmp), "root=/dev/vda%ld rw ", part);
|
||||
strlcat(cmd_line, tmp, size);
|
||||
}
|
||||
return t;
|
||||
}
|
||||
|
||||
void kvm_run_help(void)
|
||||
{
|
||||
usage_with_options(run_usage, options);
|
||||
@@ -500,7 +460,6 @@ int kvm_cmd_run(int argc, const char **argv, const char *prefix)
|
||||
unsigned int nr_online_cpus;
|
||||
int exit_code = 0;
|
||||
int max_cpus, recommended_cpus;
|
||||
char *hi;
|
||||
int i;
|
||||
void *ret;
|
||||
|
||||
@@ -635,14 +594,14 @@ int kvm_cmd_run(int argc, const char **argv, const char *prefix)
|
||||
if (kernel_cmdline)
|
||||
strlcat(real_cmdline, kernel_cmdline, sizeof(real_cmdline));
|
||||
|
||||
hi = NULL;
|
||||
if (!using_rootfs && !image_filename[0]) {
|
||||
hi = host_image(real_cmdline, sizeof(real_cmdline));
|
||||
if (hi) {
|
||||
image_filename[0] = hi;
|
||||
readonly_image[0] = true;
|
||||
image_count++;
|
||||
}
|
||||
if (virtio_9p__init(kvm, "/", "/dev/root") < 0)
|
||||
die("Unable to initialize virtio 9p");
|
||||
|
||||
using_rootfs = 1;
|
||||
|
||||
if (!strstr(real_cmdline, "init="))
|
||||
strlcat(real_cmdline, " init=/bin/sh ", sizeof(real_cmdline));
|
||||
}
|
||||
|
||||
if (!strstr(real_cmdline, "root="))
|
||||
@@ -660,8 +619,6 @@ int kvm_cmd_run(int argc, const char **argv, const char *prefix)
|
||||
virtio_blk__init_all(kvm);
|
||||
}
|
||||
|
||||
free(hi);
|
||||
|
||||
printf(" # kvm run -k %s -m %Lu -c %d --name %s\n", kernel_filename, ram_size / 1024 / 1024, nrcpus, guest_name);
|
||||
|
||||
if (!kvm__load_kernel(kvm, kernel_filename, initrd_filename,
|
||||
|
||||
Reference in New Issue
Block a user