diff --git a/GRUB2/MOD_SRC/grub-2.04/grub-core/Makefile.core.def b/GRUB2/MOD_SRC/grub-2.04/grub-core/Makefile.core.def index 2853b8e5..c76386f6 100644 --- a/GRUB2/MOD_SRC/grub-2.04/grub-core/Makefile.core.def +++ b/GRUB2/MOD_SRC/grub-2.04/grub-core/Makefile.core.def @@ -1533,7 +1533,7 @@ module = { name = squash4; common = fs/squash4.c; cflags = '$(CFLAGS_POSIX) -Wno-undef'; - cppflags = '-I$(srcdir)/lib/posix_wrap -I$(srcdir)/lib/xzembed -I$(srcdir)/lib/minilzo -DMINILZO_HAVE_CONFIG_H'; + cppflags = '-I$(srcdir)/lib/posix_wrap -I$(srcdir)/lib/xzembed -I$(srcdir)/lib/minilzo -I$(srcdir)/lib/zstd -DMINILZO_HAVE_CONFIG_H'; }; module = { diff --git a/GRUB2/MOD_SRC/grub-2.04/grub-core/fs/squash4.c b/GRUB2/MOD_SRC/grub-2.04/grub-core/fs/squash4.c index afeea668..5dbad6e1 100644 --- a/GRUB2/MOD_SRC/grub-2.04/grub-core/fs/squash4.c +++ b/GRUB2/MOD_SRC/grub-2.04/grub-core/fs/squash4.c @@ -27,6 +27,7 @@ #include #include #include +#include #include "xz.h" #include "xz_stream.h" @@ -184,6 +185,7 @@ enum COMPRESSION_LZO = 3, COMPRESSION_XZ = 4, COMPRESSION_LZ4 = 5, + COMPRESSION_ZSTD = 6, }; @@ -398,6 +400,33 @@ static grub_ssize_t lz4_decompress_wrap(char *inbuf, grub_size_t insize, grub_of return len; } +static grub_ssize_t zstd_decompress_wrap(char *inbuf, grub_size_t insize, grub_off_t off, + char *outbuf, grub_size_t len, struct grub_squash_data *data) +{ + char *udata = NULL; + int usize = data->blksz; + + if (off == 0) + { + ZSTD_decompress(outbuf, len, inbuf, insize); + } + else + { + if (usize < 8192) + usize = 8192; + + udata = grub_malloc (usize); + if (!udata) + return -1; + + ZSTD_decompress(udata, usize, inbuf, insize); + grub_memcpy(outbuf, udata + off, len); + grub_free(udata); + } + + return len; +} + static struct grub_squash_data * squash_mount (grub_disk_t disk) { @@ -447,6 +476,9 @@ squash_mount (grub_disk_t disk) case grub_cpu_to_le16_compile_time (COMPRESSION_LZ4): data->decompress = lz4_decompress_wrap; break; + case grub_cpu_to_le16_compile_time (COMPRESSION_ZSTD): + data->decompress = zstd_decompress_wrap; + break; case grub_cpu_to_le16_compile_time (COMPRESSION_XZ): data->decompress = xz_decompress; data->xzbuf = grub_malloc (XZBUFSIZ); diff --git a/IMG/cpio/ventoy/loop/LibreELEC/ventoy-disk.sh b/IMG/cpio/ventoy/loop/LibreELEC/ventoy-disk.sh index 027a4c64..8acbb36f 100644 --- a/IMG/cpio/ventoy/loop/LibreELEC/ventoy-disk.sh +++ b/IMG/cpio/ventoy/loop/LibreELEC/ventoy-disk.sh @@ -34,9 +34,12 @@ else vtBit=32 fi -xz -d $VTOY_PATH/vtloopex/dm-mod/$vtKerVer/$vtBit/dm-mod.ko.xz -insmod $VTOY_PATH/vtloopex/dm-mod/$vtKerVer/$vtBit/dm-mod.ko - +if [ -f $VTOY_PATH/vtloopex/dm-mod/$vtKerVer/$vtBit/dm-mod.ko.xz ]; then + xz -d $VTOY_PATH/vtloopex/dm-mod/$vtKerVer/$vtBit/dm-mod.ko.xz + insmod $VTOY_PATH/vtloopex/dm-mod/$vtKerVer/$vtBit/dm-mod.ko +elif [ -f $VTOY_PATH/modules/dm-mod.ko ]; then + insmod $VTOY_PATH/modules/dm-mod.ko +fi wait_for_usb_disk_ready diff --git a/INSTALL/grub/grub.cfg b/INSTALL/grub/grub.cfg index 496959d5..8389ab1c 100644 --- a/INSTALL/grub/grub.cfg +++ b/INSTALL/grub/grub.cfg @@ -1926,6 +1926,20 @@ function ventoy_img_openelec { loopback vtloopex $vtoy_efi_part/ventoy/vtloopex.cpio vt_img_extra_initrd_append (vtloopex)/$elec_ver/vtloopex.tar.xz + if [ "$elec_ver" = "LibreELEC" ]; then + if [ -f (vtimghd,1)/system ]; then + loopback elecsfs (vtimghd,1)/system + vt_get_lib_module_ver (elecsfs) /usr/lib/kernel-overlays/base/lib/modules/ vt_module_ver + if [ -n "$vt_module_ver" ]; then + for mod in "kernel/drivers/md/dm-mod.ko"; do + if [ -e (elecsfs)/usr/lib/kernel-overlays/base/lib/modules/$vt_module_ver/$mod ]; then + vt_img_extra_initrd_append (elecsfs)/usr/lib/kernel-overlays/base/lib/modules/$vt_module_ver/$mod + fi + done + fi + fi + fi + ventoy_debug_pause #boot image file @@ -1938,6 +1952,7 @@ function ventoy_img_openelec { vt_img_unhook_root vt_unset_boot_opt loopback -d vtloopex + loopback -d elecsfs }