grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v6 06/11] RISC-V: Add Linux load logic


From: Alistair Francis
Subject: Re: [PATCH v6 06/11] RISC-V: Add Linux load logic
Date: Wed, 13 Feb 2019 00:37:25 +0000

On Tue, 2019-02-12 at 11:31 +0100, Alexander Graf wrote:
> We currently only support to run grub on RISC-V as UEFI payload.
> Ideally,
> we also only want to support running Linux underneath as UEFI
> payload.
> 
> Prepare that with some Linux boot stub code. Once the arm64 target is
> generalized, we can hook into that one and gain boot functionality.
> 
> Signed-off-by: Alexander Graf <address@hidden>

Reviewed-by: Alistair Francis <address@hidden>

Alistair

> 

> ---
> 
> v1 -> v2:
> 
>   - adapt to new grub_open_file() API
>   - adapt to new grub_create_loader_cmdline() API
> 
> v3 -> v4:
> 
>   - Change copyright from 2013 to 2018
>   - Coding style fixes
> 
> v4 -> v5:
> 
>   - Use GRUB_EFI_LINUX_FDT_EXTRA_SPACE
>   - Fix whitespace
>   - s/failure/fail
> 
> v5 -> v6:
> 
>   - remove most linux logic
> ---
>  grub-core/loader/riscv/linux.c | 59
> ++++++++++++++++++++++++++++++++++++++++++
>  include/grub/riscv32/linux.h   | 41 +++++++++++++++++++++++++++++
>  include/grub/riscv64/linux.h   | 43 ++++++++++++++++++++++++++++++
>  3 files changed, 143 insertions(+)
>  create mode 100644 grub-core/loader/riscv/linux.c
>  create mode 100644 include/grub/riscv32/linux.h
>  create mode 100644 include/grub/riscv64/linux.h
> 
> diff --git a/grub-core/loader/riscv/linux.c b/grub-
> core/loader/riscv/linux.c
> new file mode 100644
> index 000000000..d17c488e1
> --- /dev/null
> +++ b/grub-core/loader/riscv/linux.c
> @@ -0,0 +1,59 @@
> +/*
> + *  GRUB  --  GRand Unified Bootloader
> + *  Copyright (C) 2018  Free Software Foundation, Inc.
> + *
> + *  GRUB is free software: you can redistribute it and/or modify
> + *  it under the terms of the GNU General Public License as
> published by
> + *  the Free Software Foundation, either version 3 of the License,
> or
> + *  (at your option) any later version.
> + *
> + *  GRUB is distributed in the hope that it will be useful,
> + *  but WITHOUT ANY WARRANTY; without even the implied warranty of
> + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + *  GNU General Public License for more details.
> + *
> + *  You should have received a copy of the GNU General Public
> License
> + *  along with GRUB.  If not, see <http://www.gnu.org/licenses/>;.
> + */
> +
> +#include <grub/command.h>
> +#include <grub/dl.h>
> +#include <grub/lib/cmdline.h>
> +
> +GRUB_MOD_LICENSE ("GPLv3+");
> +
> +static grub_err_t
> +grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)),
> +              int argc __attribute__ ((unused)),
> +              char *argv[] __attribute__ ((unused)))
> +{
> +  grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, N_("Linux not supported
> yet"));
> +
> +  return grub_errno;
> +}
> +
> +static grub_err_t
> +grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)),
> +             int argc __attribute__ ((unused)),
> +             char *argv[] __attribute__ ((unused)))
> +{
> +  grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, N_("Linux not supported
> yet"));
> +
> +  return grub_errno;
> +}
> +
> +static grub_command_t cmd_linux, cmd_initrd;
> +
> +GRUB_MOD_INIT (linux)
> +{
> +  cmd_linux = grub_register_command ("linux", grub_cmd_linux, 0,
> +                                  N_("Load Linux."));
> +  cmd_initrd = grub_register_command ("initrd", grub_cmd_initrd, 0,
> +                                   N_("Load initrd."));
> +}
> +
> +GRUB_MOD_FINI (linux)
> +{
> +  grub_unregister_command (cmd_linux);
> +  grub_unregister_command (cmd_initrd);
> +}
> diff --git a/include/grub/riscv32/linux.h
> b/include/grub/riscv32/linux.h
> new file mode 100644
> index 000000000..b8ed39407
> --- /dev/null
> +++ b/include/grub/riscv32/linux.h
> @@ -0,0 +1,41 @@
> +/*
> + *  GRUB  --  GRand Unified Bootloader
> + *  Copyright (C) 2018  Free Software Foundation, Inc.
> + *
> + *  GRUB is free software: you can redistribute it and/or modify
> + *  it under the terms of the GNU General Public License as
> published by
> + *  the Free Software Foundation, either version 3 of the License,
> or
> + *  (at your option) any later version.
> + *
> + *  GRUB is distributed in the hope that it will be useful,
> + *  but WITHOUT ANY WARRANTY; without even the implied warranty of
> + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + *  GNU General Public License for more details.
> + *
> + *  You should have received a copy of the GNU General Public
> License
> + *  along with GRUB.  If not, see <http://www.gnu.org/licenses/>;.
> + */
> +
> +#ifndef GRUB_RISCV32_LINUX_HEADER
> +#define GRUB_RISCV32_LINUX_HEADER 1
> +
> +#define GRUB_LINUX_RISCV_MAGIC_SIGNATURE 0x52534356 /* 'RSCV' */
> +
> +/* From linux/Documentation/riscv/booting.txt */
> +struct linux_riscv_kernel_header
> +{
> +  grub_uint32_t code0;               /* Executable code */
> +  grub_uint32_t code1;               /* Executable code */
> +  grub_uint64_t text_offset; /* Image load offset */
> +  grub_uint64_t res0;                /* reserved */
> +  grub_uint64_t res1;                /* reserved */
> +  grub_uint64_t res2;                /* reserved */
> +  grub_uint64_t res3;                /* reserved */
> +  grub_uint64_t res4;                /* reserved */
> +  grub_uint32_t magic;               /* Magic number, little endian,
> "RSCV" */
> +  grub_uint32_t hdr_offset;  /* Offset of PE/COFF header */
> +};
> +
> +# define linux_arch_kernel_header linux_riscv_kernel_header
> +
> +#endif /* ! GRUB_RISCV32_LINUX_HEADER */
> diff --git a/include/grub/riscv64/linux.h
> b/include/grub/riscv64/linux.h
> new file mode 100644
> index 000000000..29140e45e
> --- /dev/null
> +++ b/include/grub/riscv64/linux.h
> @@ -0,0 +1,43 @@
> +/*
> + *  GRUB  --  GRand Unified Bootloader
> + *  Copyright (C) 2018  Free Software Foundation, Inc.
> + *
> + *  GRUB is free software: you can redistribute it and/or modify
> + *  it under the terms of the GNU General Public License as
> published by
> + *  the Free Software Foundation, either version 3 of the License,
> or
> + *  (at your option) any later version.
> + *
> + *  GRUB is distributed in the hope that it will be useful,
> + *  but WITHOUT ANY WARRANTY; without even the implied warranty of
> + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + *  GNU General Public License for more details.
> + *
> + *  You should have received a copy of the GNU General Public
> License
> + *  along with GRUB.  If not, see <http://www.gnu.org/licenses/>;.
> + */
> +
> +#ifndef GRUB_RISCV64_LINUX_HEADER
> +#define GRUB_RISCV64_LINUX_HEADER 1
> +
> +#define GRUB_LINUX_RISCV_MAGIC_SIGNATURE 0x52534356 /* 'RSCV' */
> +
> +#define GRUB_EFI_PE_MAGIC    0x5A4D
> +
> +/* From linux/Documentation/riscv/booting.txt */
> +struct linux_riscv_kernel_header
> +{
> +  grub_uint32_t code0;               /* Executable code */
> +  grub_uint32_t code1;               /* Executable code */
> +  grub_uint64_t text_offset; /* Image load offset */
> +  grub_uint64_t res0;                /* reserved */
> +  grub_uint64_t res1;                /* reserved */
> +  grub_uint64_t res2;                /* reserved */
> +  grub_uint64_t res3;                /* reserved */
> +  grub_uint64_t res4;                /* reserved */
> +  grub_uint32_t magic;               /* Magic number, little endian,
> "RSCV" */
> +  grub_uint32_t hdr_offset;  /* Offset of PE/COFF header */
> +};
> +
> +# define linux_arch_kernel_header linux_riscv_kernel_header
> +
> +#endif /* ! GRUB_RISCV64_LINUX_HEADER */

reply via email to

[Prev in Thread] Current Thread [Next in Thread]