From 799730ed9aef5f1f9e83cd216310462469ae156f Mon Sep 17 00:00:00 2001 From: Avi Kivity <avi.kivity@gmail.com> Date: Sun, 2 Dec 2012 17:55:00 +0200 Subject: [PATCH] Add script for creating boot filesystem --- scripts/mkbootfs.py | 66 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100755 scripts/mkbootfs.py diff --git a/scripts/mkbootfs.py b/scripts/mkbootfs.py new file mode 100755 index 000000000..ebbcc8f83 --- /dev/null +++ b/scripts/mkbootfs.py @@ -0,0 +1,66 @@ +#!/usr/bin/python + +import os, sys, struct, optparse, StringIO, ConfigParser + +make_option = optparse.make_option + +defines = {} +def add_var(option, opt, value, parser): + var, val = value.split('=') + defines[var] = val + +opt = optparse.OptionParser(option_list = [ + make_option('-o', + dest = 'output', + help = 'write to FILE', + metavar = 'FILE'), + make_option('-d', + dest = 'depends', + help = 'write dependencies to FILE', + metavar = 'FILE', + default = None), + make_option('-m', + dest = 'manifest', + help = 'read manifest from FILE', + metavar = 'FILE'), + make_option('-D', + type = 'string', + help = 'define VAR=DATA', + metavar = 'VAR=DATA', + action = 'callback', + callback = add_var), +]) + +(options, args) = opt.parse_args() + +metadata_size = 128 +depends = StringIO.StringIO() +if options.depends: + depends = file(options.depends, 'w') +out = file(options.output, 'w') +print defines +manifest = ConfigParser.SafeConfigParser() +manifest.read(options.manifest) + +depends.write('%s: \\\n' % (options.output,)) + +files = dict([(f, manifest.get('manifest', f, vars = defines)) + for f in manifest.options('manifest')]) +pos = (len(files) + 1) * metadata_size + +for name, hostname in files.items(): + size = os.stat(hostname).st_size + metadata = struct.pack('QQ112s', size, pos, name) + out.write(metadata) + pos += size + depends.write('\t%s \\\n' % (hostname,)) + +out.write(struct.pack('128s', '')) + +for name, hostname in files.items(): + out.write(file(hostname).read()) + +depends.write('\n\n') + +out.close() +depends.close() -- GitLab