aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndy Lutomirski <luto@kernel.org>2015-10-29 16:45:46 -0700
committerAndy Lutomirski <luto@kernel.org>2015-10-29 16:45:46 -0700
commitffc9819b2e539d32dbfbf13f99456dec3d04b1b8 (patch)
tree21011b12b4b451ba455c4d519c80d55930e62d5b
parent56d3c267ea22d0a182d02d120dc331e5bea9e75c (diff)
downloadvirtme-ffc9819b2e539d32dbfbf13f99456dec3d04b1b8.tar.gz
Add --kdir support
This makes arm in particular much easier to use because it picks up the dtb file automatically. Signed-off-by: Andy Lutomirski <luto@kernel.org>
-rw-r--r--virtme/architectures.py17
-rw-r--r--virtme/commands/run.py42
2 files changed, 43 insertions, 16 deletions
diff --git a/virtme/architectures.py b/virtme/architectures.py
index de5230f..4b61f1b 100644
--- a/virtme/architectures.py
+++ b/virtme/architectures.py
@@ -40,6 +40,13 @@ class Arch(object):
def config_base():
return []
+ def kimg_path(self):
+ return 'arch/%s/boot/bzImage' % self.linuxname
+
+ @staticmethod
+ def dtb_path():
+ return None
+
class Arch_unknown(Arch):
@staticmethod
def qemuargs(is_native):
@@ -127,6 +134,12 @@ class Arch_arm(Arch):
def serial_console_args():
return ['console=ttyAMA0']
+ def kimg_path(self):
+ return 'arch/arm/boot/zImage'
+
+ def dtb_path(self):
+ return 'arch/arm/boot/dts/vexpress-v2p-ca15-tc1.dtb'
+
class Arch_aarch64(Arch):
def __init__(self, name):
Arch.__init__(self, name)
@@ -159,7 +172,9 @@ class Arch_aarch64(Arch):
def serial_console_args():
return ['console=ttyAMA0']
-# Disabled because it doesn't work.
+ def kimg_path(self):
+ return 'arch/arm64/boot/Image'
+
class Arch_s390x(Arch):
def __init__(self, name):
Arch.__init__(self, name)
diff --git a/virtme/commands/run.py b/virtme/commands/run.py
index 3d98692..4885924 100644
--- a/virtme/commands/run.py
+++ b/virtme/commands/run.py
@@ -35,9 +35,8 @@ def make_parser():
g.add_argument('--kimg', action='store',
help='Use specified kernel image with no modules.')
-# Disabled until kmod gets fixed.
-# g.add_argument('--kernel-build-dir', action='store', metavar='KDIR',
-# help='Use a compiled kernel source directory')
+ g.add_argument('--kdir', action='store', metavar='KDIR',
+ help='Use a compiled kernel source directory')
g = parser.add_argument_group(title='Kernel options')
g.add_argument('-a', '--kopt', action='append', default=[],
@@ -106,27 +105,38 @@ def arg_fail(message):
_ARGPARSER.print_usage()
sys.exit(1)
-def find_kernel_and_mods(args):
+def find_kernel_and_mods(arch, args):
if args.installed_kernel is not None:
kver = args.installed_kernel
modfiles = modfinder.find_modules_from_install(
virtmods.MODALIASES, kver=kver)
moddir = os.path.join('/lib/modules', kver)
kimg = '/boot/vmlinuz-%s' % kver
-# Disabled until kmod gets fixed.
-# elif args.kernel_build_dir is not None:
-# kimg = os.path.join(args.kernel_build_dir, 'arch/x86/boot/bzImage')
-# modfiles = modfinder.find_modules_from_install(
-# virtmods.MODALIASES,
-# moddir=os.path.join(args.kernel_build_dir, '.tmp_moddir'))
+ dtb = None # For now
+ elif args.kdir is not None:
+ kimg = os.path.join(args.kdir, arch.kimg_path())
+ modfiles = []
+ moddir = None
+
+ # Once kmod gets fixed (if ever), we can do something like:
+ # modfiles = modfinder.find_modules_from_install(
+ # virtmods.MODALIASES,
+ # moddir=os.path.join(args.kernel_build_dir, '.tmp_moddir'))
+
+ dtb_path = arch.dtb_path()
+ if dtb_path is None:
+ dtb = None
+ else:
+ dtb = os.path.join(args.kdir, dtb_path)
elif args.kimg is not None:
kimg = args.kimg
modfiles = []
moddir = None
+ dtb = None # TODO: fix this
else:
arg_fail('You must specify a kernel to use.')
- return kimg,modfiles,moddir
+ return kimg,dtb,modfiles,moddir
def export_virtfs(qemu, arch, qemuargs, path, mount_tag, security_model='none', readonly=True):
# NB: We can't use -virtfs for this, because it can't handle a mount_tag
@@ -161,14 +171,14 @@ def main():
config = mkinitramfs.Config()
- kimg,modfiles,moddir = find_kernel_and_mods(args)
+ arch = architectures.get(args.arch)
+ is_native = (args.arch == uname.machine)
+
+ kimg,dtb,modfiles,moddir = find_kernel_and_mods(arch, args)
config.modfiles = modfiles
if config.modfiles:
need_initramfs = True
- arch = architectures.get(args.arch)
- is_native = (args.arch == uname.machine)
-
qemuargs = [qemu.qemubin]
kernelargs = []
@@ -391,6 +401,8 @@ def main():
in (kernelargs + args.kopt))])
if initrdpath is not None:
qemuargs.extend(['-initrd', initrdpath])
+ if dtb is not None:
+ qemuargs.extend(['-dtb', dtb])
else:
# Use multiboot syntax to load Xen
qemuargs.extend(['-kernel', args.xen])