diff options
Diffstat (limited to 'kexec/arch/arm64/kexec-image-arm64.c')
-rw-r--r-- | kexec/arch/arm64/kexec-image-arm64.c | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/kexec/arch/arm64/kexec-image-arm64.c b/kexec/arch/arm64/kexec-image-arm64.c index e1b1e54..685a993 100644 --- a/kexec/arch/arm64/kexec-image-arm64.c +++ b/kexec/arch/arm64/kexec-image-arm64.c @@ -4,10 +4,15 @@ #define _GNU_SOURCE +#include <errno.h> +#include <fcntl.h> +#include <limits.h> #include "crashdump-arm64.h" +#include "image-header.h" +#include "kexec.h" #include "kexec-arm64.h" #include "kexec-syscall.h" -#include <limits.h> +#include "arch/options.h" int image_arm64_probe(const char *kernel_buf, off_t kernel_size) { @@ -35,6 +40,27 @@ int image_arm64_load(int argc, char **argv, const char *kernel_buf, unsigned long kernel_segment; int result; + if (info->file_mode) { + if (arm64_opts.initrd) { + info->initrd_fd = open(arm64_opts.initrd, O_RDONLY); + if (info->initrd_fd == -1) { + fprintf(stderr, + "Could not open initrd file %s:%s\n", + arm64_opts.initrd, strerror(errno)); + result = EFAILED; + goto exit; + } + } + + if (arm64_opts.command_line) { + info->command_line = (char *)arm64_opts.command_line; + info->command_line_len = + strlen(arm64_opts.command_line) + 1; + } + + return 0; + } + header = (const struct arm64_image_header *)(kernel_buf); if (arm64_process_image_header(header)) |