From 219a6dab8995aad9ac4860cc1a84d6f3509a03a4 Mon Sep 17 00:00:00 2001 From: wbx Date: Sun, 17 May 2009 14:41:34 +0200 Subject: Initial import --- target/qemu-cris/tools/mkfimage/Makefile | 4 ++ target/qemu-cris/tools/mkfimage/mkfimage.c | 72 ++++++++++++++++++++++++++++++ target/qemu-cris/tools/rules.mk | 9 ++++ 3 files changed, 85 insertions(+) create mode 100644 target/qemu-cris/tools/mkfimage/Makefile create mode 100644 target/qemu-cris/tools/mkfimage/mkfimage.c create mode 100644 target/qemu-cris/tools/rules.mk (limited to 'target/qemu-cris/tools') diff --git a/target/qemu-cris/tools/mkfimage/Makefile b/target/qemu-cris/tools/mkfimage/Makefile new file mode 100644 index 000000000..dd7667972 --- /dev/null +++ b/target/qemu-cris/tools/mkfimage/Makefile @@ -0,0 +1,4 @@ +include $(TOPDIR)/rules.mk + +all: mkfimage + $(HOSTCC) -o ${STAGING_TOOLS}/bin/mkfimage mkfimage.c diff --git a/target/qemu-cris/tools/mkfimage/mkfimage.c b/target/qemu-cris/tools/mkfimage/mkfimage.c new file mode 100644 index 000000000..6904170cf --- /dev/null +++ b/target/qemu-cris/tools/mkfimage/mkfimage.c @@ -0,0 +1,72 @@ +#include +#include +#include +#include +#include +#include + +int main(int argc, char **argv){ + unsigned char *buffer = malloc(64 * 1024); + struct stat s; + unsigned int size_vmlinux = 0, real_size_vmlinux = 0; + const unsigned char *magic_str = "ACME_PART_MAGIC"; + unsigned int loop; + unsigned char *magic; + + if(argc != 3){ + printf("%s in out\n", argv[0]); + return 1; + } + + printf("Generating image\n"); + + FILE *vmlinux = fopen(argv[1], "r"); + FILE *vmlinux_out = fopen(argv[2], "w"); + if((!vmlinux) || (!vmlinux_out)){ + printf("Error opening a file\n"); + return 1; + } + + stat(argv[1], &s); + size_vmlinux = s.st_size; + real_size_vmlinux = (size_vmlinux & 0xffff0000) + 0x10000; + + printf("vmlinux = 0x%.08X / 0x%.08X\n", size_vmlinux, real_size_vmlinux); + + unsigned int t = fread(buffer, 1, 64 * 1024, vmlinux); + for(loop = 0; loop < (64 * 1024) - sizeof(magic_str); loop++){ + if(buffer[loop] == magic_str[0]){ + if((magic = strstr(&buffer[loop], magic_str))){ + printf("Magic at 0x%.08X %p %p\n", magic - buffer, magic, buffer); + printf("Found Magic %X%X%X%X\n", + buffer[loop + strlen(magic_str)], + buffer[loop + strlen(magic_str) + 2], + buffer[loop + strlen(magic_str) + 1], + buffer[loop + strlen(magic_str) + 3]); + + buffer[loop + strlen(magic_str)] = real_size_vmlinux >> 24; + buffer[loop + strlen(magic_str) + 2] = (real_size_vmlinux >> 16) & 0xff; + buffer[loop + strlen(magic_str) + 1] = (real_size_vmlinux >> 8) & 0xff; + buffer[loop + strlen(magic_str) + 3] = (real_size_vmlinux) & 0xff; + + printf("Replaced with %.02X%.02X%.02X%.02X\n", + buffer[loop + strlen(magic_str)], + buffer[loop + strlen(magic_str) + 2], + buffer[loop + strlen(magic_str) + 1], + buffer[loop + strlen(magic_str) + 3]); + + } + } + } + + fwrite(buffer, 1, 64 * 1024, vmlinux_out); + real_size_vmlinux -= 64 * 1024; + do { + real_size_vmlinux -= 64 * 1024; + memset(buffer, 0, 64 * 1024); + fread(buffer, 1, 64 * 1024, vmlinux); + fwrite(buffer, 1, 64 * 1024, vmlinux_out); + } while (real_size_vmlinux); + + return 0; +} diff --git a/target/qemu-cris/tools/rules.mk b/target/qemu-cris/tools/rules.mk new file mode 100644 index 000000000..8d03c031a --- /dev/null +++ b/target/qemu-cris/tools/rules.mk @@ -0,0 +1,9 @@ +# $Id$ +#- +# This file is part of the OpenADK project. OpenADK is copyrighted +# material, please see the LICENCE file in the top-level directory. + +WRKDIR_BASE= ${TOOLS_BUILD_DIR} +WRKDIR= ${WRKDIR_BASE} + +include ${TOPDIR}/mk/buildhlp.mk -- cgit v1.2.3