X-Git-Url: https://glassweightruler.freedombox.rocks/gitweb/Ventoy.git/blobdiff_plain/ca62128f9bb4c349637be30cb8290919e03684f7..93996cf7e2b4c1a762131c02344b24c1bc89400a:/INSTALL/grub/grub.cfg diff --git a/INSTALL/grub/grub.cfg b/INSTALL/grub/grub.cfg index f57a20c..d62b71d 100644 --- a/INSTALL/grub/grub.cfg +++ b/INSTALL/grub/grub.cfg @@ -535,6 +535,10 @@ function uefi_windows_menu_func { vt_windows_chain_data "${1}${chosen_path}" ventoy_debug_pause + if vt_check_mode 4; then + vtoy_windows_wimboot_func + fi + if [ -n "$vtoy_chain_mem_addr" ]; then ventoy_acpi_param ${vtoy_chain_mem_addr} 2048 ventoy_cli_console @@ -805,23 +809,81 @@ function uefi_iso_memdisk { } -function legacy_windows_wimboot_func { - set wimbootfile=(loop)/sources/boot.wim - set wimbit=64 +function vtoy_windows_wimboot_func { + 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 + set vtoy_wimboot_prefix=(loop)/x86 + else + set vtoy_wimboot_prefix=(loop)/x64 + fi + else + set vtoy_wimboot_prefix=(loop) + if vt_is_pe64 $vtoy_wimboot_prefix/setup.exe; then + set vtoy_wimboot_bit=64 + else + set vtoy_wimboot_bit=32 + fi + fi + + if [ -n "${vtdebug_flag}" ]; then + echo vtoy_wimboot_prefix=$vtoy_wimboot_prefix vtoy_wimboot_bit=$vtoy_wimboot_bit + fi - vt_windows_wimboot_data + for wmfile in sources/boot.wim boot/bcd boot/boot.sdi; do + if [ ! -f $vtoy_wimboot_prefix/$wmfile ]; then + return + fi + done - linux16 $vtoy_efi_part/ventoy/wimboot quiet - ventoy_debug_pause + if [ -f $vtoy_wimboot_prefix/sources/install.wim -o -f $vtoy_wimboot_prefix/sources/install.esd ]; then + vt_windows_wimboot_data + else + return + fi - echo Loading files...... (This may take a few minutes, please wait.) - initrd16 newc:vtoyjump.exe:$vtoy_efi_part/ventoy/vtoyjump${wimbit}.exe \ - newc:wimboot.data:mem:${vtoy_wimboot_mem_addr}:size:${vtoy_wimboot_mem_size} \ - newc:winpeshl.ini:$vtoy_efi_part/ventoy/winpeshl.ini \ - newc:bcd:(loop)/boot/bcd \ - newc:boot.sdi:(loop)/boot/boot.sdi \ - newc:boot.wim:$wimbootfile - boot + if [ "$grub_platform" = "pc" ]; then + set vt_wimkernel=wimboot.x86_64.xz + + linux16 "$vtoy_path/$vt_wimkernel" quiet + ventoy_debug_pause + + echo Loading files...... (This may take a few minutes, please wait) + 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} \ + 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 + boot + else + if [ "$grub_cpu" = "i386" ]; then + set vt_wimkernel=wimboot.i386.efi.xz + else + set vt_wimkernel=wimboot.x86_64.xz + fi + + echo Loading files...... (This may take a few minutes, please wait) + vt_load_file_to_mem "nodecompress" $vtoy_wimboot_prefix/sources/boot.wim vtoy_wimfile_mem + 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/sources/boot.wim + fi + + 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=bcd:$vtoy_wimboot_prefix/boot/bcd" \ + "vf=boot.sdi:$vtoy_wimboot_prefix/boot/boot.sdi" \ + "vf=boot.wim:$vtoy_wimfile_path" \ + pfsize=$vtoy_chain_file_size \ + pfread=$vtoy_chain_file_read + boot + ventoy_gui_console + fi } function legacy_windows_menu_func { @@ -854,7 +916,7 @@ function legacy_windows_menu_func { ventoy_debug_pause if vt_check_mode 4; then - legacy_windows_wimboot_func + vtoy_windows_wimboot_func fi if [ -n "$vtoy_chain_mem_addr" ]; then