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

Reply via email to