From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 41A7EC636CC for ; Sun, 19 Feb 2023 22:02:47 +0000 (UTC) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id F302A85925; Sun, 19 Feb 2023 23:02:33 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=reject dis=none) header.from=kwiboo.se Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=kwiboo.se header.i=@kwiboo.se header.b="nB6eFJ52"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id C609285851; Sun, 19 Feb 2023 23:02:16 +0100 (CET) Received: from xtrwkhkk.outbound-mail.sendgrid.net (xtrwkhkk.outbound-mail.sendgrid.net [167.89.16.17]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 0CF3585778 for ; Sun, 19 Feb 2023 23:02:07 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=reject dis=none) header.from=kwiboo.se Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=bounces+31435339-7456-u-boot=lists.denx.de@em2124.kwiboo.se DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kwiboo.se; h=from:subject:in-reply-to:references:mime-version:to:cc: content-transfer-encoding:content-type:cc:content-type:from:subject:to; s=s1; bh=+tzUTRnv2LqsUt8RxL+zG5lE02FxM3f6PiPrnyJk9fk=; b=nB6eFJ52eoF7qBl1D5Vk4gafTiDJh/aFNM0DMg87T7YAHtA5iuYYcCUfUj4Q51OsSvFo RoHlNbhJ7F2Ipsh3DGejesxsRva5az6fEyz5r0DgEOOdQ1ahqB5P6DgileTjVut++KmSuq gq7Ln0zJc01BYH0Iv58sUu7COP2pl3mRh/NP/EOl2EzXnD4wWjJzbHD4RK5VtFFCycg58W PyGhdpGLqSQ5hqWuJJoukwQ+c+lUvByRMjskqVjuqKDyxLxYTz6E8ycINVoYXDRkOcHaXj 5S6nNClRAYjfFY+n66oOw+LDlXtm0YsY5O+yRVWcGiR1iFo1kk6FmNE+yEc1cYkA== Received: by filterdrecv-7dfc98557c-gsmlv with SMTP id filterdrecv-7dfc98557c-gsmlv-1-63F29C5D-39 2023-02-19 22:02:05.567218824 +0000 UTC m=+788702.375983714 Received: from bionic.localdomain (unknown) by geopod-ismtpd-canary-0 (SG) with ESMTP id XNjaKT1WTmipANR5LTKCyQ Sun, 19 Feb 2023 22:02:05.256 +0000 (UTC) From: Jonas Karlman Subject: [PATCH 6/9] binman: Mark mkimage entry missing when its subnodes is missing Date: Sun, 19 Feb 2023 22:02:05 +0000 (UTC) Message-Id: <20230219220158.4160763-7-jonas@kwiboo.se> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230219220158.4160763-1-jonas@kwiboo.se> References: <20230219220158.4160763-1-jonas@kwiboo.se> MIME-Version: 1.0 X-SG-EID: =?us-ascii?Q?TdbjyGynYnRZWhH+7lKUQJL+ZxmxpowvO2O9SQF5CwCVrYgcwUXgU5DKUU3QxA?= =?us-ascii?Q?fZekEeQsTe+RrMu3cja6a0hzpOj7WQ7plkp2yQg?= =?us-ascii?Q?SEkSZHcIvBEE7N82UWb7fjpohPIjnhXSgGkz8JH?= =?us-ascii?Q?kWh7I0ABe2pSySRrS0Y3PYuwW67bBj8sG1amIlB?= =?us-ascii?Q?TIc1J3Q9ZdHHfa7PuSQjc=2FztWH3KlZXSJdxzTGR?= =?us-ascii?Q?Z6C7KW36H8JdfQDNTYhncOs4edXeGvnpUJhumu?= To: Simon Glass , Alper Nebi Yasak Cc: Pali =?iso-8859-1?b?Um9o4XI=?= , Heinrich Schuchardt , Marek =?iso-8859-1?b?QmVo+m4=?= , Quentin Schulz , Stefan Herbrechtsmeier , u-boot@lists.denx.de, Jonas Karlman X-Entity-ID: P7KYpSJvGCELWjBME/J5tg== Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=us-ascii X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.6 at phobos.denx.de X-Virus-Status: Clean Using the mkimage entry with the multiple-data-files prop and having a missing external blob result in an unexpected ValueError exception using the --allow-missing flag. ValueError: Filename 'missing.bin' not found in input path (...) Fix this by using _pathname that is resolved by ObtainContents for blob entries, ObtainContents also handles allow missing for external blobs. Mark mkimage entry as missing and return without running mkimage when missing entries is reported by CheckMissing. Signed-off-by: Jonas Karlman --- tools/binman/etype/mkimage.py | 10 +++++++++- tools/binman/ftest.py | 9 +++++++++ .../test/278_mkimage_missing_multiple.dts | 19 +++++++++++++++++++ 3 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 tools/binman/test/278_mkimage_missing_multiple.dts diff --git a/tools/binman/etype/mkimage.py b/tools/binman/etype/mkimage.py index 49d3462a154c..2673a8607f37 100644 --- a/tools/binman/etype/mkimage.py +++ b/tools/binman/etype/mkimage.py @@ -156,7 +156,8 @@ class Entry_mkimage(Entry): for entry in self._mkimage_entries.values(): if not entry.ObtainContents(fake_size=fake_size): return False - fnames.append(tools.get_input_filename(entry.GetDefaultFilename())) + if entry._pathname: + fnames.append(entry._pathname) input_fname = ":".join(fnames) else: data, input_fname, uniq = self.collect_contents_to_file( @@ -171,6 +172,13 @@ class Entry_mkimage(Entry): outfile = self._filename if self._filename else 'mkimage-out.%s' % uniq output_fname = tools.get_output_filename(outfile) + missing_list = [] + self.CheckMissing(missing_list) + self.missing = bool(missing_list) + if self.missing: + self.SetContents(b'') + return self.allow_missing + args = ['-d', input_fname] if self._data_to_imagename: args += ['-n', input_fname] diff --git a/tools/binman/ftest.py b/tools/binman/ftest.py index 48ac1540bfd8..803b8c5accf4 100644 --- a/tools/binman/ftest.py +++ b/tools/binman/ftest.py @@ -6393,6 +6393,15 @@ fdt fdtmap Extract the devicetree blob from the fdtmap data = self._DoReadFile('277_rockchip_tpl.dts') self.assertEqual(ROCKCHIP_TPL_DATA, data[:len(ROCKCHIP_TPL_DATA)]) + def testMkimageMissingBlobMultiple(self): + """Test using mkimage to build an image""" + with test_util.capture_sys_output() as (stdout, stderr): + self._DoTestFile('278_mkimage_missing_multiple.dts', allow_missing=True) + err = stderr.getvalue() + self.assertRegex( + err, + "Image '.*' is missing external blobs and is non-functional: .*") + if __name__ == "__main__": unittest.main() diff --git a/tools/binman/test/278_mkimage_missing_multiple.dts b/tools/binman/test/278_mkimage_missing_multiple.dts new file mode 100644 index 000000000000..f84aea49ead9 --- /dev/null +++ b/tools/binman/test/278_mkimage_missing_multiple.dts @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: GPL-2.0+ + +/dts-v1/; + +/ { + #address-cells = <1>; + #size-cells = <1>; + + binman { + mkimage { + args = "-n test -T script"; + multiple-data-files; + + blob-ext { + filename = "missing.bin"; + }; + }; + }; +}; -- 2.39.2