/* * Start a single boot script. 'path' is a full path to a boot script. */ static int boot_script(char *path) { int ret; struct bootm_data data = { .os_address = UIMAGE_SOME_ADDRESS, .initrd_address = UIMAGE_SOME_ADDRESS, }; globalvar_set_match("linux.bootargs.dyn.", ""); globalvar_set_match("bootm.", ""); ret = run_command(path); if (ret) { printf("Running %s failed\n", path); goto out; } data.initrd_address = UIMAGE_INVALID_ADDRESS; data.os_address = UIMAGE_SOME_ADDRESS; data.oftree_file = getenv_nonempty("global.bootm.oftree"); data.os_file = getenv_nonempty("global.bootm.image"); getenv_ul("global.bootm.image.loadaddr", &data.os_address); getenv_ul("global.bootm.initrd.loadaddr", &data.initrd_address); data.initrd_file = getenv_nonempty("global.bootm.initrd"); data.verbose = verbose; data.dryrun = dryrun; ret = bootm_boot(&data); if (ret) pr_err("Booting %s failed: %s\n", basename(path), strerror(-ret)); out: return ret; }
static int do_bootm(int argc, char *argv[]) { int opt; struct bootm_data data = {}; int ret = 1; bootm_data_init_defaults(&data); while ((opt = getopt(argc, argv, BOOTM_OPTS)) > 0) { switch(opt) { case 'c': if (data.verify < BOOTM_VERIFY_HASH) data.verify = BOOTM_VERIFY_HASH; break; case 's': data.verify = BOOTM_VERIFY_SIGNATURE; break; #ifdef CONFIG_BOOTM_INITRD case 'L': data.initrd_address = simple_strtoul(optarg, NULL, 0); break; case 'r': data.initrd_file = optarg; break; #endif case 'a': data.os_address = simple_strtoul(optarg, NULL, 0); break; case 'e': data.os_entry = simple_strtoul(optarg, NULL, 0); break; case 'v': data.verbose++; break; case 'o': data.oftree_file = optarg; break; case 'f': data.force = 1; break; case 'd': data.dryrun = 1; break; default: return COMMAND_ERROR_USAGE; } } if (optind != argc) data.os_file = argv[optind]; if (!data.os_file) { printf("no boot image given\n"); goto err_out; } ret = bootm_boot(&data); if (ret) { printf("handler failed with: %s\n", strerror(-ret)); goto err_out; } err_out: return ret ? 1 : 0; }
static int do_bootm(int argc, char *argv[]) { int opt; struct image_data data; int ret = 1; const char *oftree = NULL, *initrd_file = NULL, *os_file = NULL; memset(&data, 0, sizeof(struct image_data)); data.initrd_address = UIMAGE_INVALID_ADDRESS; data.os_address = UIMAGE_SOME_ADDRESS; data.verify = 0; data.verbose = 0; oftree = getenv("global.bootm.oftree"); os_file = getenv("global.bootm.image"); data.os_address = getenv_loadaddr("global.bootm.image.loadaddr"); data.initrd_address = getenv_loadaddr("global.bootm.initrd.loadaddr"); if (IS_ENABLED(CONFIG_CMD_BOOTM_INITRD)) initrd_file = getenv("global.bootm.initrd"); while ((opt = getopt(argc, argv, BOOTM_OPTS)) > 0) { switch(opt) { case 'c': data.verify = 1; break; #ifdef CONFIG_CMD_BOOTM_INITRD case 'L': data.initrd_address = simple_strtoul(optarg, NULL, 0); break; case 'r': initrd_file = optarg; break; #endif case 'a': data.os_address = simple_strtoul(optarg, NULL, 0); break; case 'e': data.os_entry = simple_strtoul(optarg, NULL, 0); break; case 'v': data.verbose++; break; case 'o': oftree = optarg; break; case 'f': data.force = 1; break; default: break; } } if (optind != argc) os_file = argv[optind]; if (!os_file || !*os_file) { printf("no boot image given\n"); goto err_out; } if (initrd_file && !*initrd_file) initrd_file = NULL; if (oftree && !*oftree) oftree = NULL; data.os_file = bootm_image_name_and_no(os_file, &data.os_num); data.oftree_file = bootm_image_name_and_no(oftree, &data.oftree_num); data.initrd_file = bootm_image_name_and_no(initrd_file, &data.initrd_num); ret = bootm_boot(&data); printf("handler failed with %s\n", strerror(-ret)); err_out: free(data.initrd_file); free(data.os_file); return 1; }