diff options
Diffstat (limited to 'rbutil/mkimxboot/main.c')
-rw-r--r-- | rbutil/mkimxboot/main.c | 56 |
1 files changed, 55 insertions, 1 deletions
diff --git a/rbutil/mkimxboot/main.c b/rbutil/mkimxboot/main.c index 95fc226db1..68387c25c0 100644 --- a/rbutil/mkimxboot/main.c +++ b/rbutil/mkimxboot/main.c | |||
@@ -25,6 +25,22 @@ | |||
25 | #include <string.h> | 25 | #include <string.h> |
26 | #include "mkimxboot.h" | 26 | #include "mkimxboot.h" |
27 | 27 | ||
28 | struct imx_variant_t | ||
29 | { | ||
30 | const char *name; | ||
31 | enum imx_firmware_variant_t variant; | ||
32 | }; | ||
33 | |||
34 | struct imx_variant_t imx_variants[] = | ||
35 | { | ||
36 | { "default", VARIANT_DEFAULT }, | ||
37 | { "zenxfi2-recovery", VARIANT_ZENXFI2_RECOVERY }, | ||
38 | { "zenxfi2-nand", VARIANT_ZENXFI2_NAND }, | ||
39 | { "zenxfi2-sd", VARIANT_ZENXFI2_SD }, | ||
40 | }; | ||
41 | |||
42 | #define NR_VARIANTS sizeof(imx_variants) / sizeof(imx_variants[0]) | ||
43 | |||
28 | static void usage(void) | 44 | static void usage(void) |
29 | { | 45 | { |
30 | printf("Usage: elftosb [options | file]...\n"); | 46 | printf("Usage: elftosb [options | file]...\n"); |
@@ -35,6 +51,17 @@ static void usage(void) | |||
35 | printf(" -b <file>\tSet boot file\n"); | 51 | printf(" -b <file>\tSet boot file\n"); |
36 | printf(" -d/--debug\tEnable debug output\n"); | 52 | printf(" -d/--debug\tEnable debug output\n"); |
37 | 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"); | ||
55 | printf(" -x\t\tDump device informations\n"); | ||
56 | printf("Supported variants: (default is standard)\n"); | ||
57 | printf(" "); | ||
58 | for(size_t i = 0; i < NR_VARIANTS; i++) | ||
59 | { | ||
60 | if(i != 0) | ||
61 | printf(", "); | ||
62 | printf("%s", imx_variants[i].name); | ||
63 | } | ||
64 | printf("\n"); | ||
38 | printf("By default a dualboot image is built\n"); | 65 | printf("By default a dualboot image is built\n"); |
39 | exit(1); | 66 | exit(1); |
40 | } | 67 | } |
@@ -44,6 +71,7 @@ int main(int argc, char *argv[]) | |||
44 | char *infile = NULL; | 71 | char *infile = NULL; |
45 | char *outfile = NULL; | 72 | char *outfile = NULL; |
46 | char *bootfile = NULL; | 73 | char *bootfile = NULL; |
74 | enum imx_firmware_variant_t variant = VARIANT_DEFAULT; | ||
47 | enum imx_output_type_t type = IMX_DUALBOOT; | 75 | enum imx_output_type_t type = IMX_DUALBOOT; |
48 | bool debug = false; | 76 | bool debug = false; |
49 | 77 | ||
@@ -60,10 +88,12 @@ int main(int argc, char *argv[]) | |||
60 | {"boot-file", required_argument, 0, 'b'}, | 88 | {"boot-file", required_argument, 0, 'b'}, |
61 | {"debug", no_argument, 0, 'd'}, | 89 | {"debug", no_argument, 0, 'd'}, |
62 | {"type", required_argument, 0, 't'}, | 90 | {"type", required_argument, 0, 't'}, |
91 | {"variant", required_argument, 0, 'v'}, | ||
92 | {"dev-info", no_argument, 0, 'x'}, | ||
63 | {0, 0, 0, 0} | 93 | {0, 0, 0, 0} |
64 | }; | 94 | }; |
65 | 95 | ||
66 | int c = getopt_long(argc, argv, "?di:o:b:t:", long_options, NULL); | 96 | int c = getopt_long(argc, argv, "?di:o:b:t:v:x", long_options, NULL); |
67 | if(c == -1) | 97 | if(c == -1) |
68 | break; | 98 | break; |
69 | switch(c) | 99 | switch(c) |
@@ -98,6 +128,28 @@ int main(int argc, char *argv[]) | |||
98 | return 1; | 128 | return 1; |
99 | } | 129 | } |
100 | break; | 130 | break; |
131 | case 'v': | ||
132 | { | ||
133 | for(size_t i = 0; i < NR_VARIANTS; i++) | ||
134 | { | ||
135 | if(strcmp(optarg, imx_variants[i].name) == 0) | ||
136 | { | ||
137 | variant = imx_variants[i].variant; | ||
138 | goto Lok; | ||
139 | } | ||
140 | } | ||
141 | printf("Invalid variant '%s'\n", optarg); | ||
142 | return 1; | ||
143 | |||
144 | Lok: | ||
145 | break; | ||
146 | } | ||
147 | case 'x': | ||
148 | dump_imx_dev_info(""); | ||
149 | printf("variant mapping:\n"); | ||
150 | 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); | ||
152 | break; | ||
101 | default: | 153 | default: |
102 | abort(); | 154 | abort(); |
103 | } | 155 | } |
@@ -125,8 +177,10 @@ int main(int argc, char *argv[]) | |||
125 | } | 177 | } |
126 | 178 | ||
127 | struct imx_option_t opt; | 179 | struct imx_option_t opt; |
180 | memset(&opt, 0, sizeof(opt)); | ||
128 | opt.debug = debug; | 181 | opt.debug = debug; |
129 | opt.output = type; | 182 | opt.output = type; |
183 | opt.fw_variant = variant; | ||
130 | enum imx_error_t err = mkimxboot(infile, bootfile, outfile, opt); | 184 | enum imx_error_t err = mkimxboot(infile, bootfile, outfile, opt); |
131 | printf("Result: %d\n", err); | 185 | printf("Result: %d\n", err); |
132 | return 0; | 186 | return 0; |