blob: 966a8111fb4d5ae78c88103bdbaa4e3cfd102a6b [file] [log] [blame]
# Copyright 2021 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""A script to generate MiniOS kernel images.
And inserting them into the Chromium OS images.
"""
import tempfile
from chromite.lib import commandline
from chromite.lib import constants
from chromite.lib import minios
def GetParser():
"""Creates an argument parser and returns it."""
parser = commandline.ArgumentParser(description=__doc__)
parser.add_argument('--board', '-b', '--build-target', required=True,
help='The board name.')
parser.add_argument('--version', required=True,
help='The chromeos version string.')
parser.add_argument('--image', type='path', required=True,
help='The path to the chromium os image.')
parser.add_argument('--keys-dir', type='path',
help='The path to keyset.',
default=constants.VBOOT_DEVKEYS_DIR)
parser.add_argument('--public-key',
help='Filename to the public key whose private part '
'signed the keyblock.',
default=constants.RECOVERY_PUBLIC_KEY)
parser.add_argument('--private-key',
help='Filename to the private key whose public part is '
'baked into the keyblock.',
default=constants.MINIOS_DATA_PRIVATE_KEY)
parser.add_argument('--keyblock',
help='Filename to the kernel keyblock.',
default=constants.MINIOS_KEYBLOCK)
parser.add_argument('--serial', type=str,
help='Serial port for the kernel console (e.g. printks)')
parser.add_argument('--mod-for-dev', action='store_true',
help='Repack the MiniOS image with debug flags.')
parser.add_argument('--force-build', action='store_true',
help='Force the kernel to be rebuilt when repacking with '
'debug flags. Use with --mod-for-dev in case kernel is '
'not already built or needs to be rebuilt.')
return parser
def main(argv):
parser = GetParser()
opts = parser.parse_args(argv)
opts.Freeze()
with tempfile.TemporaryDirectory() as work_dir:
build_kernel = opts.force_build if opts.mod_for_dev else True
kernel = minios.CreateMiniOsKernelImage(opts.board, opts.version, work_dir,
opts.keys_dir, opts.public_key,
opts.private_key, opts.keyblock,
opts.serial, build_kernel,
opts.mod_for_dev)
minios.InsertMiniOsKernelImage(opts.image, kernel)