diff options
Diffstat (limited to 'sys-boot')
-rw-r--r-- | sys-boot/grub/Manifest | 12 | ||||
-rw-r--r-- | sys-boot/grub/files/gfxpayload.patch | 29 | ||||
-rw-r--r-- | sys-boot/grub/files/grub-2.02_beta2-KERNEL_GLOBS.patch | 67 | ||||
-rw-r--r-- | sys-boot/grub/files/grub-2.06-add-boot-hartid-to-fdt.patch | 35 | ||||
-rw-r--r-- | sys-boot/grub/files/grub-2.06-linux-riscv.patch | 416 | ||||
-rw-r--r-- | sys-boot/grub/files/grub-2.06-magic-number.patch | 42 | ||||
-rw-r--r-- | sys-boot/grub/files/grub-2.06-test-words.patch | 25 | ||||
-rw-r--r-- | sys-boot/grub/files/grub.default-3 | 73 | ||||
-rw-r--r-- | sys-boot/grub/grub-2.06.ebuild | 308 | ||||
-rw-r--r-- | sys-boot/grub/metadata.xml | 32 | ||||
-rw-r--r-- | sys-boot/opensbi/Manifest | 3 | ||||
-rw-r--r-- | sys-boot/opensbi/opensbi-0.9.ebuild | 39 | ||||
-rw-r--r-- | sys-boot/u-boot/Manifest | 5 | ||||
-rw-r--r-- | sys-boot/u-boot/files/efi-priority.patch | 16 | ||||
-rw-r--r-- | sys-boot/u-boot/metadata.xml | 19 | ||||
-rw-r--r-- | sys-boot/u-boot/u-boot-2021.01_rc5.ebuild | 89 |
16 files changed, 1210 insertions, 0 deletions
diff --git a/sys-boot/grub/Manifest b/sys-boot/grub/Manifest new file mode 100644 index 0000000..f61a2e5 --- /dev/null +++ b/sys-boot/grub/Manifest @@ -0,0 +1,12 @@ +AUX gfxpayload.patch 1118 BLAKE2B 4104fc696535b1c3feba5876bccc64f9b2e52319ee992c59e7f17b8310cc9addf7545630fff78c73ca3f4b0dcd44e1bf69f4df5264d6f58777f7e5aeae93cbcb SHA512 00324825c369902a0383b792cd21e161853eadccbdc5abe2420f2d443bf6a74f72be6c15243107b936acd38c3547387c3771dc2cb566003c4c754c9260b4aa00 +AUX grub-2.02_beta2-KERNEL_GLOBS.patch 2121 BLAKE2B 398195f59537d40a4f61eadf5be974b8f9eb56a4eb07b798f0dc18e29588b3a9f8daa8d6e64980a835ec1960fab60b8c96d6552ef2920fe6604170abf7d5e7da SHA512 f85bc538ae647c46efbe07d7b87acf49daa7b07e9752af3aa3f77019f48ea24cd1b6a095a6f9c19d50128701753f453c531b9b068e11ee22a259f3fdf8ac205e +AUX grub-2.06-add-boot-hartid-to-fdt.patch 995 BLAKE2B 86ab277819eeab08d552e1d5300f8f5e798823e56e66d8dd39ae442b3b4777a22d155dd85f9b38778a644c7f52b61f673b6c856c66492da412d2ee2587125484 SHA512 5d334050165dd648bd3547ede9cc62380f75a5d9625a4282972a4e71e34e14d72cf6acb363c513942375c84c79a48acd6331bbcbc56f4999a339e29391fbb5ae +AUX grub-2.06-linux-riscv.patch 12599 BLAKE2B bfbb85e8824586d1a13d142020d591e0e103c77c193ef7a82e1770b3ffcd23f6daec9729a9d1cb579d5dcaeb6be40f23682fdab8e2e5c7067b382362faee2c36 SHA512 5f964e98caff6c57fc4ac7d57bbd86c8cc1ab35ca25c58a1e8c7a2db232b7b1470b6fe8a6a372c62fc3bfe939ce64c75027ed4b3d3d4db141b73a709557275c1 +AUX grub-2.06-magic-number.patch 1826 BLAKE2B 83dc3e86b2ae3d96d3459641fda67b47178688410cacdc54ee79ccbab129cabfd1aa087ff1afc6fcdb607c1e183a7b55d54f5c0d5cbca951178129c50b26bb35 SHA512 44e03d1cbef8ca7128c4a91647d1095453f5f9c9aa9329f20bb5af178a766c6ed22b4c2ea3e515bac7b0c977f8248401590a6e76561d86146729c9cc1d931700 +AUX grub-2.06-test-words.patch 2553 BLAKE2B 21d6167945b461be7cc73198451ae0dc15ce0dfe2a301342f1a3bb75d6fcb5d73da9997fb8a93f36dffb43a351f056a1a4db9eed3147b0f3e77c65034b805c64 SHA512 627422377bdad97d0197f178814d6616a0f7ec07357182b00166a455d38ba0c5a60185c5febf4dfb7a11b35f26c7af607508cb5f418acdb7290517240fbd99e4 +AUX grub.default-3 2528 BLAKE2B c32de43644eca5fae8d8d727ff443600917a93e015f8a83dde555e3bca7506a817b08a2fc926970eeb5b7f40028f4951c6cdcd281f9fc0b6504f26c8e76bf0c5 SHA512 505960e62b44c70af0a90c7ff486bd57101831d7c6e9d80084013e374070ff02b40f77b0790aebb926e1e0854e375867cba1d4977dbb00c2ba54ebaa9f6a1a0b +DIST dejavu-sans-ttf-2.37.zip 417746 BLAKE2B c8904f3cd5a49370a7dc10e456684c88aeae998a99090bf4d0a5baa4f36cc8fb8f70586cf6d610a5ffeee97261d28c80f55bbe9dcfc3ed796d5c2d60e79adb58 SHA512 ede5899daa1984c5aa8cacb1c850eb53f189dddef3d9bb78bf9774d8976b7c0d6eb0bcf86237cd7d11f5b36cf5b5058d42cd94d3bd76f2bd0931c7ceb1271fae +DIST grub-2.06.tar.xz 6581924 BLAKE2B 2a40b9b03d7bb3b9e7b1309ab274d686f01b3c42e7035ebc6e5a0e59a59c3b7362ba518341664b314cb0dbc8222bb10ea05ce09f08ce9d58a293207cb909e417 SHA512 4f11c648f3078567e53fc0c74d5026fdc6da4be27d188975e79d9a4df817ade0fe5ad2ddd694238a07edc45adfa02943d83c57767dd51548102b375e529e8efe +DIST unifont-12.1.02.pcf.gz 1335424 BLAKE2B 97080312468e3f3c8aa6f49cef08f5622641e8c9c035f3ede1e09d8d98de4e78d3b23c8aba2e8070eb46cbebd2d55e8568e467d7f15f35aa8fc8db792b7e5f14 SHA512 b280b2db7cf5f480b0668c331130dede2c0cc87d5e02e44566b77787113d0f6604d0105522858288f2ac6b8e77df7a2d9878725013a6c778dc5bfb183156e2f0 +EBUILD grub-2.06.ebuild 7548 BLAKE2B d8c7ba5110cd4b8483a80255e80f3d61c99d8ced45c862ac319c5b5196b3cc2f7d7a4b9eeae378d6c1da01863dec3a7e86ed092559db9c7f47ac46b6be515599 SHA512 aabf4dc758ed3a0fb07f57eede1130f9e48e92c20cfb1992e629c2b4bca0e8e446b28deb7c74f4230b74bbf6240a6e027955133126c9592158afed9ae17e8506 +MISC metadata.xml 985 BLAKE2B 36f108b5d3441f8576609c77ab3547c60ac2c508b55472bd0ec0e3af8d0fa018d305d7267c0e2e84c8526affced9ed5ce51738b9fcf05b31ac36c1b4d5c2702a SHA512 bd28dd88d4eb76a32cfa757eb5bf7641d033f670280ab7230b72a66b1bd8fd65c777473b1d7f81257004a215fe5a858a79a6a912e0ceaecd586867e9a76f6b4e diff --git a/sys-boot/grub/files/gfxpayload.patch b/sys-boot/grub/files/gfxpayload.patch new file mode 100644 index 0000000..6c63ef8 --- /dev/null +++ b/sys-boot/grub/files/gfxpayload.patch @@ -0,0 +1,29 @@ +From e2d5bf1bc6aaaabeba538c1ca94ea8601e4e1474 Mon Sep 17 00:00:00 2001 +From: Mike Gilbert <floppym@gentoo.org> +Date: Thu, 16 Oct 2014 23:43:51 -0400 +Subject: [PATCH] 10_linux: Default gfxpayload=keep only when booting using efi + +vesafb seems to be unreliable when using BIOS compat mode. + +--- + util/grub.d/10_linux.in | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in +index d2e2a8f..a54b888 100644 +--- a/util/grub.d/10_linux.in ++++ b/util/grub.d/10_linux.in +@@ -104,7 +104,9 @@ linux_entry () + echo " load_video" | sed "s/^/$submenu_indentation/" + if grep -qx "CONFIG_FB_EFI=y" "${config}" 2> /dev/null \ + && grep -qx "CONFIG_VT_HW_CONSOLE_BINDING=y" "${config}" 2> /dev/null; then +- echo " set gfxpayload=keep" | sed "s/^/$submenu_indentation/" ++ echo ' if [ "x$grub_platform" = xefi ]; then' | sed "s/^/$submenu_indentation/" ++ echo " set gfxpayload=keep" | sed "s/^/$submenu_indentation/" ++ echo ' fi' | sed "s/^/$submenu_indentation/" + fi + else + if [ "x$GRUB_GFXPAYLOAD_LINUX" != xtext ]; then +-- +2.7.2 + diff --git a/sys-boot/grub/files/grub-2.02_beta2-KERNEL_GLOBS.patch b/sys-boot/grub/files/grub-2.02_beta2-KERNEL_GLOBS.patch new file mode 100644 index 0000000..c66ee68 --- /dev/null +++ b/sys-boot/grub/files/grub-2.02_beta2-KERNEL_GLOBS.patch @@ -0,0 +1,67 @@ +From 43e3295aaad5278a1e53c5282e2660b72cd76d28 Mon Sep 17 00:00:00 2001 +From: "Robin H. Johnson" <robbat2@gentoo.org> +Date: Tue, 29 Dec 2015 15:29:14 -0800 +Subject: [PATCH] GRUB_LINUX_KERNEL_GLOBS: configurable kernel selection + +* util/grub.d/10_linux.in: Implement GRUB_LINUX_KERNEL_GLOBS +* docs/grub.texi: Document GRUB_LINUX_KERNEL_GLOBS + +Signed-off-by: Robin H. Johnson <robbat2@gentoo.org> +--- + docs/grub.texi | 5 +++++ + util/grub.d/10_linux.in | 21 +++++++++++---------- + 2 files changed, 16 insertions(+), 10 deletions(-) + +diff --git a/docs/grub.texi b/docs/grub.texi +index 9a25a0b..d1129ec 100644 +--- a/docs/grub.texi ++++ b/docs/grub.texi +@@ -1490,6 +1490,11 @@ This option may be set to a list of GRUB module names separated by spaces. + Each module will be loaded as early as possible, at the start of + @file{grub.cfg}. + ++@item GRUB_LINUX_KERNEL_GLOBS ++This option may be set to override the list of path globs used to find Linux ++kernels. The defaults vary by architecture, and generally include both ++@file{/boot} and @file{/}. ++ + @end table + + The following options are still accepted for compatibility with existing +diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in +index 859b608..e5ac11d 100644 +--- a/util/grub.d/10_linux.in ++++ b/util/grub.d/10_linux.in +@@ -145,18 +145,19 @@ EOF + } + + machine=`uname -m` +-case "x$machine" in ++globs="$GRUB_LINUX_KERNEL_GLOBS" ++[ -z "$globs" ] && case "x$machine" in + xi?86 | xx86_64) +- list= +- for i in /boot/vmlinuz-* /vmlinuz-* /boot/kernel-* ; do +- if grub_file_is_not_garbage "$i" ; then list="$list $i" ; fi +- done ;; +- *) +- list= +- for i in /boot/vmlinuz-* /boot/vmlinux-* /vmlinuz-* /vmlinux-* /boot/kernel-* ; do +- if grub_file_is_not_garbage "$i" ; then list="$list $i" ; fi +- done ;; ++ globs="/boot/vmlinuz-* /vmlinuz-* /boot/kernel-*" ++ ;; ++ *) ++ globs="/boot/vmlinuz-* /boot/vmlinux-* /vmlinuz-* /vmlinux-* /boot/kernel-*" ++ ;; + esac ++list= ++for i in ${globs} ; do ++ if grub_file_is_not_garbage "$i" ; then list="$list $i" ; fi ++done + + case "$machine" in + i?86) GENKERNEL_ARCH="x86" ;; +-- +2.3.0 + diff --git a/sys-boot/grub/files/grub-2.06-add-boot-hartid-to-fdt.patch b/sys-boot/grub/files/grub-2.06-add-boot-hartid-to-fdt.patch new file mode 100644 index 0000000..3b6b464 --- /dev/null +++ b/sys-boot/grub/files/grub-2.06-add-boot-hartid-to-fdt.patch @@ -0,0 +1,35 @@ +diff -Naur grub-2.06/grub-core/loader/riscv64/linux.c grub-2.06-mod/grub-core/loader/riscv64/linux.c +--- grub-2.06/grub-core/loader/riscv64/linux.c 2021-07-03 19:45:08.797409969 +0200 ++++ grub-2.06-mod/grub-core/loader/riscv64/linux.c 2021-07-03 19:43:54.673239976 +0200 +@@ -48,6 +48,13 @@ + static grub_addr_t initrd_start; + static grub_addr_t initrd_end; + ++#define get_hartid(__v) \ ++{ \ ++ __asm__ __volatile__ ("mv %0, tp" \ ++ : "=r" (__v) : \ ++ : "memory"); \ ++} ++ + grub_err_t + grub_arch_efi_linux_check_image (struct linux_arch_kernel_header * lh) + { +@@ -68,6 +75,7 @@ + finalize_params_linux (void) + { + int node, retval; ++ int hartid; + + void *fdt; + +@@ -83,6 +91,9 @@ + if (node < 1) + goto failure; + ++ get_hartid(hartid); ++ grub_fdt_set_prop32 (fdt, node, "boot-hartid", hartid); ++ + /* Set initrd info */ + if (initrd_start && initrd_end > initrd_start) + { diff --git a/sys-boot/grub/files/grub-2.06-linux-riscv.patch b/sys-boot/grub/files/grub-2.06-linux-riscv.patch new file mode 100644 index 0000000..cbc37f8 --- /dev/null +++ b/sys-boot/grub/files/grub-2.06-linux-riscv.patch @@ -0,0 +1,416 @@ +Signed-off-by: Nikita Ermakov <arei@altlinux.org> +--- + grub-core/Makefile.core.def | 4 +- + grub-core/loader/{riscv => riscv32}/linux.c | 0 + grub-core/loader/riscv64/linux.c | 380 ++++++++++++++++++++ + 3 files changed, 382 insertions(+), 2 deletions(-) + rename grub-core/loader/{riscv => riscv32}/linux.c (100%) + create mode 100644 grub-core/loader/riscv64/linux.c + +diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def +index 8022e1c0a..655a45de7 100644 +--- a/grub-core/Makefile.core.def ++++ b/grub-core/Makefile.core.def +@@ -1809,8 +1809,8 @@ module = { + arm_efi = loader/arm64/linux.c; + arm_uboot = loader/arm/linux.c; + arm64 = loader/arm64/linux.c; +- riscv32 = loader/riscv/linux.c; +- riscv64 = loader/riscv/linux.c; ++ riscv32 = loader/riscv32/linux.c; ++ riscv64 = loader/riscv64/linux.c; + common = loader/linux.c; + common = lib/cmdline.c; + enable = noemu; +diff --git a/grub-core/loader/riscv/linux.c b/grub-core/loader/riscv32/linux.c +similarity index 100% +rename from grub-core/loader/riscv/linux.c +rename to grub-core/loader/riscv32/linux.c +diff --git a/grub-core/loader/riscv64/linux.c b/grub-core/loader/riscv64/linux.c +new file mode 100644 +index 000000000..630015495 +--- /dev/null ++++ b/grub-core/loader/riscv64/linux.c +@@ -0,0 +1,380 @@ ++/* ++ * 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/charset.h> ++#include <grub/command.h> ++#include <grub/err.h> ++#include <grub/file.h> ++#include <grub/fdt.h> ++#include <grub/linux.h> ++#include <grub/loader.h> ++#include <grub/mm.h> ++#include <grub/types.h> ++#include <grub/cpu/linux.h> ++#include <grub/efi/efi.h> ++#include <grub/efi/fdtload.h> ++#include <grub/efi/memory.h> ++#include <grub/efi/pe32.h> ++#include <grub/i18n.h> ++#include <grub/lib/cmdline.h> ++#include <grub/verify.h> ++ ++GRUB_MOD_LICENSE ("GPLv3+"); ++ ++static grub_dl_t my_mod; ++static int loaded; ++ ++static void *kernel_addr; ++static grub_uint64_t kernel_size; ++ ++static char *linux_args; ++static grub_uint32_t cmdline_size; ++ ++static grub_addr_t initrd_start; ++static grub_addr_t initrd_end; ++ ++grub_err_t ++grub_arch_efi_linux_check_image (struct linux_arch_kernel_header * lh) ++{ ++ if (lh->magic != GRUB_LINUX_RISCV_MAGIC_SIGNATURE) ++ return grub_error(GRUB_ERR_BAD_OS, "invalid magic number"); ++ ++ if ((lh->code0 & 0xffff) != GRUB_PE32_MAGIC) ++ return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, ++ N_("plain image kernel not supported - rebuild with CONFIG_(U)EFI_STUB enabled")); ++ ++ grub_dprintf ("linux", "UEFI stub kernel:\n"); ++ grub_dprintf ("linux", "PE/COFF header @ %08x\n", lh->hdr_offset); ++ ++ return GRUB_ERR_NONE; ++} ++ ++static grub_err_t ++finalize_params_linux (void) ++{ ++ int node, retval; ++ ++ void *fdt; ++ ++ fdt = grub_fdt_load (GRUB_EFI_LINUX_FDT_EXTRA_SPACE); ++ ++ if (!fdt) ++ goto failure; ++ ++ node = grub_fdt_find_subnode (fdt, 0, "chosen"); ++ if (node < 0) ++ node = grub_fdt_add_subnode (fdt, 0, "chosen"); ++ ++ if (node < 1) ++ goto failure; ++ ++ /* Set initrd info */ ++ if (initrd_start && initrd_end > initrd_start) ++ { ++ grub_dprintf ("linux", "Initrd @ %p-%p\n", ++ (void *) initrd_start, (void *) initrd_end); ++ ++ retval = grub_fdt_set_prop64 (fdt, node, "linux,initrd-start", ++ initrd_start); ++ if (retval) ++ goto failure; ++ retval = grub_fdt_set_prop64 (fdt, node, "linux,initrd-end", ++ initrd_end); ++ if (retval) ++ goto failure; ++ } ++ ++ if (grub_fdt_install() != GRUB_ERR_NONE) ++ goto failure; ++ ++ return GRUB_ERR_NONE; ++ ++failure: ++ grub_fdt_unload(); ++ return grub_error(GRUB_ERR_BAD_OS, "failed to install/update FDT"); ++} ++ ++grub_err_t ++grub_arch_efi_linux_boot_image (grub_addr_t addr, grub_size_t size, char *args) ++{ ++ grub_efi_loaded_image_t *loaded_image = NULL; ++ grub_efi_memory_mapped_device_path_t *mempath; ++ grub_efi_handle_t image_handle; ++ grub_efi_boot_services_t *b; ++ grub_efi_status_t status; ++ int len; ++ ++ mempath = grub_malloc (2 * sizeof (grub_efi_memory_mapped_device_path_t)); ++ if (!mempath) ++ return grub_errno; ++ ++ mempath[0].header.type = GRUB_EFI_HARDWARE_DEVICE_PATH_TYPE; ++ mempath[0].header.subtype = GRUB_EFI_MEMORY_MAPPED_DEVICE_PATH_SUBTYPE; ++ mempath[0].header.length = grub_cpu_to_le16_compile_time (sizeof (*mempath)); ++ mempath[0].memory_type = GRUB_EFI_LOADER_DATA; ++ mempath[0].start_address = addr; ++ mempath[0].end_address = addr + size; ++ ++ mempath[1].header.type = GRUB_EFI_END_DEVICE_PATH_TYPE; ++ mempath[1].header.subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE; ++ mempath[1].header.length = sizeof (grub_efi_device_path_t); ++ ++ b = grub_efi_system_table->boot_services; ++ status = b->load_image (0, grub_efi_image_handle, ++ (grub_efi_device_path_t *) mempath, ++ (void *) addr, size, &image_handle); ++ if (status != GRUB_EFI_SUCCESS) ++ return grub_error (GRUB_ERR_BAD_OS, "cannot load image"); ++ ++ grub_dprintf ("linux", "linux command line: '%s'\n", args); ++ ++ /* Convert command line to UCS-2 */ ++ loaded_image = grub_efi_get_loaded_image (image_handle); ++ if (!loaded_image) ++ return grub_error(GRUB_ERR_BAD_OS, "cannot get image"); ++ loaded_image->load_options_size = len = ++ (grub_strlen (args) + 1) * sizeof (grub_efi_char16_t); ++ loaded_image->load_options = ++ grub_efi_allocate_any_pages (GRUB_EFI_BYTES_TO_PAGES (loaded_image->load_options_size)); ++ if (!loaded_image->load_options) ++ return grub_errno; ++ ++ loaded_image->load_options_size = ++ 2 * grub_utf8_to_utf16 (loaded_image->load_options, len, ++ (grub_uint8_t *) args, len, NULL); ++ ++ grub_dprintf ("linux", "starting image %p\n", image_handle); ++ status = b->start_image (image_handle, 0, NULL); ++ ++ /* When successful, not reached */ ++ b->unload_image (image_handle); ++ grub_efi_free_pages ((grub_addr_t) loaded_image->load_options, ++ GRUB_EFI_BYTES_TO_PAGES (loaded_image->load_options_size)); ++ ++ return grub_errno; ++} ++ ++static grub_err_t ++grub_linux_boot (void) ++{ ++ if (finalize_params_linux () != GRUB_ERR_NONE) ++ return grub_errno; ++ ++ return (grub_arch_efi_linux_boot_image((grub_addr_t)kernel_addr, ++ kernel_size, linux_args)); ++} ++ ++static grub_err_t ++grub_linux_unload (void) ++{ ++ grub_dl_unref (my_mod); ++ loaded = 0; ++ if (initrd_start) ++ grub_efi_free_pages ((grub_efi_physical_address_t) initrd_start, ++ GRUB_EFI_BYTES_TO_PAGES (initrd_end - initrd_start)); ++ initrd_start = initrd_end = 0; ++ grub_free (linux_args); ++ if (kernel_addr) ++ grub_efi_free_pages ((grub_addr_t) kernel_addr, ++ GRUB_EFI_BYTES_TO_PAGES (kernel_size)); ++ grub_fdt_unload (); ++ return GRUB_ERR_NONE; ++} ++ ++/* According to the Linux arch/riscv/include/asm/efi.h */ ++#define INITRD_MAX_ADDRESS_OFFSET (256ULL << 20) ++ ++/* ++ * This function returns a pointer to a legally allocated initrd buffer, ++ * or NULL if unsuccessful ++ */ ++static void * ++allocate_initrd_mem (int initrd_pages) ++{ ++ grub_addr_t max_addr; ++ ++ if (grub_efi_get_ram_base (&max_addr) != GRUB_ERR_NONE) ++ return NULL; ++ ++ max_addr += INITRD_MAX_ADDRESS_OFFSET - 1; ++ ++ return grub_efi_allocate_pages_real (max_addr, initrd_pages, ++ GRUB_EFI_ALLOCATE_MAX_ADDRESS, ++ GRUB_EFI_LOADER_DATA); ++} ++ ++static grub_err_t ++grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)), ++ int argc, char *argv[]) ++{ ++ struct grub_linux_initrd_context initrd_ctx = { 0, 0, 0 }; ++ int initrd_size, initrd_pages; ++ void *initrd_mem = NULL; ++ ++ if (argc == 0) ++ { ++ grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected")); ++ goto fail; ++ } ++ ++ if (!loaded) ++ { ++ grub_error (GRUB_ERR_BAD_ARGUMENT, ++ N_("you need to load the kernel first")); ++ goto fail; ++ } ++ ++ if (grub_initrd_init (argc, argv, &initrd_ctx)) ++ goto fail; ++ ++ initrd_size = grub_get_initrd_size (&initrd_ctx); ++ grub_dprintf ("linux", "Loading initrd\n"); ++ ++ initrd_pages = (GRUB_EFI_BYTES_TO_PAGES (initrd_size)); ++ initrd_mem = allocate_initrd_mem (initrd_pages); ++ ++ if (!initrd_mem) ++ { ++ grub_error (GRUB_ERR_OUT_OF_MEMORY, N_("out of memory")); ++ goto fail; ++ } ++ ++ if (grub_initrd_load (&initrd_ctx, argv, initrd_mem)) ++ goto fail; ++ ++ initrd_start = (grub_addr_t) initrd_mem; ++ initrd_end = initrd_start + initrd_size; ++ grub_dprintf ("linux", "[addr=%p, size=0x%x]\n", ++ (void *) initrd_start, initrd_size); ++ ++fail: ++ grub_initrd_close (&initrd_ctx); ++ if (initrd_mem && !initrd_start) ++ grub_efi_free_pages ((grub_addr_t) initrd_mem, initrd_pages); ++ ++ return grub_errno; ++} ++ ++static grub_err_t ++grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)), ++ int argc, char *argv[]) ++{ ++ grub_file_t file = 0; ++ struct linux_arch_kernel_header lh; ++ grub_err_t err; ++ ++ grub_dl_ref (my_mod); ++ ++ if (argc == 0) ++ { ++ grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected")); ++ goto fail; ++ } ++ ++ file = grub_file_open (argv[0], GRUB_FILE_TYPE_LINUX_KERNEL); ++ if (!file) ++ goto fail; ++ ++ kernel_size = grub_file_size (file); ++ ++ if (grub_file_read (file, &lh, sizeof (lh)) < (long) sizeof (lh)) ++ return grub_errno; ++ ++ if (grub_arch_efi_linux_check_image (&lh) != GRUB_ERR_NONE) ++ goto fail; ++ ++ grub_loader_unset(); ++ ++ grub_dprintf ("linux", "kernel file size: %lld\n", (long long) kernel_size); ++ kernel_addr = grub_efi_allocate_any_pages (GRUB_EFI_BYTES_TO_PAGES (kernel_size)); ++ grub_dprintf ("linux", "kernel numpages: %lld\n", ++ (long long) GRUB_EFI_BYTES_TO_PAGES (kernel_size)); ++ if (!kernel_addr) ++ { ++ grub_error (GRUB_ERR_OUT_OF_MEMORY, N_("out of memory")); ++ goto fail; ++ } ++ ++ grub_file_seek (file, 0); ++ if (grub_file_read (file, kernel_addr, kernel_size) ++ < (grub_int64_t) kernel_size) ++ { ++ if (!grub_errno) ++ grub_error (GRUB_ERR_BAD_OS, N_("premature end of file %s"), argv[0]); ++ goto fail; ++ } ++ ++ grub_dprintf ("linux", "kernel @ %p\n", kernel_addr); ++ ++ cmdline_size = grub_loader_cmdline_size (argc, argv) + sizeof (LINUX_IMAGE); ++ linux_args = grub_malloc (cmdline_size); ++ if (!linux_args) ++ { ++ grub_error (GRUB_ERR_OUT_OF_MEMORY, N_("out of memory")); ++ goto fail; ++ } ++ grub_memcpy (linux_args, LINUX_IMAGE, sizeof (LINUX_IMAGE)); ++ err = grub_create_loader_cmdline (argc, argv, ++ linux_args + sizeof (LINUX_IMAGE) - 1, ++ cmdline_size, ++ GRUB_VERIFY_KERNEL_CMDLINE); ++ if (err) ++ goto fail; ++ ++ if (grub_errno == GRUB_ERR_NONE) ++ { ++ grub_loader_set (grub_linux_boot, grub_linux_unload, 0); ++ loaded = 1; ++ } ++ ++fail: ++ if (file) ++ grub_file_close (file); ++ ++ if (grub_errno != GRUB_ERR_NONE) ++ { ++ grub_dl_unref (my_mod); ++ loaded = 0; ++ } ++ ++ if (linux_args && !loaded) ++ grub_free (linux_args); ++ ++ if (kernel_addr && !loaded) ++ grub_efi_free_pages ((grub_addr_t) kernel_addr, ++ GRUB_EFI_BYTES_TO_PAGES (kernel_size)); ++ ++ 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.")); ++ my_mod = mod; ++} ++ ++GRUB_MOD_FINI (linux) ++{ ++ grub_unregister_command (cmd_linux); ++ grub_unregister_command (cmd_initrd); ++} +-- +2.25.4 diff --git a/sys-boot/grub/files/grub-2.06-magic-number.patch b/sys-boot/grub/files/grub-2.06-magic-number.patch new file mode 100644 index 0000000..c43e771 --- /dev/null +++ b/sys-boot/grub/files/grub-2.06-magic-number.patch @@ -0,0 +1,42 @@ +diff -Naur grub-2.06~rc1/include/grub/riscv32/linux.h grub-2.06~rc1-mod/include/grub/riscv32/linux.h +--- grub-2.06~rc1/include/grub/riscv32/linux.h 2019-04-23 10:54:47.000000000 +0200 ++++ grub-2.06~rc1-mod/include/grub/riscv32/linux.h 2021-07-02 07:33:27.504051015 +0200 +@@ -19,7 +19,7 @@ + #ifndef GRUB_RISCV32_LINUX_HEADER + #define GRUB_RISCV32_LINUX_HEADER 1 + +-#define GRUB_LINUX_RISCV_MAGIC_SIGNATURE 0x52534356 /* 'RSCV' */ ++#define GRUB_LINUX_RISCV_MAGIC_SIGNATURE 0x05435352 /* little endian, 'RSC\x05' */ + + /* From linux/Documentation/riscv/booting.txt */ + struct linux_riscv_kernel_header +@@ -32,7 +32,7 @@ + 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 magic; /* Magic number, little endian, "RSC\x05" */ + grub_uint32_t hdr_offset; /* Offset of PE/COFF header */ + }; + +diff -Naur grub-2.06~rc1/include/grub/riscv64/linux.h grub-2.06~rc1-mod/include/grub/riscv64/linux.h +--- grub-2.06~rc1/include/grub/riscv64/linux.h 2019-04-23 10:54:47.000000000 +0200 ++++ grub-2.06~rc1-mod/include/grub/riscv64/linux.h 2021-07-02 07:35:33.173217754 +0200 +@@ -19,7 +19,7 @@ + #ifndef GRUB_RISCV64_LINUX_HEADER + #define GRUB_RISCV64_LINUX_HEADER 1 + +-#define GRUB_LINUX_RISCV_MAGIC_SIGNATURE 0x52534356 /* 'RSCV' */ ++#define GRUB_LINUX_RISCV_MAGIC_SIGNATURE 0x05435352 /* little endian, 'RSC\x05' */ + + #define GRUB_EFI_PE_MAGIC 0x5A4D + +@@ -34,7 +34,7 @@ + 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 magic; /* Magic number, little endian, "RSC\x05" */ + grub_uint32_t hdr_offset; /* Offset of PE/COFF header */ + }; + diff --git a/sys-boot/grub/files/grub-2.06-test-words.patch b/sys-boot/grub/files/grub-2.06-test-words.patch new file mode 100644 index 0000000..a3fe060 --- /dev/null +++ b/sys-boot/grub/files/grub-2.06-test-words.patch @@ -0,0 +1,25 @@ +From 0f5080a2f3c952e2ee00bd271f42c56bb955dc19 Mon Sep 17 00:00:00 2001 +From: Mike Gilbert <floppym@gentoo.org> +Date: Sun, 14 Mar 2021 12:44:52 -0400 +Subject: [PATCH] Use /usr/share/dict/words as a 'compressible' file + +--- + tests/util/grub-fs-tester.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tests/util/grub-fs-tester.in b/tests/util/grub-fs-tester.in +index bfc425e1f..efd2977b0 100644 +--- a/tests/util/grub-fs-tester.in ++++ b/tests/util/grub-fs-tester.in +@@ -265,7 +265,7 @@ for LOGSECSIZE in $(range "$MINLOGSECSIZE" "$MAXLOGSECSIZE" 1); do + MASTER="${tempdir}/master" + FSLABEL="grub_;/testé莭莽茝😁киритi urewfceniuewruevrewnuuireurevueurnievrewfnerfcnevirivinrewvnirewnivrewiuvcrewvnuewvrrrewniuerwreiuviurewiuviurewnuvewnvrenurnunuvrevuurerejiremvreijnvcreivire nverivnreivrevnureiorfnfrvoeoiroireoireoifrefoieroifoireoifoirefoireoifoijfoirereoireoivoioirevoinvoinreoinvnoieoinreoinveoinveoinreoinvoineoinoinoineoinernoiveoinvreoiioewdioewoirvnoireoivfoirewfewoifoijewoijfoijewfoijfewoijoijoijoijoijoijoijfewceniuewruevrewnuuireurevueurnievrewfnerfcnevirivinrewvnirewnivrewiuvcrewvnuewvrrrewniuerwreiuviurewiuviurewnuvewnvrenurnunuvrevuurerejiremvreijnvcreivire nverivnreivrevnureiorfnfrvoeoiroireoireoifrefoieroifoireoifoirefoireoifoijfoirereoireoivoioirevoinvoinreoinvnoieoinreoinveoinveoinreoinvoineoinoinoineoinernoiveoinvreoiioewdioewoirvnoireoivfoirewfewoifoijewoijfoijewfoijfewoijoijoijoijoijoijoijfewrewfceniuewruevrewnuuireurevueurnievrewfnerfcnevirivinrewvnirewnivrewiuvcrewvnuewvrrrewniuerwreiuviurewiuviurewnuvewnvrenurnunuvrevuurerejiremvreijnvcreivire nverivnreivrevnureiorfnfrvoeoiroireoireoifrefoieroifoireoifoirefoireoifoijfoirereoireoivoioirevoinvoinreoinvnoieoinreoinveoinveoinreoinvoineoinoinoineoinernoiveoinvreoiioewdioewoirvnoireoivfoirewfewoifoijewoijfoijewfoijfewoijoijoijoijoijoijoijfewceniuewruevrewnuuireurevueurnievrewfnerfcnevirivinrewvnirewnivrewiuvcrewvnuewvrrrewniuerwreiuviurewiuviurewnuvewnvrenurnunuvrevuurerejiremvreijnvcreivire nverivnreivrevnureiorfnfrvoeoiroireoireoifrefoieroifoireoifoirefoireoifoijfoirereoireoivoioirevoinvoinreoinvnoieoinreoinveoinveoinreoinvoineoinoinoineoinernoiveoinvreoiioewdioewoirvnoireoivfoirewfewoifoijewoijfoijewfoijfewoijoijoijoijoijoijoijfew" + CFILESRC= +- for cand in /usr/share/dict/american-english /usr/share/dict/linux.words /data/data/com.termux/files/usr/share/hunspell/en_US.dic; do ++ for cand in /usr/share/dict/words; do + if test -f "$cand" ; then + CFILESRC="$cand" + break +-- +2.31.0.rc1 + diff --git a/sys-boot/grub/files/grub.default-3 b/sys-boot/grub/files/grub.default-3 new file mode 100644 index 0000000..3faabf9 --- /dev/null +++ b/sys-boot/grub/files/grub.default-3 @@ -0,0 +1,73 @@ +# Copyright 1999-2020 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 +# +# To populate all changes in this file you need to regenerate your +# grub configuration file afterwards: +# 'grub-mkconfig -o /boot/grub/grub.cfg' +# +# See the grub info page for documentation on possible variables and +# their associated values. + +GRUB_DISTRIBUTOR="Gentoo" + +# Default menu entry +#GRUB_DEFAULT=0 + +# Boot the default entry this many seconds after the menu is displayed +#GRUB_TIMEOUT=5 +#GRUB_TIMEOUT_STYLE=menu + +# Append parameters to the linux kernel command line +#GRUB_CMDLINE_LINUX="" +# +# Examples: +# +# Boot with network interface renaming disabled +# GRUB_CMDLINE_LINUX="net.ifnames=0" +# +# Boot with systemd instead of sysvinit (openrc) +# GRUB_CMDLINE_LINUX="init=/usr/lib/systemd/systemd" + +# Append parameters to the linux kernel command line for non-recovery entries +#GRUB_CMDLINE_LINUX_DEFAULT="" + +# Uncomment to disable graphical terminal (grub-pc only) +#GRUB_TERMINAL=console + +# The resolution used on graphical terminal. +# Note that you can use only modes which your graphic card supports via VBE. +# You can see them in real GRUB with the command `vbeinfo'. +#GRUB_GFXMODE=640x480 + +# Set to 'text' to force the Linux kernel to boot in normal text +# mode, 'keep' to preserve the graphics mode set using +# 'GRUB_GFXMODE', 'WIDTHxHEIGHT'['xDEPTH'] to set a particular +# graphics mode, or a sequence of these separated by commas or +# semicolons to try several modes in sequence. +#GRUB_GFXPAYLOAD_LINUX= + +# Path to theme spec txt file. +# The starfield is by default provided with use truetype. +# NOTE: when enabling custom theme, ensure you have required font/etc. +#GRUB_THEME="/boot/grub/themes/starfield/theme.txt" + +# Background image used on graphical terminal. +# Can be in various bitmap formats. +#GRUB_BACKGROUND="/boot/grub/mybackground.png" + +# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to kernel +#GRUB_DISABLE_LINUX_UUID=true + +# Uncomment to disable generation of recovery mode menu entries +#GRUB_DISABLE_RECOVERY=true + +# Uncomment to disable generation of the submenu and put all choices on +# the top-level menu. +# Besides the visual affect of no sub menu, this makes navigation of the +# menu easier for a user who can't see the screen. +#GRUB_DISABLE_SUBMENU=y + +# Uncomment to play a tone when the main menu is displayed. +# This is useful, for example, to allow users who can't see the screen +# to know when they can make a choice on the menu. +#GRUB_INIT_TUNE="60 800 1" diff --git a/sys-boot/grub/grub-2.06.ebuild b/sys-boot/grub/grub-2.06.ebuild new file mode 100644 index 0000000..15c765a --- /dev/null +++ b/sys-boot/grub/grub-2.06.ebuild @@ -0,0 +1,308 @@ +# Copyright 1999-2021 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=7 + +if [[ ${PV} == 9999 ]]; then + GRUB_AUTORECONF=1 + GRUB_BOOTSTRAP=1 +fi +GRUB_AUTOGEN=1 +GRUB_AUTORECONF=1 + +PYTHON_COMPAT=( python{2_7,3_{6,7,8,9}} ) +WANT_LIBTOOL=none + +if [[ -n ${GRUB_AUTOGEN} || -n ${GRUB_BOOTSTRAP} ]]; then + inherit python-any-r1 +fi + +if [[ -n ${GRUB_AUTORECONF} ]]; then + inherit autotools +fi + +inherit bash-completion-r1 flag-o-matic multibuild optfeature pax-utils toolchain-funcs + +if [[ ${PV} != 9999 ]]; then + if [[ ${PV} == *_alpha* || ${PV} == *_beta* || ${PV} == *_rc* ]]; then + # The quote style is to work with <=bash-4.2 and >=bash-4.3 #503860 + MY_P=${P/_/'~'} + SRC_URI="https://alpha.gnu.org/gnu/${PN}/${MY_P}.tar.xz" + S=${WORKDIR}/${MY_P} + else + SRC_URI="mirror://gnu/${PN}/${P}.tar.xz" + S=${WORKDIR}/${P%_*} + fi + KEYWORDS="~amd64 ~arm ~arm64 ~ia64 ~ppc ~ppc64 ~sparc ~x86" +else + inherit git-r3 + EGIT_REPO_URI="https://git.savannah.gnu.org/git/grub.git" +fi + +PATCHES=( + "${FILESDIR}"/gfxpayload.patch + "${FILESDIR}"/grub-2.02_beta2-KERNEL_GLOBS.patch + "${FILESDIR}"/grub-2.06-test-words.patch + "${FILESDIR}"/grub-2.06-magic-number.patch + "${FILESDIR}"/grub-2.06-linux-riscv.patch + "${FILESDIR}"/grub-2.06-add-boot-hartid-to-fdt.patch +) + + +DEJAVU=dejavu-sans-ttf-2.37 +UNIFONT=unifont-12.1.02 +SRC_URI+=" fonts? ( mirror://gnu/unifont/${UNIFONT}/${UNIFONT}.pcf.gz ) + themes? ( mirror://sourceforge/dejavu/${DEJAVU}.zip )" + +DESCRIPTION="GNU GRUB boot loader" +HOMEPAGE="https://www.gnu.org/software/grub/" + +# Includes licenses for dejavu and unifont +LICENSE="GPL-3+ BSD MIT fonts? ( GPL-2-with-font-exception ) themes? ( CC-BY-SA-3.0 BitstreamVera )" +SLOT="2/${PVR}" +IUSE="device-mapper doc efiemu +fonts mount nls sdl test +themes truetype libzfs" + +GRUB_ALL_PLATFORMS=( coreboot efi-32 efi-64 emu ieee1275 loongson multiboot qemu qemu-mips pc uboot xen xen-32 xen-pvh efi ) +IUSE+=" ${GRUB_ALL_PLATFORMS[@]/#/grub_platforms_}" + +REQUIRED_USE=" + grub_platforms_coreboot? ( fonts ) + grub_platforms_qemu? ( fonts ) + grub_platforms_ieee1275? ( fonts ) + grub_platforms_loongson? ( fonts ) +" + +BDEPEND=" + ${PYTHON_DEPS} + app-misc/pax-utils + sys-devel/flex + sys-devel/bison + sys-apps/help2man + sys-apps/texinfo + fonts? ( + media-libs/freetype:2 + virtual/pkgconfig + ) + test? ( + app-admin/genromfs + app-arch/cpio + app-arch/lzop + app-emulation/qemu + dev-libs/libisoburn + sys-apps/miscfiles + sys-block/parted + sys-fs/squashfs-tools + ) + themes? ( + app-arch/unzip + media-libs/freetype:2 + virtual/pkgconfig + ) + truetype? ( virtual/pkgconfig ) +" +DEPEND=" + app-arch/xz-utils + >=sys-libs/ncurses-5.2-r5:0= + grub_platforms_emu? ( + sdl? ( media-libs/libsdl ) + ) + device-mapper? ( >=sys-fs/lvm2-2.02.45 ) + libzfs? ( sys-fs/zfs:= ) + mount? ( sys-fs/fuse:0 ) + truetype? ( media-libs/freetype:2= ) + ppc? ( >=sys-apps/ibm-powerpc-utils-1.3.5 ) + ppc64? ( >=sys-apps/ibm-powerpc-utils-1.3.5 ) +" +RDEPEND="${DEPEND} + kernel_linux? ( + grub_platforms_efi-32? ( sys-boot/efibootmgr ) + grub_platforms_efi-64? ( sys-boot/efibootmgr ) + ) + !sys-boot/grub:0 + nls? ( sys-devel/gettext ) +" + +RESTRICT="!test? ( test )" + +QA_EXECSTACK="usr/bin/grub-emu* usr/lib/grub/*" +QA_PRESTRIPPED="usr/lib/grub/.*" +QA_MULTILIB_PATHS="usr/lib/grub/.*" +QA_WX_LOAD="usr/lib/grub/*" + +pkg_setup() { + : +} + +src_unpack() { + if [[ ${PV} == 9999 ]]; then + git-r3_src_unpack + pushd "${P}" >/dev/null || die + local GNULIB_URI="https://git.savannah.gnu.org/git/gnulib.git" + local GNULIB_REVISION=$(source bootstrap.conf >/dev/null; echo "${GNULIB_REVISION}") + git-r3_fetch "${GNULIB_URI}" "${GNULIB_REVISION}" + git-r3_checkout "${GNULIB_URI}" gnulib + popd >/dev/null || die + fi + default +} + +src_prepare() { + default + + sed -i -e /autoreconf/d autogen.sh || die + + if [[ -n ${GRUB_AUTOGEN} || -n ${GRUB_BOOTSTRAP} ]]; then + python_setup + else + export PYTHON=true + fi + + if [[ -n ${GRUB_BOOTSTRAP} ]]; then + eautopoint --force + AUTOPOINT=: AUTORECONF=: ./bootstrap || die + elif [[ -n ${GRUB_AUTOGEN} ]]; then + ./autogen.sh || die + fi + + if [[ -n ${GRUB_AUTORECONF} ]]; then + eautoreconf + fi +} + +grub_do() { + multibuild_foreach_variant run_in_build_dir "$@" +} + +grub_do_once() { + multibuild_for_best_variant run_in_build_dir "$@" +} + +grub_configure() { + local platform + + case ${MULTIBUILD_VARIANT} in + efi*) platform=efi ;; + xen-pvh) platform=xen_pvh ;; + xen*) platform=xen ;; + guessed) ;; + *) platform=${MULTIBUILD_VARIANT} ;; + esac + + case ${MULTIBUILD_VARIANT} in + *-32) + if [[ ${CTARGET:-${CHOST}} == x86_64* ]]; then + local CTARGET=i386 + fi ;; + *-64) + if [[ ${CTARGET:-${CHOST}} == i?86* ]]; then + local CTARGET=x86_64 + local -x TARGET_CFLAGS="-Os -march=x86-64 ${TARGET_CFLAGS}" + local -x TARGET_CPPFLAGS="-march=x86-64 ${TARGET_CPPFLAGS}" + fi ;; + esac + + local myeconfargs=( + --disable-werror + --program-prefix= + --libdir="${EPREFIX}"/usr/lib + $(use_enable device-mapper) + $(use_enable mount grub-mount) + $(use_enable nls) + $(use_enable themes grub-themes) + $(use_enable truetype grub-mkfont) + $(use_enable libzfs) + $(use_enable sdl grub-emu-sdl) + ${platform:+--with-platform=}${platform} + + # Let configure detect this where supported + $(usex efiemu '' '--disable-efiemu') + ) + + if use fonts; then + ln -rs "${WORKDIR}/${UNIFONT}.pcf" unifont.pcf || die + fi + + if use themes; then + ln -rs "${WORKDIR}/${DEJAVU}/ttf/DejaVuSans.ttf" DejaVuSans.ttf || die + fi + + local ECONF_SOURCE="${S}" + econf "${myeconfargs[@]}" +} + +src_configure() { + # Bug 508758. + replace-flags -O3 -O2 + + # We don't want to leak flags onto boot code. + export HOST_CCASFLAGS=${CCASFLAGS} + export HOST_CFLAGS=${CFLAGS} + export HOST_CPPFLAGS=${CPPFLAGS} + export HOST_LDFLAGS=${LDFLAGS} + unset CCASFLAGS CFLAGS CPPFLAGS LDFLAGS + + tc-ld-disable-gold #439082 #466536 #526348 + export TARGET_LDFLAGS="${TARGET_LDFLAGS} ${LDFLAGS}" + unset LDFLAGS + + tc-export CC NM OBJCOPY RANLIB STRIP + tc-export BUILD_CC BUILD_PKG_CONFIG + + MULTIBUILD_VARIANTS=() + local p + for p in "${GRUB_ALL_PLATFORMS[@]}"; do + use "grub_platforms_${p}" && MULTIBUILD_VARIANTS+=( "${p}" ) + done + [[ ${#MULTIBUILD_VARIANTS[@]} -eq 0 ]] && MULTIBUILD_VARIANTS=( guessed ) + grub_do grub_configure +} + +src_compile() { + # Sandbox bug 404013. + use libzfs && addpredict /etc/dfs:/dev/zfs + + grub_do emake + + use doc && grub_do_once emake -C docs html +} + +src_test() { + # The qemu dependency is a bit complex. + # You will need to adjust QEMU_SOFTMMU_TARGETS to match the cpu/platform. + grub_do emake check +} + +src_install() { + grub_do emake install DESTDIR="${D}" bashcompletiondir="$(get_bashcompdir)" + use doc && grub_do_once emake -C docs install-html DESTDIR="${D}" + + einstalldocs + + insinto /etc/default + newins "${FILESDIR}"/grub.default-3 grub + + # https://bugs.gentoo.org/231935 + dostrip -x /usr/lib/grub +} + +pkg_postinst() { + elog "For information on how to configure GRUB2 please refer to the guide:" + elog " https://wiki.gentoo.org/wiki/GRUB2_Quick_Start" + + if has_version 'sys-boot/grub:0'; then + elog "A migration guide for GRUB Legacy users is available:" + elog " https://wiki.gentoo.org/wiki/GRUB2_Migration" + fi + + if [[ -z ${REPLACING_VERSIONS} ]]; then + elog + optfeature "detecting other operating systems (grub-mkconfig)" sys-boot/os-prober + optfeature "creating rescue media (grub-mkrescue)" dev-libs/libisoburn + optfeature "enabling RAID device detection" sys-fs/mdadm + fi + + if has_version sys-boot/os-prober; then + ewarn "Due to security concerns, os-prober is disabled by default." + ewarn "Set GRUB_DISABLE_OS_PROBER=false in /etc/default/grub to enable it." + fi +} diff --git a/sys-boot/grub/metadata.xml b/sys-boot/grub/metadata.xml new file mode 100644 index 0000000..a2fdb7a --- /dev/null +++ b/sys-boot/grub/metadata.xml @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd"> +<pkgmetadata> +<maintainer type="person"> + <email>floppym@gentoo.org</email> + <name>Mike Gilbert</name> +</maintainer> +<maintainer type="project"> + <email>base-system@gentoo.org</email> + <name>Gentoo Base System</name> +</maintainer> +<use> + <flag name="device-mapper"> + Enable support for device-mapper from <pkg>sys-fs/lvm2</pkg> + </flag> + <flag name="efiemu"> + Build and install the efiemu runtimes + </flag> + <flag name="fonts">Build and install fonts for the gfxterm module</flag> + <flag name="mount"> + Build and install the grub-mount utility + </flag> + <flag name="libzfs"> + Enable support for <pkg>sys-fs/zfs</pkg> + </flag> + <flag name="themes">Build and install GRUB themes (starfield)</flag> + <flag name="truetype">Build and install grub-mkfont conversion utility</flag> +</use> +<upstream> + <remote-id type="cpe">cpe:/a:gnu:grub</remote-id> +</upstream> +</pkgmetadata> diff --git a/sys-boot/opensbi/Manifest b/sys-boot/opensbi/Manifest new file mode 100644 index 0000000..3ea0225 --- /dev/null +++ b/sys-boot/opensbi/Manifest @@ -0,0 +1,3 @@ +DIST meta-sifive-2021.05.zip 664346 BLAKE2B ca98d75c4fc255f3ec99c3e9667e1a5e43fc1db88b83010db3766ff8e70acfaf2741dde96da65265aeef5ca82e1cc93a96ea771dd48cc2c9ff4af24d3feb4b82 SHA512 e60052fc183ddd89a4b0a2a443aedfe22c20ce1134925d6c0d52946ce9a5ca04750408fcb7b191ecc30b4d4b21c9e2f262d0d2b89527923a7cd82dc01a7f2345 +DIST opensbi-0.9.zip 290818 BLAKE2B 5a8903c118faea18fc8e6b023ca0b1a393da2deb57f8b2d685c0547d9dadb1ebf7dc60e442a8976f10809e3ef54d03dfd81c853bc75991f193427cc28c68b360 SHA512 2caf042db0437207f33791d6e2a250311b2c805c0da79bfbb6cbec193e24c2ba26a69ef9c4f56d0c3d4a7a66cf2c656c8e453a8da0f492382464145b231cc690 +EBUILD opensbi-0.9.ebuild 1078 BLAKE2B e0c862d73eeeac60869c95acdc3a8138a4b0169d90fa2a38d65fdf53bf132e306defa4971f004132e093136bc8a1c4e2a5407cfd2f20ef312f1fe9323c6e1397 SHA512 2d1c2ecb7a663ff637eab3f383d3c046834ebd7018d85bde7a7efe4a0bb47965f140488de4cbd39911dac8029c941410f1baa5384d81349f6f84a2d4b16c8fba diff --git a/sys-boot/opensbi/opensbi-0.9.ebuild b/sys-boot/opensbi/opensbi-0.9.ebuild new file mode 100644 index 0000000..746e0b3 --- /dev/null +++ b/sys-boot/opensbi/opensbi-0.9.ebuild @@ -0,0 +1,39 @@ +# Copyright 2021 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=7 + +META_SIFIVE="2021.05" + +DESCRIPTION="RISC-V Supervisor Binary Interface (SBI) with meta-sifive-${META_SIFIVE} patches" +HOMEPAGE="https://github.com/riscv/${PN}/tree/v${PV}" +SRC_URI="https://github.com/riscv/${PN}/archive/refs/tags/v${PV}.zip -> ${P}.zip + https://github.com/sifive/meta-sifive/archive/refs/heads/${META_SIFIVE}.zip -> meta-sifive-${META_SIFIVE}.zip" + +LICENSE="BSD-2" +SLOT="0" +KEYWORDS="~riscv" + +DEPEND="" +RDEPEND="${DEPEND}" +BDEPEND="" + +src_prepare() { + eapply "${WORKDIR}/meta-sifive-${META_SIFIVE}/recipes-bsp/opensbi/files" + eapply "${WORKDIR}/meta-sifive-${META_SIFIVE}/recipes-bsp/opensbi/files/unmatched" + default +} + +src_compile() { + emake PLATFORM=generic +} + +src_install() { + mkdir -p "${D}/usr/share/${P}" + cp "${WORKDIR}/${P}/build/platform/generic/firmware/fw_dynamic.bin" "${D}/usr/share/${P}" + elog "Installed OpenSBI at /usr/share/${P}/fw_dynamic.bin" + dodoc CONTRIBUTORS.md + dodoc COPYING.BSD + dodoc README.md + dodoc ThirdPartyNotices.md +} diff --git a/sys-boot/u-boot/Manifest b/sys-boot/u-boot/Manifest new file mode 100644 index 0000000..bec3d4c --- /dev/null +++ b/sys-boot/u-boot/Manifest @@ -0,0 +1,5 @@ +AUX efi-priority.patch 1008 BLAKE2B f054f8f6a06f81bfbb79ef87e5ade7f6df8d7fe11bff4742a7988deaa4bfa0f64332571a30a475689b0e86994462b4e66750d3059e594bd5d72067ae0be97e2c SHA512 d7266dd81e6c1bd20f27513ac046a70d88d064238e250ff3a430c6c588f2ff594512d4374ced7cf9edabbaeacd6f1d901ac679edacb47f5dee76b17f45193f50 +DIST meta-sifive-2021.05.zip 664346 BLAKE2B ca98d75c4fc255f3ec99c3e9667e1a5e43fc1db88b83010db3766ff8e70acfaf2741dde96da65265aeef5ca82e1cc93a96ea771dd48cc2c9ff4af24d3feb4b82 SHA512 e60052fc183ddd89a4b0a2a443aedfe22c20ce1134925d6c0d52946ce9a5ca04750408fcb7b191ecc30b4d4b21c9e2f262d0d2b89527923a7cd82dc01a7f2345 +DIST u-boot-2021.01_rc5.tar.gz 20920395 BLAKE2B ba28811074191d97cdfa2e1e70083a113531a69285ad5e1f662f9d9715007b5441a043adf2592ab406295b1f85089aab7193068bf6f5a92af224bdde4aae21c7 SHA512 1c215c1b71e24d24838249e72ca2d97e3b857176d761a99a6a94597a3ab65940dc3f302c451559411691c716a4c73267f280a46a52d1f4ad97fec7eb13951444 +EBUILD u-boot-2021.01_rc5.ebuild 2659 BLAKE2B 0db14b146e2b876ccfe602fa2b3a6a1693717b8d7e4669b0b02c1b4787466ae7e136798ca85767c3c9613684fc541de1e3ec8eae17de26abe859e95b525c04da SHA512 edf949380cf957797e6e41790f440ad8351edba0037970767eafc28a1ed77b82b63f23900994c3746a4c7ebe28f77a426e8a3fd6a243ecde797f8294b5d80bda +MISC metadata.xml 785 BLAKE2B fcfc4e1be03d1b5d8c03200e016576c99b31a415ec1a7177993ca9629bd4c979c68bafe2dbfe57cae5eefae4140349e2984f43ed0e1a183606b3e3235ea93062 SHA512 f5d6160b664ec093929760ed4c83ad9505dc2f0c285d05e2a63b403f7e9674af6a96f9eedbf6b692fb4a56336365f822f96e6608d0aaea50400d9615c995297d diff --git a/sys-boot/u-boot/files/efi-priority.patch b/sys-boot/u-boot/files/efi-priority.patch new file mode 100644 index 0000000..aee2f94 --- /dev/null +++ b/sys-boot/u-boot/files/efi-priority.patch @@ -0,0 +1,16 @@ +diff -Naur u-boot-2021.01_rc5/include/config_distro_bootcmd.h u-boot-2021.01_rc5-mod/include/config_distro_bootcmd.h +--- u-boot-2021.01_rc5/include/config_distro_bootcmd.h 2021-07-04 11:32:47.978321442 +0200 ++++ u-boot-2021.01_rc5-mod/include/config_distro_bootcmd.h 2021-07-04 11:34:05.930534226 +0200 +@@ -462,11 +462,11 @@ + "scan_dev_for_boot=" \ + "echo Scanning ${devtype} " \ + "${devnum}:${distro_bootpart}...; " \ ++ SCAN_DEV_FOR_EFI \ + "for prefix in ${boot_prefixes}; do " \ + "run scan_dev_for_extlinux; " \ + "run scan_dev_for_scripts; " \ + "done;" \ +- SCAN_DEV_FOR_EFI \ + "\0" \ + \ + "scan_dev_for_boot_part=" \ diff --git a/sys-boot/u-boot/metadata.xml b/sys-boot/u-boot/metadata.xml new file mode 100644 index 0000000..125d2ed --- /dev/null +++ b/sys-boot/u-boot/metadata.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd"> +<pkgmetadata> +<maintainer type="person"> +<email>root@localhost</email> +<name>root</name> +</maintainer> + <use> + <flag name="1000">Set CPU frequency to 1000 MHz</flag> + <flag name="1100">Set CPU frequency to 1100 MHz</flag> + <flag name="1200">Set CPU frequency to 1200 MHz</flag> + <flag name="1300">Set CPU frequency to 1300 MHz</flag> + <flag name="1400">Set CPU frequency to 1400 MHz</flag> + <flag name="1500">Set CPU frequency to 1500 MHz</flag> + <flag name="1600">Set CPU frequency to 1600 MHz</flag> + <flag name="1700">Set CPU frequency to 1700 MHz</flag> + <flag name="efi-priority">Try EFI boot before other methods</flag> + </use> +</pkgmetadata> diff --git a/sys-boot/u-boot/u-boot-2021.01_rc5.ebuild b/sys-boot/u-boot/u-boot-2021.01_rc5.ebuild new file mode 100644 index 0000000..7f293a6 --- /dev/null +++ b/sys-boot/u-boot/u-boot-2021.01_rc5.ebuild @@ -0,0 +1,89 @@ +# Copyright 2021 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=7 + +META_SIFIVE="2021.05" +UBOOT_COMMIT="c4fddedc48f336eabc4ce3f74940e6aa372de18c" + +DESCRIPTION="U-Boot with meta-sifive-${META_SIFIVE} patches" +HOMEPAGE="https://source.denx.de/u-boot/u-boot" +SRC_URI="https://source.denx.de/u-boot/u-boot/-/archive/${UBOOT_COMMIT}/u-boot-${UBOOT_COMMIT}.tar.gz -> ${P}.tar.gz + https://github.com/sifive/meta-sifive/archive/refs/heads/${META_SIFIVE}.zip -> meta-sifive-${META_SIFIVE}.zip" + +LICENSE="GPL-2+" +SLOT="0" +KEYWORDS="~riscv" + +DEPEND="sys-boot/opensbi sys-apps/dtc" +RDEPEND="${DEPEND}" +BDEPEND="" + +IUSE="-1000 -1100 +1200 -1300 -1400 -1500 -1600 -1700 efi-priority" +REQUIRED_USE="^^ ( 1000 1100 1200 1300 1400 1500 1600 1700 )" + +src_unpack() { + unpack ${P}.tar.gz + unpack meta-sifive-${META_SIFIVE}.zip + mv "${WORKDIR}/u-boot-${UBOOT_COMMIT}" "${WORKDIR}/${P}" +} + +src_prepare() { + eapply "${WORKDIR}/meta-sifive-${META_SIFIVE}/recipes-bsp/u-boot/files/unmatched" + + # A default, just to be sure + CONFIG_SPEED=1200000000 + + # Check use flags + use 1000 && CONFIG_SPEED=1000000000 + use 1100 && CONFIG_SPEED=1100000000 + use 1200 && CONFIG_SPEED=1200000000 + use 1300 && CONFIG_SPEED=1300000000 + use 1400 && CONFIG_SPEED=1400000000 + use 1500 && CONFIG_SPEED=1500000000 + use 1600 && CONFIG_SPEED=1600000000 + use 1700 && CONFIG_SPEED=1700000000 + + # Actaually modify the dtsi file + sed -i -E -e "/cpus/,/cpu0/ s/assigned-clock-rates = <[0-9]+>/assigned-clock-rates = <${CONFIG_SPEED}>/" "${WORKDIR}/${P}/arch/riscv/dts/fu740-c000-u-boot.dtsi" + elog "Set CPU frquency to $((CONFIG_SPEED/1000000)) Mhz" + + if use efi-priority; then + eapply "${FILESDIR}/efi-priority.patch" + fi + + eapply_user +} + +src_configure() +{ + # Apply Unmatched defconfig + emake sifive_hifive_unmatched_fu740_defconfig +} + +src_compile() { + # Find opensbi + export OPENSBI=`find /usr/share/opensbi-* -name fw_dynamic.bin | sort | tail -n 1` + if [ -z "$OPENSBI" ]; then + die "Can't find OpenSBI, is sys-boot/opensbi installed?" + fi + elog "Using OpenSBI at ${OPENSBI}" + + # Start the build + emake +} + +src_install() { + mkdir -p "${D}/usr/share/${P}" + cp "${WORKDIR}/${P}/u-boot.itb" "${D}/usr/share/${P}" + cp "${WORKDIR}/${P}/spl/u-boot-spl.bin" "${D}/usr/share/${P}" +} + +pkg_postinst() +{ + einfo "U-Boot files have been installed in /usr/share/${P}. In order" + einfo "to boot with this U-Boot you need to install it to the correct partitions with" + einfo "dd. For example:" + einfo "dd if=/usr/share/${P}/u-boot-spl.bin of=<partition with type \"HiFive Unleashed FSBL\">" + einfo "dd if=/usr/share/${P}/u-boot.itb of=<partition with type \"HiFive Unleashed BBL\">" +} |