diff --git a/GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy.c b/GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy.c index 51b81e6d..14915ccd 100644 --- a/GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy.c +++ b/GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy.c @@ -2829,6 +2829,60 @@ end: return rc; } +static grub_err_t ventoy_cmd_get_fs_label(grub_extcmd_context_t ctxt, int argc, char **args) +{ + int rc = 1; + char *device_name = NULL; + grub_device_t dev = NULL; + grub_fs_t fs = NULL; + char *label = NULL; + + (void)ctxt; + + if (argc != 2) + { + debug("ventoy_cmd_get_fs_label, invalid param num %d\n", argc); + return 1; + } + + device_name = grub_file_get_device_name(args[0]); + if (!device_name) + { + debug("grub_file_get_device_name failed, %s\n", args[0]); + goto end; + } + + dev = grub_device_open(device_name); + if (!dev) + { + debug("grub_device_open failed, %s\n", device_name); + goto end; + } + + fs = grub_fs_probe(dev); + if (!fs) + { + debug("grub_fs_probe failed, %s\n", device_name); + goto end; + } + + fs->fs_label(dev, &label); + if (label) + { + ventoy_set_env(args[1], label); + grub_free(label); + } + + rc = 0; + +end: + + check_free(device_name, grub_free); + check_free(dev, grub_device_close); + + return rc; +} + grub_uint64_t ventoy_grub_get_file_size(const char *fmt, ...) { grub_uint64_t size = 0; @@ -2973,6 +3027,7 @@ static cmd_para ventoy_cmds[] = { "vt_push_last_entry", ventoy_cmd_push_last_entry, 0, NULL, "", "", NULL }, { "vt_pop_last_entry", ventoy_cmd_pop_last_entry, 0, NULL, "", "", NULL }, { "vt_get_lib_module_ver", ventoy_cmd_lib_module_ver, 0, NULL, "", "", NULL }, + { "vt_get_fs_label", ventoy_cmd_get_fs_label, 0, NULL, "", "", NULL }, { "vt_find_first_bootable_hd", ventoy_cmd_find_bootable_hdd, 0, NULL, "", "", NULL }, { "vt_dump_menu", ventoy_cmd_dump_menu, 0, NULL, "", "", NULL }, diff --git a/IMG/cpio/ventoy/hook/crux/disk_hook.sh b/IMG/cpio/ventoy/hook/crux/disk_hook.sh new file mode 100644 index 00000000..e03374e6 --- /dev/null +++ b/IMG/cpio/ventoy/hook/crux/disk_hook.sh @@ -0,0 +1,40 @@ +#!/ventoy/busybox/sh +#************************************************************************************ +# Copyright (c) 2020, longpanda +# +# This program 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. +# +# This program 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 this program; if not, see . +# +#************************************************************************************ + +. /ventoy/hook/ventoy-hook-lib.sh + +for i in 0 1 2 3 4 5 6 7 8 9; do + vtdiskname=$(get_ventoy_disk_name) + if [ "$vtdiskname" = "unknown" ]; then + vtlog "wait for disk ..." + $SLEEP 3 + else + break + fi +done + +ventoy_extract_vtloopex /dev/${vtdiskname#/dev/}2 crux + +vtLoopExDir=$VTOY_PATH/vtloopex/crux/vtloopex +$BUSYBOX_PATH/xz -d $vtLoopExDir/dm-mod/$(uname -r)/64/dax.ko.xz +$BUSYBOX_PATH/xz -d $vtLoopExDir/dm-mod/$(uname -r)/64/dm-mod.ko.xz +$BUSYBOX_PATH/insmod $vtLoopExDir/dm-mod/$(uname -r)/64/dax.ko +$BUSYBOX_PATH/insmod $vtLoopExDir/dm-mod/$(uname -r)/64/dm-mod.ko + +ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2" diff --git a/IMG/cpio/ventoy/hook/crux/ventoy-hook.sh b/IMG/cpio/ventoy/hook/crux/ventoy-hook.sh new file mode 100644 index 00000000..8c5d048d --- /dev/null +++ b/IMG/cpio/ventoy/hook/crux/ventoy-hook.sh @@ -0,0 +1,22 @@ +#!/ventoy/busybox/sh +#************************************************************************************ +# Copyright (c) 2020, longpanda +# +# This program 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. +# +# This program 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 this program; if not, see . +# +#************************************************************************************ + +. $VTOY_PATH/hook/ventoy-os-lib.sh + +$SED "/find_and_mount_media.*(/a\ $BUSYBOX_PATH/sh $VTOY_PATH/hook/crux/disk_hook.sh" -i /init diff --git a/IMG/cpio/ventoy/hook/daphile/disk_hook.sh b/IMG/cpio/ventoy/hook/daphile/disk_hook.sh new file mode 100644 index 00000000..3f515bff --- /dev/null +++ b/IMG/cpio/ventoy/hook/daphile/disk_hook.sh @@ -0,0 +1,36 @@ +#!/ventoy/busybox/sh +#************************************************************************************ +# Copyright (c) 2020, longpanda +# +# This program 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. +# +# This program 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 this program; if not, see . +# +#************************************************************************************ + +. /ventoy/hook/ventoy-hook-lib.sh + +# Just for KVM test enviroment +$BUSYBOX_PATH/modprobe virtio_blk 2>/dev/null +$BUSYBOX_PATH/modprobe virtio_pci 2>/dev/null + +for i in 0 1 2 3 4 5 6 7 8 9; do + vtdiskname=$(get_ventoy_disk_name) + if [ "$vtdiskname" = "unknown" ]; then + vtlog "wait for disk ..." + $SLEEP 2 + else + break + fi +done + +ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2" "noreplace" diff --git a/IMG/cpio/ventoy/hook/daphile/ventoy-hook.sh b/IMG/cpio/ventoy/hook/daphile/ventoy-hook.sh new file mode 100644 index 00000000..176db16b --- /dev/null +++ b/IMG/cpio/ventoy/hook/daphile/ventoy-hook.sh @@ -0,0 +1,24 @@ +#!/ventoy/busybox/sh +#************************************************************************************ +# Copyright (c) 2020, longpanda +# +# This program 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. +# +# This program 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 this program; if not, see . +# +#************************************************************************************ + +. $VTOY_PATH/hook/ventoy-os-lib.sh + +$SED "/mount_boot /i\ $BUSYBOX_PATH/sh $VTOY_PATH/hook/gentoo/disk_hook.sh" -i /init + +$SED "s#'\.\*/block/mmcblk[^ ]*'#'\.\*/block/dm-[0-9]*'#" -i /init diff --git a/IMG/cpio/ventoy/hook/phoenixos/disk_hook.sh b/IMG/cpio/ventoy/hook/phoenixos/disk_hook.sh new file mode 100644 index 00000000..56b97b21 --- /dev/null +++ b/IMG/cpio/ventoy/hook/phoenixos/disk_hook.sh @@ -0,0 +1,47 @@ +#!/ventoy/busybox/sh +#************************************************************************************ +# Copyright (c) 2020, longpanda +# +# This program 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. +# +# This program 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 this program; if not, see . +# +#************************************************************************************ + +. /ventoy/hook/ventoy-hook-lib.sh + +if is_ventoy_hook_finished; then + exit 0 +fi + +VTPATH_OLD=$PATH; PATH=$BUSYBOX_PATH:$VTOY_PATH/tool:$PATH + +for i in 0 1 2 3 4 5 6 7 8 9; do + vtdiskname=$(get_ventoy_disk_name) + if [ "$vtdiskname" = "unknown" ]; then + vtlog "wait for disk ..." + sleep 3 + else + break + fi +done + +ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2" "noreplace" + +blkdev_num=$($VTOY_PATH/tool/dmsetup ls | grep ventoy | sed 's/.*(\([0-9][0-9]*\),.*\([0-9][0-9]*\).*/\1 \2/') +mknod -m 0666 /dev/ventoy b $blkdev_num + +set_ventoy_hook_finish + +PATH=$VTPATH_OLD + + diff --git a/IMG/cpio/ventoy/hook/phoenixos/ventoy-hook.sh b/IMG/cpio/ventoy/hook/phoenixos/ventoy-hook.sh new file mode 100644 index 00000000..0ead131c --- /dev/null +++ b/IMG/cpio/ventoy/hook/phoenixos/ventoy-hook.sh @@ -0,0 +1,24 @@ +#!/ventoy/busybox/sh +#************************************************************************************ +# Copyright (c) 2020, longpanda +# +# This program 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. +# +# This program 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 this program; if not, see . +# +#************************************************************************************ + +. $VTOY_PATH/hook/ventoy-os-lib.sh + +$BUSYBOX_PATH/mkdir /dev +$SED "/for device in/i\ $BUSYBOX_PATH/sh $VTOY_PATH/hook/phoenixos/disk_hook.sh" -i /init +$SED "s#for device in #for device in /dev/ventoy #" -i /init diff --git a/IMG/cpio/ventoy/hook/ventoy-hook-lib.sh b/IMG/cpio/ventoy/hook/ventoy-hook-lib.sh index c9bf3ae2..bb1cb315 100644 --- a/IMG/cpio/ventoy/hook/ventoy-hook-lib.sh +++ b/IMG/cpio/ventoy/hook/ventoy-hook-lib.sh @@ -532,3 +532,19 @@ ventoy_swap_device() { mv $VTOY_PATH/swap_tmp_dev $2 } +ventoy_extract_vtloopex() { + vtCurPwd=$PWD + $BUSYBOX_PATH/mkdir -p $VTOY_PATH/partmnt $VTOY_PATH/vtloopex + $BUSYBOX_PATH/mount -o ro -t vfat /dev/${vtdiskname#/dev/}2 $VTOY_PATH/partmnt + cd $VTOY_PATH/vtloopex + $CAT $VTOY_PATH/partmnt/ventoy/vtloopex.cpio | $BUSYBOX_PATH/cpio -idm + $BUSYBOX_PATH/umount $VTOY_PATH/partmnt + $BUSYBOX_PATH/rm -rf $VTOY_PATH/partmnt + + if [ -n "$2" ]; then + cd $VTOY_PATH/vtloopex/$2/ + $BUSYBOX_PATH/tar -xJf vtloopex.tar.xz + fi + + cd $vtCurPwd +} diff --git a/IMG/cpio/ventoy/ventoy_chain.sh b/IMG/cpio/ventoy/ventoy_chain.sh index d21d910c..f8f0f5df 100644 --- a/IMG/cpio/ventoy/ventoy_chain.sh +++ b/IMG/cpio/ventoy/ventoy_chain.sh @@ -47,6 +47,12 @@ ventoy_get_os_type() { echo "kernel version" >> $VTLOG $CAT /proc/version >> $VTLOG + if [ -d /twres ]; then + if $GREP -q 'Phoenix' /init; then + echo 'phoenixos'; return + fi + fi + # rhel5/CentOS5 and all other distributions based on them if $GREP -q 'el5' /proc/version; then echo 'rhel5'; return @@ -93,6 +99,10 @@ ventoy_get_os_type() { # gentoo elif $EGREP -q '[Gg]entoo' /proc/version; then + if $GREP -q 'daphile' /proc/version; then + echo 'daphile'; return + fi + echo 'gentoo'; return # TinyCore @@ -119,10 +129,14 @@ ventoy_get_os_type() { elif $GREP -q 'Alpine' /proc/version; then echo 'alpine'; return + elif $GREP -i -q 'PhoenixOS' /proc/version; then + echo 'phoenixos'; return + # NixOS elif $GREP -i -q 'NixOS' /proc/version; then echo 'nixos'; return + fi if [ -e /lib/debian-installer ]; then @@ -231,6 +245,10 @@ ventoy_get_os_type() { echo 'hyperbola'; return fi + if $GREP -q 'CRUX' /proc/version; then + echo 'crux'; return + fi + echo "default" } diff --git a/IMG/vtloopex/crux/vtloopex/dm-mod/4.19.48/64/dax.ko.xz b/IMG/vtloopex/crux/vtloopex/dm-mod/4.19.48/64/dax.ko.xz new file mode 100644 index 00000000..7b9e0df5 Binary files /dev/null and b/IMG/vtloopex/crux/vtloopex/dm-mod/4.19.48/64/dax.ko.xz differ diff --git a/IMG/vtloopex/crux/vtloopex/dm-mod/4.19.48/64/dm-mod.ko.xz b/IMG/vtloopex/crux/vtloopex/dm-mod/4.19.48/64/dm-mod.ko.xz new file mode 100644 index 00000000..bfefb617 Binary files /dev/null and b/IMG/vtloopex/crux/vtloopex/dm-mod/4.19.48/64/dm-mod.ko.xz differ diff --git a/INSTALL/EFI/BOOT/grubx64_real.efi b/INSTALL/EFI/BOOT/grubx64_real.efi index eb7a8471..a20cb695 100644 Binary files a/INSTALL/EFI/BOOT/grubx64_real.efi and b/INSTALL/EFI/BOOT/grubx64_real.efi differ diff --git a/INSTALL/grub/grub.cfg b/INSTALL/grub/grub.cfg index b85a31a8..33789ac9 100644 --- a/INSTALL/grub/grub.cfg +++ b/INSTALL/grub/grub.cfg @@ -157,6 +157,9 @@ function distro_specify_initrd_file { if [ -e (loop)/casper/initrd ]; then vt_linux_specify_initrd_file /casper/initrd fi + if [ -e (loop)/casper/initrd.gz ]; then + vt_linux_specify_initrd_file /casper/initrd.gz + fi if [ -e (loop)/casper/initrd-oem ]; then vt_linux_specify_initrd_file /casper/initrd-oem fi @@ -221,6 +224,8 @@ function distro_specify_initrd_file_phase2 { vt_linux_specify_initrd_file /initrd elif [ -f (loop)/live/initrd1 ]; then vt_linux_specify_initrd_file /live/initrd1 + elif vt_strstr $vt_volume_id "Daphile"; then + vt_linux_parse_initrd_isolinux (loop)/isolinux/ fi } @@ -899,36 +904,6 @@ function ventoy_img_volumio { vt_unset_boot_opt } -function ventoy_img_fydeos { - - set ventoy_busybox_ver=64 - - vt_load_cpio $vtoy_path/ventoy.cpio ${vt_chosen_path} ${vtoy_iso_part} "busybox=$ventoy_busybox_ver" - vt_trailer_cpio ${vtoy_iso_part} ${vt_chosen_path} noinit - - # loopback easysfs (vtimghd,1)/easy.sfs - # vt_get_lib_module_ver (easysfs) /lib/modules/ vt_module_ver - - # if [ -n "$vt_module_ver" ]; then - # for mod in "kernel/drivers/md/dm-mod.ko" "kernel/drivers/dax/dax.ko"; do - # vt_img_extra_initrd_append (easysfs)/lib/modules/$vt_module_ver/$mod - # done - # fi - - ventoy_debug_pause - - #boot image file - vt_set_boot_opt rdinit=/vtoy/vtoy - vt_img_hook_root - - set root=(vtimghd,12) - configfile (vtimghd,12)/efi/boot/grub.cfg - #syslinux_configfile (vtimghd,12)/syslinux/syslinux.cfg - - vt_img_unhook_root - vt_unset_boot_opt -} - function img_common_menuentry { set ventoy_busybox_ver=32 @@ -950,15 +925,14 @@ function img_common_menuentry { vt_img_extra_initrd_reset + #vt_get_fs_label (vtimghd,1) vtImgHd1Label + if [ -e (vtimghd,1)/easy.sfs ]; then ventoy_img_easyos elif [ -e (vtimghd,1)/volumio.initrd ]; then ventoy_img_volumio - elif [ -e (vtimghd,3)/etc/os-release ]; then - if vt_file_strstr (vtimghd,3)/etc/os-release FydeOS; then - ventoy_img_fydeos - fi - + + else echo -e "\n This IMG file is NOT supported now. \n" echo -e " 当前不支持启动此 IMG 文件 \n" @@ -983,7 +957,7 @@ function img_unsupport_menuentry { ############################################################# ############################################################# -set VENTOY_VERSION="1.0.18" +set VENTOY_VERSION="1.0.19" # Default menu display mode, you can change it as you want. # 0: List mode diff --git a/INSTALL/grub/i386-pc/command.lst b/INSTALL/grub/i386-pc/command.lst index 832cd8a7..8571ae80 100644 --- a/INSTALL/grub/i386-pc/command.lst +++ b/INSTALL/grub/i386-pc/command.lst @@ -188,6 +188,8 @@ vbeinfo: videoinfo vbetest: videotest videoinfo: videoinfo videotest: videotest +vt_img_extra_initrd_append: linux +vt_img_extra_initrd_reset: linux vt_set_boot_opt: linux vt_unset_boot_opt: linux write_byte: memrw diff --git a/INSTALL/grub/i386-pc/core.img b/INSTALL/grub/i386-pc/core.img index eec9e4ee..60b90322 100644 Binary files a/INSTALL/grub/i386-pc/core.img and b/INSTALL/grub/i386-pc/core.img differ diff --git a/INSTALL/grub/i386-pc/syslinuxcfg.mod b/INSTALL/grub/i386-pc/syslinuxcfg.mod index 0756a05d..3f3252b2 100644 Binary files a/INSTALL/grub/i386-pc/syslinuxcfg.mod and b/INSTALL/grub/i386-pc/syslinuxcfg.mod differ diff --git a/INSTALL/grub/x86_64-efi/command.lst b/INSTALL/grub/x86_64-efi/command.lst index c5429251..343d1709 100644 --- a/INSTALL/grub/x86_64-efi/command.lst +++ b/INSTALL/grub/x86_64-efi/command.lst @@ -177,6 +177,8 @@ true: true usb: usbtest videoinfo: videoinfo videotest: videotest +vt_img_extra_initrd_append: linux +vt_img_extra_initrd_reset: linux vt_set_boot_opt: linux vt_unset_boot_opt: linux write_byte: memrw diff --git a/INSTALL/grub/x86_64-efi/syslinuxcfg.mod b/INSTALL/grub/x86_64-efi/syslinuxcfg.mod index fc621e99..971c2094 100644 Binary files a/INSTALL/grub/x86_64-efi/syslinuxcfg.mod and b/INSTALL/grub/x86_64-efi/syslinuxcfg.mod differ diff --git a/INSTALL/ventoy/ventoy.cpio b/INSTALL/ventoy/ventoy.cpio index a6a97d49..bd1241f2 100644 Binary files a/INSTALL/ventoy/ventoy.cpio and b/INSTALL/ventoy/ventoy.cpio differ diff --git a/INSTALL/ventoy/vtloopex.cpio b/INSTALL/ventoy/vtloopex.cpio index aefe96e1..763a0374 100644 Binary files a/INSTALL/ventoy/vtloopex.cpio and b/INSTALL/ventoy/vtloopex.cpio differ