X-Git-Url: https://glassweightruler.freedombox.rocks/gitweb/Ventoy.git/blobdiff_plain/d61798509356f4d5efc952b83a9b460a7b193108..7f63a1c327399e1ea8fce9ba8778685f737da795:/IMG/cpio/ventoy/hook/ventoy-hook-lib.sh diff --git a/IMG/cpio/ventoy/hook/ventoy-hook-lib.sh b/IMG/cpio/ventoy/hook/ventoy-hook-lib.sh index e856792..62c2996 100644 --- a/IMG/cpio/ventoy/hook/ventoy-hook-lib.sh +++ b/IMG/cpio/ventoy/hook/ventoy-hook-lib.sh @@ -209,11 +209,20 @@ ventoy_check_dm_module() { vtlog "modprobe failed, now try to insmod ko..." $FIND /lib/modules/ -name "dm-mod.ko*" | while read vtline; do - vtlog "insmode $vtline " + vtlog "insmod $vtline " $BUSYBOX_PATH/insmod $vtline >>$VTLOG 2>&1 + if [ $? -eq 0 ]; then + vtlog "insmod success" + else + vtlog "insmod failed, try decompress" + if echo $vtline | $GREP -q "\.zst"; then + $VTOY_PATH/tool/zstdcat $vtline > $VTOY_PATH/extract_dm_mod.ko + $BUSYBOX_PATH/insmod $VTOY_PATH/extract_dm_mod.ko >>$VTLOG 2>&1 + fi + fi done fi - + if $GREP -q 'device-mapper' /proc/devices; then vtlog "device-mapper found in /proc/devices after retry" $BUSYBOX_PATH/true; return @@ -292,6 +301,7 @@ ventoy_need_dm_patch() { } ventoy_dm_patch() { + vtDmPatchDebug=0 vtMType=$($BUSYBOX_PATH/uname -m) vtlog "######### ventoy_dm_patch ############" @@ -350,6 +360,15 @@ ventoy_dm_patch() { 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}') @@ -384,14 +403,17 @@ ventoy_dm_patch() { return elif [ -d /lib/modules/$vtKv/kernel/fs ]; then vtModPath=$($FIND /lib/modules/$vtKv/kernel/fs/ -name "*.ko*" | $HEAD -n1) - else + 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/kernel/ -name "*.ko*" | $HEAD -n1) + vtModPath=$($FIND /lib/modules/$vtKv/ -name "*.ko*" | $HEAD -n1) fi - + vtModName=$($BUSYBOX_PATH/basename $vtModPath) vtlog "template module is $vtModPath $vtModName" @@ -405,6 +427,8 @@ ventoy_dm_patch() { $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 @@ -414,17 +438,21 @@ 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 + $VTOY_PATH/tool/vtoykmod -u $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 + $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 - $BUSYBOX_PATH/insmod $VTOY_PATH/tool/$vtKoName + 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 }