]> glassweightruler.freedombox.rocks Git - Ventoy.git/blobdiff - IMG/cpio/ventoy/loop/openwrt/ventoy-disk.sh
1.1.07 release
[Ventoy.git] / IMG / cpio / ventoy / loop / openwrt / ventoy-disk.sh
index 0345da61f6825e0e71aa6bd3200c9c2aa0bff5e7..52f46d66f1fd6abbf72c24a3651e0c0bbbb9ea97 100644 (file)
@@ -27,15 +27,83 @@ vtlog "####### $0 $* ########"
 
 VTPATH_OLD=$PATH; PATH=$BUSYBOX_PATH:$VTOY_PATH/tool:$PATH
 
-for i in $(ls /sys/class/block/); do
-    if ! [ -e /dev/$i ]; then
-        blkdev_num=$(sed 's/:/ /g' /sys/class/block/$i/dev)
-        vtlog "mknod -m 0666 /dev/$i b $blkdev_num"
-        mknod -m 0666 /dev/$i b $blkdev_num
+check_mkdev_node() {
+    for i in $(ls /sys/class/block/); do
+        if ! [ -e /dev/$i ]; then
+            blkdev_num=$(sed 's/:/ /g' /sys/class/block/$i/dev)
+            vtlog "mknod -m 0666 /dev/$i b $blkdev_num"
+            mknod -m 0666 /dev/$i b $blkdev_num
+        fi
+    done
+}
+
+check_insmod() {
+    if [ -f "$1" ]; then
+        vtlog "insmod $1"
+        insmod "$1" >> $VTOY_PATH/log 2>&1
+    else
+        vtlog "$1 not exist"
+    fi
+}
+
+wrt_insmod() {
+    kbit=$1
+    kv=$(uname -r)
+    
+    vtlog "insmod $kv $kbit"
+    
+    check_insmod /ventoy_openwrt/$kv/$kbit/dax.ko
+    check_insmod /ventoy_openwrt/$kv/$kbit/dm-mod.ko    
+}
+
+insmod_dm_mod() {
+    if grep -q "device-mapper" /proc/devices; then
+        vtlog "device-mapper enabled by system 0"
+        return
+    fi
+    
+    check_insmod /ventoy/modules/dax.ko
+    check_insmod /ventoy/modules/dm-mod.ko
+
+    if grep -q "device-mapper" /proc/devices; then
+        vtlog "device-mapper enabled by system 1"
+        return
+    fi
+    
+    if [ -f /ventoy_openwrt.xz ]; then
+        tar xf /ventoy_openwrt.xz -C /
+        rm -f  /ventoy_openwrt.xz
     fi
+
+    if uname -m | egrep -q "amd64|x86_64"; then
+        wrt_insmod 64
+    else
+        wrt_insmod generic    
+        if lsmod | grep -q 'dm-mod'; then
+            vterr "insmod generic failed"
+        else
+            wrt_insmod legacy
+        fi
+    fi
+}
+
+insmod_dm_mod
+
+check_mkdev_node
+sleep 1
+
+while [ -n "Y" ]; do
+    vtusb_disk=$(get_ventoy_disk_name)
+    if check_usb_disk_ready "$vtusb_disk"; then
+        vtlog "get_ventoy_disk_name $vtusb_disk ready"
+        break;
+    else
+        vtlog "get_ventoy_disk_name $vtusb_disk not ready"
+        sleep 2
+        check_mkdev_node
+    fi    
 done
 
-wait_for_usb_disk_ready
 
 vtdiskname=$(get_ventoy_disk_name)
 if [ "$vtdiskname" = "unknown" ]; then
@@ -52,6 +120,8 @@ echo -n $vtDM > /ventoy/vtDM
 
 ventoy_create_dev_ventoy_part
 mdev -s
+check_mkdev_node
+
 
 mkdir /ventoy_rdroot
 mount /dev/ventoy2 /ventoy_rdroot