Skip to contentSkip to conversation

cmdximg

PATCH New Robert Schwebel 2 participants 2 messages Dec 15, 2003 – Jan 3, 2004

lore
Share & tools
lore
#0 lore raw

PATCH 4/6 cmdximg

-------------- next part --------------

#
# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
#

common/cmd_ximg.c new file +150 -0
@@ -0,0 +1,150 @@
+/*
+ * (C) Copyright 2000-2002
+ * Wolfgang Denk, DENX Software Engineering, wd at denx.de.
+ * 
+ * (C) Copyright 2003
+ * Kai-Uwe Bloem, Auerswald GmbH & Co KG, <[email protected]>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#if (CONFIG_COMMANDS & CFG_CMD_XIMG)
+
+/*
+ * Multi Image extract
+ */
+#include <common.h>
+#include <command.h>
+#include <image.h>
+#include <asm/byteorder.h>
+
+#undef DEBUG
+
+int do_imgextract (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+	ulong	addr = load_addr, dest = 0;
+	ulong	data, len, checksum;
+	ulong  *len_ptr;
+	int	i, verify, part = 0;
+	char	pbuf[10], *s;
+	image_header_t header;
+
+	s = getenv ("verify");
+	verify = (s && (*s == 'n')) ? 0 : 1;
+
+	if (argc > 1) {
+		addr = simple_strtoul(argv[1], NULL, 16);
+	}
+	if (argc > 2) {
+		part = simple_strtoul(argv[2], NULL, 16);
+	}
+	if (argc > 3) {
+		dest = simple_strtoul(argv[3], NULL, 16);
+	}
+
+	printf ("## Copying from image at %08lx ...\n", addr);
+
+	/* Copy header so we can blank CRC field for re-calculation */
+	memmove (&header, (char *)addr, sizeof(image_header_t));
+
+	if (ntohl(header.ih_magic) != IH_MAGIC) {
+	    {
+		printf ("Bad Magic Number\n");
+		return 1;
+	    }
+	}
+
+	data = (ulong)&header;
+	len  = sizeof(image_header_t);
+
+	checksum = ntohl(header.ih_hcrc);
+	header.ih_hcrc = 0;
+
+	if (crc32 (0, (char *)data, len) != checksum) {
+		printf ("Bad Header Checksum\n");
+		return 1;
+	}
+
+#ifdef DEBUG
+	print_image_hdr ((image_header_t *) addr);
+#endif
+
+	data = addr + sizeof(image_header_t);
+	len  = ntohl(header.ih_size);
+
+	if (header.ih_type != IH_TYPE_MULTI) {
+		printf ("Wrong Image Type for %s command\n", cmdtp->name);
+		return 1;
+	}
+
+	if (header.ih_comp != IH_COMP_NONE) {
+		printf ("Wrong Compression Type for %s command\n", cmdtp->name);
+		return 1;
+	}
+
+	if (verify) {
+		printf ("   Verifying Checksum ... ");
+		if (crc32 (0, (char *)data, len) != ntohl(header.ih_dcrc)) {
+			printf ("Bad Data CRC\n");
+			return 1;
+		}
+		printf ("OK\n");
+	}
+
+	len_ptr = (ulong *)data;
+
+	data += 4; /* terminator */
+	for (i=0; len_ptr[i]; ++i) {
+		data += 4;
+		if (argc > 2 && part > i) {
+			u_long tail;
+			len = ntohl(len_ptr[i]);
+			tail = len % 4;
+			data += len;
+			if (tail) {
+				data += 4 - tail;
+			}
+		}
+	}
+	if (argc > 2 && part >= i) {
+		printf("Bad Image Part\n");
+		return 1;
+	}
+	len = ntohl(len_ptr[part]);
+
+	if (argc > 3) {
+		memcpy((char *)dest, (char *)data, len);
+	}
+
+	sprintf(pbuf, "%8lx", data);
+	setenv("fileaddr", pbuf);
+	sprintf(pbuf, "%8lx", len);
+	setenv("filesize", pbuf);
+
+	return 0;
+}
+
+U_BOOT_CMD(
+	imxtract,	4,	1,	do_imgextract,
+	"imxtract- extract a part of a multi-image\n",
+	"addr part [dest]\n"
+	"    - extract <part> from image at <addr> and copy to <dest>\n"
+);
+
+#endif
common/Makefile renamed from common/Makefile~cmdximg +1 -1
@@ -39,7 +39,7 @@
 	  cmd_mem.o cmd_mii.o cmd_misc.o cmd_mmc.o \
 	  cmd_nand.o cmd_net.o cmd_nvedit.o \
 	  cmd_pci.o cmd_pcmcia.o cmd_portio.o \
-	  cmd_reginfo.o cmd_scsi.o cmd_spi.o cmd_usb.o cmd_vfd.o \
+	  cmd_reginfo.o cmd_scsi.o cmd_spi.o cmd_usb.o cmd_ximg.o cmd_vfd.o \
 	  command.o console.o devices.o dlmalloc.o docecc.o \
 	  environment.o env_common.o \
 	  env_dataflash.o env_flash.o env_eeprom.o env_nvram.o env_nowhere.o exports.o \
include/cmd_confdefs.h renamed from include/cmd_confdefs.h~cmdximg +1 -0
@@ -85,6 +85,7 @@
 #define CFG_CMD_MMC	0x0008000000000000U	/* MMC support			*/
 #define CFG_CMD_FAT	0x0010000000000000U	/* FAT support			*/
 #define CFG_CMD_IMLS	0x0020000000000000U	/* List all found images        */
+#define CFG_CMD_XIMG	0x0040000000000000U	/* load part of multi image     */
 
 #define CFG_CMD_ALL	0xFFFFFFFFFFFFFFFFU	/* ALL commands			*/
 
README renamed from README~cmdximg +1 -0
@@ -648,6 +648,7 @@
 		CFG_CMD_SPI	* SPI serial bus support
 		CFG_CMD_USB	* USB support
 		CFG_CMD_VFD     * VFD support (TRAB)
+		CFG_CMD_XIMG	* load part of a multi image
 		CFG_CMD_BSP	* Board SPecific functions
 		-----------------------------------------------
 		CFG_CMD_ALL	all
#1 lore raw

PATCH 4/6 cmdximg

Quoted 4 lines · In message <[email protected]> you wrote:

#
# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
#

Please provide CHANGELOG entries for your patches, or at least an explanation what the patch does!!!!

common/cmd_ximg.c

Quoted 2 lines
common/cmd_ximg.c new file +0 -0

Rejected for now. In the current form the patch adds this feature to a couple of boards (DK1C20, DK1S10, LANTEC, MPC8260ADS, MPC8266ADS, RBC823, RPXClassic, ZPC1900, ep8260, hymod) which don't know about it and probably don't want it.

Please fix this, and resubmit.

Best regards,

Wolfgang Denk

Signature · 4 lines
Software Engineering:  Embedded and Realtime Systems,  Embedded Linux
Phone: (+49)-8142-4596-87  Fax: (+49)-8142-4596-88  Email: wd at denx.de
Inform all the troops  that  communications  have  completely  broken
down.                                            - Ashleigh Brilliant