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
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
}
[ -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}
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
}
ventoy_need_dm_patch() {
if [ "$VTOY_LINUX_REMOUNT" != "01" ]; then
- $BUSYBOX_PATH/false; return
+ if $GREP -q 'VTOY_LINUX_REMOUNT=1' /proc/cmdline; then
+ :
+ else
+ $BUSYBOX_PATH/false; return
+ fi
fi
if $GREP -q 'device-mapper' /proc/devices; then
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
$CAT /proc/kallsyms | $BUSYBOX_PATH/sort > $VTOY_PATH/kallsyms
- vtLine=$($VTOY_PATH/tool/vtoyksym dm_get_table_device $VTOY_PATH/kallsyms)
+ if $GREP -m1 -q 'open_table_device.isra' $VTOY_PATH/kallsyms; then
+ vtLine=$($VTOY_PATH/tool/vtoyksym open_table_device.isra $VTOY_PATH/kallsyms)
+ vtlog "get open_table_device.isra address $vtLine"
+ else
+ vtLine=$($VTOY_PATH/tool/vtoyksym dm_get_table_device $VTOY_PATH/kallsyms)
+ vtlog "get dm_get_table_device address $vtLine"
+ fi
get_addr=$(echo $vtLine | $AWK '{print $1}')
get_size=$(echo $vtLine | $AWK '{print $2}')
- vtLine=$($VTOY_PATH/tool/vtoyksym dm_put_table_device $VTOY_PATH/kallsyms)
+ if $GREP -m1 -q 'close_table_device.isra' $VTOY_PATH/kallsyms; then
+ vtLine=$($VTOY_PATH/tool/vtoyksym close_table_device.isra $VTOY_PATH/kallsyms)
+ vtlog "get close_table_device.isra address $vtLine"
+ else
+ vtLine=$($VTOY_PATH/tool/vtoyksym dm_put_table_device $VTOY_PATH/kallsyms)
+ vtlog "get dm_put_table_device address $vtLine"
+ fi
put_addr=$(echo $vtLine | $AWK '{print $1}')
put_size=$(echo $vtLine | $AWK '{print $2}')
vtKv=$($BUSYBOX_PATH/uname -r)
- if [ -d /lib/modules/$vtKv/kernel/fs ]; then
+ 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)
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
fi
#step1: modify vermagic/mod crc/relocation
+ vtlog "$VTOY_PATH/tool/vtoykmod -u $VTOY_PATH/tool/$vtKoName $VTOY_PATH/$vtModName $vtDebug"
$VTOY_PATH/tool/vtoykmod -u $VTOY_PATH/tool/$vtKoName $VTOY_PATH/$vtModName $vtDebug
#step2: fill parameters
vtPgsize=$($VTOY_PATH/tool/vtoyksym -p)
+ vtlog "$VTOY_PATH/tool/vtoykmod -f $VTOY_PATH/tool/$vtKoName $vtPgsize 0x$printk_addr 0x$ro_addr 0x$rw_addr $get_addr $get_size $put_addr $put_size 0x$kprobe_reg_addr 0x$kprobe_unreg_addr $vtDebug"
$VTOY_PATH/tool/vtoykmod -f $VTOY_PATH/tool/$vtKoName $vtPgsize 0x$printk_addr 0x$ro_addr 0x$rw_addr $get_addr $get_size $put_addr $put_size 0x$kprobe_reg_addr 0x$kprobe_unreg_addr $vtDebug
$BUSYBOX_PATH/insmod $VTOY_PATH/tool/$vtKoName
fi
if $GREP -q 'dm_patch' /proc/modules; then
+ vtlog "remove dm_patch module."
$BUSYBOX_PATH/rmmod dm_patch
fi
}
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
$BUSYBOX_PATH/insmod "$1"
fi
}
+
+ventoy_check_umount() {
+ for vtLoop in 0 1 2 3 4 5 6 7 8 9; do
+ $BUSYBOX_PATH/umount "$1" > /dev/null 2>&1
+ if $BUSYBOX_PATH/mountpoint -q "$1"; then
+ $SLEEP 1
+ else
+ break
+ fi
+ done
+}