+ return 0;
+}
+
+static void process_args(int argc, char **argv)
+{
+ char *ptr;
+ int type = IH_TYPE_INVALID;
+ char *datafile = NULL;
+ int opt;
+
+ while ((opt = getopt(argc, argv,
+ "a:A:b:cC:d:D:e:Ef:Fk:K:ln:p:O:rR:qsT:vVx")) != -1) {
+ switch (opt) {
+ case 'a':
+ params.addr = strtoull(optarg, &ptr, 16);
+ if (*ptr) {
+ fprintf(stderr, "%s: invalid load address %s\n",
+ params.cmdname, optarg);
+ exit(EXIT_FAILURE);
+ }
+ break;
+ case 'A':
+ params.arch = genimg_get_arch_id(optarg);
+ if (params.arch < 0)
+ usage("Invalid architecture");
+ break;
+ case 'b':
+ if (add_content(IH_TYPE_FLATDT, optarg)) {
+ fprintf(stderr,
+ "%s: Out of memory adding content '%s'",
+ params.cmdname, optarg);
+ exit(EXIT_FAILURE);
+ }
+ break;
+ case 'c':
+ params.comment = optarg;
+ break;
+ case 'C':
+ params.comp = genimg_get_comp_id(optarg);
+ if (params.comp < 0)
+ usage("Invalid compression type");
+ break;
+ case 'd':
+ params.datafile = optarg;
+ params.dflag = 1;
+ break;
+ case 'D':
+ params.dtc = optarg;
+ break;
+ case 'e':
+ params.ep = strtoull(optarg, &ptr, 16);
+ if (*ptr) {
+ fprintf(stderr, "%s: invalid entry point %s\n",
+ params.cmdname, optarg);
+ exit(EXIT_FAILURE);
+ }
+ params.eflag = 1;
+ break;
+ case 'E':
+ params.external_data = true;
+ break;
+ case 'f':
+ datafile = optarg;
+ params.auto_its = !strcmp(datafile, "auto");
+ /* no break */
+ case 'F':
+ /*
+ * The flattened image tree (FIT) format
+ * requires a flattened device tree image type
+ */
+ params.fit_image_type = params.type;
+ params.type = IH_TYPE_FLATDT;
+ params.fflag = 1;
+ break;
+ case 'k':
+ params.keydir = optarg;
+ break;
+ case 'K':
+ params.keydest = optarg;
+ break;
+ case 'l':
+ params.lflag = 1;
+ break;
+ case 'n':
+ params.imagename = optarg;
+ break;
+ case 'O':
+ params.os = genimg_get_os_id(optarg);
+ if (params.os < 0)
+ usage("Invalid operating system");
+ break;
+ case 'p':
+ params.external_offset = strtoull(optarg, &ptr, 16);
+ if (*ptr) {
+ fprintf(stderr, "%s: invalid offset size %s\n",
+ params.cmdname, optarg);
+ exit(EXIT_FAILURE);
+ }
+ case 'q':
+ params.quiet = 1;
+ break;
+ case 'r':
+ params.require_keys = 1;
+ break;
+ case 'R':
+ /*
+ * This entry is for the second configuration
+ * file, if only one is not enough.
+ */
+ params.imagename2 = optarg;
+ break;
+ case 's':
+ params.skipcpy = 1;
+ break;
+ case 'T':
+ type = genimg_get_type_id(optarg);
+ if (type < 0) {
+ show_image_types();
+ usage("Invalid image type");
+ }
+ break;
+ case 'v':
+ params.vflag++;
+ break;
+ case 'V':
+ printf("mkimage version %s\n", PLAIN_VERSION);
+ exit(EXIT_SUCCESS);
+ case 'x':
+ params.xflag++;
+ break;
+ default:
+ usage("Invalid option");