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;
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;
}
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);
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;
{ "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 },
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)
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
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