From 20f3e646d8d5f41f009493ee8b193dd75436afbc Mon Sep 17 00:00:00 2001 From: Dominik Riebeling Date: Wed, 4 Nov 2009 21:56:40 +0000 Subject: Clean up mktccboot building. No functional changes. - Adjust the Makefile similar to the changes done in r23520. - Split out the standalone part into a separate source file. - Put telechips.o inside the archive instead of building it separately for rbutil. It is part of mktccboot. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@23522 a1c6a512-1295-4272-9138-f99709370657 --- rbutil/mktccboot/main.c | 133 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 rbutil/mktccboot/main.c (limited to 'rbutil/mktccboot/main.c') diff --git a/rbutil/mktccboot/main.c b/rbutil/mktccboot/main.c new file mode 100644 index 0000000000..4dd5d0c6c4 --- /dev/null +++ b/rbutil/mktccboot/main.c @@ -0,0 +1,133 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2007 by Dave Chapman + * + * Based on mkboot, Copyright (C) 2005 by Linus Nielsen Feltzing + * + * 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 software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ +#include +#include +#include +#include +#include +#include +#include +#include +#include "mktccboot.h" +#include "telechips.h" + +static void usage(void) +{ + printf("Usage: mktccboot \n"); + + exit(1); +} + +int main(int argc, char *argv[]) +{ + char *infile, *bootfile, *outfile; + int fdout = -1; + int n, of_size, boot_size, patched_size; + unsigned char *of_buf; + unsigned char *boot_buf = NULL; + unsigned char* image = NULL; + int ret = 0; + + if(argc < 3) { + usage(); + } + + infile = argv[1]; + bootfile = argv[2]; + outfile = argv[3]; + + /* Read OF and boot files */ + of_buf = file_read(infile, &of_size); + if (!of_buf) + { + ret = 1; + goto error_exit; + } + + /* Validate input file */ + if (test_firmware_tcc(of_buf, of_size)) + { + printf("[ERR] Unknown OF file used, aborting\n"); + ret = 2; + goto error_exit; + } + + boot_buf = file_read(bootfile, &boot_size); + if (!boot_buf) + { + ret = 3; + goto error_exit; + } + + /* Allocate buffer for patched firmware */ + image = malloc(of_size + boot_size); + if (image == NULL) + { + printf("[ERR] Could not allocate memory, aborting\n"); + ret = 4; + goto error_exit; + } + + /* Create the patched firmware */ + image = patch_firmware_tcc(of_buf, of_size, boot_buf, boot_size, + &patched_size); + if (!image) + { + printf("[ERR] Error creating patched firmware, aborting\n"); + ret = 5; + goto error_exit; + } + + fdout = open(outfile, O_WRONLY|O_CREAT|O_TRUNC|O_BINARY, 0644); + if (fdout < 0) + { + perror(outfile); + ret = 6; + goto error_exit; + } + + n = write(fdout, image, patched_size); + if (n != patched_size) + { + printf("[ERR] Could not write output file %s\n",outfile); + ret = 7; + goto error_exit; + } + +error_exit: + + if (fdout >= 0) + close(fdout); + + if (of_buf) + free(of_buf); + + if (boot_buf) + free(boot_buf); + + if (image) + free(image); + + return ret; +} + -- cgit v1.2.3