summaryrefslogtreecommitdiff
path: root/rbutil/mkimxboot/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'rbutil/mkimxboot/main.c')
-rw-r--r--rbutil/mkimxboot/main.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/rbutil/mkimxboot/main.c b/rbutil/mkimxboot/main.c
index 68387c25c0..ed88d3e1ff 100644
--- a/rbutil/mkimxboot/main.c
+++ b/rbutil/mkimxboot/main.c
@@ -53,6 +53,7 @@ static void usage(void)
53 printf(" -t <type>\tSet type (dualboot, singleboot, recovery)\n"); 53 printf(" -t <type>\tSet type (dualboot, singleboot, recovery)\n");
54 printf(" -v <v>\tSet variant\n"); 54 printf(" -v <v>\tSet variant\n");
55 printf(" -x\t\tDump device informations\n"); 55 printf(" -x\t\tDump device informations\n");
56 printf(" -w\tExtract the original firmware\n");
56 printf("Supported variants: (default is standard)\n"); 57 printf("Supported variants: (default is standard)\n");
57 printf(" "); 58 printf(" ");
58 for(size_t i = 0; i < NR_VARIANTS; i++) 59 for(size_t i = 0; i < NR_VARIANTS; i++)
@@ -74,6 +75,7 @@ int main(int argc, char *argv[])
74 enum imx_firmware_variant_t variant = VARIANT_DEFAULT; 75 enum imx_firmware_variant_t variant = VARIANT_DEFAULT;
75 enum imx_output_type_t type = IMX_DUALBOOT; 76 enum imx_output_type_t type = IMX_DUALBOOT;
76 bool debug = false; 77 bool debug = false;
78 bool extract_of = false;
77 79
78 if(argc == 1) 80 if(argc == 1)
79 usage(); 81 usage();
@@ -93,7 +95,7 @@ int main(int argc, char *argv[])
93 {0, 0, 0, 0} 95 {0, 0, 0, 0}
94 }; 96 };
95 97
96 int c = getopt_long(argc, argv, "?di:o:b:t:v:x", long_options, NULL); 98 int c = getopt_long(argc, argv, "?di:o:b:t:v:xw", long_options, NULL);
97 if(c == -1) 99 if(c == -1)
98 break; 100 break;
99 switch(c) 101 switch(c)
@@ -150,6 +152,9 @@ int main(int argc, char *argv[])
150 for(int i = 0; i < sizeof(imx_variants) / sizeof(imx_variants[0]); i++) 152 for(int i = 0; i < sizeof(imx_variants) / sizeof(imx_variants[0]); i++)
151 printf(" %s -> variant=%d\n", imx_variants[i].name, imx_variants[i].variant); 153 printf(" %s -> variant=%d\n", imx_variants[i].name, imx_variants[i].variant);
152 break; 154 break;
155 case 'w':
156 extract_of = true;
157 break;
153 default: 158 default:
154 abort(); 159 abort();
155 } 160 }
@@ -165,7 +170,7 @@ int main(int argc, char *argv[])
165 printf("You must specify an output file\n"); 170 printf("You must specify an output file\n");
166 return 1; 171 return 1;
167 } 172 }
168 if(!bootfile) 173 if(!bootfile && !extract_of)
169 { 174 {
170 printf("You must specify an boot file\n"); 175 printf("You must specify an boot file\n");
171 return 1; 176 return 1;
@@ -176,6 +181,13 @@ int main(int argc, char *argv[])
176 return 1; 181 return 1;
177 } 182 }
178 183
184 if(extract_of)
185 {
186 enum imx_error_t err = extract_firmware(infile, variant, outfile);
187 printf("Result: %d\n", err);
188 return 0;
189 }
190
179 struct imx_option_t opt; 191 struct imx_option_t opt;
180 memset(&opt, 0, sizeof(opt)); 192 memset(&opt, 0, sizeof(opt));
181 opt.debug = debug; 193 opt.debug = debug;