Optimization for booting OpenWrt

This commit is contained in:
longpanda 2021-06-25 11:49:45 +08:00
parent da746c608f
commit b347c1b5da
8 changed files with 96 additions and 42 deletions

View 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 },

View 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)

View File

@ -21,37 +21,8 @@
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

View 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

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.