From 62033660400d87f5356c739dc8ac66a57a064a14 Mon Sep 17 00:00:00 2001 From: longpanda Date: Sat, 10 Dec 2022 19:27:38 +0800 Subject: [PATCH] grub2 mode support KNOPPIX --- .../grub-2.04/grub-core/lib/syslinux_parse.c | 3 +- .../grub-2.04/grub-core/ventoy/ventoy_def.h | 13 +++++++ .../grub-2.04/grub-core/ventoy/ventoy_linux.c | 35 ++++--------------- INSTALL/grub/grub.cfg | 14 ++++++++ 4 files changed, 36 insertions(+), 29 deletions(-) diff --git a/GRUB2/MOD_SRC/grub-2.04/grub-core/lib/syslinux_parse.c b/GRUB2/MOD_SRC/grub-2.04/grub-core/lib/syslinux_parse.c index 44649d41..8c63c7a5 100644 --- a/GRUB2/MOD_SRC/grub-2.04/grub-core/lib/syslinux_parse.c +++ b/GRUB2/MOD_SRC/grub-2.04/grub-core/lib/syslinux_parse.c @@ -362,7 +362,8 @@ static grub_err_t cmd_append (const char *line, struct syslinux_menu *menu) { if (!menu->entries) - return grub_error (GRUB_ERR_BAD_ARGUMENT, "kernel without label"); + return GRUB_ERR_NONE; + //return grub_error (GRUB_ERR_BAD_ARGUMENT, "kernel without label"); menu->entries->append = grub_strdup (line); if (!menu->entries->append) diff --git a/GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_def.h b/GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_def.h index ba1dcf22..40f859ee 100644 --- a/GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_def.h +++ b/GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_def.h @@ -99,6 +99,19 @@ }\ } +#define VTOY_SKIP_SPACE(s) \ + while (ventoy_isspace(*s)) \ + {\ + s++;\ + } + +#define VTOY_SKIP_SPACE_NEXT(s, initial) \ + s += initial;\ + while (ventoy_isspace(*s)) \ + {\ + s++;\ + } + typedef enum VTOY_FILE_FLT { VTOY_FILE_FLT_ISO = 0, /* .iso */ diff --git a/GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_linux.c b/GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_linux.c index 47803de0..c3548e84 100644 --- a/GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_linux.c +++ b/GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_linux.c @@ -177,10 +177,7 @@ static grub_err_t ventoy_isolinux_initrd_collect(grub_file_t file, const char *p { nextline = ventoy_get_line(start); - while (ventoy_isspace(*start)) - { - start++; - } + VTOY_SKIP_SPACE(start); offset = 7; // strlen("initrd=") or "INITRD " or "initrd " pos = grub_strstr(start, "initrd="); @@ -438,10 +435,7 @@ static grub_err_t ventoy_grub_cfg_initrd_collect(const char *fileName) { nextline = ventoy_get_line(start); - while (ventoy_isspace(*start)) - { - start++; - } + VTOY_SKIP_SPACE(start); if (grub_strncmp(start, "initrd", 6) != 0) { @@ -454,10 +448,7 @@ static grub_err_t ventoy_grub_cfg_initrd_collect(const char *fileName) start++; } - while (ventoy_isspace(*start)) - { - start++; - } + VTOY_SKIP_SPACE(start); if (*start == '"') { @@ -528,10 +519,7 @@ static grub_err_t ventoy_grub_cfg_initrd_collect(const char *fileName) if (*start == ' ' || *start == '\t') { - while (ventoy_isspace(*start)) - { - start++; - } + VTOY_SKIP_SPACE(start); } else { @@ -1813,18 +1801,12 @@ static char *ventoy_systemd_conf_tag(char *buf, const char *tag, int optional) for (start = buf; start; start = nextline) { nextline = ventoy_get_line(start); - while (ventoy_isspace(*start)) - { - start++; - } + VTOY_SKIP_SPACE(start); if (grub_strncmp(start, tag, taglen) == 0 && (start[taglen] == ' ' || start[taglen] == '\t')) { start += taglen; - while (ventoy_isspace(*start)) - { - start++; - } + VTOY_SKIP_SPACE(start); return start; } } @@ -2038,10 +2020,7 @@ grub_err_t ventoy_cmd_linux_limine_menu(grub_extcmd_context_t ctxt, int argc, ch for (start = filebuf; start; start = nextline) { nextline = ventoy_get_line(start); - while (ventoy_isspace(*start)) - { - start++; - } + VTOY_SKIP_SPACE(start); if (start[0] == ':') { diff --git a/INSTALL/grub/grub.cfg b/INSTALL/grub/grub.cfg index 4c9a15db..19cce835 100644 --- a/INSTALL/grub/grub.cfg +++ b/INSTALL/grub/grub.cfg @@ -852,6 +852,13 @@ function uefi_linux_menu_func { configfile "mem:${vt_sys_menu_mem_addr}:size:${vt_sys_menu_mem_size}" fi fi + + if [ $vtback_cfg_find -eq 0 ]; then + if [ -f (loop)/boot/isolinux/syslnx64.cfg ]; then + syslinux_configfile (loop)/boot/isolinux/syslnx64.cfg + set vtback_cfg_find=1 + fi + fi if [ "$vtback_cfg_find" = "0" ]; then echo " " @@ -1319,6 +1326,13 @@ function legacy_linux_menu_func { configfile "mem:${vt_sys_menu_mem_addr}:size:${vt_sys_menu_mem_size}" fi fi + + if [ $vtback_cfg_find -eq 0 ]; then + if [ -f (loop)/boot/isolinux/syslnx64.cfg ]; then + syslinux_configfile (loop)/boot/isolinux/syslnx64.cfg + set vtback_cfg_find=1 + fi + fi vt_unset_boot_opt set root=$vtback_root