Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
dadigang
Ventoy
Commits
99627752
Commit
99627752
authored
Aug 13, 2020
by
longpanda
Browse files
update
parent
062f8160
Changes
33
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
733 additions
and
19 deletions
+733
-19
FUSEISO/vtoy_fuse_iso.c
FUSEISO/vtoy_fuse_iso.c
+5
-3
FUSEISO/vtoy_fuse_iso_32
FUSEISO/vtoy_fuse_iso_32
+0
-0
FUSEISO/vtoy_fuse_iso_64
FUSEISO/vtoy_fuse_iso_64
+0
-0
GRUB2/MOD_SRC/grub-2.04/grub-core/lib/syslinux_parse.c
GRUB2/MOD_SRC/grub-2.04/grub-core/lib/syslinux_parse.c
+9
-1
GRUB2/MOD_SRC/grub-2.04/grub-core/loader/i386/linux.c
GRUB2/MOD_SRC/grub-2.04/grub-core/loader/i386/linux.c
+121
-11
GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy.c
GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy.c
+189
-0
GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_def.h
GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_def.h
+2
-0
GRUB2/MOD_SRC/grub-2.04/install.sh
GRUB2/MOD_SRC/grub-2.04/install.sh
+2
-2
IMG/cpio/ventoy/hook/debian/udev_disk_hook.sh
IMG/cpio/ventoy/hook/debian/udev_disk_hook.sh
+8
-0
IMG/cpio/ventoy/hook/debian/ventoy-hook.sh
IMG/cpio/ventoy/hook/debian/ventoy-hook.sh
+4
-0
IMG/cpio/ventoy/hook/debian/vyos-disk.sh
IMG/cpio/ventoy/hook/debian/vyos-disk.sh
+49
-0
IMG/cpio/ventoy/hook/debian/vyos-hook.sh
IMG/cpio/ventoy/hook/debian/vyos-hook.sh
+25
-0
IMG/cpio/ventoy/hook/hyperbola/ventoy-disk.sh
IMG/cpio/ventoy/hook/hyperbola/ventoy-disk.sh
+48
-0
IMG/cpio/ventoy/hook/hyperbola/ventoy-hook.sh
IMG/cpio/ventoy/hook/hyperbola/ventoy-hook.sh
+44
-0
IMG/cpio/ventoy/hook/hyperbola/ventoy-timeout.sh
IMG/cpio/ventoy/hook/hyperbola/ventoy-timeout.sh
+36
-0
IMG/cpio/ventoy/hook/ventoy-hook-lib.sh
IMG/cpio/ventoy/hook/ventoy-hook-lib.sh
+26
-2
IMG/cpio/ventoy/loop/easyos/ventoy-disk.sh
IMG/cpio/ventoy/loop/easyos/ventoy-disk.sh
+53
-0
IMG/cpio/ventoy/loop/easyos/ventoy-hook.sh
IMG/cpio/ventoy/loop/easyos/ventoy-hook.sh
+32
-0
IMG/cpio/ventoy/loop/openwrt/ventoy-disk.sh
IMG/cpio/ventoy/loop/openwrt/ventoy-disk.sh
+50
-0
IMG/cpio/ventoy/loop/openwrt/ventoy-hook.sh
IMG/cpio/ventoy/loop/openwrt/ventoy-hook.sh
+30
-0
No files found.
FUSEISO/vtoy_fuse_iso.c
View file @
99627752
...
...
@@ -114,11 +114,12 @@ static int ventoy_iso_open(const char *path, struct fuse_file_info *file)
return
0
;
}
static
int
ventoy_read_iso_sector
(
uint32_t
sector
,
uint32_t
num
,
void
*
buf
)
static
int
ventoy_read_iso_sector
(
uint32_t
sector
,
uint32_t
num
,
char
*
buf
)
{
uint32_t
i
=
0
;
uint32_t
leftSec
=
0
;
uint32_t
readSec
=
0
;
off_t
offset
=
0
;
dmtable_entry
*
entry
=
NULL
;
for
(
i
=
0
;
i
<
g_disk_entry_num
&&
num
>
0
;
i
++
)
...
...
@@ -127,14 +128,15 @@ static int ventoy_read_iso_sector(uint32_t sector, uint32_t num, void *buf)
if
(
sector
>=
entry
->
isoSector
&&
sector
<
entry
->
isoSector
+
entry
->
sectorNum
)
{
lseek
(
g_disk_fd
,
(
entry
->
diskSector
+
(
sector
-
entry
->
isoSector
))
*
512
,
SEEK_SET
)
;
offset
=
(
entry
->
diskSector
+
(
sector
-
entry
->
isoSector
))
*
512
;
leftSec
=
entry
->
sectorNum
-
(
sector
-
entry
->
isoSector
);
readSec
=
(
leftSec
>
num
)
?
num
:
leftSec
;
read
(
g_disk_fd
,
buf
,
readSec
*
512
);
p
read
(
g_disk_fd
,
buf
,
readSec
*
512
,
offset
);
sector
+=
readSec
;
buf
+=
readSec
*
512
;
num
-=
readSec
;
}
}
...
...
FUSEISO/vtoy_fuse_iso_32
View file @
99627752
No preview for this file type
FUSEISO/vtoy_fuse_iso_64
View file @
99627752
No preview for this file type
GRUB2/MOD_SRC/grub-2.04/grub-core/lib/syslinux_parse.c
View file @
99627752
...
...
@@ -423,7 +423,6 @@ static grub_err_t
cmd_timeout
(
const
char
*
line
,
struct
syslinux_menu
*
menu
)
{
menu
->
timeout
=
grub_strtoul
(
line
,
NULL
,
0
);
return
GRUB_ERR_NONE
;
}
...
...
@@ -991,6 +990,7 @@ write_entry (struct output_buffer *outbuf,
print_string
(
"
\n
"
);
}
print_string
(
"boot
\n
"
);
}
break
;
case
KERNEL_CHAINLOADER
:
...
...
@@ -1433,6 +1433,7 @@ config_file (struct output_buffer *outbuf,
const
char
*
fname
,
struct
syslinux_menu
*
parent
,
grub_syslinux_flavour_t
flav
)
{
const
char
*
data
;
grub_err_t
err
;
struct
syslinux_menu
menu
;
struct
syslinux_menuentry
*
curentry
,
*
lentry
;
...
...
@@ -1447,6 +1448,13 @@ config_file (struct output_buffer *outbuf,
menu
.
filename
=
fname
;
menu
.
parent
=
parent
;
data
=
grub_env_get
(
"vtdebug_flag"
);
if
(
data
&&
data
[
0
])
{
menu
.
timeout
=
100
;
}
err
=
syslinux_parse_real
(
&
menu
);
if
(
err
)
return
err
;
...
...
GRUB2/MOD_SRC/grub-2.04/grub-core/loader/i386/linux.c
View file @
99627752
...
...
@@ -86,6 +86,9 @@ static int ventoy_debug = 0;
static
int
ventoy_initrd_called
=
0
;
static
int
ventoy_linux_argc
=
0
;
static
char
**
ventoy_linux_args
=
NULL
;
static
int
ventoy_extra_initrd_num
=
0
;
static
char
*
ventoy_extra_initrd_list
[
256
];
static
grub_err_t
grub_cmd_initrd
(
grub_command_t
cmd
__attribute__
((
unused
)),
int
argc
,
char
*
argv
[]);
...
...
@@ -427,8 +430,9 @@ static void ventoy_debug_pause(void)
static
int
ventoy_preboot
(
void
)
{
int
i
;
const
char
*
file
;
char
buf
[
128
];
char
*
argv
[
2
];
if
(
ventoy_debug
)
{
...
...
@@ -449,16 +453,28 @@ static int ventoy_preboot(void)
grub_snprintf
(
buf
,
sizeof
(
buf
),
"mem:%s:size:%s"
,
grub_env_get
(
"ventoy_cpio_addr"
),
grub_env_get
(
"ventoy_cpio_size"
));
argv
[
0
]
=
buf
;
argv
[
1
]
=
NULL
;
grub_cmd_initrd
(
NULL
,
1
,
argv
);
ventoy_extra_initrd_list
[
ventoy_extra_initrd_num
++
]
=
grub_strdup
(
buf
);
file
=
grub_env_get
(
"vtoy_img_part_file"
);
if
(
file
)
{
ventoy_extra_initrd_list
[
ventoy_extra_initrd_num
++
]
=
grub_strdup
(
file
);
}
if
(
ventoy_debug
)
{
grub_printf
(
"add initrd %s
\n
"
,
buf
);
grub_printf
(
"========== initrd list ==========
\n
"
);
for
(
i
=
0
;
i
<
ventoy_extra_initrd_num
;
i
++
)
{
grub_printf
(
"%s
\n
"
,
ventoy_extra_initrd_list
[
i
]);
}
grub_printf
(
"=================================
\n
"
);
ventoy_debug_pause
();
}
grub_cmd_initrd
(
NULL
,
ventoy_extra_initrd_num
,
ventoy_extra_initrd_list
);
return
0
;
}
...
...
@@ -478,6 +494,13 @@ static int ventoy_boot_opt_filter(char *opt)
}
return
0
;
}
if
(
grub_strncmp
(
opt
,
"init="
,
5
)
==
0
)
{
opt
[
0
]
=
'v'
;
opt
[
1
]
=
't'
;
return
0
;
}
if
(
ventoy_debug
)
{
...
...
@@ -597,7 +620,7 @@ static int ventoy_bootopt_hook(int argc, char *argv[])
if
(
ventoy_debug
)
{
ventoy_linux_args
[
count
++
]
=
grub_strdup
(
"loglevel=
10
"
);
ventoy_linux_args
[
count
++
]
=
grub_strdup
(
"loglevel=
7
"
);
}
ventoy_linux_argc
=
count
;
...
...
@@ -663,6 +686,72 @@ grub_cmd_unset_boot_opt (grub_command_t cmd __attribute__ ((unused)),
return
0
;
}
static
grub_err_t
grub_cmd_extra_initrd_append
(
grub_command_t
cmd
__attribute__
((
unused
)),
int
argc
,
char
*
argv
[])
{
int
newclen
=
0
;
char
*
pos
=
NULL
;
char
*
end
=
NULL
;
char
buf
[
256
]
=
{
0
};
if
(
argc
!=
1
)
{
return
1
;
}
for
(
pos
=
argv
[
0
];
*
pos
;
pos
++
)
{
if
(
*
pos
==
'/'
)
{
end
=
pos
;
}
}
if
(
end
)
{
/* grub2 newc bug workaround */
newclen
=
(
int
)
grub_strlen
(
end
+
1
);
if
((
110
+
newclen
)
%
4
==
0
)
{
grub_snprintf
(
buf
,
sizeof
(
buf
),
"newc:.%s:%s"
,
end
+
1
,
argv
[
0
]);
}
else
{
grub_snprintf
(
buf
,
sizeof
(
buf
),
"newc:%s:%s"
,
end
+
1
,
argv
[
0
]);
}
if
(
ventoy_extra_initrd_num
<
256
)
{
ventoy_extra_initrd_list
[
ventoy_extra_initrd_num
++
]
=
grub_strdup
(
buf
);
}
}
return
0
;
}
static
grub_err_t
grub_cmd_extra_initrd_reset
(
grub_command_t
cmd
__attribute__
((
unused
)),
int
argc
,
char
*
argv
[])
{
int
i
;
(
void
)
argc
;
(
void
)
argv
;
for
(
i
=
0
;
i
<
ventoy_extra_initrd_num
;
i
++
)
{
if
(
ventoy_extra_initrd_list
[
i
])
{
grub_free
(
ventoy_extra_initrd_list
[
i
]);
}
}
grub_memset
(
ventoy_extra_initrd_list
,
0
,
sizeof
(
ventoy_extra_initrd_list
));
return
0
;
}
static
grub_err_t
grub_linux_boot
(
void
)
...
...
@@ -1416,8 +1505,8 @@ ventoy_cmd_initrd (grub_command_t cmd __attribute__ ((unused)),
int
argc
,
char
*
argv
[])
{
int
i
;
const
char
*
file
;
char
buf
[
64
];
char
*
newargv
[
32
]
=
{
NULL
};
if
(
ventoy_debug
)
grub_printf
(
"ventoy_cmd_initrd %d
\n
"
,
ventoy_linux_argc
);
...
...
@@ -1430,19 +1519,37 @@ ventoy_cmd_initrd (grub_command_t cmd __attribute__ ((unused)),
if
(
ventoy_debug
)
grub_printf
(
"membuf=%s
\n
"
,
buf
);
newargv
[
0
]
=
buf
;
ventoy_extra_initrd_list
[
ventoy_extra_initrd_num
++
]
=
grub_strdup
(
buf
);
file
=
grub_env_get
(
"vtoy_img_part_file"
);
if
(
file
)
{
ventoy_extra_initrd_list
[
ventoy_extra_initrd_num
++
]
=
grub_strdup
(
file
);
}
for
(
i
=
0
;
i
<
argc
;
i
++
)
{
newargv
[
i
+
1
]
=
argv
[
i
];
ventoy_extra_initrd_list
[
ventoy_extra_initrd_num
++
]
=
grub_strdup
(
argv
[
i
]
)
;
}
ventoy_initrd_called
=
1
;
if
(
ventoy_debug
)
{
grub_printf
(
"========== initrd list ==========
\n
"
);
for
(
i
=
0
;
i
<
ventoy_extra_initrd_num
;
i
++
)
{
grub_printf
(
"%s
\n
"
,
ventoy_extra_initrd_list
[
i
]);
}
grub_printf
(
"=================================
\n
"
);
}
return
grub_cmd_initrd
(
cmd
,
argc
+
1
,
newargv
);
return
grub_cmd_initrd
(
cmd
,
ventoy_extra_initrd_num
,
ventoy_extra_initrd_list
);
}
static
grub_command_t
cmd_linux
,
cmd_initrd
,
cmd_linuxefi
,
cmd_initrdefi
,
cmd_set_bootopt
,
cmd_unset_bootopt
;
static
grub_command_t
cmd_linux
,
cmd_initrd
,
cmd_linuxefi
,
cmd_initrdefi
;
static
grub_command_t
cmd_set_bootopt
,
cmd_unset_bootopt
,
cmd_extra_initrd_append
,
cmd_extra_initrd_reset
;
GRUB_MOD_INIT
(
linux
)
{
...
...
@@ -1457,6 +1564,9 @@ GRUB_MOD_INIT(linux)
0
,
N_
(
"Load initrd."
));
cmd_set_bootopt
=
grub_register_command
(
"vt_set_boot_opt"
,
grub_cmd_set_boot_opt
,
0
,
N_
(
"set ext boot opt"
));
cmd_unset_bootopt
=
grub_register_command
(
"vt_unset_boot_opt"
,
grub_cmd_unset_boot_opt
,
0
,
N_
(
"unset ext boot opt"
));
cmd_extra_initrd_append
=
grub_register_command
(
"vt_img_extra_initrd_append"
,
grub_cmd_extra_initrd_append
,
0
,
N_
(
""
));
cmd_extra_initrd_reset
=
grub_register_command
(
"vt_img_extra_initrd_reset"
,
grub_cmd_extra_initrd_reset
,
0
,
N_
(
""
));
ventoy_linux_args
=
grub_zalloc
(
sizeof
(
char
*
)
*
LINUX_MAX_ARGC
);
...
...
GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy.c
View file @
99627752
...
...
@@ -54,6 +54,7 @@ int g_valid_initrd_count = 0;
int
g_default_menu_mode
=
0
;
int
g_filt_dot_underscore_file
=
0
;
static
grub_file_t
g_old_file
;
static
int
g_ventoy_last_entry_back
;
char
g_iso_path
[
256
];
char
g_img_swap_tmp_buf
[
1024
];
...
...
@@ -92,6 +93,9 @@ static int g_tree_script_pos = 0;
static
char
*
g_list_script_buf
=
NULL
;
static
int
g_list_script_pos
=
0
;
static
char
*
g_part_list_buf
=
NULL
;
static
int
g_part_list_pos
=
0
;
static
const
char
*
g_menu_class
[]
=
{
"vtoyiso"
,
"vtoywim"
,
"vtoyefi"
,
"vtoyimg"
...
...
@@ -1812,6 +1816,7 @@ int ventoy_check_block_list(grub_file_t file, ventoy_img_chunk_list *chunklist,
int
ventoy_get_block_list
(
grub_file_t
file
,
ventoy_img_chunk_list
*
chunklist
,
grub_disk_addr_t
start
)
{
int
fs_type
;
int
len
;
grub_uint32_t
i
=
0
;
grub_uint32_t
sector
=
0
;
grub_uint32_t
count
=
0
;
...
...
@@ -1856,6 +1861,27 @@ int ventoy_get_block_list(grub_file_t file, ventoy_img_chunk_list *chunklist, gr
}
}
len
=
(
int
)
grub_strlen
(
file
->
name
);
if
(
grub_strncasecmp
(
file
->
name
+
len
-
4
,
".img"
,
4
)
==
0
)
{
for
(
i
=
0
;
i
<
chunklist
->
cur_chunk
;
i
++
)
{
count
=
chunklist
->
chunk
[
i
].
disk_end_sector
+
1
-
chunklist
->
chunk
[
i
].
disk_start_sector
;
if
(
count
<
4
)
{
count
=
1
;
}
else
{
count
>>=
2
;
}
chunklist
->
chunk
[
i
].
img_start_sector
=
sector
;
chunklist
->
chunk
[
i
].
img_end_sector
=
sector
+
count
-
1
;
sector
+=
count
;
}
}
return
0
;
}
...
...
@@ -2498,6 +2524,62 @@ end:
return
0
;
}
static
int
ventoy_img_partition_callback
(
struct
grub_disk
*
disk
,
const
grub_partition_t
partition
,
void
*
data
)
{
(
void
)
disk
;
(
void
)
data
;
g_part_list_pos
+=
grub_snprintf
(
g_part_list_buf
+
g_part_list_pos
,
VTOY_MAX_SCRIPT_BUF
-
g_part_list_pos
,
"0 %llu linear /dev/ventoy %llu
\n
"
,
(
ulonglong
)
partition
->
len
,
(
ulonglong
)
partition
->
start
);
return
0
;
}
static
grub_err_t
ventoy_cmd_img_part_info
(
grub_extcmd_context_t
ctxt
,
int
argc
,
char
**
args
)
{
char
*
device_name
=
NULL
;
grub_device_t
dev
=
NULL
;
char
buf
[
64
];
(
void
)
ctxt
;
g_part_list_pos
=
0
;
grub_env_unset
(
"vtoy_img_part_file"
);
if
(
argc
!=
1
)
{
return
1
;
}
device_name
=
grub_file_get_device_name
(
args
[
0
]);
if
(
!
device_name
)
{
debug
(
"ventoy_cmd_img_part_info failed, %s
\n
"
,
args
[
0
]);
goto
end
;
}
dev
=
grub_device_open
(
device_name
);
if
(
!
dev
)
{
debug
(
"grub_device_open failed, %s
\n
"
,
device_name
);
goto
end
;
}
grub_partition_iterate
(
dev
->
disk
,
ventoy_img_partition_callback
,
NULL
);
grub_snprintf
(
buf
,
sizeof
(
buf
),
"newc:vtoy_dm_table:mem:0x%llx:size:%d"
,
(
ulonglong
)(
ulong
)
g_part_list_buf
,
g_part_list_pos
);
grub_env_set
(
"vtoy_img_part_file"
,
buf
);
end:
check_free
(
device_name
,
grub_free
);
check_free
(
dev
,
grub_device_close
);
return
0
;
}
static
grub_err_t
ventoy_cmd_file_strstr
(
grub_extcmd_context_t
ctxt
,
int
argc
,
char
**
args
)
{
int
rc
=
1
;
...
...
@@ -2645,6 +2727,108 @@ static grub_err_t ventoy_cmd_img_unhook_root(grub_extcmd_context_t ctxt, int arg
return
0
;
}
static
grub_err_t
ventoy_cmd_push_last_entry
(
grub_extcmd_context_t
ctxt
,
int
argc
,
char
**
args
)
{
(
void
)
ctxt
;
(
void
)
argc
;
(
void
)
args
;
g_ventoy_last_entry_back
=
g_ventoy_last_entry
;
g_ventoy_last_entry
=
-
1
;
return
0
;
}
static
grub_err_t
ventoy_cmd_pop_last_entry
(
grub_extcmd_context_t
ctxt
,
int
argc
,
char
**
args
)
{
(
void
)
ctxt
;
(
void
)
argc
;
(
void
)
args
;
g_ventoy_last_entry
=
g_ventoy_last_entry_back
;
return
0
;
}
static
int
ventoy_lib_module_callback
(
const
char
*
filename
,
const
struct
grub_dirhook_info
*
info
,
void
*
data
)
{
const
char
*
pos
=
filename
+
1
;
if
(
info
->
dir
)
{
while
(
*
pos
)
{
if
(
*
pos
==
'.'
)
{
if
((
*
(
pos
-
1
)
>=
'0'
&&
*
(
pos
-
1
)
<=
'9'
)
&&
(
*
(
pos
+
1
)
>=
'0'
&&
*
(
pos
+
1
)
<=
'9'
))
{
grub_strncpy
((
char
*
)
data
,
filename
,
128
);
return
1
;
}
}
pos
++
;
}
}
return
0
;
}
static
grub_err_t
ventoy_cmd_lib_module_ver
(
grub_extcmd_context_t
ctxt
,
int
argc
,
char
**
args
)
{
int
rc
=
1
;
char
*
device_name
=
NULL
;
grub_device_t
dev
=
NULL
;
grub_fs_t
fs
=
NULL
;
char
buf
[
128
]
=
{
0
};
(
void
)
ctxt
;
if
(
argc
!=
3
)
{
debug
(
"ventoy_cmd_lib_module_ver, invalid param num %d
\n
"
,
argc
);
return
1
;
}
debug
(
"ventoy_cmd_lib_module_ver %s %s %s
\n
"
,
args
[
0
],
args
[
1
],
args
[
2
]);
device_name
=
grub_file_get_device_name
(
args
[
0
]);
if
(
!
device_name
)
{
debug
(
"grub_file_get_device_name failed, %s
\n
"
,
args
[
0
]);
goto
end
;
}
dev
=
grub_device_open
(
device_name
);
if
(
!
dev
)
{
debug
(
"grub_device_open failed, %s
\n
"
,
device_name
);
goto
end
;
}
fs
=
grub_fs_probe
(
dev
);
if
(
!
fs
)
{
debug
(
"grub_fs_probe failed, %s
\n
"
,
device_name
);
goto
end
;
}
fs
->
fs_dir
(
dev
,
args
[
1
],
ventoy_lib_module_callback
,
buf
);
if
(
buf
[
0
])
{
ventoy_set_env
(
args
[
2
],
buf
);
}
rc
=
0
;
end:
check_free
(
device_name
,
grub_free
);
check_free
(
dev
,
grub_device_close
);
return
rc
;
}
grub_uint64_t
ventoy_grub_get_file_size
(
const
char
*
fmt
,
...)
{
grub_uint64_t
size
=
0
;
...
...
@@ -2747,6 +2931,7 @@ static int ventoy_env_init(void)
grub_env_set
(
"vtdebug_flag"
,
""
);
g_part_list_buf
=
grub_malloc
(
VTOY_PART_BUF_LEN
);
g_tree_script_buf
=
grub_malloc
(
VTOY_MAX_SCRIPT_BUF
);
g_list_script_buf
=
grub_malloc
(
VTOY_MAX_SCRIPT_BUF
);
...
...
@@ -2785,6 +2970,9 @@ static cmd_para ventoy_cmds[] =
{
"vt_load_cpio"
,
ventoy_cmd_load_cpio
,
0
,
NULL
,
""
,
""
,
NULL
},
{
"vt_trailer_cpio"
,
ventoy_cmd_trailer_cpio
,
0
,
NULL
,
""
,
""
,
NULL
},
{
"vt_push_last_entry"
,
ventoy_cmd_push_last_entry
,
0
,
NULL
,
""
,
""
,
NULL
},
{
"vt_pop_last_entry"
,
ventoy_cmd_pop_last_entry
,
0
,
NULL
,
""
,
""
,
NULL
},
{
"vt_get_lib_module_ver"
,
ventoy_cmd_lib_module_ver
,
0
,
NULL
,
""
,
""
,
NULL
},
{
"vt_find_first_bootable_hd"
,
ventoy_cmd_find_bootable_hdd
,
0
,
NULL
,
""
,
""
,
NULL
},
{
"vt_dump_menu"
,
ventoy_cmd_dump_menu
,
0
,
NULL
,
""
,
""
,
NULL
},
...
...
@@ -2834,6 +3022,7 @@ static cmd_para ventoy_cmds[] =
{
"vt_1st_line"
,
ventoy_cmd_read_1st_line
,
0
,
NULL
,
""
,
""
,
NULL
},
{
"vt_file_strstr"
,
ventoy_cmd_file_strstr
,
0
,
NULL
,
""
,
""
,
NULL
},
{
"vt_img_part_info"
,
ventoy_cmd_img_part_info
,
0
,
NULL
,
""
,
""
,
NULL
},
{
"vt_parse_iso_volume"
,
ventoy_cmd_parse_volume
,
0
,
NULL
,
""
,
""
,
NULL
},
...
...
GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_def.h
View file @
99627752
...
...
@@ -23,6 +23,8 @@
#define VTOY_MAX_SCRIPT_BUF (4 * 1024 * 1024)
#define VTOY_PART_BUF_LEN (128 * 1024)
#define VTOY_FILT_MIN_FILE_SIZE 32768
#define VTOY_SIZE_1GB 1073741824
...
...
GRUB2/MOD_SRC/grub-2.04/install.sh
View file @
99627752
...
...
@@ -12,10 +12,10 @@ make install
PATH
=
$PATH
:
$VT_DIR
/GRUB2/INSTALL/bin/:
$VT_DIR
/GRUB2/INSTALL/sbin/
net_modules_legacy
=
"net tftp http"
all_modules_legacy
=
"date drivemap blocklist vga_text ntldr search at_keyboard usb_keyboard gcry_md5 hashsum gzio xzio lzopio lspci pci ext2 xfs ventoy chain read halt iso9660 linux16 test true sleep reboot echo videotest videoinfo videotest_checksum video_colors video_cirrus video_bochs vga vbe video_fb font video gettext extcmd terminal linux minicmd help configfile tr trig boot biosdisk disk ls tar squash4 password_pbkdf2 all_video png jpeg part_gpt part_msdos fat exfat ntfs loopback gzio normal udf gfxmenu gfxterm gfxterm_background gfxterm_menu"
all_modules_legacy
=
"date drivemap blocklist
newc
vga_text ntldr search at_keyboard usb_keyboard gcry_md5 hashsum gzio xzio lzopio lspci pci ext2 xfs ventoy chain read halt iso9660 linux16 test true sleep reboot echo videotest videoinfo videotest_checksum video_colors video_cirrus video_bochs vga vbe video_fb font video gettext extcmd terminal linux minicmd help configfile tr trig boot biosdisk disk ls tar squash4 password_pbkdf2 all_video png jpeg part_gpt part_msdos fat exfat ntfs loopback gzio normal udf gfxmenu gfxterm gfxterm_background gfxterm_menu"
net_modules_uefi
=
"efinet net tftp http"
all_modules_uefi
=
"blocklist ventoy test search at_keyboard usb_keyboard gcry_md5 hashsum gzio xzio lzopio ext2 xfs read halt sleep serial terminfo png password_pbkdf2 gcry_sha512 pbkdf2 part_gpt part_msdos ls tar squash4 loopback part_apple minicmd diskfilter linux relocator jpeg iso9660 udf hfsplus halt acpi mmap gfxmenu video_colors trig bitmap_scale gfxterm bitmap font fat exfat ntfs fshelp efifwsetup reboot echo configfile normal terminal gettext chain priority_queue bufio datetime cat extcmd crypto gzio boot all_video efi_gop efi_uga video_bochs video_cirrus video video_fb gfxterm_background gfxterm_menu"
all_modules_uefi
=
"blocklist ventoy test
newc
search at_keyboard usb_keyboard gcry_md5 hashsum gzio xzio lzopio ext2 xfs read halt sleep serial terminfo png password_pbkdf2 gcry_sha512 pbkdf2 part_gpt part_msdos ls tar squash4 loopback part_apple minicmd diskfilter linux relocator jpeg iso9660 udf hfsplus halt acpi mmap gfxmenu video_colors trig bitmap_scale gfxterm bitmap font fat exfat ntfs fshelp efifwsetup reboot echo configfile normal terminal gettext chain priority_queue bufio datetime cat extcmd crypto gzio boot all_video efi_gop efi_uga video_bochs video_cirrus video video_fb gfxterm_background gfxterm_menu"
if
[
"
$1
"
=
"uefi"
]
;
then
all_modules
=
"
$net_modules_uefi
$all_modules_uefi
"
...
...
IMG/cpio/ventoy/hook/debian/udev_disk_hook.sh
View file @
99627752
...
...
@@ -43,6 +43,12 @@ ventoy_os_install_dmsetup() {
# install md-modules
LINE
=
$(
$GREP
' md-modules.*\.udeb'
$VTOY_PATH
/iso_file_list
)
if
[
$?
-eq
0
]
;
then
LINTCNT
=
$(
$GREP
-c
' md-modules.*\.udeb'
$VTOY_PATH
/iso_file_list
)
if
[
$LINTCNT
-gt
1
]
;
then
vtlog
"more than one pkgs, need to filter..."
VER
=
$(
$BUSYBOX_PATH
/uname
-r
)
LINE
=
$(
$GREP
' md-modules.*\.udeb'
$VTOY_PATH
/iso_file_list |
$GREP
$VER
)
fi
install_udeb_from_line
"
$LINE
"
${
vt_usb_disk
}
fi
...
...
@@ -83,6 +89,8 @@ if is_ventoy_hook_finished || not_ventoy_disk "${1:0:-1}"; then
exit
0
fi
vtlog
"====
$0
$*
===="
dmsetup_path
=
$(
ventoy_find_bin_path dmsetup
)
if
[
-z
"
$dmsetup_path
"
]
;
then
ventoy_os_install_dmsetup
"/dev/
${
1
:0:-1
}
"
...
...
IMG/cpio/ventoy/hook/debian/ventoy-hook.sh
View file @
99627752
...
...
@@ -64,6 +64,10 @@ ventoy_get_debian_distro() {
echo
'linuxconsole'
;
return
fi
if
$GREP
-q
'vyos'
/proc/version
;
then
echo
'vyos'
;
return
fi
echo
'default'
}
...
...
IMG/cpio/ventoy/hook/debian/vyos-disk.sh
0 → 100644
View file @
99627752
#!/ventoy/busybox/sh
#************************************************************************************
# Copyright (c) 2020, longpanda <admin@ventoy.net>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation; either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, see <http://www.gnu.org/licenses/>.
#
#************************************************************************************
.
/ventoy/hook/ventoy-hook-lib.sh
if
is_ventoy_hook_finished
;
then
exit
0
fi
vtlog
"#######
$0
$*
########"
VTPATH_OLD
=
$PATH
;
PATH
=
$BUSYBOX_PATH
:
$VTOY_PATH
/tool:
$PATH
wait_for_usb_disk_ready
vtdiskname
=
$(
get_ventoy_disk_name
)
if
[
"
$vtdiskname
"
=
"unknown"
]
;
then
vtlog
"ventoy disk not found"
PATH
=
$VTPATH_OLD
exit
0
fi
mkdir
-p
/live/vtoyfuse /live/vtoyiso
modprobe fuse
vtoydm
-p
-f
$VTOY_PATH
/ventoy_image_map
-d
$vtdiskname
>
$VTOY_PATH
/ventoy_dm_table
vtoy_fuse_iso
-f
$VTOY_PATH
/ventoy_dm_table
-m
/live/vtoyfuse
mount
-t
iso9660 /live/vtoyfuse/ventoy.iso /live/vtoyiso
PATH
=
$VTPATH_OLD
set_ventoy_hook_finish
IMG/cpio/ventoy/hook/debian/vyos-hook.sh
0 → 100644
View file @
99627752
#!/ventoy/busybox/sh
#************************************************************************************
# Copyright (c) 2020, longpanda <admin@ventoy.net>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation; either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, see <http://www.gnu.org/licenses/>.
#
#************************************************************************************
if
[
-e
/init
]
&&
$GREP
-q
'^mountroot$'
/init
;
then
echo
"Here before mountroot ..."
>>
$VTLOG
$SED
"/^mountroot
$/
i
\\
$BUSYBOX_PATH
/sh
$VTOY_PATH
/hook/debian/vyos-disk.sh"
-i
/init
$SED
"/^mountroot
$/
i
\\
export LIVE_MEDIA=/live/vtoyiso"
-i
/init
#$SED "/^mountroot$/i\\exec /ventoy/busybox/sh" -i /init
fi
IMG/cpio/ventoy/hook/hyperbola/ventoy-disk.sh
0 → 100644
View file @
99627752
#!/ventoy/busybox/sh
#************************************************************************************
# Copyright (c) 2020, longpanda <admin@ventoy.net>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation; either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, see <http://www.gnu.org/licenses/>.
#
#************************************************************************************
.
/ventoy/hook/ventoy-hook-lib.sh
vtlog
"#########
$0
$*
############"
if
is_ventoy_hook_finished
;
then
exit
0
fi
wait_for_usb_disk_ready
vtdiskname
=
$(
get_ventoy_disk_name
)
if
[
"
$vtdiskname
"
=
"unknown"
]
;
then
vtlog
"ventoy disk not found"
exit
0
fi
ventoy_udev_disk_common_hook
"
${
vtdiskname
#/dev/
}
2"
"noreplace"
if
[
-n
"
$1
"
]
;
then
blkdev_num
=
$(
$VTOY_PATH
/tool/dmsetup
ls
|
grep
ventoy |
sed
's/.*(\([0-9][0-9]*\),.*\([0-9][0-9]*\).*/\1:\2/'
)
vtDM
=
$(
ventoy_find_dm_id
${
blkdev_num
}
)
vtlog
"ln -s /dev/
$vtDM
$1
"
ln
-s
/dev/
$vtDM
"
$1
"
fi
# OK finish
set_ventoy_hook_finish
IMG/cpio/ventoy/hook/hyperbola/ventoy-hook.sh
0 → 100644
View file @
99627752
#!/ventoy/busybox/sh
#************************************************************************************
# Copyright (c) 2020, longpanda <admin@ventoy.net>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation; either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, see <http://www.gnu.org/licenses/>.
#
#************************************************************************************
.
$VTOY_PATH
/hook/ventoy-os-lib.sh
if
$GREP
-q
'^"$mount_handler"'
/init
;
then
echo
'use mount_handler ...'
>>
$VTLOG
$SED
"/^
\"\$
mount_handler
\"
/i
\
$BUSYBOX_PATH
/sh
$VTOY_PATH
/hook/hyperbola/ventoy-disk.sh
\"\$
hyperisodevice
\"
"
-i
/init
if
[
-f
/hooks/parabolaiso
]
;
then
$SED
'/while ! poll_device "${dev}"/a\ if /ventoy/busybox/sh /ventoy/hook/hyperbola/ventoy-timeout.sh ${dev}; then break; fi'
-i
/hooks/hyperiso
fi
else
# some archlinux initramfs doesn't contain device-mapper udev rules file
ARCH_UDEV_DIR
=
$(
ventoy_get_udev_conf_dir
)
if
[
-s
"
$ARCH_UDEV_DIR
/13-dm-disk.rules"
]
;
then
echo
'dm-disk rule exist'
>>
$VTLOG
else
echo
'Copy dm-disk rule file'
>>
$VTLOG
$CAT
$VTOY_PATH
/hook/default/13-dm-disk.rules
>
"
$ARCH_UDEV_DIR
/13-dm-disk.rules"
fi
# use default proc
ventoy_systemd_udevd_work_around
ventoy_add_udev_rule
"
$VTOY_PATH
/hook/default/udev_disk_hook.sh %k"
fi
IMG/cpio/ventoy/hook/hyperbola/ventoy-timeout.sh
0 → 100644
View file @
99627752
#!/ventoy/busybox/sh
#************************************************************************************
# Copyright (c) 2020, longpanda <admin@ventoy.net>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation; either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, see <http://www.gnu.org/licenses/>.
#
#************************************************************************************
.
/ventoy/hook/ventoy-hook-lib.sh
vtlog
"#########
$0
$*
############"
blkdev_num
=
$(
$VTOY_PATH
/tool/dmsetup
ls
|
grep
ventoy |
sed
's/.*(\([0-9][0-9]*\),.*\([0-9][0-9]*\).*/\1:\2/'
)
vtDM
=
$(
ventoy_find_dm_id
${
blkdev_num
}
)
if
[
-b
/dev/
$vtDM
]
;
then
vtlog
"ln -s /dev/
$vtDM
$1
"
ln
-s
/dev/
$vtDM
"
$1
"
exit
0
else
vtlog
"Device-mapper not found"
exit
1
fi
IMG/cpio/ventoy/hook/ventoy-hook-lib.sh
View file @
99627752
...
...
@@ -436,8 +436,14 @@ ventoy_udev_disk_common_hook() {
VTDISK
=
"
${
1
:0:-1
}
"
if
[
-e
/vtoy/vtoy
]
;
then
VTRWMOD
=
""
else
VTRWMOD
=
"--readonly"
fi
# create device mapper for iso image file
if
create_ventoy_device_mapper
"/dev/
$VTDISK
"
--readonly
;
then
if
create_ventoy_device_mapper
"/dev/
$VTDISK
"
$VTRWMOD
;
then
vtlog
"==== create ventoy device mapper success ===="
else
vtlog
"==== create ventoy device mapper failed ===="
...
...
@@ -453,7 +459,7 @@ ventoy_udev_disk_common_hook() {
done
fi
if
create_ventoy_device_mapper
"/dev/
$VTDISK
"
--readonly
;
then
if
create_ventoy_device_mapper
"/dev/
$VTDISK
"
$VTRWMOD
;
then
vtlog
"==== create ventoy device mapper success after retry ===="
else
vtlog
"==== create ventoy device mapper failed after retry ===="
...
...
@@ -473,6 +479,24 @@ ventoy_udev_disk_common_hook() {
fi
}
ventoy_create_dev_ventoy_part
()
{
blkdev_num
=
$(
$VTOY_PATH
/tool/dmsetup
ls
|
$GREP
ventoy |
$SED
's/.*(\([0-9][0-9]*\),.*\([0-9][0-9]*\).*/\1 \2/'
)
$BUSYBOX_PATH
/mknod
-m
0666 /dev/ventoy b
$blkdev_num
if
[
-e
/vtoy_dm_table
]
;
then
vtPartid
=
1
$CAT
/vtoy_dm_table |
while
read
vtline
;
do
echo
$vtline
>
/ventoy/dm_table_part
${
vtPartid
}
$VTOY_PATH
/tool/dmsetup create ventoy
${
vtPartid
}
/ventoy/dm_table_part
${
vtPartid
}
blkdev_num
=
$(
$VTOY_PATH
/tool/dmsetup
ls
|
$GREP
ventoy
${
vtPartid
}
|
$SED
's/.*(\([0-9][0-9]*\),.*\([0-9][0-9]*\).*/\1 \2/'
)
$BUSYBOX_PATH
/mknod
-m
0666 /dev/ventoy
${
vtPartid
}
b
$blkdev_num
vtPartid
=
$(
expr
$vtPartid
+ 1
)
done
fi
}
is_inotify_ventoy_part
()
{
if
echo
$1
|
$GREP
-q
"2$"
;
then
...
...
IMG/cpio/ventoy/loop/easyos/ventoy-disk.sh
0 → 100644
View file @
99627752
#!/ventoy/busybox/sh
#************************************************************************************
# Copyright (c) 2020, longpanda <admin@ventoy.net>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation; either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, see <http://www.gnu.org/licenses/>.
#
#************************************************************************************
.
/ventoy/hook/ventoy-hook-lib.sh
if
is_ventoy_hook_finished
;
then
exit
0
fi
vtlog
"#######
$0
$*
########"
VTPATH_OLD
=
$PATH
;
PATH
=
$BUSYBOX_PATH
:
$VTOY_PATH
/tool:
$PATH
$BUSYBOX_PATH
/insmod
$VTOY_PATH
/modules/dax.ko
$BUSYBOX_PATH
/insmod
$VTOY_PATH
/modules/dm-mod.ko
wait_for_usb_disk_ready
vtdiskname
=
$(
get_ventoy_disk_name
)
if
[
"
$vtdiskname
"
=
"unknown"
]
;
then
vtlog
"ventoy disk not found"
PATH
=
$VTPATH_OLD
exit
0
fi
ventoy_udev_disk_common_hook
"
${
vtdiskname
#/dev/
}
2"
"noreplace"
blkdev_num
=
$(
$VTOY_PATH
/tool/dmsetup
ls
|
grep
ventoy |
sed
's/.*(\([0-9][0-9]*\),.*\([0-9][0-9]*\).*/\1:\2/'
)
vtDM
=
$(
ventoy_find_dm_id
${
blkdev_num
}
)
echo
-n
$vtDM
>
/ventoy/vtDM
ventoy_create_dev_ventoy_part
mdev
-s
PATH
=
$VTPATH_OLD
set_ventoy_hook_finish
IMG/cpio/ventoy/loop/easyos/ventoy-hook.sh
0 → 100644
View file @
99627752
#!/ventoy/busybox/sh
#************************************************************************************
# Copyright (c) 2020, longpanda <admin@ventoy.net>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation; either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, see <http://www.gnu.org/licenses/>.
#
#************************************************************************************
.
$VTOY_PATH
/hook/ventoy-os-lib.sh
$SED
"/find drives/i
$BUSYBOX_PATH
/sh
$VTOY_PATH
/loop/easyos/ventoy-disk.sh; vtDM=
\$
(cat /ventoy/vtDM)"
-i
/init
$SED
"1a boot_dev=ventoy1;wkg_dev=ventoy2"
-i
/init
#check for ssd will read /sys/block/ventoy, will no exist, need a workaround
$SED
"s#/sys/block/
\$
{WKG_DRV}/#/sys/block/
\$
vtDM/#g"
-i
/init
#skip the resizing process, can't resizing partition
$SED
"s#640M#0M#g"
-i
/init
IMG/cpio/ventoy/loop/openwrt/ventoy-disk.sh
0 → 100644
View file @
99627752
#!/ventoy/busybox/sh
#************************************************************************************
# Copyright (c) 2020, longpanda <admin@ventoy.net>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation; either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, see <http://www.gnu.org/licenses/>.
#
#************************************************************************************
.
/ventoy/hook/ventoy-hook-lib.sh
if
is_ventoy_hook_finished
;
then
exit
0
fi
vtlog
"#######
$0
$*
########"
VTPATH_OLD
=
$PATH
;
PATH
=
$BUSYBOX_PATH
:
$VTOY_PATH
/tool:
$PATH
wait_for_usb_disk_ready
vtdiskname
=
$(
get_ventoy_disk_name
)
if
[
"
$vtdiskname
"
=
"unknown"
]
;
then
vtlog
"ventoy disk not found"
PATH
=
$VTPATH_OLD
exit
0
fi
ventoy_udev_disk_common_hook
"
${
vtdiskname
#/dev/
}
2"
"noreplace"
blkdev_num
=
$(
$VTOY_PATH
/tool/dmsetup
ls
|
grep
ventoy |
sed
's/.*(\([0-9][0-9]*\),.*\([0-9][0-9]*\).*/\1:\2/'
)
vtDM
=
$(
ventoy_find_dm_id
${
blkdev_num
}
)
echo
-n
$vtDM
>
/ventoy/vtDM
ventoy_create_dev_ventoy_part
mdev
-s
PATH
=
$VTPATH_OLD
set_ventoy_hook_finish
IMG/cpio/ventoy/loop/openwrt/ventoy-hook.sh
0 → 100644
View file @
99627752
#!/ventoy/busybox/sh
#************************************************************************************
# Copyright (c) 2020, longpanda <admin@ventoy.net>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation; either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, see <http://www.gnu.org/licenses/>.
#
#************************************************************************************
.
$VTOY_PATH
/hook/ventoy-os-lib.sh
$BUSYBOX_PATH
/mkdir /sys
$BUSYBOX_PATH
/mount
-t
proc proc /proc
$BUSYBOX_PATH
/mount
-t
sysfs sys /sys
$BUSYBOX_PATH
/mdev
-s
#$BUSYBOX_PATH/sh $VTOY_PATH/loop/openwrt/ventoy-disk.sh
exec
$BUSYBOX_PATH
/sh
Prev
1
2
Next
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment