@@ -232,257 +232,6 @@ ventoy_check_dm_module() {
232
232
fi
233
233
}
234
234
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' /proc/cmdline; 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$' /proc/kallsyms; 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' /proc/cmdline; then
274
- :
275
- else
276
- $BUSYBOX_PATH /false; return
277
- fi
278
- fi
279
-
280
- if $GREP -q ' device-mapper' /proc/devices; then
281
- :
282
- else
283
- $BUSYBOX_PATH /false; return
284
- fi
285
-
286
- if $GREP -q ' dm_patch' /proc/modules; 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$' /proc/kallsyms | $AWK ' {print $1}' )
376
- rw_addr=$( $GREP ' set_memory_rw$' /proc/kallsyms | $AWK ' {print $1}' )
377
- kprobe_reg_addr=$( $GREP ' register_kprobe$' /proc/kallsyms | $AWK ' {print $1}' )
378
- kprobe_unreg_addr=$( $GREP ' unregister_kprobe$' /proc/kallsyms | $AWK ' {print $1}' )
379
-
380
- if [ " $VTOY_DEBUG_LEVEL " = " 01" ]; then
381
- vtDmPatchDebug=1
382
- fi
383
-
384
- if $GREP -q ' dmpatch_debug' /proc/cmdline; then
385
- vtDmPatchDebug=1
386
- fi
387
-
388
-
389
- if [ $vtDmPatchDebug -eq 1 ]; then
390
- printk_addr=$( $GREP ' printk$' /proc/kallsyms | $AWK ' {print $1}' )
391
- if [ -z " $printk_addr " ]; then
392
- printk_addr=$( $GREP ' _printk$' /proc/kallsyms | $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' /proc/modules; 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
- }
486
235
487
236
create_ventoy_device_mapper () {
488
237
vtlog " create_ventoy_device_mapper $* "
@@ -502,28 +251,16 @@ create_ventoy_device_mapper() {
502
251
fi
503
252
504
253
$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
516
255
517
256
if [ -z " $2 " ]; then
518
257
$VT_DM_BIN create ventoy $VTOY_PATH /ventoy_dm_table >> $VTLOG 2>&1
519
258
else
520
259
$VT_DM_BIN " $2 " create ventoy $VTOY_PATH /ventoy_dm_table >> $VTLOG 2>&1
521
260
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
527
264
}
528
265
529
266
create_persistent_device_mapper () {
@@ -543,24 +280,8 @@ create_persistent_device_mapper() {
543
280
vterr " Error: no dm module avaliable"
544
281
fi
545
282
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
564
285
}
565
286
566
287
@@ -853,30 +574,15 @@ ventoy_udev_disk_common_hook() {
853
574
if [ -f $VTOY_PATH /ventoy_persistent_map ]; then
854
575
create_persistent_device_mapper " /dev/$VTDISK "
855
576
ventoy_create_persistent_link
856
- fi
857
-
858
- if $GREP -q ' dm_patch' /proc/modules; then
859
- vtlog " remove dm_patch module."
860
- $BUSYBOX_PATH /rmmod dm_patch
861
- fi
577
+ fi
862
578
}
863
579
864
580
ventoy_create_dev_ventoy_part () {
865
581
blkdev_num=$( $VTOY_PATH /tool/dmsetup ls | $GREP ventoy | $SED ' s/.*(\([0-9][0-9]*\),.*\([0-9][0-9]*\).*/\1 \2/' )
866
582
$BUSYBOX_PATH /mknod -m 0666 /dev/ventoy b $blkdev_num
867
583
868
584
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
880
586
$CAT /vtoy_dm_table | while read vtline; do
881
587
echo $vtline > /ventoy/dm_table_part${vtPartid}
882
588
$VTOY_PATH /tool/dmsetup create ventoy${vtPartid} /ventoy/dm_table_part${vtPartid}
@@ -886,11 +592,6 @@ ventoy_create_dev_ventoy_part() {
886
592
887
593
vtPartid=$( expr $vtPartid + 1)
888
594
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
894
595
fi
895
596
}
896
597
0 commit comments