/* * (C) Copyright 2007-2011 * Allwinner Technology Co., Ltd. * Tom Cubie * * a simple tool to generate bootable image for sunxi platform. * * SPDX-License-Identifier: GPL-2.0+ */ #include #include #include #include #include #include #include #include struct image_info { unsigned int magic_num; unsigned int addr; unsigned int length; unsigned int sec_addr; unsigned int sec_length; unsigned int sfc_cfg; unsigned int nand_info[19]; unsigned int aes_mode; unsigned int iv[4]; unsigned int rev1; unsigned int rev2; unsigned int clk_reconfig; unsigned int rsvd[223]; }; int main(int argc, char *argv[]) { int fd_in, fd_out; unsigned file_size; int count = 0, ret; char *tool_name = argv[0]; struct image_info info; unsigned char buf[4]; if (argc < 3) { printf("This program converts an input binary file to a molchip bootable image.\n"); printf("\nUsage: %s options input_file output_file\n", tool_name); printf("Where options is the binary execute address\n"); return EXIT_FAILURE; } fd_in = open(argv[2], O_RDONLY); if (fd_in < 0) { perror("Open input file"); return EXIT_FAILURE; } /* get input file size */ file_size = lseek(fd_in, 0, SEEK_END); memset(&info, 0, sizeof(info)); /* fill the header */ info.magic_num = 0x46524550; info.sfc_cfg = 0x0603; // sscanf(&info.addr, "0x%08x", &argv[1][3]); info.addr = strtol(argv[1], NULL, 16); info.length = file_size; fd_out = open(argv[3], O_WRONLY | O_CREAT, 0666); if (fd_out < 0) { perror("Open output file"); return EXIT_FAILURE; } ret = write(fd_out, &info, le32_to_cpu(sizeof(info))); if (ret != le32_to_cpu(sizeof(info))) { perror("Writing output"); return EXIT_FAILURE; } lseek(fd_in, 0, SEEK_SET); while(count < file_size) { ret = read(fd_in, buf, 1); if (ret != 1) { printf("Reading input image fail ret=%d\n", ret); return EXIT_FAILURE; } ret = write(fd_out, buf, 1); if (ret != 1) { printf("Writing output fail\n"); return EXIT_FAILURE; } count += 1; } close(fd_in); close(fd_out); return EXIT_SUCCESS; }