]> glassweightruler.freedombox.rocks Git - Ventoy.git/commitdiff
Optimization for booting OpenWrt
authorlongpanda <admin@ventoy.net>
Fri, 25 Jun 2021 03:49:45 +0000 (11:49 +0800)
committerlongpanda <admin@ventoy.net>
Fri, 25 Jun 2021 03:49:45 +0000 (11:49 +0800)
GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_cmd.c
IMG/cpio/ventoy/loop/openwrt/ventoy-disk.sh
IMG/cpio/ventoy/loop/openwrt/ventoy-hook.sh
INSTALL/grub/grub.cfg
INSTALL/tool/aarch64/vtoygpt
INSTALL/tool/i386/vtoygpt
INSTALL/tool/mips64el/vtoygpt
INSTALL/tool/x86_64/vtoygpt

index 6826e25f00f9212af46726c71800460609e9be15..6f9d726218d4cd6a44bc01820a055c1eaad43a01 100644 (file)
@@ -4204,8 +4204,18 @@ static int ventoy_fs_enum_1st_file(const char *filename, const struct grub_dirho
     return 0;
 }
 
+static int ventoy_fs_enum_1st_dir(const char *filename, const struct grub_dirhook_info *info, void *data)
+{
+    if (info->dir && filename && filename[0] != '.')
+    {
+        grub_snprintf((char *)data, 256, "%s", filename);
+        return 1;
+    }
 
-static grub_err_t ventoy_cmd_fs_enum_1st_file(grub_extcmd_context_t ctxt, int argc, char **args)
+    return 0;
+}
+
+static grub_err_t ventoy_fs_enum_1st_child(int argc, char **args, grub_fs_dir_hook_t hook)
 {
     int rc = 1;
     char *device_name = NULL;
@@ -4213,11 +4223,9 @@ static grub_err_t ventoy_cmd_fs_enum_1st_file(grub_extcmd_context_t ctxt, int ar
     grub_fs_t fs = NULL;
     char name[256] ={0};
     
-    (void)ctxt;
-
     if (argc != 3)
     {
-        debug("ventoy_cmd_fs_enum_1st_file, invalid param num %d\n", argc);
+        debug("ventoy_fs_enum_1st_child, invalid param num %d\n", argc);
         return 1;
     }
 
@@ -4242,7 +4250,7 @@ static grub_err_t ventoy_cmd_fs_enum_1st_file(grub_extcmd_context_t ctxt, int ar
         goto end;
     }
 
-    fs->fs_dir(dev, args[1], ventoy_fs_enum_1st_file, name);
+    fs->fs_dir(dev, args[1], hook, name);
     if (name[0])
     {
         ventoy_set_env(args[2], name);
@@ -4258,6 +4266,18 @@ end:
     return rc;
 }
 
+static grub_err_t ventoy_cmd_fs_enum_1st_file(grub_extcmd_context_t ctxt, int argc, char **args)
+{
+    (void)ctxt;
+    return ventoy_fs_enum_1st_child(argc, args, ventoy_fs_enum_1st_file);
+}
+
+static grub_err_t ventoy_cmd_fs_enum_1st_dir(grub_extcmd_context_t ctxt, int argc, char **args)
+{
+    (void)ctxt;
+    return ventoy_fs_enum_1st_child(argc, args, ventoy_fs_enum_1st_dir);
+}
+
 static grub_err_t ventoy_cmd_basename(grub_extcmd_context_t ctxt, int argc, char **args)
 {
     char c;
@@ -4491,6 +4511,7 @@ static cmd_para ventoy_cmds[] =
     { "vt_check_part_exist", ventoy_cmd_part_exist, 0, NULL, "", "", NULL },
     { "vt_get_fs_label", ventoy_cmd_get_fs_label, 0, NULL, "", "", NULL },
     { "vt_fs_enum_1st_file", ventoy_cmd_fs_enum_1st_file, 0, NULL, "", "", NULL },
+    { "vt_fs_enum_1st_dir", ventoy_cmd_fs_enum_1st_dir, 0, NULL, "", "", NULL },
     { "vt_file_basename", ventoy_cmd_basename, 0, NULL, "", "", NULL },    
     { "vt_file_basefile", ventoy_cmd_basefile, 0, NULL, "", "", NULL },    
     { "vt_enum_video_mode", ventoy_cmd_enum_video_mode, 0, NULL, "", "", NULL },    
index 0345da61f6825e0e71aa6bd3200c9c2aa0bff5e7..a59e8948a1105e71f9b16f7fa21e621963997382 100644 (file)
@@ -27,6 +27,59 @@ 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)
index 7f822de2c9d44aa78f7c420afeddced0e9120b66..f6c1c8c69ff6c32e99748a8b2b27210b8a3afbbc 100644 (file)
 
 VTPATH_OLD=$PATH; PATH=$BUSYBOX_PATH:$VTOY_PATH/tool:$PATH
 
-wrt_insmod() {
-    kbit=$1
-    kv=$(uname -r)
-    
-    echo "insmod $kv $kbit" >> $VTOY_PATH/log
-    
-    [ -f /ventoy_openwrt/$kv/$kbit/dax.ko ] && insmod /ventoy_openwrt/$kv/$kbit/dax.ko > /dev/null 2>&1
-    [ -f /ventoy_openwrt/$kv/$kbit/dm-mod.ko ] && insmod /ventoy_openwrt/$kv/$kbit/dm-mod.ko > /dev/null 2>&1
-}
-
-
 mkdir /sys
 mount -t sysfs sys /sys
 mdev -s
 
-
-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
-        echo "insmod generic failed" >> $VTOY_PATH/log
-    else
-        wrt_insmod legacy
-    fi
-fi
-
 sh $VTOY_PATH/loop/openwrt/ventoy-disk.sh
index 2ea258592e9d8ba2f11d521113f7c7798377f2fa..7f3347dac08c2d7a306458c5c7184fa004791384 100644 (file)
@@ -1626,14 +1626,23 @@ function ventoy_img_openwrt {
         set ventoy_busybox_ver=64
     fi
 
-    if [ ! -f ${vtoy_iso_part}/ventoy/ventoy_openwrt.xz ]; then
-        ventoy_gui_console
-        echo -e "\n ventoy_openwrt.xz not found. Please refer https://www.ventoy.net/en/doc_openwrt.html.\n"
-        echo -e " 未找到 ventoy_openwrt.xz 文件。请参考 https://www.ventoy.net/cn/doc_openwrt.html\n"
-        echo -e "\n press ENTER to exit (请按 回车 键返回) ..."
-        read vtInputKey
-        ventoy_cli_console
-        return
+    vt_fs_enum_1st_dir (vtimghd,2) /lib/modules/ vt_dir_name
+    
+    if [ -f (vtimghd,2)/lib/modules/$vt_dir_name/dm-mod.ko ]; then
+        vt_img_extra_initrd_append  (vtimghd,2)/lib/modules/$vt_dir_name/dm-mod.ko
+        if [ -f (vtimghd,2)/lib/modules/$vt_dir_name/dax.ko ]; then
+            vt_img_extra_initrd_append  (vtimghd,2)/lib/modules/$vt_dir_name/dax.ko
+        fi
+    else
+        if [ ! -f ${vtoy_iso_part}/ventoy/ventoy_openwrt.xz ]; then
+            ventoy_gui_console
+            echo -e "\n ventoy_openwrt.xz not found. Please refer https://www.ventoy.net/en/doc_openwrt.html.\n"
+            echo -e " 未找到 ventoy_openwrt.xz 文件。请参考 https://www.ventoy.net/cn/doc_openwrt.html\n"
+            echo -e "\n press ENTER to exit (请按 回车 键返回) ..."
+            read vtInputKey
+            ventoy_cli_console
+            return
+        fi
     fi
 
     if vt_img_check_range "${vtoy_iso_part}${vt_chosen_path}"; then
index 978b10cda5681a5b2f6a7d0724a98bca86653b6b..420aefca5116510375ba33881e1f1fac9b7f6125 100644 (file)
Binary files a/INSTALL/tool/aarch64/vtoygpt and b/INSTALL/tool/aarch64/vtoygpt differ
index 1916a57f1e42d4d158fd2c44625cb2f2090958b6..127f080c5bd351fd85d6e4a93dcee4f93b800bf9 100644 (file)
Binary files a/INSTALL/tool/i386/vtoygpt and b/INSTALL/tool/i386/vtoygpt differ
index c197bd865d7f579c44baa75f04ca87a9f2654224..074d6f09c8d09acd4b7ed8fe5a1772b1ce24e023 100644 (file)
Binary files a/INSTALL/tool/mips64el/vtoygpt and b/INSTALL/tool/mips64el/vtoygpt differ
index e1501055a9bb2e035623023770c1feb8d420b9b7..068aaf6e62c3dc15b49fd3e07f95bf0b77c1b174 100644 (file)
Binary files a/INSTALL/tool/x86_64/vtoygpt and b/INSTALL/tool/x86_64/vtoygpt differ