X-Git-Url: https://glassweightruler.freedombox.rocks/gitweb/Ventoy.git/blobdiff_plain/433d854aab8e9c0904ca7e2f27aac54b83ff3b6f..1bf3e73373ccf4d515e4b554b5d8e233aaf1e6f3:/INSTALL/grub/grub.cfg diff --git a/INSTALL/grub/grub.cfg b/INSTALL/grub/grub.cfg index f2ea24f..33789ac 100644 --- a/INSTALL/grub/grub.cfg +++ b/INSTALL/grub/grub.cfg @@ -17,10 +17,8 @@ #************************************************************************************ function ventoy_pause { - if [ -n "${vtdebug_flag}" ]; then - echo "press Enter to continue ......" - read vtTmpPause - fi + echo "press Enter to continue ......" + read vtTmpPause } function ventoy_debug_pause { @@ -30,29 +28,20 @@ function ventoy_debug_pause { fi } -function ventoy_cli_console { - if [ "$grub_platform" = "pc" ]; then - #terminal_output vga_text +function ventoy_cli_console { + if [ -z "$vtoy_display_mode" ]; then + terminal_output console + elif [ "$vtoy_display_mode" = "GUI" ]; then terminal_output console - else - if [ "$vtoy_display_mode" != "CLI" ]; then - terminal_output console - fi fi } function ventoy_gui_console { - if [ "$grub_platform" = "pc" ]; then - if [ "$vtoy_display_mode" = "CLI" ]; then - terminal_output console - else - terminal_output gfxterm - fi - else - if [ "$vtoy_display_mode" != "CLI" ]; then - terminal_output gfxterm - fi - fi + if [ -z "$vtoy_display_mode" ]; then + terminal_output gfxterm + elif [ "$vtoy_display_mode" = "GUI" ]; then + terminal_output gfxterm + fi } function ventoy_power { @@ -168,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 @@ -217,6 +209,11 @@ function distro_specify_initrd_file_phase2 { if [ -f (loop)/parabola/boot/i686/parabolaiso.img ]; then vt_linux_specify_initrd_file /parabola/boot/i686/parabolaiso.img fi + elif [ -f (loop)/hyperbola/boot/x86_64/hyperiso.img ]; then + vt_linux_specify_initrd_file /hyperbola/boot/x86_64/hyperiso.img + if [ -f (loop)/hyperbola/boot/i686/hyperiso.img ]; then + vt_linux_specify_initrd_file /hyperbola/boot/i686/hyperiso.img + fi elif [ -f (loop)/EFI/BOOT/initrd.img ]; then #Qubes vt_linux_specify_initrd_file /EFI/BOOT/initrd.img @@ -227,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 } @@ -241,6 +240,14 @@ function ventoy_get_ghostbsd_ver { set vt_freebsd_ver=12.x } +function ventoy_get_furybsd_ver { + if regexp "13\.[0-9]" "$2"; then + set vt_freebsd_ver=13.x + else + set vt_freebsd_ver=12.x + fi +} + function ventoy_get_freenas_ver { set vt_freebsd_ver=11.x @@ -261,6 +268,8 @@ function ventoy_freebsd_proc { ventoy_get_ghostbsd_ver $1 ${chosen_path} elif vt_strstr "$vt_volume_id" "FREENAS"; then ventoy_get_freenas_ver $1 ${chosen_path} + elif vt_strstr "$vt_volume_id" "FURYBSD"; then + ventoy_get_furybsd_ver $1 ${chosen_path} elif regexp "^13_[0-9]" "$vt_volume_id"; then set vt_freebsd_ver=13.x elif regexp "^12_[0-9]" "$vt_volume_id"; then @@ -318,7 +327,7 @@ function ventoy_freebsd_proc { fi unset vt_unix_mod_path - for file in "/COPYRIGHT" "/FreeNAS-MANIFEST" "/version"; do + for file in "/COPYRIGHT" "/FreeNAS-MANIFEST" "/version" "/etc/fstab"; do if [ -e (loop)${file} ]; then set vt_unix_mod_path=${file} break @@ -400,8 +409,8 @@ function uefi_linux_menu_func { loopback loop $1$2 fi - vt_load_cpio ${vtoy_path}/ventoy.cpio $2 $1 - + vt_load_cpio ${vtoy_path}/ventoy.cpio $2 $1 "busybox=$ventoy_busybox_ver" + vt_linux_clear_initrd if [ -d (loop)/pmagic ]; then @@ -453,6 +462,8 @@ function uefi_linux_menu_func { elif [ -d (loop)/EFI/boot/entries ]; then if [ -f (loop)/parabola/boot/x86_64/parabolaiso.img ]; then vt_add_replace_file 0 "EFI\\parabolaiso\\parabolaiso.img" + elif [ -f (loop)/hyperbola/boot/x86_64/hyperiso.img ]; then + vt_add_replace_file 0 "EFI\\hyperiso\\hyperiso.img" fi elif [ -e (loop)/syslinux/alt0/full.cz ]; then vt_add_replace_file 0 "EFI\\BOOT\\full.cz" @@ -501,7 +512,7 @@ function uefi_iso_menu_func { unset LoadIsoEfiDriver fi - vt_chosen_img_path chosen_path + set chosen_path=$2 vt_select_auto_install ${chosen_path} vt_select_persistence ${chosen_path} @@ -512,8 +523,7 @@ function uefi_iso_menu_func { vt_iso9660_nojoliet 0 fi - loopback loop ${1}${chosen_path} - vt_parse_iso_volume ${1}${chosen_path} vt_system_id vt_volume_id + loopback loop ${1}${chosen_path} get_os_type (loop) if [ -d (loop)/EFI ]; then @@ -548,10 +558,8 @@ function uefi_iso_menu_func { } function uefi_iso_memdisk { - vt_chosen_img_path chosen_path - echo 'Loading ISO file to memory ...' - vt_load_iso_to_mem ${1}${chosen_path} vtoy_iso_buf + vt_load_img_memdisk ${1}${2} vtoy_iso_buf ventoy_cli_console chainloader ${vtoy_path}/ventoy_x64.efi memdisk env_param=${env_param} isoefi=${LoadIsoEfiDriver} ${vtdebug_flag} mem:${vtoy_iso_buf_addr}:size:${vtoy_iso_buf_size} @@ -608,7 +616,7 @@ function legacy_linux_menu_func { loopback loop $1$2 fi - vt_load_cpio $vtoy_path/ventoy.cpio $2 $1 + vt_load_cpio $vtoy_path/ventoy.cpio $2 $1 "busybox=$ventoy_busybox_ver" vt_linux_clear_initrd @@ -679,7 +687,7 @@ function legacy_iso_menu_func { loopback -d loop fi - vt_chosen_img_path chosen_path + set chosen_path=$2 vt_select_auto_install ${chosen_path} vt_select_persistence ${chosen_path} @@ -691,7 +699,7 @@ function legacy_iso_menu_func { fi loopback loop ${1}${chosen_path} - vt_parse_iso_volume ${1}${chosen_path} vt_system_id vt_volume_id + get_os_type (loop) if [ -n "$vtcompat" ]; then @@ -716,29 +724,80 @@ function legacy_iso_menu_func { } function legacy_iso_memdisk { - vt_chosen_img_path chosen_path linux16 $vtoy_path/memdisk iso raw echo "Loading ISO file to memory ..." - initrd16 ${1}${chosen_path} + initrd16 ${1}${2} boot } + +function iso_endless_os_proc { + if [ -d (loop)/ ]; then + loopback -d loop + fi + + loopback loop ${1}${2} + vt_img_sector ${1}${2} + + vt_load_cpio $vtoy_path/ventoy.cpio $2 $1 "busybox=$ventoy_busybox_ver" + vt_trailer_cpio $1 $2 noinit + + ventoy_debug_pause + + vt_set_boot_opt '@kparams' rdinit=/vtoy/vtoy + + set eosimage=loop + set ventoy_bls_bootdev=/boot + set ventoy_loading_tip="Loading files ......" + + export eosimage + configfile (loop)/endless/grub/grub.cfg + + unset eosimage + unset ventoy_bls_bootdev + unset ventoy_loading_tip + + vt_unset_boot_opt +} + + +function ventoy_iso_busybox_ver { + set ventoy_busybox_ver=32 + + #special process for deepin-live iso + if [ "$vt_chosen_size" = "403701760" ]; then + if vt_str_begin $vt_chosen_path "/deepin-live"; then + set ventoy_busybox_ver=64 + fi + fi +} + function iso_common_menuentry { unset vt_system_id unset vt_volume_id + vt_chosen_img_path vt_chosen_path vt_chosen_size + vt_parse_iso_volume ${vtoy_iso_part}${vt_chosen_path} vt_system_id vt_volume_id + + ventoy_iso_busybox_ver + + #special process for Endless OS + if vt_str_begin $vt_volume_id "Endless-OS"; then + iso_endless_os_proc $vtoy_iso_part $vt_chosen_path + fi + if [ "$grub_platform" = "pc" ]; then if vt_check_mode 0; then - legacy_iso_memdisk $vtoy_iso_part + legacy_iso_memdisk $vtoy_iso_part $vt_chosen_path else - legacy_iso_menu_func $vtoy_iso_part + legacy_iso_menu_func $vtoy_iso_part $vt_chosen_path fi else if vt_check_mode 0; then - uefi_iso_memdisk $vtoy_iso_part + uefi_iso_memdisk $vtoy_iso_part $vt_chosen_path else - uefi_iso_menu_func $vtoy_iso_part + uefi_iso_menu_func $vtoy_iso_part $vt_chosen_path fi fi } @@ -755,8 +814,8 @@ function iso_unsupport_menuentry { } function wim_common_menuentry { - vt_chosen_img_path chosen_path - vt_wim_chain_data ${vtoy_iso_part}${chosen_path} + vt_chosen_img_path vt_chosen_path vt_chosen_size + vt_wim_chain_data ${vtoy_iso_part}${vt_chosen_path} ventoy_debug_pause @@ -780,10 +839,14 @@ function wim_unsupport_menuentry { } function efi_common_menuentry { - vt_chosen_img_path chosen_path + vt_chosen_img_path vt_chosen_path vt_chosen_size + + vt_concat_efi_iso ${vtoy_iso_part}${vt_chosen_path} vtoy_iso_buf + + ventoy_debug_pause ventoy_cli_console - chainloader ${vtoy_iso_part}${chosen_path} + chainloader ${vtoy_path}/ventoy_x64.efi memdisk env_param=${env_param} isoefi=on ${vtdebug_flag} mem:${vtoy_iso_buf_addr}:size:${vtoy_iso_buf_size} boot ventoy_gui_console } @@ -792,7 +855,99 @@ function efi_unsupport_menuentry { common_unsupport_menuentry } +# +#============================================================# +# IMG file boot process # +#============================================================# +# + + +function ventoy_img_easyos { + 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 + + syslinux_configfile (vtimghd,1)/syslinux.cfg + + vt_img_unhook_root + vt_unset_boot_opt + loopback -d easysfs +} + +function ventoy_img_volumio { + 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 + + ventoy_debug_pause + + #boot image file + vt_set_boot_opt rdinit=/vtoy/vtoy imgpart=/dev/ventoy2 bootpart=/dev/ventoy1 + vt_img_hook_root + + syslinux_configfile (vtimghd,1)/syslinux.cfg + + vt_img_unhook_root + vt_unset_boot_opt +} + + +function img_common_menuentry { + set ventoy_busybox_ver=32 + + vt_chosen_img_path vt_chosen_path vt_chosen_size + + if [ -d (vtimghd)/ ]; then + loopback -d vtimghd + fi + + loopback vtimghd ${vtoy_iso_part}${vt_chosen_path} + vt_img_sector ${vtoy_iso_part}${vt_chosen_path} + + vt_img_part_info (vtimghd) + + set vtback_root=$root + ventoy_cli_console + vt_push_last_entry + + 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 + + + else + echo -e "\n This IMG file is NOT supported now. \n" + echo -e " 当前不支持启动此 IMG 文件 \n" + echo -e "\npress ENTER to exit (请按 回车 键返回) ..." + read vtInputKey + fi + + set root=$vtback_root + vt_pop_last_entry + ventoy_gui_console +} +function img_unsupport_menuentry { + common_unsupport_menuentry +} ############################################################# ############################################################# @@ -802,7 +957,7 @@ function efi_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 @@ -892,6 +1047,18 @@ fi if [ "$vtoy_display_mode" = "CLI" ]; then terminal_output console +elif [ "$vtoy_display_mode" = "serial" ]; then + if [ -n "$vtoy_serial_param" ]; then + serial $vtoy_serial_param + fi + terminal_input serial + terminal_output serial +elif [ "$vtoy_display_mode" = "serial_console" ]; then + if [ -n "$vtoy_serial_param" ]; then + serial $vtoy_serial_param + fi + terminal_input serial console + terminal_output serial console else if [ -n "$vtoy_theme" ]; then set theme=$vtoy_theme