cmdximg
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
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