mirror of
https://github.com/brain-hackers/u-boot-brain
synced 2024-09-29 08:00:26 +09:00
sandbox: Boot in U-Boot through the standard call
Most architectures use jump_to_image_no_args() to jump from SPL to U-Boot. At present sandbox is special in that it jumps in its spl_board_load_image() call. This is not strictly correct, and means that sandbox misses out some parts of board_init_r(), just as calling bloblist_finish(), for example. Change spl_board_load_image() to just identify the filename to boot, and implement jump_to_image_no_args() to actually jump to it. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
65f3b1f992
commit
27028f186d
@ -666,8 +666,11 @@ static int os_jump_to_file(const char *fname)
|
|||||||
|
|
||||||
err = execv(fname, argv);
|
err = execv(fname, argv);
|
||||||
os_free(argv);
|
os_free(argv);
|
||||||
if (err)
|
if (err) {
|
||||||
|
perror("Unable to run image");
|
||||||
|
printf("Image filename '%s'\n", mem_fname);
|
||||||
return err;
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
return unlink(fname);
|
return unlink(fname);
|
||||||
}
|
}
|
||||||
@ -747,17 +750,7 @@ int os_find_u_boot(char *fname, int maxlen)
|
|||||||
|
|
||||||
int os_spl_to_uboot(const char *fname)
|
int os_spl_to_uboot(const char *fname)
|
||||||
{
|
{
|
||||||
struct sandbox_state *state = state_get_current();
|
return os_jump_to_file(fname);
|
||||||
char *argv[state->argc + 1];
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
memcpy(argv, state->argv, sizeof(char *) * (state->argc + 1));
|
|
||||||
argv[0] = (char *)fname;
|
|
||||||
ret = execv(fname, argv);
|
|
||||||
if (ret)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
return unlink(fname);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void os_localtime(struct rtc_time *rt)
|
void os_localtime(struct rtc_time *rt)
|
||||||
|
@ -37,8 +37,12 @@ static int spl_board_load_image(struct spl_image_info *spl_image,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Hopefully this will not return */
|
/* Set up spl_image to boot from jump_to_image_no_args() */
|
||||||
return os_spl_to_uboot(fname);
|
spl_image->arg = strdup(fname);
|
||||||
|
if (!spl_image->arg)
|
||||||
|
return log_msg_ret("Setup exec filename", -ENOMEM);
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
SPL_LOAD_IMAGE_METHOD("sandbox", 0, BOOT_DEVICE_BOARD, spl_board_load_image);
|
SPL_LOAD_IMAGE_METHOD("sandbox", 0, BOOT_DEVICE_BOARD, spl_board_load_image);
|
||||||
|
|
||||||
@ -60,3 +64,12 @@ void spl_board_init(void)
|
|||||||
;
|
;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void __noreturn jump_to_image_no_args(struct spl_image_info *spl_image)
|
||||||
|
{
|
||||||
|
const char *fname = spl_image->arg;
|
||||||
|
|
||||||
|
os_fd_restore();
|
||||||
|
os_spl_to_uboot(fname);
|
||||||
|
hang();
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user