diff options
| author | Daniel Stenberg <daniel@haxx.se> | 2003-12-12 13:32:27 +0000 |
|---|---|---|
| committer | Daniel Stenberg <daniel@haxx.se> | 2003-12-12 13:32:27 +0000 |
| commit | da6d7e9b44bce4007ba0d1c8e0d44e5a900ac75e (patch) | |
| tree | 9423f28720a2dd8bbc2ef5a58354e966df9b881f | |
| parent | c78b30dac867d956a48df96ac4eb73e2372f0fbc (diff) | |
| download | rockbox-da6d7e9b44bce4007ba0d1c8e0d44e5a900ac75e.zip rockbox-da6d7e9b44bce4007ba0d1c8e0d44e5a900ac75e.tar.gz rockbox-da6d7e9b44bce4007ba0d1c8e0d44e5a900ac75e.tar.bz2 rockbox-da6d7e9b44bce4007ba0d1c8e0d44e5a900ac75e.tar.xz | |
Added the 'mkneofile' tool that is used instead of scramble when making the
Neo firmware image. The Open Neo project used to call this tool 'add_header'.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@4136 a1c6a512-1295-4272-9138-f99709370657
| -rw-r--r-- | tools/Makefile | 4 | ||||
| -rw-r--r-- | tools/mkneofile.c | 112 |
2 files changed, 115 insertions, 1 deletions
diff --git a/tools/Makefile b/tools/Makefile index 5fec4b1..ea54b1b 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -8,7 +8,7 @@ # CFLAGS := -O -ansi -TARGETS := scramble descramble sh2d bmp2rb convbdf generate_rocklatin +TARGETS := scramble descramble sh2d bmp2rb convbdf generate_rocklatin mkneofile all: $(TARGETS) @@ -16,6 +16,8 @@ scramble: scramble.c descramble: descramble.c +mkneofile: mkneofile.c + sh2d: sh2d.c bmp2rb: bmp2rb.c diff --git a/tools/mkneofile.c b/tools/mkneofile.c new file mode 100644 index 0000000..93e0d45 --- /dev/null +++ b/tools/mkneofile.c @@ -0,0 +1,112 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2003 by Open Neo + * + * All files in this archive are subject to the GNU General Public License. + * See the file COPYING in the source tree root for full license agreement. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ +#include <stdio.h> +#include <stdlib.h> + +#define MY_FIRMWARE_TYPE "Rockbox" +#define MY_HEADER_VERSION 1 + +int main (int argc, char** argv) +{ + unsigned long length,i,slen; + unsigned char *inbuf; + unsigned short checksum=0; + unsigned char *iname = argv[1]; + unsigned char *oname = argv[2]; + unsigned char header[17]; + FILE* file; + + if (argc < 3) { + printf("usage: %s <input file> <output file>\n",argv[0]); + return -1; + } + + /* open file */ + file = fopen(iname,"rb"); + if (!file) { + perror(iname); + return -1; + } + fseek(file,0,SEEK_END); + length = ftell(file); + length = (length + 3) & ~3; /* Round up to nearest 4 byte boundary */ + + if (length >= 0x32000) { + printf("error: max firmware size is 200KB!\n"); + fclose(file); + return -1; + } + + fseek(file,0,SEEK_SET); + inbuf = malloc(length); + if ( !inbuf ) { + printf("out of memory!\n"); + return -1; + } + + /* read file */ + i=fread(inbuf,1,length,file); + if ( !i ) { + perror(iname); + return -1; + } + fclose(file); + + /* calculate checksum */ + for (i=0;i<length;i++) + checksum+=inbuf[i]; + + /* make header */ + memset(header, 0, sizeof(header)); + strncpy(header,MY_FIRMWARE_TYPE,9); + header[9]='\0'; /*shouldn't have to, but to be SURE */ + header[10]=MY_HEADER_VERSION&0xFF; + header[11]=(checksum>>8)&0xFF; + header[12]=checksum&0xFF; + header[13]=(sizeof(header)>>24)&0xFF; + header[14]=(sizeof(header)>>16)&0xFF; + header[15]=(sizeof(header)>>8)&0xFF; + header[16]=sizeof(header)&0xFF; + + /* write file */ + file = fopen(oname,"wb"); + if ( !file ) { + perror(oname); + return -1; + } + if ( !fwrite(header,sizeof(header),1,file) ) { + perror(oname); + return -1; + } + if ( !fwrite(inbuf,length,1,file) ) { + perror(oname); + return -1; + } + fclose(file); + + free(inbuf); + + printf("\r\nHeader Info:\r\n\t" + "Header Type:\t\t%s\r\n\t" + "Header Version:\t\t%d\r\n\t" + "Header Checksum:\t0x%x\r\n\t" + "Data Start:\t\t0x%x\r\n\r\n", + header,header[10],checksum,sizeof(header)); + return 0; +} |