From b5804498d6010b75b41b49633948ee5babf48876 Mon Sep 17 00:00:00 2001 From: Ed Bartosh Date: Wed, 18 May 2016 15:34:17 +0300 Subject: wic: implement --bmap option This option enables generation of .bmap file for the result image using native bmaptool. [YOCTO #9413] (From OE-Core rev: d64c7b37c40b052510419b4d6629b83319c833e4) Signed-off-by: Ed Bartosh Signed-off-by: Richard Purdie --- scripts/lib/wic/creator.py | 1 + scripts/lib/wic/engine.py | 11 ++++++++--- scripts/lib/wic/imager/direct.py | 23 +++++++++++++++-------- scripts/lib/wic/plugins/imager/direct_plugin.py | 3 ++- scripts/wic | 3 ++- 5 files changed, 28 insertions(+), 13 deletions(-) diff --git a/scripts/lib/wic/creator.py b/scripts/lib/wic/creator.py index d4972e889b..8f7d1503f5 100644 --- a/scripts/lib/wic/creator.py +++ b/scripts/lib/wic/creator.py @@ -69,6 +69,7 @@ class Creator(): optparser.add_option('', '--tmpfs', action='store_true', dest='enabletmpfs', help='Setup tmpdir as tmpfs to accelerate, experimental' ' feature, use it if you have more than 4G memory') + optparser.add_option('', '--bmap', action='store_true', help='generate .bmap') return optparser def postoptparse(self, options): diff --git a/scripts/lib/wic/engine.py b/scripts/lib/wic/engine.py index 5d35c46b32..5b104631ca 100644 --- a/scripts/lib/wic/engine.py +++ b/scripts/lib/wic/engine.py @@ -145,7 +145,7 @@ def list_source_plugins(): def wic_create(wks_file, rootfs_dir, bootimg_dir, kernel_dir, native_sysroot, scripts_path, image_output_dir, - compressor, debug): + compressor, bmap, debug): """Create image wks_file - user-defined OE kickstart file @@ -156,6 +156,7 @@ def wic_create(wks_file, rootfs_dir, bootimg_dir, kernel_dir, scripts_path - absolute path to /scripts dir image_output_dir - dirname to create for image compressor - compressor utility to compress the image + bmap - enable generation of .bmap Normally, the values for the build artifacts values are determined by 'wic -e' from the output of the 'bitbake -e' command given an @@ -186,8 +187,12 @@ def wic_create(wks_file, rootfs_dir, bootimg_dir, kernel_dir, crobj = creator.Creator() - crobj.main(["direct", native_sysroot, kernel_dir, bootimg_dir, rootfs_dir, - wks_file, image_output_dir, oe_builddir, compressor or ""]) + cmdline = ["direct", native_sysroot, kernel_dir, bootimg_dir, rootfs_dir, + wks_file, image_output_dir, oe_builddir, compressor or ""] + if bmap: + cmdline.append('--bmap') + + crobj.main(cmdline) print("\nThe image(s) were created using OE kickstart file:\n %s" % wks_file) diff --git a/scripts/lib/wic/imager/direct.py b/scripts/lib/wic/imager/direct.py index 5a3b655a0c..ffde232c2b 100644 --- a/scripts/lib/wic/imager/direct.py +++ b/scripts/lib/wic/imager/direct.py @@ -33,7 +33,7 @@ from wic.utils.partitionedfs import Image from wic.utils.errors import CreatorError, ImageError from wic.imager.baseimager import BaseImageCreator from wic.plugin import pluginmgr -from wic.utils.oe.misc import exec_cmd +from wic.utils.oe.misc import exec_cmd, exec_native_cmd disk_methods = { "do_install_disk":None, @@ -71,7 +71,8 @@ class DirectImageCreator(BaseImageCreator): """ def __init__(self, oe_builddir, image_output_dir, rootfs_dir, bootimg_dir, - kernel_dir, native_sysroot, compressor, creatoropts=None): + kernel_dir, native_sysroot, compressor, creatoropts=None, + bmap=False): """ Initialize a DirectImageCreator instance. @@ -93,6 +94,7 @@ class DirectImageCreator(BaseImageCreator): self.kernel_dir = kernel_dir self.native_sysroot = native_sysroot self.compressor = compressor + self.bmap = bmap def __get_part_num(self, num, parts): """calculate the real partition number, accounting for partitions not @@ -333,12 +335,17 @@ class DirectImageCreator(BaseImageCreator): self.bootimg_dir, self.kernel_dir, self.native_sysroot) - # Compress the image - if self.compressor: - for disk_name, disk in self.__image.disks.items(): - full_path = self._full_path(self.__imgdir, disk_name, "direct") - msger.debug("Compressing disk %s with %s" % \ - (disk_name, self.compressor)) + + for disk_name, disk in self.__image.disks.items(): + full_path = self._full_path(self.__imgdir, disk_name, "direct") + # Generate .bmap + if self.bmap: + msger.debug("Generating bmap file for %s" % disk_name) + exec_native_cmd("bmaptool create %s -o %s.bmap" % (full_path, full_path), + self.native_sysroot) + # Compress the image + if self.compressor: + msger.debug("Compressing disk %s with %s" % (disk_name, self.compressor)) exec_cmd("%s %s" % (self.compressor, full_path)) def print_outimage_info(self): diff --git a/scripts/lib/wic/plugins/imager/direct_plugin.py b/scripts/lib/wic/plugins/imager/direct_plugin.py index 6d3f46cc61..8fe3930804 100644 --- a/scripts/lib/wic/plugins/imager/direct_plugin.py +++ b/scripts/lib/wic/plugins/imager/direct_plugin.py @@ -86,7 +86,8 @@ class DirectPlugin(ImagerPlugin): kernel_dir, native_sysroot, compressor, - creatoropts) + creatoropts, + opts.bmap) try: creator.create() diff --git a/scripts/wic b/scripts/wic index 11c8316b97..3d33430f1b 100755 --- a/scripts/wic +++ b/scripts/wic @@ -115,6 +115,7 @@ def wic_create_subcommand(args, usage_str): parser.add_option("-c", "--compress-with", choices=("gzip", "bzip2", "xz"), dest='compressor', help="compress image with specified compressor") + parser.add_option("-m", "--bmap", action="store_true", help="generate .bmap") parser.add_option("-v", "--vars", dest='vars_dir', help="directory with .env files that store " "bitbake variables") @@ -245,7 +246,7 @@ def wic_create_subcommand(args, usage_str): print("Creating image(s)...\n") engine.wic_create(wks_file, rootfs_dir, bootimg_dir, kernel_dir, native_sysroot, scripts_path, image_output_dir, - options.compressor, options.debug) + options.compressor, options.bmap, options.debug) def wic_list_subcommand(args, usage_str): -- cgit v1.2.3-54-g00ecf