]> glassweightruler.freedombox.rocks Git - Ventoy.git/blobdiff - IMG/cpio/ventoy/loop/openwrt/ventoy-disk.sh
Optimization for booting OpenWrt
[Ventoy.git] / IMG / cpio / ventoy / loop / openwrt / ventoy-disk.sh
index 416ba5108de73512bad39b4d5a74965e36dd5ce7..a59e8948a1105e71f9b16f7fa21e621963997382 100644 (file)
@@ -27,6 +27,67 @@ vtlog "####### $0 $* ########"
 
 VTPATH_OLD=$PATH; PATH=$BUSYBOX_PATH:$VTOY_PATH/tool:$PATH
 
+
+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
+
+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
+
 wait_for_usb_disk_ready
 
 vtdiskname=$(get_ventoy_disk_name)