From ff14c07c4e6f1491dffae22bb213de4830c81c52 Mon Sep 17 00:00:00 2001 From: longpanda Date: Sun, 6 Mar 2022 19:31:18 +0800 Subject: [PATCH] Support Easy Recovery Essentials (#1481) --- DOC/BuildVentoyFromSource.txt | 6 +- .../grub-2.04/grub-core/ventoy/ventoy_cmd.c | 1 + .../grub-2.04/grub-core/ventoy/ventoy_def.h | 1 + .../grub-2.04/grub-core/ventoy/ventoy_unix.c | 99 +++++++++++++++++- INSTALL/grub/grub.cfg | 13 ++- INSTALL/ventoy/ventoy_unix.cpio | Bin 106496 -> 106496 bytes .../geom_ventoy_ko/13.x/64/geom_ventoy.ko.xz | Bin 7584 -> 7664 bytes .../13.x/sys/geom/ventoy/g_ventoy.c | 25 ++++- 8 files changed, 135 insertions(+), 10 deletions(-) diff --git a/DOC/BuildVentoyFromSource.txt b/DOC/BuildVentoyFromSource.txt index 8aae2823..be642b17 100644 --- a/DOC/BuildVentoyFromSource.txt +++ b/DOC/BuildVentoyFromSource.txt @@ -108,10 +108,10 @@ cd /home/Ventoy-master/VtoyTool sh build.sh -4.8 == Build vtoyfat == - cd /home/Ventoy-master/vtoyfat/fat_io_lib +4.8 == Build vtoycli == + cd /home/Ventoy-master/vtoycli/fat_io_lib sh buildlib.sh - cd /home/Ventoy-master/vtoyfat + cd /home/Ventoy-master/vtoycli sh build.sh 4.9 == Build exfat-util == diff --git a/GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_cmd.c b/GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_cmd.c index 1586a5db..6e40f426 100644 --- a/GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_cmd.c +++ b/GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_cmd.c @@ -5713,6 +5713,7 @@ static cmd_para ventoy_cmds[] = { "vt_unix_parse_freebsd_ver_elf", ventoy_cmd_unix_freebsd_ver_elf, 0, NULL, "", "", NULL }, { "vt_unix_reset", ventoy_cmd_unix_reset, 0, NULL, "", "", NULL }, { "vt_unix_replace_conf", ventoy_cmd_unix_replace_conf, 0, NULL, "", "", NULL }, + { "vt_unix_replace_grub_conf", ventoy_cmd_unix_replace_grub_conf, 0, NULL, "", "", NULL }, { "vt_unix_replace_ko", ventoy_cmd_unix_replace_ko, 0, NULL, "", "", NULL }, { "vt_unix_ko_fillmap", ventoy_cmd_unix_ko_fillmap, 0, NULL, "", "", NULL }, { "vt_unix_fill_image_desc", ventoy_cmd_unix_fill_image_desc, 0, NULL, "", "", NULL }, 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 3e71fe39..763ed179 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 @@ -1094,6 +1094,7 @@ grub_err_t ventoy_cmd_unix_chain_data(grub_extcmd_context_t ctxt, int argc, char int ventoy_get_disk_guid(const char *filename, grub_uint8_t *guid, grub_uint8_t *signature); grub_err_t ventoy_cmd_unix_reset(grub_extcmd_context_t ctxt, int argc, char **args); grub_err_t ventoy_cmd_unix_replace_conf(grub_extcmd_context_t ctxt, int argc, char **args); +grub_err_t ventoy_cmd_unix_replace_grub_conf(grub_extcmd_context_t ctxt, int argc, char **args); grub_err_t ventoy_cmd_unix_replace_ko(grub_extcmd_context_t ctxt, int argc, char **args); grub_err_t ventoy_cmd_unix_ko_fillmap(grub_extcmd_context_t ctxt, int argc, char **args); grub_err_t ventoy_cmd_unix_fill_image_desc(grub_extcmd_context_t ctxt, int argc, char **args); diff --git a/GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_unix.c b/GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_unix.c index fe581447..dbb30e17 100644 --- a/GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_unix.c +++ b/GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_unix.c @@ -273,7 +273,7 @@ static void ventoy_unix_fill_virt_data( grub_uint64_t isosize, ventoy_chain_h return; } -static int ventoy_freebsd_append_conf(char *buf, const char *isopath) +static int ventoy_freebsd_append_conf(char *buf, const char *isopath, const char *alias) { int pos = 0; grub_uint32_t i; @@ -294,6 +294,10 @@ static int ventoy_freebsd_append_conf(char *buf, const char *isopath) vtoy_ssprintf(buf, pos, "ventoy_load=\"%s\"\n", "YES"); vtoy_ssprintf(buf, pos, "ventoy_name=\"%s\"\n", g_ko_mod_path); + if (alias) + { + vtoy_ssprintf(buf, pos, "hint.ventoy.0.alias=\"%s\"\n", alias); + } if (g_mod_search_magic) { @@ -647,6 +651,95 @@ out: VENTOY_CMD_RETURN(GRUB_ERR_NONE); } +grub_err_t ventoy_cmd_unix_replace_grub_conf(grub_extcmd_context_t ctxt, int argc, char **args) +{ + int len; + grub_uint32_t i; + char *data; + char *pos; + grub_uint64_t offset; + grub_file_t file; + char extcfg[256]; + const char *confile = NULL; + const char * loader_conf[] = + { + "/boot/grub/grub.cfg", + }; + + (void)ctxt; + + if (argc != 1 && argc != 2) + { + debug("Replace conf invalid argc %d\n", argc); + return 1; + } + + for (i = 0; i < sizeof(loader_conf) / sizeof(loader_conf[0]); i++) + { + if (ventoy_get_file_override(loader_conf[i], &offset) == 0) + { + confile = loader_conf[i]; + g_conf_override_offset = offset; + break; + } + } + + if (confile == NULL) + { + debug("Can't find grub.cfg file from %u locations\n", i); + return 1; + } + + file = ventoy_grub_file_open(GRUB_FILE_TYPE_LINUX_INITRD, "(loop)/%s", confile); + if (!file) + { + debug("Failed to open %s \n", confile); + return 1; + } + + debug("old grub2 conf file size:%d\n", (int)file->size); + + data = grub_malloc(VTOY_MAX_SCRIPT_BUF); + if (!data) + { + grub_file_close(file); + return 1; + } + + grub_file_read(file, data, file->size); + grub_file_close(file); + + g_conf_new_data = data; + g_conf_new_len = (int)file->size; + + pos = grub_strstr(data, "kfreebsd /boot/kernel/kernel"); + if (pos) + { + pos += grub_strlen("kfreebsd /boot/kernel/kernel"); + + if (argc == 2) + { + len = grub_snprintf(extcfg, sizeof(extcfg), + ";kfreebsd_module_elf %s; set kFreeBSD.hint.ventoy.0.alias=\"%s\"", + args[0], args[1]); + } + else + { + len = grub_snprintf(extcfg, sizeof(extcfg), ";kfreebsd_module_elf %s", args[0]); + } + + grub_memmove(pos + len, pos, (int)(file->size - (pos - data))); + grub_memcpy(pos, extcfg, len); + g_conf_new_len += len; + } + else + { + debug("no kfreebsd found\n"); + } + + VENTOY_CMD_RETURN(GRUB_ERR_NONE); +} + grub_err_t ventoy_cmd_unix_replace_conf(grub_extcmd_context_t ctxt, int argc, char **args) { grub_uint32_t i; @@ -662,7 +755,7 @@ grub_err_t ventoy_cmd_unix_replace_conf(grub_extcmd_context_t ctxt, int argc, ch (void)ctxt; - if (argc != 2) + if (argc != 2 && argc != 3) { debug("Replace conf invalid argc %d\n", argc); return 1; @@ -708,7 +801,7 @@ grub_err_t ventoy_cmd_unix_replace_conf(grub_extcmd_context_t ctxt, int argc, ch if (grub_strcmp(args[0], "FreeBSD") == 0) { - g_conf_new_len += ventoy_freebsd_append_conf(data + file->size, args[1]); + g_conf_new_len += ventoy_freebsd_append_conf(data + file->size, args[1], (argc > 2) ? args[2] : NULL); } else if (grub_strcmp(args[0], "DragonFly") == 0) { diff --git a/INSTALL/grub/grub.cfg b/INSTALL/grub/grub.cfg index feb8b2ac..e2998ceb 100644 --- a/INSTALL/grub/grub.cfg +++ b/INSTALL/grub/grub.cfg @@ -519,8 +519,17 @@ function ventoy_freebsd_proc { fi done - vt_unix_replace_ko $vt_unix_mod_path (vtunix)/ventoy_unix/$vtFreeBsdDistro/geom_ventoy_ko/$vt_freebsd_ver/$vt_freebsd_bit/geom_ventoy.ko.xz - vt_unix_replace_conf FreeBSD "${1}${chosen_path}" + if [ -n "$vt_unix_mod_path" ]; then + vt_unix_replace_ko $vt_unix_mod_path (vtunix)/ventoy_unix/$vtFreeBsdDistro/geom_ventoy_ko/$vt_freebsd_ver/$vt_freebsd_bit/geom_ventoy.ko.xz + vt_unix_replace_conf FreeBSD "${1}${chosen_path}" + elif [ -e (loop)/easyre.ufs.uzip ]; then + vt_unix_replace_ko "/boot/grub/i386-pc/linux.mod" (vtunix)/ventoy_unix/$vtFreeBsdDistro/geom_ventoy_ko/$vt_freebsd_ver/$vt_freebsd_bit/geom_ventoy.ko.xz + if [ "$grub_platform" = "pc" ]; then + vt_unix_replace_grub_conf "/boot/grub/i386-pc/linux.mod" "cd9" + else + vt_unix_replace_conf FreeBSD "${1}${chosen_path}" "cd9" + fi + fi } function ventoy_dragonfly_proc { diff --git a/INSTALL/ventoy/ventoy_unix.cpio b/INSTALL/ventoy/ventoy_unix.cpio index 9cf11c3631db4df11a43d0fa1accc336bf36e2e7..22d6af4d73e336b00ccbc83a87de2ea0b0d3d168 100644 GIT binary patch delta 7729 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 delta 7693 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 IFrP610QIx}r2qf` diff --git a/Unix/ventoy_unix/FreeBSD/geom_ventoy_ko/13.x/64/geom_ventoy.ko.xz b/Unix/ventoy_unix/FreeBSD/geom_ventoy_ko/13.x/64/geom_ventoy.ko.xz index 537592ebf1a87be506ba2e5800364c1cf371e7db..7bbca670265d1b60e4dd58c08a9e66ce55217816 100644 GIT binary patch literal 7664 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 +#if 1 /* On first open, grab an extra "exclusive" bit */ if (pp->acr == 0 && pp->acw == 0 && pp->ace == 0) de++; /* ... and let go of it on last close */ if ((pp->acr + dr) == 0 && (pp->acw + dw) == 0 && (pp->ace + de) == 0) de--; +#else + G_DEBUG("g_ventoy_access fake de (%d)-->(0)\n", de); + de = 0; +#endif LIST_FOREACH_SAFE(cp1, &gp->consumer, consumer, tmp) { error = g_access(cp1, dr, dw, de); @@ -835,6 +840,7 @@ g_ventoy_taste(struct g_class *mp, struct g_provider *pp, int flags __unused) int disknum; char *endpos; const char *value; + const char *alias = NULL; struct g_geom *gp; struct g_ventoy_metadata md; struct g_ventoy_softc *sc; @@ -858,7 +864,17 @@ g_ventoy_taste(struct g_class *mp, struct g_provider *pp, int flags __unused) g_ventoy_tasted = true; - G_DEBUG("######### ventoy disk <%s> #############\n", pp->name); + G_DEBUG("###### ventoy disk <%s> ######\n", pp->name); + + /* hint.ventoy.0.alias=xxx */ + if (resource_string_value("ventoy", 0, "alias", &alias) == 0) + { + G_DEBUG("###### ventoy alias <%s> ######\n", alias); + } + else + { + alias = NULL; + } if (VENTOY_MAP_VALID(g_ventoy_map_data.magic2)) { @@ -929,7 +945,12 @@ g_ventoy_taste(struct g_class *mp, struct g_provider *pp, int flags __unused) g_disk_map_end = 0; } - return (gp); + if (alias && sc && sc->sc_provider) + { + g_provider_add_alias(sc->sc_provider, "%s", alias); + } + + return (gp); } static void