Author: jow Date: 2014-10-16 18:16:47 +0200 (Thu, 16 Oct 2014) New Revision: 42934
Modified: trunk/tools/firmware-utils/src/ptgen.c Log: firmware-utils: allow passing a specific MBR signature to ptgen Signed-off-by: Jo-Philipp Wich <[email protected]> Modified: trunk/tools/firmware-utils/src/ptgen.c =================================================================== --- trunk/tools/firmware-utils/src/ptgen.c 2014-10-16 16:13:16 UTC (rev 42933) +++ trunk/tools/firmware-utils/src/ptgen.c 2014-10-16 16:16:47 UTC (rev 42934) @@ -28,6 +28,7 @@ #include <stdio.h> #include <ctype.h> #include <fcntl.h> +#include <stdint.h> #if __BYTE_ORDER == __BIG_ENDIAN #define cpu_to_le16(x) bswap_16(x) @@ -124,7 +125,7 @@ } /* check the partition sizes and write the partition table */ -static int gen_ptable(int nr) +static int gen_ptable(uint32_t signature, int nr) { struct pte pte[4]; unsigned long sect = 0; @@ -159,6 +160,12 @@ return -1; } + lseek(fd, 440, SEEK_SET); + if (write(fd, &signature, sizeof(signature)) != sizeof(signature)) { + fprintf(stderr, "write failed.\n"); + goto fail; + } + lseek(fd, 446, SEEK_SET); if (write(fd, pte, sizeof(struct pte) * 4) != sizeof(struct pte) * 4) { fprintf(stderr, "write failed.\n"); @@ -187,8 +194,9 @@ char type = 0x83; int ch; int part = 0; + uint32_t signature = 0x5452574F; /* 'OWRT' */ - while ((ch = getopt(argc, argv, "h:s:p:a:t:o:vl:")) != -1) { + while ((ch = getopt(argc, argv, "h:s:p:a:t:o:vl:S:")) != -1) { switch (ch) { case 'o': filename = optarg; @@ -221,6 +229,9 @@ case 'l': kb_align = (int) strtoul(optarg, NULL, 0) * 2; break; + case 'S': + signature = strtoul(optarg, NULL, 0); + break; case '?': default: usage(argv[0]); @@ -229,6 +240,6 @@ argc -= optind; if (argc || (heads <= 0) || (sectors <= 0) || !filename) usage(argv[0]); - - return gen_ptable(part); + + return gen_ptable(signature, part); } _______________________________________________ openwrt-commits mailing list [email protected] https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-commits
