X-Git-Url: https://glassweightruler.freedombox.rocks/gitweb/Ventoy.git/blobdiff_plain/b099547af66131d0335f77e7fbadbd8a75c3c7f2..261ddcef45ede2f9440342a5b3dd474e26df1679:/INSTALL/grub/grub.cfg diff --git a/INSTALL/grub/grub.cfg b/INSTALL/grub/grub.cfg index 48e4550..3e000d9 100644 --- a/INSTALL/grub/grub.cfg +++ b/INSTALL/grub/grub.cfg @@ -158,7 +158,7 @@ function get_os_type { function vt_check_compatible_pe { #Check for PE without external tools #set compatible if ISO file is less than 80MB - if [ $vt_chosen_size -gt 33554432 -a $vt_chosen_size -le 83886080 ]; then + if [ $vt_chosen_size -GT 33554432 -a $vt_chosen_size -LE 83886080 ]; then set ventoy_compatible=YES fi @@ -185,7 +185,7 @@ function locate_initrd { } function locate_wim { - vt_windows_locate_wim_patch (loop) + vt_windows_locate_wim_patch (loop) "$1" if [ -n "${vtdebug_flag}" ]; then echo '###############################################' @@ -381,7 +381,9 @@ function distro_specify_initrd_file_phase2 { vt_linux_specify_initrd_file /sysresccd/boot/i686/sysresccd.img elif [ -f (loop)/boot/full.cz ]; then vt_linux_specify_initrd_file /boot/full.cz - + elif [ -f (loop)/images/pxeboot/initrd.img ]; then + vt_linux_specify_initrd_file /images/pxeboot/initrd.img + fi } @@ -597,8 +599,12 @@ function ventoy_unix_comm_proc { function uefi_windows_menu_func { vt_windows_reset - if [ "$ventoy_compatible" = "NO" ]; then - + unset vt_cur_wimboot_mode + if vt_check_mode 4 "$vt_chosen_name"; then + set vt_cur_wimboot_mode=1 + fi + + if [ "$ventoy_compatible" = "NO" -o "$vt_cur_wimboot_mode" = "1" ]; then if [ "$ventoy_fs_probe" = "iso9660" ]; then loopback -d loop vt_iso9660_nojoliet 1 @@ -615,16 +621,16 @@ function uefi_windows_menu_func { fi ventoy_debug_pause - locate_wim + locate_wim "${chosen_path}" fi - + vt_windows_chain_data "${1}${chosen_path}" ventoy_debug_pause - - if vt_check_mode 4 "$vt_chosen_name"; then - vtoy_windows_wimboot_func + + if [ "$vt_cur_wimboot_mode" = "1" ]; then + vtoy_wimboot_func fi - + if [ -n "$vtoy_chain_mem_addr" ]; then ventoy_acpi_param ${vtoy_chain_mem_addr} 2048 ventoy_cli_console @@ -768,7 +774,7 @@ function uefi_linux_menu_func { vt_linux_chain_data "${1}${chosen_path}" - if [ -n "$LoadIsoEfiDriver" -a $vt_chosen_size -lt 104857600 ]; then + if [ -n "$LoadIsoEfiDriver" -a $vt_chosen_size -LT 104857600 ]; then if [ -f (loop)/efi/clover/cloverx64.efi ]; then unset LoadIsoEfiDriver fi @@ -781,6 +787,10 @@ function uefi_linux_menu_func { unset vtGrub2Mode if vt_check_mode 3 "$vt_chosen_name"; then set vtGrub2Mode=1 + elif vt_str_begin "$vt_volume_id" "HOLO_"; then + if [ -d (loop)/loader/entries ]; then + set vtGrub2Mode=1 + fi elif vt_str_begin "$vt_volume_id" "KRD"; then if [ -f (loop)/boot/grub/grub.cfg.sig ]; then set vtGrub2Mode=1 @@ -814,6 +824,18 @@ function uefi_linux_menu_func { break fi done + if [ $vtback_cfg_find -eq 0 ]; then + if [ -f (loop)/loader/loader.conf -a -d (loop)/loader/entries ]; then + if vt_str_begin "$vt_volume_id" "HOLO_"; then + set root=(loop,2) + vt_systemd_menu (loop,2) vt_sys_menu_mem + else + vt_systemd_menu (loop) vt_sys_menu_mem + fi + set vtback_cfg_find=1 + configfile "mem:${vt_sys_menu_mem_addr}:size:${vt_sys_menu_mem_size}" + fi + fi if [ "$vtback_cfg_find" = "0" ]; then echo " " @@ -910,6 +932,15 @@ 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 @@ -927,6 +958,7 @@ function uefi_iso_menu_func { fi ventoy_gui_console + vt_secondary_recover_mode } function uefi_iso_memdisk { @@ -940,8 +972,7 @@ function uefi_iso_memdisk { ventoy_gui_console } - -function vtoy_windows_wimboot_func { +function vtoy_windows_wimboot { if [ -f (loop)/x86/sources/boot.wim -a -f (loop)/x64/sources/boot.wim ]; then vt_sel_wimboot vtoy_wimboot_bit if [ "$vtoy_wimboot_bit" = "32" ]; then @@ -959,43 +990,24 @@ function vtoy_windows_wimboot_func { fi if [ -n "${vtdebug_flag}" ]; then - echo vtoy_wimboot_prefix=$vtoy_wimboot_prefix vtoy_wimboot_bit=$vtoy_wimboot_bit + echo vtoy_wimboot_prefix=$vtoy_wimboot_prefix vtoy_wimboot_bit=$vtoy_wimboot_bit vt_wimkernel=$vt_wimkernel fi - for wmfile in sources/boot.wim boot/bcd boot/boot.sdi; do - if [ ! -f $vtoy_wimboot_prefix/$wmfile ]; then - return - fi - done - - if [ -f $vtoy_wimboot_prefix/sources/install.wim -o -f $vtoy_wimboot_prefix/sources/install.esd ]; then - vt_windows_wimboot_data - else - return - fi + vt_windows_wimboot_data "$vtoy_wimboot_prefix/sources/boot.wim" vtoy_init_exe vtoy_wim_bit if [ "$grub_platform" = "pc" ]; then - set vt_wimkernel=wimboot.x86_64.xz - linux16 "$vtoy_path/$vt_wimkernel" quiet ventoy_debug_pause vt_set_wim_load_prompt 1 "Loading files......" - initrd16 newc:vtoyjump.exe:$vtoy_path/vtoyjump${vtoy_wimboot_bit}.exe \ - newc:wimboot.data:mem:${vtoy_wimboot_mem_addr}:size:${vtoy_wimboot_mem_size} \ - newc:winpeshl.ini:mem:${vtoy_winpeshl_ini_addr}:size:${vtoy_winpeshl_ini_size} \ + initrd16 newc:winpeshl.exe:mem:${vtoy_wimboot_mem_addr}:size:${vtoy_wimboot_mem_size} \ + newc:vtoy_wimboot:$vtoy_wimboot_prefix/boot/bcd \ newc:bcd:$vtoy_wimboot_prefix/boot/bcd \ newc:boot.sdi:$vtoy_wimboot_prefix/boot/boot.sdi \ newc:boot.wim:$vtoy_wimboot_prefix/sources/boot.wim vt_set_wim_load_prompt 0 boot else - if [ "$grub_cpu" = "i386" ]; then - set vt_wimkernel=wimboot.i386.efi.xz - else - set vt_wimkernel=wimboot.x86_64.xz - fi - vt_set_wim_load_prompt 1 "Loading files......" vt_load_file_to_mem "nodecompress" $vtoy_wimboot_prefix/sources/boot.wim vtoy_wimfile_mem vt_set_wim_load_prompt 0 @@ -1008,9 +1020,8 @@ function vtoy_windows_wimboot_func { ventoy_cli_console chainloader "$vtoy_path/$vt_wimkernel" quiet \ - "vf=wimboot.data:mem:${vtoy_wimboot_mem_addr}:size:${vtoy_wimboot_mem_size}" \ - "vf=winpeshl.ini:mem:${vtoy_winpeshl_ini_addr}:size:${vtoy_winpeshl_ini_size}" \ - "vf=vtoyjump.exe:$vtoy_path/vtoyjump${vtoy_wimboot_bit}.exe" \ + "vf=winpeshl.exe:mem:${vtoy_wimboot_mem_addr}:size:${vtoy_wimboot_mem_size}" \ + "vf=vtoy_wimboot:$vtoy_wimboot_prefix/boot/bcd" \ "vf=bcd:$vtoy_wimboot_prefix/boot/bcd" \ "vf=boot.sdi:$vtoy_wimboot_prefix/boot/boot.sdi" \ "vf=boot.wim:$vtoy_wimfile_path" \ @@ -1021,11 +1032,125 @@ function vtoy_windows_wimboot_func { fi } +function vtoy_winpe_wimboot { + unset vtoy_boot_sdi_legacy + unset vtoy_boot_sdi_efi + + set vtoy_wimboot_prefix=(loop) + set vtoy_wim_path="$1" + + if [ -n "${vtdebug_flag}" ]; then + echo "winpe_wimboot $1 $2 $3" + fi + + if [ "$2" != "0" ]; then + set vtoy_boot_sdi_legacy="newc:boot.sdi:$vtoy_wimboot_prefix/$2" + set vtoy_boot_sdi_efi="vf=boot.sdi:$vtoy_wimboot_prefix/$2" + fi + + vt_windows_wimboot_data $vtoy_wimboot_prefix/$vtoy_wim_path vtoy_init_exe vtoy_wim_bit + + if [ "$grub_platform" = "pc" ]; then + linux16 "$vtoy_path/$vt_wimkernel" quiet + ventoy_debug_pause + + vt_set_wim_load_prompt 1 "Loading files......" + initrd16 newc:$vtoy_init_exe:mem:${vtoy_wimboot_mem_addr}:size:${vtoy_wimboot_mem_size} \ + newc:vtoy_wimboot:$vtoy_path/$vt_wimkernel \ + newc:bootmgr.exe:mem:${vtoy_pe_bootmgr_mem_addr}:size:${vtoy_pe_bootmgr_mem_size} \ + newc:bcd:mem:${vtoy_pe_bcd_mem_addr}:size:${vtoy_pe_bcd_mem_size} \ + $vtoy_boot_sdi_legacy \ + newc:boot.wim:$vtoy_wimboot_prefix/$vtoy_wim_path + vt_set_wim_load_prompt 0 + boot + else + if [ "$VTOY_EFI_ARCH" = "x64" -a "$vtoy_wim_bit" = "32" ]; then + echo -e "\nThis is 32bit Windows and does NOT support x86_64 UEFI firmware.\n" + echo -e "这是32位的 Windows 系统,不支持当前的64位 UEFI 环境。\n" + fi + + vt_set_wim_load_prompt 1 "Loading files......" + vt_load_file_to_mem "nodecompress" $vtoy_wimboot_prefix/$vtoy_wim_path vtoy_wimfile_mem + vt_set_wim_load_prompt 0 + + if [ $? -eq 0 ]; then + set vtoy_wimfile_path=mem:${vtoy_wimfile_mem_addr}:size:${vtoy_wimfile_mem_size} + else + set vtoy_wimfile_path=$vtoy_wimboot_prefix/$vtoy_wim_path + fi + + unset vtoy_boot_efi_path + if [ -F (loop)/efi/boot/boot${VTOY_EFI_ARCH}.efi ]; then + set vtoy_boot_efi_path="vf=bootx64.efi:(loop)/efi/boot/boot${VTOY_EFI_ARCH}.efi" + fi + + ventoy_cli_console + chainloader "$vtoy_path/$vt_wimkernel" quiet \ + "vf=$vtoy_init_exe:mem:${vtoy_wimboot_mem_addr}:size:${vtoy_wimboot_mem_size}" \ + "vf=vtoy_wimboot:$vtoy_path/$vt_wimkernel" \ + "vf=bcd:mem:${vtoy_pe_bcd_mem_addr}:size:${vtoy_pe_bcd_mem_size}" \ + "$vtoy_boot_sdi_efi" \ + "$vtoy_boot_efi_path" \ + "vf=boot.wim:$vtoy_wimfile_path" \ + pfsize=$vtoy_chain_file_size \ + pfread=$vtoy_chain_file_read + boot + ventoy_gui_console + fi +} + +function vtoy_wimboot_func { + if [ "$grub_platform" = "pc" ]; then + set vt_wimkernel=wimboot.x86_64.xz + else + if [ "$grub_cpu" = "i386" ]; then + set vt_wimkernel=wimboot.i386.efi.xz + else + set vt_wimkernel=wimboot.x86_64.xz + fi + fi + + if vt_is_standard_winiso (loop); then + echo -e "\n==================== VENTOY WIMBOOT ==================\n" + vtoy_windows_wimboot + else + vt_sel_winpe_wim (loop) + if [ -n "$vtoy_pe_wim_path" ]; then + echo -e "\n==================== VENTOY WIMBOOT ==================\n" + + vt_fs_ignore_case 1 + vt_load_file_to_mem "auto" $vtoy_path/common_bcd.xz vtoy_pe_bcd_mem + + set vt_sdi_path=0 + for vsdi in "boot/boot.sdi" "2K10/FONTS/boot.sdi" "SSTR/boot.sdi" "ISPE/BOOT.SDI" \ + "boot/uqi.sdi" "ISYL/boot.sdi" "WEPE/WEPE.SDI" ; do + if [ -F "(loop)/$vsdi" ]; then + set vt_sdi_path=$vsdi + break + fi + done + + if [ "$grub_platform" = "pc" ]; then + vt_load_file_to_mem "auto" $vtoy_path/common_bootmgr.xz vtoy_pe_bootmgr_mem + vtoy_winpe_wimboot "$vtoy_pe_wim_path" "$vt_sdi_path" 1 + else + vtoy_winpe_wimboot "$vtoy_pe_wim_path" "$vt_sdi_path" 0 + fi + + vt_fs_ignore_case 0 + fi + fi +} + function legacy_windows_menu_func { vt_windows_reset - if [ "$ventoy_compatible" = "NO" ]; then - + unset vt_cur_wimboot_mode + if vt_check_mode 4 "$vt_chosen_name"; then + set vt_cur_wimboot_mode=1 + fi + + if [ "$ventoy_compatible" = "NO" -o "$vt_cur_wimboot_mode" = "1" ]; then if [ "$ventoy_fs_probe" = "iso9660" ]; then loopback -d loop vt_iso9660_nojoliet 1 @@ -1043,15 +1168,17 @@ function legacy_windows_menu_func { distro_specify_wim_patch_phase2 fi - ventoy_debug_pause - locate_wim + ventoy_debug_pause + if [ -z "$vt_cur_wimboot_mode" ]; then + locate_wim "${chosen_path}" + fi fi - + vt_windows_chain_data "${1}${chosen_path}" - ventoy_debug_pause - - if vt_check_mode 4 "$vt_chosen_name"; then - vtoy_windows_wimboot_func + ventoy_debug_pause + + if [ "$vt_cur_wimboot_mode" = "1" ]; then + vtoy_wimboot_func fi if [ -n "$vtoy_chain_mem_addr" ]; then @@ -1133,10 +1260,19 @@ function legacy_linux_menu_func { ventoy_debug_pause if [ -n "$vtoy_chain_mem_addr" ]; then + unset vtGrub2Mode if vt_check_mode 3 "$vt_chosen_name"; then + set vtGrub2Mode=1 + elif vt_str_begin "$vt_volume_id" "HOLO_"; then + if [ -d (loop)/loader/entries ]; then + set vtGrub2Mode=1 + fi + fi + + if [ -n "$vtGrub2Mode" ]; then ventoy_acpi_param ${vtoy_chain_mem_addr} 2048 ventoy_cli_console - + # fallback set vtback_root=$root vt_push_last_entry @@ -1155,6 +1291,18 @@ function legacy_linux_menu_func { break fi done + if [ $vtback_cfg_find -eq 0 ]; then + if [ -f (loop)/loader/loader.conf -a -d (loop)/loader/entries ]; then + if vt_str_begin "$vt_volume_id" "HOLO_"; then + set root=(loop,2) + vt_systemd_menu (loop,2) vt_sys_menu_mem + else + vt_systemd_menu (loop) vt_sys_menu_mem + fi + set vtback_cfg_find=1 + configfile "mem:${vt_sys_menu_mem_addr}:size:${vt_sys_menu_mem_size}" + fi + fi vt_unset_boot_opt set root=$vtback_root @@ -1218,6 +1366,15 @@ 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 @@ -1233,6 +1390,7 @@ function legacy_iso_menu_func { vt_check_compatible_linux (loop) legacy_linux_menu_func "$1" "${chosen_path}" fi + vt_secondary_recover_mode } function legacy_iso_memdisk { @@ -1307,7 +1465,7 @@ function iso_common_menuentry { vt_chosen_img_path vt_chosen_path vt_chosen_size vt_chosen_name vt_parse_iso_volume "${vtoy_iso_part}${vt_chosen_path}" vt_system_id vt_volume_id vt_volume_space - if [ $vt_volume_space -ne $vt_chosen_size ]; then + if [ $vt_volume_space -NE $vt_chosen_size ]; then vt_mod $vt_chosen_size 2048 vt_chosen_size_mod if [ $vt_chosen_size_mod -ne 0 ]; then echo -e "\n $vt_volume_space $vt_chosen_size $vt_chosen_size_mod\n" @@ -1355,7 +1513,7 @@ function iso_common_menuentry { fi #For iKuai8 (<64MB) - if [ $vt_chosen_size -le 67108864 ]; then + if [ $vt_chosen_size -LE 67108864 ]; then if vt_str_begin "$vt_chosen_name" "iKuai"; then set vtMemDiskBoot=1 fi @@ -1797,7 +1955,7 @@ function ventoy_img_ubos { } function ventoy_img_recalbox { - if [ $vtoy_img_max_part_end -gt $vt_chosen_size ]; then + if [ $vtoy_img_max_part_end -GT $vt_chosen_size ]; then echo -e "\nPlease extend the img file size before boot it. \n" ventoy_pause return @@ -2076,11 +2234,15 @@ function img_common_menuentry { if vt_str_begin "$vtImgHd3Label" "ROOT-"; then if [ -f (vtimghd,3)/etc/os-release.d/ID ]; then vt_1st_line (vtimghd,3)/etc/os-release.d/ID vt_release_line1 - if [ vt_str_begin "$vt_release_line1" "FydeOS" ]; then + if vt_str_begin "$vt_release_line1" "FydeOS"; then ventoy_img_fydeos + else + ventoy_img_cloudready fi elif [ -f (vtimghd,3)/etc/cloudready-release ]; then ventoy_img_cloudready + elif [ -f (vtimghd,3)/etc/chrome_dev.conf ]; then + ventoy_img_cloudready fi elif vt_str_begin "$vtImgHd1Label" "LAKKA"; then ventoy_img_openelec lakka @@ -2145,7 +2307,7 @@ function img_unsupport_menuentry { ############################################################# ############################################################# -set VENTOY_VERSION="1.0.76" +set VENTOY_VERSION="1.0.80" #ACPI not compatible with Window7/8, so disable by default set VTOY_PARAM_NO_ACPI=1 @@ -2203,6 +2365,11 @@ if [ "$vtoy_dev" = "tftp" ]; then done loadfont ascii + if [ -n "$vtoy_efi_part" ]; then + vt_load_file_to_mem "auto" $vtoy_efi_part/grub/fonts/unicode.pf2 vtoy_font_mem + loadfont mem:${vtoy_font_mem_addr}:size:${vtoy_font_mem_size} + fi + if [ -f $vtoy_iso_part/ventoy/ventoy.json ]; then set vt_plugin_path=$vtoy_iso_part else