]> glassweightruler.freedombox.rocks Git - Ventoy.git/blobdiff - INSTALL/grub/grub.cfg
1.0.89 release
[Ventoy.git] / INSTALL / grub / grub.cfg
index 10260146ff077ad588e6cb3ff3dd49fd2b53014e..496959d5222b3fd241f76dd90eeef6d21fbcc504 100644 (file)
@@ -19,7 +19,6 @@
 if [ "$grub_platform" = "pc" ]; then
     insmod setkey
     insmod regexp
-    insmod video_fb
 fi
 
 function ventoy_pause {
@@ -91,7 +90,7 @@ function ventoy_ext_menu {
         unset ventoy_new_context
     else
        echo "ventoy_grub.cfg NOT exist."
-       echo -V "VTMENU_ENTER_EXIT ..."
+       echo -en "\n$VTLANG_ENTER_EXIT ..."
        read vtInputKey
     fi
 }
@@ -120,13 +119,14 @@ function ventoy_show_help {
 }
 
 function ventoy_load_menu_lang_file {
-    vt_load_file_to_mem "auto" $vtoy_efi_part/grub/menu.tar.gz vtoy_menu_lang_mem
+    vt_load_file_to_mem "auto" $prefix/menu.tar.gz vtoy_menu_lang_mem
     loopback vt_menu_tarfs mem:${vtoy_menu_lang_mem_addr}:size:${vtoy_menu_lang_mem_size}    
 }
 
 function get_os_type {
     set vtoy_os=Linux
-    
+    export vtoy_os
+
     if vt_str_begin "$vt_volume_id" "DLC Boot"; then
         if [ -f (loop)/DLCBoot.exe ]; then
             set vtoy_os=Windows
@@ -227,6 +227,8 @@ function distro_specify_wim_patch {
 function distro_specify_wim_patch_phase2 {
     if [ -f (loop)/boot/boot.wim ]; then
         vt_windows_collect_wim_patch wim /boot/boot.wim
+    elif [ -f (loop)/sources/boot.wim ]; then
+        vt_windows_collect_wim_patch wim /sources/boot.wim
     fi
 
     if vt_str_begin "$vt_volume_id" "DLC Boot"; then
@@ -857,6 +859,9 @@ function uefi_linux_menu_func {
             if [ -f (loop)/boot/isolinux/syslnx64.cfg ]; then
                 syslinux_configfile (loop)/boot/isolinux/syslnx64.cfg
                 set vtback_cfg_find=1
+            elif [ -f (loop)/boot/syslinux/porteus.cfg ]; then
+                syslinux_configfile (loop)/boot/syslinux/porteus.cfg
+                set vtback_cfg_find=1
             fi
         fi
 
@@ -904,11 +909,6 @@ function ventoy_reset_nojoliet {
 }
 
 function uefi_iso_menu_func {
-
-    if [ -d (loop)/ ]; then
-        loopback -d loop
-    fi
-
     if [ -n "$vtisouefi" ]; then
         set LoadIsoEfiDriver=on
         unset vtisouefi
@@ -922,21 +922,13 @@ function uefi_iso_menu_func {
     vt_select_auto_install "${chosen_path}"
     vt_select_persistence "${chosen_path}"
 
-    if vt_is_udf "${1}${chosen_path}"; then
-        set ventoy_fs_probe=udf
-    else
-        set ventoy_fs_probe=iso9660
-        ventoy_reset_nojoliet
-
+    if ! vt_is_udf "${1}${chosen_path}"; then
         # Lenovo EasyStartup need an addional sector for boundary check
         if vt_str_begin "$vt_volume_id" "EasyStartup"; then
             vt_skip_svd "${vtoy_iso_part}${vt_chosen_path}"
             vt_append_extra_sector 1
         fi
     fi
-
-    loopback loop "${1}${chosen_path}"
-    get_os_type (loop)
     
     if [ -d (loop)/EFI ]; then
         set vt_efi_dir=YES
@@ -955,15 +947,6 @@ function uefi_iso_menu_func {
         vt_check_compatible (loop)        
     fi
     
-    if vt_need_secondary_menu "$vt_chosen_name"; then
-        vt_show_secondary_menu "$vt_chosen_path" "$vtoy_os" $vt_chosen_size
-        if vt_check_mode 0 "$vt_chosen_name"; then
-            uefi_iso_memdisk $vtoy_iso_part  "$vt_chosen_path"
-            vt_secondary_recover_mode
-            return
-        fi
-    fi
-    
     vt_img_sector "${1}${chosen_path}"
     
     if [ "$ventoy_fs_probe" = "iso9660" ]; then
@@ -980,8 +963,7 @@ function uefi_iso_menu_func {
         uefi_linux_menu_func  "$1" "${chosen_path}"
     fi
 
-    ventoy_gui_console
-    vt_secondary_recover_mode
+    ventoy_gui_console    
 }
 
 function uefi_iso_memdisk {    
@@ -1331,6 +1313,9 @@ function legacy_linux_menu_func {
                 if [ -f (loop)/boot/isolinux/syslnx64.cfg ]; then
                     syslinux_configfile (loop)/boot/isolinux/syslnx64.cfg
                     set vtback_cfg_find=1
+                elif [ -f (loop)/boot/syslinux/porteus.cfg ]; then
+                    syslinux_configfile (loop)/boot/syslinux/porteus.cfg
+                    set vtback_cfg_find=1
                 fi
             fi
 
@@ -1366,26 +1351,10 @@ function legacy_unix_menu_func {
 
 
 function legacy_iso_menu_func {
-
-    if [ -d (loop)/ ]; then
-        loopback -d loop
-    fi
-
     set chosen_path="$2"
     
     vt_select_auto_install "${chosen_path}"
     vt_select_persistence "${chosen_path}"
-
-    if vt_is_udf "${1}${chosen_path}"; then
-        set ventoy_fs_probe=udf
-    else
-        set ventoy_fs_probe=iso9660
-        ventoy_reset_nojoliet
-    fi
-    
-    loopback loop "${1}${chosen_path}"
-    
-    get_os_type (loop)
     
     if [ -n "$vtcompat" ]; then
         set ventoy_compatible=YES
@@ -1396,15 +1365,6 @@ function legacy_iso_menu_func {
         vt_check_compatible (loop)
     fi
     
-    if vt_need_secondary_menu "$vt_chosen_name"; then
-        vt_show_secondary_menu "$vt_chosen_path" "$vtoy_os" $vt_chosen_size  
-        if vt_check_mode 0 "$vt_chosen_name"; then
-            legacy_iso_memdisk $vtoy_iso_part  "$vt_chosen_path"
-            vt_secondary_recover_mode
-            return
-        fi        
-    fi
-
     vt_img_sector "${1}${chosen_path}"
 
     if [ "$ventoy_fs_probe" = "iso9660" ]; then
@@ -1501,7 +1461,7 @@ function iso_common_menuentry {
             echo -e "\n $vt_volume_space $vt_chosen_size $vt_chosen_size_mod\n"
             echo -e "\n The size of the iso file \"$vt_chosen_size\" is invalid. File corrupted ?\n"
             echo -e " 此ISO文件的大小 \"$vt_chosen_size\" 有问题,请确认文件是否损坏。\n"
-            echo -v "VTMENU_ENTER_CONTINUE ..."
+            echo -en "\n$VTLANG_ENTER_CONTINUE ..."
             read vtInputKey
         fi
     fi
@@ -1513,6 +1473,33 @@ function iso_common_menuentry {
     if ventoy_vcfg_proc "${vt_chosen_path}"; then        
         return
     fi
+    
+    
+    
+    #secondary boot menu
+    if vt_is_udf "${vtoy_iso_part}${vt_chosen_path}"; then
+        set ventoy_fs_probe=udf
+    else
+        set ventoy_fs_probe=iso9660
+        ventoy_reset_nojoliet
+    fi
+    
+    if [ -d (loop)/ ]; then
+        loopback -d loop
+    fi
+    loopback loop "${vtoy_iso_part}${vt_chosen_path}" 
+    
+    get_os_type (loop)
+    
+    ventoy_debug_pause
+    
+    if vt_need_secondary_menu "$vt_chosen_name"; then
+        vt_show_secondary_menu "$vt_chosen_path" "$vtoy_os" $vt_chosen_size
+        if [ "$VTOY_SECOND_EXIT" = "1" ]; then
+            return
+        fi
+    fi
+
 
     if vt_str_begin "$vt_volume_id" "Avira"; then 
         vt_skip_svd "${vtoy_iso_part}${vt_chosen_path}"
@@ -1564,7 +1551,9 @@ function iso_common_menuentry {
         else
             uefi_iso_menu_func $vtoy_iso_part  "$vt_chosen_path"
         fi
-    fi      
+    fi
+
+    vt_secondary_recover_mode
 }
 
 function miso_common_menuentry {
@@ -1589,7 +1578,7 @@ function miso_common_menuentry {
 function common_unsupport_menuentry {
     echo -e "\n The name of the iso file could NOT contain space or non-ascii characters. \n"
     echo -e " 文件名中不能有中文或空格 \n"    
-    echo -V "VTMENU_ENTER_EXIT ..."    
+    echo -en "\n$VTLANG_ENTER_EXIT ..."  
     read vtInputKey
 }
 
@@ -1736,7 +1725,7 @@ function vhd_common_menuentry {
                 echo -e "!!! WARNING !!!\n"
                 echo -e "\nPartition1 ($vtoy_iso_fs) is NOT ntfs, the VHD(x) file may not boot normally \n"
                 echo -e "\nVHD(x) 文件所在分区不是 ntfs 格式, 可能无法正常启动 \n\n"
-                echo -vn "VTMENU_ENTER_CONTINUE ..."    
+                echo -en "\n$VTLANG_ENTER_CONTINUE ..."
                 read vtInputKey
             fi
         fi
@@ -1845,7 +1834,7 @@ function vtoy_unsupport_menuentry {
 
 function only_uefi_tip {
     echo -e "\n This IMG file is only supported in UEFI mode. \n"
-    echo -V "VTMENU_ENTER_EXIT ..."
+    echo -en "\n$VTLANG_ENTER_EXIT ..."
     read vtInputKey 
 }
 
@@ -2103,7 +2092,7 @@ function ventoy_img_openwrt {
             ventoy_gui_console
             echo -e "\n ventoy_openwrt.xz not found. Please refer https://www.ventoy.net/en/doc_openwrt.html.\n"
             echo -e " 未找到 ventoy_openwrt.xz 文件。请参考 https://www.ventoy.net/cn/doc_openwrt.html\n"
-            echo -V "VTMENU_ENTER_EXIT ..."
+            echo -en "\n$VTLANG_ENTER_EXIT ..."
             read vtInputKey
             ventoy_cli_console
             return
@@ -2227,6 +2216,23 @@ function ventoy_img_cloudready {
     unset linuxpartB
 }
 
+
+function ventoy_img_fwts {
+    vt_load_cpio  $vtoy_path  "${vt_chosen_path}" ${vtoy_iso_part} "busybox=$ventoy_busybox_ver"
+    vt_trailer_cpio ${vtoy_iso_part} "${vt_chosen_path}" noinit
+
+    ventoy_debug_pause
+
+    #boot image file
+    vt_set_boot_opt rdinit=/vtoy/vtoy ventoyos=fwts
+    vt_img_hook_root
+    
+    configfile $prefix/distro/fwts.cfg
+
+    vt_img_unhook_root
+    vt_unset_boot_opt
+}
+
 function ventoy_img_memtest86 {      
     chainloader (vtimghd,1)/efi/boot/BOOTX64.efi
     boot
@@ -2235,7 +2241,7 @@ function ventoy_img_memtest86 {
 function img_unsupport_tip {
     echo -e "\n This IMG file is NOT supported now. \n"
     echo -e " 当前不支持启动此 IMG 文件 \n"    
-    echo -V "VTMENU_ENTER_EXIT ..."
+    echo -en "\n$VTLANG_ENTER_EXIT ..."
     read vtInputKey 
 }
 
@@ -2292,6 +2298,12 @@ function img_common_menuentry {
         vt_get_fs_label (vtimghd,2) vtImgHd2Label
     fi
 
+    if [ -z "$vtImgHd1Label" ]; then
+        if [ -d (vtimghd,2)/efi ]; then
+            vt_get_fs_label (vtimghd,3) vtImgHd3Label
+        fi
+    fi
+
     if [ -e (vtimghd,1)/etc/hostname ]; then
         vt_1st_line (vtimghd,1)/etc/hostname vtImgHostname
     fi
@@ -2309,6 +2321,8 @@ function img_common_menuentry {
         elif [ -f (vtimghd,3)/etc/chrome_dev.conf ]; then
             ventoy_img_cloudready
         fi
+    elif vt_str_begin "$vtImgHd3Label" "fwts-result"; then
+        ventoy_img_fwts
     elif vt_str_begin "$vtImgHd1Label" "LAKKA"; then
         ventoy_img_openelec lakka
     elif vt_str_begin "$vtImgHd1Label" "LIBREELEC"; then
@@ -2397,7 +2411,7 @@ function mimg_common_menuentry {
 #############################################################
 #############################################################
 
-set VENTOY_VERSION="1.0.84"
+set VENTOY_VERSION="1.0.89"
 
 #ACPI not compatible with Window7/8, so disable by default
 set VTOY_PARAM_NO_ACPI=1
@@ -2555,7 +2569,20 @@ elif [ "$vtoy_display_mode" = "serial_console" ]; then
     fi
     terminal_input   serial console
     terminal_output  serial console    
-else    
+else
+    if [ "$vtoy_gfxmode" = "max" ]; then
+        set gfxmode=1024x768
+        terminal_output  gfxterm
+
+        vt_enum_video_mode
+        vt_get_video_mode 0 vtCurMode
+        terminal_output console
+        set gfxmode=$vtCurMode
+        terminal_output gfxterm
+    elif [ "$vtoy_res_fit" = "1" ]; then
+        terminal_output  gfxterm
+    fi    
+
     if [ -n "$vtoy_theme" ]; then
         vt_set_theme
     else