]> glassweightruler.freedombox.rocks Git - Ventoy.git/commitdiff
1.1.01 v1.1.01
authorlongpanda <admin@ventoy.net>
Mon, 10 Feb 2025 12:14:46 +0000 (20:14 +0800)
committerlongpanda <admin@ventoy.net>
Mon, 10 Feb 2025 12:14:46 +0000 (20:14 +0800)
12 files changed:
IMG/cpio/ventoy/hook/ventoy-hook-lib.sh
IMG/cpio/ventoy/loop/batocera/ventoy-disk.sh
IMG/cpio_x86/ventoy/tool/dm_patch_32.ko [deleted file]
IMG/cpio_x86/ventoy/tool/dm_patch_64.ko [deleted file]
IMG/cpio_x86/ventoy/tool/dm_patch_ibt_64.ko [deleted file]
INSTALL/grub/debug.cfg
INSTALL/grub/grub.cfg
VtoyTool/vtoydm.c
VtoyTool/vtoytool/00/vtoytool_32
VtoyTool/vtoytool/00/vtoytool_64
VtoyTool/vtoytool/00/vtoytool_aa64
VtoyTool/vtoytool/00/vtoytool_m64e

index 5c778e8c8c293063b045ee8b3be2a63b3bcfb44f..11b1e57bee27239ee958d704b08a080e4f72a0a1 100644 (file)
@@ -232,257 +232,6 @@ ventoy_check_dm_module() {
     fi
 }
 
-ventoy_need_proc_ibt() {
-    vtKv=$($BUSYBOX_PATH/uname -r)
-    vtMajor=$(echo $vtKv | $AWK -F. '{print $1}')
-    vtMinor=$(echo $vtKv | $AWK -F. '{print $2}')
-    
-    #ibt was supported since linux kernel 5.18
-    if [ $vtMajor -lt 5 ]; then
-        $BUSYBOX_PATH/false; return
-    elif [ $vtMajor -eq 5 ]; then
-        if [ $vtMajor -lt 18 ]; then
-            $BUSYBOX_PATH/false; return
-        fi
-    fi
-    
-    if $GREP -q ' ibt=off' /proc/cmdline; then
-        $BUSYBOX_PATH/false; return
-    fi
-
-    #hardware CPU doesn't support IBT
-    if $VTOY_PATH/tool/vtoykmod -I; then
-        :
-    else
-        $BUSYBOX_PATH/false; return
-    fi
-    
-    #dot.CONFIG not enabled
-    if $GREP -q ' ibt_restore$' /proc/kallsyms; then
-        :
-    else
-        $BUSYBOX_PATH/false; return
-    fi
-    
-    $BUSYBOX_PATH/true
-}
-
-
-ventoy_need_dm_patch() {
-    if [ "$VTOY_LINUX_REMOUNT" != "01" ]; then
-        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
-        :
-    else
-        $BUSYBOX_PATH/false; return
-    fi
-    
-    if $GREP -q 'dm_patch' /proc/modules; then
-        $BUSYBOX_PATH/false; return
-    fi
-    
-    vtMajorVer=$($BUSYBOX_PATH/uname -r | $AWK -F. '{print $1}')
-    vtMinorVer=$($BUSYBOX_PATH/uname -r | $AWK -F. '{print $2}')
-
-    if [ $vtMajorVer -lt 3 ]; then
-        $BUSYBOX_PATH/false; return
-    elif [ $vtMajorVer -eq 3 -a $vtMinorVer -lt 10 ]; then
-        $BUSYBOX_PATH/false; return
-    fi
-    
-    
-    $BUSYBOX_PATH/true
-}
-
-ventoy_dm_patch() {
-    vtDmPatchDebug=0
-    vtMType=$($BUSYBOX_PATH/uname -m)
-
-    vtlog "######### 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
-    fi
-
-    if ventoy_need_proc_ibt; then
-        vtlog "need to proc IBT"
-        vtKoName=dm_patch_ibt_64.ko
-        vtIBT='0x8888'
-    else
-        vtlog "NO need to proc IBT"
-        vtIBT='0'
-    fi 
-
-
-    if [ -f $VTOY_PATH/tool/$vtKoName ]; then
-        vtlog "/ventoy/tool/$vtKoName exist OK"
-    else
-        vtlog "/ventoy/tool/$vtKoName NOT exist"
-        return
-    fi
-    
-    $CAT /proc/kallsyms | $BUSYBOX_PATH/sort > $VTOY_PATH/kallsyms
-    
-    if $GREP -m1 -q 'open_table_device.isra' $VTOY_PATH/kallsyms; then
-        vtISRA=$($GREP -m1 'open_table_device.isra' $VTOY_PATH/kallsyms | $AWK '{print $3}')
-        vtLine=$($VTOY_PATH/tool/vtoyksym $vtISRA $VTOY_PATH/kallsyms)
-        vtlog "get $vtISRA 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 blkdev_get_by_dev $VTOY_PATH/kallsyms) 
-    vtlog "get blkdev_get_by_dev address $vtLine"        
-    blkdev_get_addr=$(echo $vtLine | $AWK '{print $1}')
-    
-    vtLine=$($VTOY_PATH/tool/vtoyksym blkdev_put $VTOY_PATH/kallsyms) 
-    vtlog "get blkdev_put address $vtLine"        
-    blkdev_put_addr=$(echo $vtLine | $AWK '{print $1}')
-    
-    vtLine=$($VTOY_PATH/tool/vtoyksym bdev_open_by_dev $VTOY_PATH/kallsyms) 
-    vtlog "get bdev_open_by_dev address $vtLine"        
-    bdev_open_addr=$(echo $vtLine | $AWK '{print $1}')
-    
-    vtLine=$($VTOY_PATH/tool/vtoyksym bdev_file_open_by_dev $VTOY_PATH/kallsyms) 
-    vtlog "get bdev_file_open_by_dev address $vtLine"        
-    bdev_file_open_addr=$(echo $vtLine | $AWK '{print $1}')
-    
-
-    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}')
-    
-    ro_addr=$($GREP ' set_memory_ro$' /proc/kallsyms | $AWK '{print $1}')
-    rw_addr=$($GREP ' set_memory_rw$' /proc/kallsyms | $AWK '{print $1}')
-    kprobe_reg_addr=$($GREP ' register_kprobe$' /proc/kallsyms | $AWK '{print $1}')
-    kprobe_unreg_addr=$($GREP ' unregister_kprobe$' /proc/kallsyms | $AWK '{print $1}')
-    
-    if [ "$VTOY_DEBUG_LEVEL" = "01" ]; then
-        vtDmPatchDebug=1
-    fi
-    
-    if $GREP -q 'dmpatch_debug' /proc/cmdline; then
-        vtDmPatchDebug=1
-    fi
-    
-    
-    if [ $vtDmPatchDebug -eq 1 ]; then
-        printk_addr=$($GREP ' printk$' /proc/kallsyms | $AWK '{print $1}')
-        if [ -z "$printk_addr" ]; then
-            printk_addr=$($GREP ' _printk$' /proc/kallsyms | $AWK '{print $1}')
-        fi
-        vtDebug="-v"
-    else
-        printk_addr=0
-    fi
-    
-    #printk_addr=$($GREP ' printk$' /proc/kallsyms | $AWK '{print $1}')
-    #vtDebug="-v"
-    
-    vtlog get_addr=$get_addr  get_size=$get_size
-    vtlog put_addr=$put_addr  put_size=$put_size
-    vtlog blkdev_get_addr=$blkdev_get_addr blkdev_put_addr=$blkdev_put_addr
-    vtlog kprobe_reg_addr=$kprobe_reg_addr  kprobe_unreg_addr=$kprobe_unreg_addr
-    vtlog ro_addr=$ro_addr  rw_addr=$rw_addr  printk_addr=$printk_addr bdev_open_addr=$bdev_open_addr bdev_file_open_addr=$bdev_file_open_addr
-
-    if [ "$get_addr" = "0" -o "$put_addr" = "0" ]; then
-        vtlog "Invalid symbol address"
-        return
-    fi
-    if [ "$ro_addr" = "0" -o "$rw_addr" = "0" ]; then
-        vtlog "Invalid symbol address"
-        return
-    fi
-
-
-    vtKv=$($BUSYBOX_PATH/uname -r)
-    vtKVMajor=$(echo $vtKv | $AWK -F. '{print $1}')
-    vtKVMinor=$(echo $vtKv | $AWK -F. '{print $2}')
-    vtKVSubMinor=$(echo $vtKv | $AWK -F. '{print $3}')
-    
-    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)
-    elif [ -d /lib/modules/$vtKv/kernel ]; then
-        vtModPath=$($FIND /lib/modules/$vtKv/kernel/ -name "xfs.ko*" | $HEAD -n1)
-    elif [ -d /lib/modules/$vtKv/initrd ]; then
-        vtModPath=$($FIND /lib/modules/$vtKv/initrd/ -name "xfs.ko*" | $HEAD -n1)
-    fi
-
-
-    if [ -z "$vtModPath" ]; then
-        vtModPath=$($FIND /lib/modules/$vtKv/ -name "*.ko*" | $HEAD -n1)
-    fi
-
-    vtModName=$($BUSYBOX_PATH/basename $vtModPath)
-    
-    vtlog "template module is $vtModPath $vtModName"
-    
-    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
-    elif echo $vtModPath | $GREP -q "[.]ko[.]gz$"; then
-        $BUSYBOX_PATH/zcat $vtModPath > $VTOY_PATH/$vtModName
-    elif echo $vtModPath | $GREP -q "[.]ko[.]zst$"; then
-        $VTOY_PATH/tool/zstdcat $vtModPath > $VTOY_PATH/$vtModName
-    else
-        vtlog "unsupport module type"
-        return
-    fi
-    
-       
-    
-    #step1: modify vermagic/mod crc/relocation
-    vtlog "$VTOY_PATH/tool/vtoykmod -u $vtKVMajor $vtKVMinor $VTOY_PATH/tool/$vtKoName $VTOY_PATH/$vtModName $vtDebug"
-    $VTOY_PATH/tool/vtoykmod -u $vtKVMajor $vtKVMinor $VTOY_PATH/tool/$vtKoName $VTOY_PATH/$vtModName $vtDebug >>$VTLOG 2>&1
-    
-    #step2: fill parameters
-    vtPgsize=$($VTOY_PATH/tool/vtoyksym -p)
-    
-    vtPrams="$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 $vtKVMajor $vtIBT $vtKVMinor $blkdev_get_addr $blkdev_put_addr $vtKVSubMinor $bdev_open_addr $bdev_file_open_addr  $vtDebug"
-    
-    
-    vtlog "$VTOY_PATH/tool/vtoykmod -f $vtPrams"
-    $VTOY_PATH/tool/vtoykmod -f $vtPrams >>$VTLOG 2>&1
-
-
-    vtlog "insmod $VTOY_PATH/tool/$vtKoName"
-    $BUSYBOX_PATH/insmod $VTOY_PATH/tool/$vtKoName  >>$VTLOG 2>&1
-    
-    if $GREP -q 'dm_patch' /proc/modules; then
-        vtlog "dm_patch module OK"
-        echo "done" > $VTOY_PATH/dm_patch_done
-    else
-        vtlog "dm_patch module FAILED"
-    fi
-    
-}
 
 create_ventoy_device_mapper() {
     vtlog "create_ventoy_device_mapper $*"
@@ -502,28 +251,16 @@ create_ventoy_device_mapper() {
     fi
     
     $VTOY_PATH/tool/vtoydm -p -f $VTOY_PATH/ventoy_image_map -d $1 > $VTOY_PATH/ventoy_dm_table
-    
-    
-    vtLevel1=$($CAT /proc/sys/kernel/printk | $AWK '{print $1}')
-    vtLevel2=$($CAT /proc/sys/kernel/printk | $AWK '{print $2}')
-    vtLevel3=$($CAT /proc/sys/kernel/printk | $AWK '{print $3}')
-    vtLevel4=$($CAT /proc/sys/kernel/printk | $AWK '{print $4}')
-    if ventoy_need_dm_patch; then
-        ventoy_dm_patch
-        #suppress printk message
-        echo 0 $vtLevel2 0 $vtLevel4 > /proc/sys/kernel/printk
-    fi
+    $VTOY_PATH/tool/vtoydm -r -f $VTOY_PATH/ventoy_image_map -d $1 > $VTOY_PATH/ventoy_raw_table    
 
     if [ -z "$2" ]; then
         $VT_DM_BIN create ventoy $VTOY_PATH/ventoy_dm_table >>$VTLOG 2>&1
     else
         $VT_DM_BIN "$2" create ventoy $VTOY_PATH/ventoy_dm_table >>$VTLOG 2>&1
     fi
-
-    if ventoy_need_dm_patch; then    
-        #recover printk level
-        echo $vtLevel1 $vtLevel2 $vtLevel3 $vtLevel4 > /proc/sys/kernel/printk
-    fi
+    
+    RAWDISKNAME=$($HEAD -n1 $VTOY_PATH/ventoy_raw_table | $AWK '{print $4}')
+    $VT_DM_BIN create ${RAWDISKNAME#/dev/}  $VTOY_PATH/ventoy_raw_table >>$VTLOG 2>&1
 }
 
 create_persistent_device_mapper() {
@@ -543,24 +280,8 @@ create_persistent_device_mapper() {
         vterr "Error: no dm module avaliable"
     fi
     
-    $VTOY_PATH/tool/vtoydm -p -f $VTOY_PATH/ventoy_persistent_map -d $1 > $VTOY_PATH/persistent_dm_table    
-
-
-    vtLevel1=$($CAT /proc/sys/kernel/printk | $AWK '{print $1}')
-    vtLevel2=$($CAT /proc/sys/kernel/printk | $AWK '{print $2}')
-    vtLevel3=$($CAT /proc/sys/kernel/printk | $AWK '{print $3}')
-    vtLevel4=$($CAT /proc/sys/kernel/printk | $AWK '{print $4}')
-    if [ -f $VTOY_PATH/dm_patch_done ]; then
-        #suppress printk message
-        echo 0 $vtLevel2 0 $vtLevel4 > /proc/sys/kernel/printk
-    fi
-    
-    $VT_DM_BIN create vtoy_persistent $VTOY_PATH/persistent_dm_table >>$VTLOG 2>&1
-    
-    if [ -f $VTOY_PATH/dm_patch_done ]; then
-        #recover printk level
-        echo $vtLevel1 $vtLevel2 $vtLevel3 $vtLevel4 > /proc/sys/kernel/printk
-    fi
+    $VTOY_PATH/tool/vtoydm -p -f $VTOY_PATH/ventoy_persistent_map -d $1 > $VTOY_PATH/persistent_dm_table        
+    $VT_DM_BIN create vtoy_persistent $VTOY_PATH/persistent_dm_table >>$VTLOG 2>&1    
 }
 
 
@@ -853,12 +574,7 @@ ventoy_udev_disk_common_hook() {
     if [ -f $VTOY_PATH/ventoy_persistent_map ]; then
         create_persistent_device_mapper "/dev/$VTDISK"
         ventoy_create_persistent_link
-    fi
-    
-    if $GREP -q 'dm_patch' /proc/modules; then
-        vtlog "remove dm_patch module."
-        $BUSYBOX_PATH/rmmod dm_patch
-    fi
+    fi    
 }
 
 ventoy_create_dev_ventoy_part() {   
@@ -866,17 +582,7 @@ ventoy_create_dev_ventoy_part() {
     $BUSYBOX_PATH/mknod -m 0666 /dev/ventoy b $blkdev_num
     
     if [ -e /vtoy_dm_table ]; then
-        vtPartid=1
-        
-        vtLevel1=$($CAT /proc/sys/kernel/printk | $AWK '{print $1}')
-        vtLevel2=$($CAT /proc/sys/kernel/printk | $AWK '{print $2}')
-        vtLevel3=$($CAT /proc/sys/kernel/printk | $AWK '{print $3}')
-        vtLevel4=$($CAT /proc/sys/kernel/printk | $AWK '{print $4}')
-        if [ -f $VTOY_PATH/dm_patch_done ]; then
-            #suppress printk message
-            echo 0 $vtLevel2 0 $vtLevel4 > /proc/sys/kernel/printk
-        fi
-        
+        vtPartid=1                        
         $CAT /vtoy_dm_table | while read vtline; do
             echo $vtline > /ventoy/dm_table_part${vtPartid}
             $VTOY_PATH/tool/dmsetup create ventoy${vtPartid} /ventoy/dm_table_part${vtPartid}
@@ -886,11 +592,6 @@ ventoy_create_dev_ventoy_part() {
             
             vtPartid=$(expr $vtPartid + 1)
         done   
-
-        if [ -f $VTOY_PATH/dm_patch_done ]; then
-            #recover printk level
-            echo $vtLevel1 $vtLevel2 $vtLevel3 $vtLevel4 > /proc/sys/kernel/printk
-        fi
     fi
 }
 
index e9f8658762ee921994fd4b770ced4fb8385f532f..6281cc71e7db185f5511761d71c1250b45ef84da 100644 (file)
@@ -39,35 +39,6 @@ fi
 ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2" "noreplace"
 ventoy_create_dev_ventoy_part
 
-if ventoy_need_dm_patch; then
-    vtlog "extract a ko file"
-
-    mkdir -p /ventoy/tmpmnt1 /ventoy/tmpmnt2
-    mount /dev/ventoy1 /ventoy/tmpmnt1
-    mount /ventoy/tmpmnt1/boot/batocera /ventoy/tmpmnt2
-    vtKV=$(uname -r)
-    
-    mkdir -p /lib/modules/$vtKV/kernel/
-    vtKO=$(find "/ventoy/tmpmnt2/lib/modules/$vtKV/kernel/fs/" -name "*.ko*" | head -n1)    
-    cp -a $vtKO /lib/modules/$vtKV/kernel/
-    
-    vtlog "vtKV=$vtKV vtKO=$vtKO"
-    
-    umount /ventoy/tmpmnt2
-    umount /ventoy/tmpmnt1
-
-    vtPartid=1
-    cat /vtoy_dm_table | while read vtline; do
-        dmsetup remove ventoy$vtPartid
-        vtPartid=$(expr $vtPartid + 1)
-    done
-    dmsetup remove ventoy
-    
-    vtlog "Recreate device-mapper"
-    ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2" "noreplace"
-    ventoy_create_dev_ventoy_part
-fi
-
 
 PATH=$VTPATH_OLD
 
diff --git a/IMG/cpio_x86/ventoy/tool/dm_patch_32.ko b/IMG/cpio_x86/ventoy/tool/dm_patch_32.ko
deleted file mode 100644 (file)
index 0b4280d..0000000
Binary files a/IMG/cpio_x86/ventoy/tool/dm_patch_32.ko and /dev/null differ
diff --git a/IMG/cpio_x86/ventoy/tool/dm_patch_64.ko b/IMG/cpio_x86/ventoy/tool/dm_patch_64.ko
deleted file mode 100644 (file)
index 4253fca..0000000
Binary files a/IMG/cpio_x86/ventoy/tool/dm_patch_64.ko and /dev/null differ
diff --git a/IMG/cpio_x86/ventoy/tool/dm_patch_ibt_64.ko b/IMG/cpio_x86/ventoy/tool/dm_patch_ibt_64.ko
deleted file mode 100644 (file)
index cfbd46a..0000000
Binary files a/IMG/cpio_x86/ventoy/tool/dm_patch_ibt_64.ko and /dev/null differ
index a7d5cc2a78ff236b97860b2494125986daae4e6f..09b1992f898b4ad91091ac7249359e7a69a13656 100644 (file)
@@ -19,16 +19,7 @@ submenu "$VTLANG_CTRL_TEMP_SET" --class=debug_temp_set --class=F5tool {
         else
             set VTOY_WIN11_BYPASS_NRO=0
         fi
-    }
-    
-    menuentry "[ $VTOY_LINUX_REMOUNT ]  $VTLANG_LINUX_REMOUNT" --class=debug_temp_linux_remount --class=debug_temp_set --class=F5tool \
-        VTOY_RUN_SET2 {
-        if [ "$VTOY_LINUX_REMOUNT" = "0" ]; then
-            set VTOY_LINUX_REMOUNT=1
-        else
-            set VTOY_LINUX_REMOUNT=0
-        fi
-    }
+    }    
     
     menuentry "[ $VTOY_SECONDARY_BOOT_MENU ]  $VTLANG_SECONDARY_BOOT_MENU" --class=debug_temp_second_menu --class=debug_temp_set --class=F5tool \
         VTOY_RUN_SET3 {
index 1d4e554ad00bfc4cf4c4e55498253b310aed7b68..6fae2c041c1c550dd2732d66bb3a426684770355 100644 (file)
@@ -2401,7 +2401,7 @@ function mimg_common_menuentry {
 #############################################################
 #############################################################
 
-set VENTOY_VERSION="1.1.00"
+set VENTOY_VERSION="1.1.01"
 
 #ACPI not compatible with Window7/8, so disable by default
 set VTOY_PARAM_NO_ACPI=1
index 10308b2eeae138744e4eef2bbb8c35944bf92fe1..46de17268b83adc94c4e31ad75859821fdbac1b4 100644 (file)
@@ -68,6 +68,7 @@ static int verbose = 0;
 #define CMD_DUMP_ISO_INFO     3
 #define CMD_EXTRACT_ISO_FILE  4
 #define CMD_PRINT_EXTRACT_ISO_FILE  5
+#define CMD_PRINT_RAW_TABLE         6
 
 static uint64_t g_iso_file_size;
 static char g_disk_name[128];
@@ -578,6 +579,45 @@ static uint64_t vtoydm_get_part_start(const char *diskname, int part)
     return size;
 }
 
+static uint64_t vtoydm_get_part_secnum(const char *diskname, int part)
+{
+    int fd;
+    unsigned long long size = 0;
+    char diskpath[256] = {0};
+    char sizebuf[64] = {0};
+
+    diskname += 5; /* skip /dev/ */
+
+    if (strstr(diskname, "nvme") || strstr(diskname, "mmc") || strstr(diskname, "nbd"))
+    {
+        snprintf(diskpath, sizeof(diskpath) - 1, "/sys/class/block/%sp%d/size", diskname, part);
+    }
+    else
+    {
+        snprintf(diskpath, sizeof(diskpath) - 1, "/sys/class/block/%s%d/size", diskname, part);
+    }
+
+    if (access(diskpath, F_OK) >= 0)
+    {
+        debug("get part size from sysfs for %s %d\n", diskname, part);
+        
+        fd = open(diskpath, O_RDONLY | O_BINARY);
+        if (fd >= 0)
+        {
+            read(fd, sizebuf, sizeof(sizebuf));
+            size = strtoull(sizebuf, NULL, 10);
+            close(fd);
+            return size;
+        }
+    }
+    else
+    {
+        debug("%s not exist \n", diskpath);
+    }
+
+    return size;
+}
+
 static int vtoydm_vlnk_convert(char *disk, int len, int *part, uint64_t *offset)
 {
     int rc = 1;
@@ -627,6 +667,24 @@ end:
     return rc;
 }
 
+static int vtoydm_print_raw_linear_table(const char *img_map_file, const char *diskname, int part)
+{
+    uint64_t disk_sector_num;
+
+    disk_sector_num = vtoydm_get_part_secnum(diskname, part);
+
+    if (strstr(diskname, "nvme") || strstr(diskname, "mmc") || strstr(diskname, "nbd"))
+    {
+        printf("0 %lu linear %sp%d 0\n", (unsigned long)disk_sector_num, diskname, part);
+    }
+    else
+    {
+        printf("0 %lu linear %s%d 0\n", (unsigned long)disk_sector_num, diskname, part);
+    }
+    
+    return 0;
+}
+
 int vtoydm_main(int argc, char **argv)
 {
     int ch;
@@ -639,7 +697,7 @@ int vtoydm_main(int argc, char **argv)
     char filepath[300] = {0};
     char outfile[300] = {0};
 
-    while ((ch = getopt(argc, argv, "s:l:o:d:f:v::i::p::c::h::e::E::")) != -1)
+    while ((ch = getopt(argc, argv, "s:l:o:d:f:v::i::p::r::c::h::e::E::")) != -1)
     {
         if (ch == 'd')
         {
@@ -653,6 +711,10 @@ int vtoydm_main(int argc, char **argv)
         {
             cmd = CMD_PRINT_TABLE;
         }
+        else if (ch == 'r')
+        {
+            cmd = CMD_PRINT_RAW_TABLE;
+        }
         else if (ch == 'c')
         {
             cmd = CMD_CREATE_DM;
@@ -713,6 +775,10 @@ int vtoydm_main(int argc, char **argv)
         {
             return vtoydm_print_linear_table(filepath, diskname, part, offset);
         }
+        case CMD_PRINT_RAW_TABLE:
+        {
+            return vtoydm_print_raw_linear_table(filepath, diskname, part);
+        }
         case CMD_CREATE_DM:
         {
             break;
index 2c662faa6a3a1a42ca8dab2ec7d93d6d79a93ee3..a5dec1403d9e449226376b09f9dfd25b8fd65b8f 100644 (file)
Binary files a/VtoyTool/vtoytool/00/vtoytool_32 and b/VtoyTool/vtoytool/00/vtoytool_32 differ
index d9985638ead143cde22d80eb07e7bbfcb4db6325..0d8a2e027319bbf2dbe61ada69aa64f997ed483c 100644 (file)
Binary files a/VtoyTool/vtoytool/00/vtoytool_64 and b/VtoyTool/vtoytool/00/vtoytool_64 differ
index 58beda87089eb6409439d9b5e9c932421c9e9204..dc65f9330e50600946fdae88cdaa1b36aae53016 100644 (file)
Binary files a/VtoyTool/vtoytool/00/vtoytool_aa64 and b/VtoyTool/vtoytool/00/vtoytool_aa64 differ
index 2b9f11d504f60ba6db01e26082bbefced3d834b5..173c0d3972aa381bf4acf2c2f228b061f9159b43 100644 (file)
Binary files a/VtoyTool/vtoytool/00/vtoytool_m64e and b/VtoyTool/vtoytool/00/vtoytool_m64e differ