]> glassweightruler.freedombox.rocks Git - Ventoy.git/blobdiff - IMG/cpio/ventoy/hook/ventoy-hook-lib.sh
Fix the issue that VTOY_LINUX_REMOUNT option does not take effect in latest openSUSE...
[Ventoy.git] / IMG / cpio / ventoy / hook / ventoy-hook-lib.sh
index 62c29967d3a49ad1e54feba7b810a310aa6fbe40..5c778e8c8c293063b045ee8b3be2a63b3bcfb44f 100644 (file)
@@ -335,8 +335,9 @@ ventoy_dm_patch() {
     $CAT /proc/kallsyms | $BUSYBOX_PATH/sort > $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"
+        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"
@@ -344,6 +345,23 @@ ventoy_dm_patch() {
     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"
@@ -383,8 +401,9 @@ ventoy_dm_patch() {
     
     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
+    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"
@@ -397,6 +416,9 @@ ventoy_dm_patch() {
 
 
     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"
@@ -437,13 +459,18 @@ ventoy_dm_patch() {
        
     
     #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 >>$VTLOG 2>&1
+    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)
-    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 $vtKv $vtIBT $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 $vtKv $vtIBT $vtDebug >>$VTLOG 2>&1
+    
+    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