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 X-Spam-Level: X-Spam-Status: No, score=-15.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1D9F7C6377D for ; Thu, 22 Jul 2021 08:55:44 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 841E361378 for ; Thu, 22 Jul 2021 08:55:43 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 841E361378 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=denx.de Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id CE9A782C5E; Thu, 22 Jul 2021 10:55:41 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=none (p=none dis=none) header.from=denx.de Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=denx.de; s=phobos-20191101; t=1626944142; bh=iU2e5a2sxlApdOe2N9z2Ld93lufepbCYghHrwwIIQjs=; h=Subject:To:Cc:References:From:Date:In-Reply-To:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From; b=QKnjbDECGL5jPM340zk32ylHe3jkUqv5dJMd0Be+U24lywyJnYPpVYW3s14PvFpE+ FnNDYbpHfJjCMDRxOdi6zaVLKsLxENJ7vGSGFbkg2ZxRDfJdxdru9vlUwhUZoLaIU3 t/AJOYOJrgag8jzphoU+jNe5n7fzuLkLgyrwp0qOEGnuMCrElb/SspfAqRnBZDj1B2 roAUk59fP/3ZufM2Us23581E77SuK10hgkvsPV3/gDcylJYViwEfbRYmFprcosd1mm i0TKn1wYYZk3LIJaBuLBLtcRbWo0u4fApQRcU6zLVFSMo1ydniX9a8LshuO7l2/4Eq T4jovGfpgMRkw== Received: by phobos.denx.de (Postfix, from userid 109) id 591B882C63; Thu, 22 Jul 2021 10:55:39 +0200 (CEST) Received: from mout-u-205.mailbox.org (mout-u-205.mailbox.org [IPv6:2001:67c:2050:1::465:205]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 41A5782C56 for ; Thu, 22 Jul 2021 10:55:36 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=none (p=none dis=none) header.from=denx.de Authentication-Results: phobos.denx.de; spf=fail smtp.mailfrom=sr@denx.de Received: from smtp2.mailbox.org (smtp2.mailbox.org [80.241.60.241]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-384) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mout-u-205.mailbox.org (Postfix) with ESMTPS id 4GVmWD0VrrzQkGX; Thu, 22 Jul 2021 10:55:36 +0200 (CEST) Received: from smtp2.mailbox.org ([80.241.60.241]) by spamfilter02.heinlein-hosting.de (spamfilter02.heinlein-hosting.de [80.241.56.116]) (amavisd-new, port 10030) with ESMTP id 7UbQH7SVXVvN; Thu, 22 Jul 2021 10:55:33 +0200 (CEST) Subject: Re: [PATCH u-boot-mvebu v2 40/41] kwbimage: Add support for extracting images via dumpimage tool To: =?UTF-8?Q?Marek_Beh=c3=ban?= , u-boot@lists.denx.de, Chris Packham , Baruch Siach , Dirk Eibach , Chris Packham Cc: Dennis Gilmore , Mario Six , Jon Nettleton , =?UTF-8?Q?Pali_Roh=c3=a1r?= References: <20210719122104.29698-1-marek.behun@nic.cz> <20210719122104.29698-41-marek.behun@nic.cz> From: Stefan Roese Message-ID: <4b43fe68-f55a-9bef-758d-a9800df84754@denx.de> Date: Thu, 22 Jul 2021 10:55:32 +0200 MIME-Version: 1.0 In-Reply-To: <20210719122104.29698-41-marek.behun@nic.cz> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: de-DE Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 2371E17FC X-Rspamd-UID: 74d2f8 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.34 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.2 at phobos.denx.de X-Virus-Status: Clean On 19.07.21 14:21, Marek Behún wrote: > From: Pali Rohár > > The kwbimage library does not support extracting subimages. Implement it. > > Signed-off-by: Pali Rohár > Reviewed-by: Marek Behún Reviewed-by: Stefan Roese Thanks, Stefan > --- > tools/kwbimage.c | 72 ++++++++++++++++++++++++++++++++++++++++++------ > 1 file changed, 64 insertions(+), 8 deletions(-) > > diff --git a/tools/kwbimage.c b/tools/kwbimage.c > index ccb0b92266..5665198db0 100644 > --- a/tools/kwbimage.c > +++ b/tools/kwbimage.c > @@ -1849,17 +1849,73 @@ static int kwbimage_generate(struct image_tool_params *params, > return 4 + (4 - s.st_size % 4) % 4; > } > > +static int kwbimage_extract_subimage(void *ptr, struct image_tool_params *params) > +{ > + struct main_hdr_v1 *mhdr = (struct main_hdr_v1 *)ptr; > + size_t header_size = kwbimage_header_size(ptr); > + int idx = params->pflag; > + int cur_idx = 0; > + uint32_t offset; > + ulong image; > + ulong size; > + > + if (image_version((void *)ptr) == 1 && (mhdr->ext & 0x1)) { > + struct opt_hdr_v1 *ohdr = (struct opt_hdr_v1 *) > + ((uint8_t *)ptr + > + sizeof(*mhdr)); > + > + while (1) { > + uint32_t ohdr_size = (ohdr->headersz_msb << 16) | > + le16_to_cpu(ohdr->headersz_lsb); > + > + if (ohdr->headertype == OPT_HDR_V1_BINARY_TYPE) { > + if (idx == cur_idx) { > + image = (ulong)&ohdr->data[4 + > + 4 * ohdr->data[0]]; > + size = ohdr_size - 12 - > + 4 * ohdr->data[0]; > + goto extract; > + } > + ++cur_idx; > + } > + if (!(*((uint8_t *)ohdr + ohdr_size - 4) & 0x1)) > + break; > + ohdr = (struct opt_hdr_v1 *)((uint8_t *)ohdr + > + ohdr_size); > + } > + } > + > + if (idx != cur_idx) { > + printf("Image %d is not present\n", idx); > + return -1; > + } > + > + offset = le32_to_cpu(mhdr->srcaddr); > + > + if (mhdr->blockid == IBR_HDR_SATA_ID) { > + offset -= 1; > + offset *= 512; > + } > + > + if (mhdr->blockid == IBR_HDR_SDIO_ID) > + offset *= 512; > + > + if (mhdr->blockid == IBR_HDR_PEX_ID && offset == 0xFFFFFFFF) > + offset = header_size; > + > + image = (ulong)((uint8_t *)ptr + offset); > + size = le32_to_cpu(mhdr->blocksize) - 4; > + > +extract: > + return imagetool_save_subimage(params->outfile, image, size); > +} > + > /* > * Report Error if xflag is set in addition to default > */ > static int kwbimage_check_params(struct image_tool_params *params) > { > - if (params->iflag) { > - fprintf(stderr, "%s: kwbimage does not support extract operation\n", params->cmdname); > - return CFG_INVALID; > - } > - > - if (!params->imagename || !strlen(params->imagename)) { > + if (!params->iflag && (!params->imagename || !strlen(params->imagename))) { > char *msg = "Configuration file for kwbimage creation omitted"; > > fprintf(stderr, "Error:%s - %s\n", params->cmdname, msg); > @@ -1869,7 +1925,7 @@ static int kwbimage_check_params(struct image_tool_params *params) > return (params->dflag && (params->fflag || params->lflag)) || > (params->fflag && (params->dflag || params->lflag)) || > (params->lflag && (params->dflag || params->fflag)) || > - (params->xflag) || !(strlen(params->imagename)); > + (params->xflag); > } > > /* > @@ -1884,7 +1940,7 @@ U_BOOT_IMAGE_TYPE( > kwbimage_verify_header, > kwbimage_print_header, > kwbimage_set_header, > - NULL, > + kwbimage_extract_subimage, > kwbimage_check_image_types, > NULL, > kwbimage_generate > Viele Grüße, Stefan -- DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr@denx.de