X-Git-Url: https://glassweightruler.freedombox.rocks/gitweb/Ventoy.git/blobdiff_plain/1f49265f29459295bc1b66c53da3de9e99a9370e..f7fac26c91a2efbb77b243ffd20e89e992ea1f71:/IMG/cpio/ventoy/hook/ventoy-hook-lib.sh diff --git a/IMG/cpio/ventoy/hook/ventoy-hook-lib.sh b/IMG/cpio/ventoy/hook/ventoy-hook-lib.sh index a22314f..88bfe73 100644 --- a/IMG/cpio/ventoy/hook/ventoy-hook-lib.sh +++ b/IMG/cpio/ventoy/hook/ventoy-hook-lib.sh @@ -31,6 +31,7 @@ HEAD=$BUSYBOX_PATH/head VTOY_DM_PATH=/dev/mapper/ventoy VTOY_DEBUG_LEVEL=$($BUSYBOX_PATH/hexdump -n 1 -s 450 -e '1/1 "%02x"' $VTOY_PATH/ventoy_os_param) VTOY_LINUX_REMOUNT=$($BUSYBOX_PATH/hexdump -n 1 -s 454 -e '1/1 "%02x"' $VTOY_PATH/ventoy_os_param) +VTOY_VLNK_BOOT=$($BUSYBOX_PATH/hexdump -n 1 -s 455 -e '1/1 "%02x"' $VTOY_PATH/ventoy_os_param) if [ "$VTOY_DEBUG_LEVEL" = "01" ]; then if [ -e /dev/console ]; then @@ -65,12 +66,16 @@ set_ventoy_hook_finish() { echo 'Y' > $VTOY_PATH/hook_finish } -get_ventoy_disk_name() { - line=$($VTOY_PATH/tool/vtoydump -f /ventoy/ventoy_os_param) - if [ $? -eq 0 ]; then - echo ${line%%#*} - else - echo "unknown" +get_ventoy_disk_name() { + if [ "$VTOY_VLNK_BOOT" = "01" ]; then + $VTOY_PATH/tool/vtoydump -t /ventoy/ventoy_os_param + else + line=$($VTOY_PATH/tool/vtoydump -f /ventoy/ventoy_os_param) + if [ $? -eq 0 ]; then + echo ${line%%#*} + else + echo "unknown" + fi fi } @@ -121,14 +126,6 @@ check_usb_disk_ready() { [ -e "${vtpart2}" ] } -is_ventoy_disk() { - if $VTOY_PATH/tool/vtoydump -f $VTOY_PATH/ventoy_os_param -c "$1"; then - $BUSYBOX_PATH/true - else - $BUSYBOX_PATH/false - fi -} - not_ventoy_disk() { if echo $1 | $EGREP -q "nvme.*p$|mmc.*p$|nbd.*p$"; then vtDiskName=${1:0:-1} @@ -136,10 +133,15 @@ not_ventoy_disk() { vtDiskName=$1 fi - if $VTOY_PATH/tool/vtoydump -f $VTOY_PATH/ventoy_os_param -c "$vtDiskName"; then - $BUSYBOX_PATH/false + if [ "$VTOY_VLNK_BOOT" = "01" ]; then + vtVtoyDisk=$($VTOY_PATH/tool/vtoydump -t $VTOY_PATH/ventoy_os_param) + [ "$vtVtoyDisk" != "/dev/$vtDiskName" ] else - $BUSYBOX_PATH/true + if $VTOY_PATH/tool/vtoydump -f $VTOY_PATH/ventoy_os_param -c "$vtDiskName"; then + $BUSYBOX_PATH/false + else + $BUSYBOX_PATH/true + fi fi } @@ -256,6 +258,8 @@ ventoy_dm_patch() { if echo $vtMType | $EGREP -i -q "x86.64|amd64"; then vtKoName=dm_patch_64.ko + elif echo $vtMType | $EGREP -i -q "i[3-6]86"; then + vtKoName=dm_patch_32.ko else vtlog "unsupported machine type $vtMType" return @@ -309,12 +313,28 @@ ventoy_dm_patch() { vtKv=$($BUSYBOX_PATH/uname -r) - vtModPath=$($FIND /lib/modules/$vtKv/kernel/fs/ -name "*.ko*" | $HEAD -n1) + + if [ ! -d /lib/modules/$vtKv ]; then + vtlog "No modules directory found" + return + elif [ -d /lib/modules/$vtKv/kernel/fs ]; then + vtModPath=$($FIND /lib/modules/$vtKv/kernel/fs/ -name "*.ko*" | $HEAD -n1) + else + vtModPath=$($FIND /lib/modules/$vtKv/kernel/ -name "xfs.ko*" | $HEAD -n1) + fi + + if [ -z "$vtModPath" ]; then + vtModPath=$($FIND /lib/modules/$vtKv/kernel/ -name "*.ko*" | $HEAD -n1) + fi + vtModName=$($BUSYBOX_PATH/basename $vtModPath) vtlog "template module is $vtModPath $vtModName" - if echo $vtModPath | $GREP -q "[.]ko$"; then + if [ -z "$vtModPath" ]; then + vtlog "No template module found" + return + elif echo $vtModPath | $GREP -q "[.]ko$"; then $BUSYBOX_PATH/cp -a $vtModPath $VTOY_PATH/$vtModName elif echo $vtModPath | $GREP -q "[.]ko[.]xz$"; then $BUSYBOX_PATH/xzcat $vtModPath > $VTOY_PATH/$vtModName @@ -785,7 +805,12 @@ is_inotify_ventoy_part() { fi if [ -e /dev/$vtShortName ]; then - $VTOY_PATH/tool/vtoydump -f $VTOY_PATH/ventoy_os_param -c $vtShortName + if [ "$VTOY_VLNK_BOOT" = "01" ]; then + vtOrgDiskName=$($VTOY_PATH/tool/vtoydump -t $VTOY_PATH/ventoy_os_param) + [ "$vtOrgDiskName" = "/dev/$vtShortName" ] + else + $VTOY_PATH/tool/vtoydump -f $VTOY_PATH/ventoy_os_param -c $vtShortName + fi return fi fi