@@ -232,257 +232,6 @@ ventoy_check_dm_module() {
232232    fi 
233233}
234234
235- ventoy_need_proc_ibt () {
236-     vtKv=$( $BUSYBOX_PATH /uname -r) 
237-     vtMajor=$( echo $vtKv  |  $AWK  -F. ' {print $1}' ) 
238-     vtMinor=$( echo $vtKv  |  $AWK  -F. ' {print $2}' ) 
239-     
240-     # ibt was supported since linux kernel 5.18
241-     if  [ $vtMajor  -lt  5 ];  then 
242-         $BUSYBOX_PATH /false;  return 
243-     elif  [ $vtMajor  -eq  5 ];  then 
244-         if  [ $vtMajor  -lt  18 ];  then 
245-             $BUSYBOX_PATH /false;  return 
246-         fi 
247-     fi 
248-     
249-     if  $GREP  -q '  ibt=off' ;  then 
250-         $BUSYBOX_PATH /false;  return 
251-     fi 
252- 
253-     # hardware CPU doesn't support IBT
254-     if  $VTOY_PATH /tool/vtoykmod -I;  then 
255-         : 
256-     else 
257-         $BUSYBOX_PATH /false;  return 
258-     fi 
259-     
260-     # dot.CONFIG not enabled
261-     if  $GREP  -q '  ibt_restore$' ;  then 
262-         : 
263-     else 
264-         $BUSYBOX_PATH /false;  return 
265-     fi 
266-     
267-     $BUSYBOX_PATH /true
268- }
269- 
270- 
271- ventoy_need_dm_patch () {
272-     if  [ " $VTOY_LINUX_REMOUNT " !=  " 01" ;  then 
273-         if  $GREP  -q ' VTOY_LINUX_REMOUNT=1' ;  then 
274-             : 
275-         else 
276-             $BUSYBOX_PATH /false;  return 
277-         fi 
278-     fi 
279- 
280-     if  $GREP  -q ' device-mapper' ;  then 
281-         : 
282-     else 
283-         $BUSYBOX_PATH /false;  return 
284-     fi 
285-     
286-     if  $GREP  -q ' dm_patch' ;  then 
287-         $BUSYBOX_PATH /false;  return 
288-     fi 
289-     
290-     vtMajorVer=$( $BUSYBOX_PATH /uname -r |  $AWK  -F. ' {print $1}' ) 
291-     vtMinorVer=$( $BUSYBOX_PATH /uname -r |  $AWK  -F. ' {print $2}' ) 
292- 
293-     if  [ $vtMajorVer  -lt  3 ];  then 
294-         $BUSYBOX_PATH /false;  return 
295-     elif  [ $vtMajorVer  -eq  3 -a  $vtMinorVer  -lt  10 ];  then 
296-         $BUSYBOX_PATH /false;  return 
297-     fi 
298-     
299-     
300-     $BUSYBOX_PATH /true
301- }
302- 
303- ventoy_dm_patch () {
304-     vtDmPatchDebug=0
305-     vtMType=$( $BUSYBOX_PATH /uname -m) 
306- 
307-     vtlog " ######### ventoy_dm_patch ############" 
308- 
309-     if  echo  $vtMType  |  $EGREP  -i -q " x86.64|amd64" ;  then 
310-         vtKoName=dm_patch_64.ko
311-     elif  echo  $vtMType  |  $EGREP  -i -q " i[3-6]86" ;  then 
312-         vtKoName=dm_patch_32.ko
313-     else 
314-         vtlog " unsupported machine type $vtMType " 
315-         return 
316-     fi 
317- 
318-     if  ventoy_need_proc_ibt;  then 
319-         vtlog " need to proc IBT" 
320-         vtKoName=dm_patch_ibt_64.ko
321-         vtIBT=' 0x8888' 
322-     else 
323-         vtlog " NO need to proc IBT" 
324-         vtIBT=' 0' 
325-     fi  
326- 
327- 
328-     if  [ -f  $VTOY_PATH /tool/$vtKoName  ];  then 
329-         vtlog " /ventoy/tool/$vtKoName  exist OK" 
330-     else 
331-         vtlog " /ventoy/tool/$vtKoName  NOT exist" 
332-         return 
333-     fi 
334-     
335-     $CAT  /proc/kallsyms |  $BUSYBOX_PATH /sort >  $VTOY_PATH /kallsyms
336-     
337-     if  $GREP  -m1 -q ' open_table_device.isra' $VTOY_PATH /kallsyms;  then 
338-         vtISRA=$( $GREP  -m1 ' open_table_device.isra' $VTOY_PATH /kallsyms |  $AWK  ' {print $3}' ) 
339-         vtLine=$( $VTOY_PATH /tool/vtoyksym $vtISRA  $VTOY_PATH /kallsyms) 
340-         vtlog " get $vtISRA  address $vtLine " 
341-     else 
342-         vtLine=$( $VTOY_PATH /tool/vtoyksym dm_get_table_device $VTOY_PATH /kallsyms) 
343-         vtlog " get dm_get_table_device address $vtLine " 
344-     fi  
345-     get_addr=$( echo $vtLine  |  $AWK  ' {print $1}' ) 
346-     get_size=$( echo $vtLine  |  $AWK  ' {print $2}' ) 
347- 
348-     vtLine=$( $VTOY_PATH /tool/vtoyksym blkdev_get_by_dev $VTOY_PATH /kallsyms) 
349-     vtlog " get blkdev_get_by_dev address $vtLine " 
350-     blkdev_get_addr=$( echo $vtLine  |  $AWK  ' {print $1}' ) 
351-     
352-     vtLine=$( $VTOY_PATH /tool/vtoyksym blkdev_put $VTOY_PATH /kallsyms) 
353-     vtlog " get blkdev_put address $vtLine " 
354-     blkdev_put_addr=$( echo $vtLine  |  $AWK  ' {print $1}' ) 
355-     
356-     vtLine=$( $VTOY_PATH /tool/vtoyksym bdev_open_by_dev $VTOY_PATH /kallsyms) 
357-     vtlog " get bdev_open_by_dev address $vtLine " 
358-     bdev_open_addr=$( echo $vtLine  |  $AWK  ' {print $1}' ) 
359-     
360-     vtLine=$( $VTOY_PATH /tool/vtoyksym bdev_file_open_by_dev $VTOY_PATH /kallsyms) 
361-     vtlog " get bdev_file_open_by_dev address $vtLine " 
362-     bdev_file_open_addr=$( echo $vtLine  |  $AWK  ' {print $1}' ) 
363-     
364- 
365-     if  $GREP  -m1 -q ' close_table_device.isra' $VTOY_PATH /kallsyms;  then 
366-         vtLine=$( $VTOY_PATH /tool/vtoyksym close_table_device.isra $VTOY_PATH /kallsyms) 
367-         vtlog " get close_table_device.isra address $vtLine " 
368-     else 
369-         vtLine=$( $VTOY_PATH /tool/vtoyksym dm_put_table_device $VTOY_PATH /kallsyms) 
370-         vtlog " get dm_put_table_device address $vtLine " 
371-     fi 
372-     put_addr=$( echo $vtLine  |  $AWK  ' {print $1}' ) 
373-     put_size=$( echo $vtLine  |  $AWK  ' {print $2}' ) 
374-     
375-     ro_addr=$( $GREP  '  set_memory_ro$' |  $AWK  ' {print $1}' ) 
376-     rw_addr=$( $GREP  '  set_memory_rw$' |  $AWK  ' {print $1}' ) 
377-     kprobe_reg_addr=$( $GREP  '  register_kprobe$' |  $AWK  ' {print $1}' ) 
378-     kprobe_unreg_addr=$( $GREP  '  unregister_kprobe$' |  $AWK  ' {print $1}' ) 
379-     
380-     if  [ " $VTOY_DEBUG_LEVEL " =  " 01" ;  then 
381-         vtDmPatchDebug=1
382-     fi 
383-     
384-     if  $GREP  -q ' dmpatch_debug' ;  then 
385-         vtDmPatchDebug=1
386-     fi 
387-     
388-     
389-     if  [ $vtDmPatchDebug  -eq  1 ];  then 
390-         printk_addr=$( $GREP  '  printk$' |  $AWK  ' {print $1}' ) 
391-         if  [ -z  " $printk_addr " ;  then 
392-             printk_addr=$( $GREP  '  _printk$' |  $AWK  ' {print $1}' ) 
393-         fi 
394-         vtDebug=" -v" 
395-     else 
396-         printk_addr=0
397-     fi 
398-     
399-     # printk_addr=$($GREP ' printk$' /proc/kallsyms | $AWK '{print $1}')
400-     # vtDebug="-v"
401-     
402-     vtlog get_addr=$get_addr   get_size=$get_size 
403-     vtlog put_addr=$put_addr   put_size=$put_size 
404-     vtlog blkdev_get_addr=$blkdev_get_addr  blkdev_put_addr=$blkdev_put_addr 
405-     vtlog kprobe_reg_addr=$kprobe_reg_addr   kprobe_unreg_addr=$kprobe_unreg_addr 
406-     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 
407- 
408-     if  [ " $get_addr " =  " 0" -o  " $put_addr " =  " 0" ;  then 
409-         vtlog " Invalid symbol address" 
410-         return 
411-     fi 
412-     if  [ " $ro_addr " =  " 0" -o  " $rw_addr " =  " 0" ;  then 
413-         vtlog " Invalid symbol address" 
414-         return 
415-     fi 
416- 
417- 
418-     vtKv=$( $BUSYBOX_PATH /uname -r) 
419-     vtKVMajor=$( echo $vtKv  |  $AWK  -F. ' {print $1}' ) 
420-     vtKVMinor=$( echo $vtKv  |  $AWK  -F. ' {print $2}' ) 
421-     vtKVSubMinor=$( echo $vtKv  |  $AWK  -F. ' {print $3}' ) 
422-     
423-     if  [ !  -d  /lib/modules/$vtKv  ];  then 
424-         vtlog " No modules directory found" 
425-         return 
426-     elif  [ -d  /lib/modules/$vtKv /kernel/fs ];  then 
427-         vtModPath=$( $FIND  /lib/modules/$vtKv /kernel/fs/ -name " *.ko*" |  $HEAD  -n1) 
428-     elif  [ -d  /lib/modules/$vtKv /kernel ];  then 
429-         vtModPath=$( $FIND  /lib/modules/$vtKv /kernel/ -name " xfs.ko*" |  $HEAD  -n1) 
430-     elif  [ -d  /lib/modules/$vtKv /initrd ];  then 
431-         vtModPath=$( $FIND  /lib/modules/$vtKv /initrd/ -name " xfs.ko*" |  $HEAD  -n1) 
432-     fi 
433- 
434- 
435-     if  [ -z  " $vtModPath " ;  then 
436-         vtModPath=$( $FIND  /lib/modules/$vtKv / -name " *.ko*" |  $HEAD  -n1) 
437-     fi 
438- 
439-     vtModName=$( $BUSYBOX_PATH /basename $vtModPath ) 
440-     
441-     vtlog " template module is $vtModPath  $vtModName " 
442-     
443-     if  [ -z  " $vtModPath " ;  then 
444-         vtlog " No template module found" 
445-         return 
446-     elif  echo  $vtModPath  |  $GREP  -q " [.]ko$" ;  then 
447-         $BUSYBOX_PATH /cp -a $vtModPath   $VTOY_PATH /$vtModName 
448-     elif  echo  $vtModPath  |  $GREP  -q " [.]ko[.]xz$" ;  then 
449-         $BUSYBOX_PATH /xzcat $vtModPath  >  $VTOY_PATH /$vtModName 
450-     elif  echo  $vtModPath  |  $GREP  -q " [.]ko[.]gz$" ;  then 
451-         $BUSYBOX_PATH /zcat $vtModPath  >  $VTOY_PATH /$vtModName 
452-     elif  echo  $vtModPath  |  $GREP  -q " [.]ko[.]zst$" ;  then 
453-         $VTOY_PATH /tool/zstdcat $vtModPath  >  $VTOY_PATH /$vtModName 
454-     else 
455-         vtlog " unsupport module type" 
456-         return 
457-     fi 
458-     
459-        
460-     
461-     # step1: modify vermagic/mod crc/relocation
462-     vtlog " $VTOY_PATH /tool/vtoykmod -u $vtKVMajor  $vtKVMinor  $VTOY_PATH /tool/$vtKoName  $VTOY_PATH /$vtModName  $vtDebug " 
463-     $VTOY_PATH /tool/vtoykmod -u $vtKVMajor  $vtKVMinor  $VTOY_PATH /tool/$vtKoName  $VTOY_PATH /$vtModName  $vtDebug  >> $VTLOG  2>&1 
464-     
465-     # step2: fill parameters
466-     vtPgsize=$( $VTOY_PATH /tool/vtoyksym -p) 
467-     
468-     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 " 
469-     
470-     
471-     vtlog " $VTOY_PATH /tool/vtoykmod -f $vtPrams " 
472-     $VTOY_PATH /tool/vtoykmod -f $vtPrams  >> $VTLOG  2>&1 
473- 
474- 
475-     vtlog " insmod $VTOY_PATH /tool/$vtKoName " 
476-     $BUSYBOX_PATH /insmod $VTOY_PATH /tool/$vtKoName   >> $VTLOG  2>&1 
477-     
478-     if  $GREP  -q ' dm_patch' ;  then 
479-         vtlog " dm_patch module OK" 
480-         echo  " done" >  $VTOY_PATH /dm_patch_done
481-     else 
482-         vtlog " dm_patch module FAILED" 
483-     fi 
484-     
485- }
486235
487236create_ventoy_device_mapper () {
488237    vtlog " create_ventoy_device_mapper $* " 
@@ -502,28 +251,16 @@ create_ventoy_device_mapper() {
502251    fi 
503252
504253    $VTOY_PATH /tool/vtoydm -p -f $VTOY_PATH /ventoy_image_map -d $1  >  $VTOY_PATH /ventoy_dm_table
505-     
506-     
507-     vtLevel1=$( $CAT  /proc/sys/kernel/printk |  $AWK  ' {print $1}' ) 
508-     vtLevel2=$( $CAT  /proc/sys/kernel/printk |  $AWK  ' {print $2}' ) 
509-     vtLevel3=$( $CAT  /proc/sys/kernel/printk |  $AWK  ' {print $3}' ) 
510-     vtLevel4=$( $CAT  /proc/sys/kernel/printk |  $AWK  ' {print $4}' ) 
511-     if  ventoy_need_dm_patch;  then 
512-         ventoy_dm_patch
513-         # suppress printk message
514-         echo  0 $vtLevel2  0 $vtLevel4  >  /proc/sys/kernel/printk
515-     fi 
254+     $VTOY_PATH /tool/vtoydm -r -f $VTOY_PATH /ventoy_image_map -d $1  >  $VTOY_PATH /ventoy_raw_table    
516255
517256    if  [ -z  " $2 " ;  then 
518257        $VT_DM_BIN  create ventoy $VTOY_PATH /ventoy_dm_table >> $VTLOG  2>&1 
519258    else 
520259        $VT_DM_BIN  " $2 " $VTOY_PATH /ventoy_dm_table >> $VTLOG  2>&1 
521260    fi 
522- 
523-     if  ventoy_need_dm_patch;  then     
524-         # recover printk level
525-         echo  $vtLevel1  $vtLevel2  $vtLevel3  $vtLevel4  >  /proc/sys/kernel/printk
526-     fi 
261+     
262+     RAWDISKNAME=$( $HEAD  -n1 $VTOY_PATH /ventoy_raw_table |  $AWK  ' {print $4}' ) 
263+     $VT_DM_BIN  create ${RAWDISKNAME#/ dev/ }   $VTOY_PATH /ventoy_raw_table >> $VTLOG  2>&1 
527264}
528265
529266create_persistent_device_mapper () {
@@ -543,24 +280,8 @@ create_persistent_device_mapper() {
543280        vterr " Error: no dm module avaliable" 
544281    fi 
545282
546-     $VTOY_PATH /tool/vtoydm -p -f $VTOY_PATH /ventoy_persistent_map -d $1  >  $VTOY_PATH /persistent_dm_table    
547- 
548- 
549-     vtLevel1=$( $CAT  /proc/sys/kernel/printk |  $AWK  ' {print $1}' ) 
550-     vtLevel2=$( $CAT  /proc/sys/kernel/printk |  $AWK  ' {print $2}' ) 
551-     vtLevel3=$( $CAT  /proc/sys/kernel/printk |  $AWK  ' {print $3}' ) 
552-     vtLevel4=$( $CAT  /proc/sys/kernel/printk |  $AWK  ' {print $4}' ) 
553-     if  [ -f  $VTOY_PATH /dm_patch_done ];  then 
554-         # suppress printk message
555-         echo  0 $vtLevel2  0 $vtLevel4  >  /proc/sys/kernel/printk
556-     fi 
557-     
558-     $VT_DM_BIN  create vtoy_persistent $VTOY_PATH /persistent_dm_table >> $VTLOG  2>&1 
559-     
560-     if  [ -f  $VTOY_PATH /dm_patch_done ];  then 
561-         # recover printk level
562-         echo  $vtLevel1  $vtLevel2  $vtLevel3  $vtLevel4  >  /proc/sys/kernel/printk
563-     fi 
283+     $VTOY_PATH /tool/vtoydm -p -f $VTOY_PATH /ventoy_persistent_map -d $1  >  $VTOY_PATH /persistent_dm_table        
284+     $VT_DM_BIN  create vtoy_persistent $VTOY_PATH /persistent_dm_table >> $VTLOG  2>&1     
564285}
565286
566287
@@ -853,30 +574,15 @@ ventoy_udev_disk_common_hook() {
853574    if  [ -f  $VTOY_PATH /ventoy_persistent_map ];  then 
854575        create_persistent_device_mapper " /dev/$VTDISK " 
855576        ventoy_create_persistent_link
856-     fi 
857-     
858-     if  $GREP  -q ' dm_patch' ;  then 
859-         vtlog " remove dm_patch module." 
860-         $BUSYBOX_PATH /rmmod dm_patch
861-     fi 
577+     fi     
862578}
863579
864580ventoy_create_dev_ventoy_part () {   
865581    blkdev_num=$( $VTOY_PATH /tool/dmsetup ls |  $GREP  ventoy |  $SED  ' s/.*(\([0-9][0-9]*\),.*\([0-9][0-9]*\).*/\1 \2/' ) 
866582    $BUSYBOX_PATH /mknod -m 0666 /dev/ventoy b $blkdev_num 
867583
868584    if  [ -e  /vtoy_dm_table ];  then 
869-         vtPartid=1
870-         
871-         vtLevel1=$( $CAT  /proc/sys/kernel/printk |  $AWK  ' {print $1}' ) 
872-         vtLevel2=$( $CAT  /proc/sys/kernel/printk |  $AWK  ' {print $2}' ) 
873-         vtLevel3=$( $CAT  /proc/sys/kernel/printk |  $AWK  ' {print $3}' ) 
874-         vtLevel4=$( $CAT  /proc/sys/kernel/printk |  $AWK  ' {print $4}' ) 
875-         if  [ -f  $VTOY_PATH /dm_patch_done ];  then 
876-             # suppress printk message
877-             echo  0 $vtLevel2  0 $vtLevel4  >  /proc/sys/kernel/printk
878-         fi 
879-         
585+         vtPartid=1                        
880586        $CAT  /vtoy_dm_table |  while  read  vtline;  do 
881587            echo  $vtline  >  /ventoy/dm_table_part${vtPartid} 
882588            $VTOY_PATH /tool/dmsetup create ventoy${vtPartid}  /ventoy/dm_table_part${vtPartid} 
@@ -886,11 +592,6 @@ ventoy_create_dev_ventoy_part() {
886592
887593            vtPartid=$( expr $vtPartid  + 1) 
888594        done    
889- 
890-         if  [ -f  $VTOY_PATH /dm_patch_done ];  then 
891-             # recover printk level
892-             echo  $vtLevel1  $vtLevel2  $vtLevel3  $vtLevel4  >  /proc/sys/kernel/printk
893-         fi 
894595    fi 
895596}
896597
0 commit comments