diff options
author | Andy Lutomirski <luto@kernel.org> | 2015-10-29 16:45:46 -0700 |
---|---|---|
committer | Andy Lutomirski <luto@kernel.org> | 2015-10-29 16:45:46 -0700 |
commit | ffc9819b2e539d32dbfbf13f99456dec3d04b1b8 (patch) | |
tree | 21011b12b4b451ba455c4d519c80d55930e62d5b | |
parent | 56d3c267ea22d0a182d02d120dc331e5bea9e75c (diff) | |
download | virtme-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.py | 17 | ||||
-rw-r--r-- | virtme/commands/run.py | 42 |
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]) |