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
ba5978d2
Commit
ba5978d2
authored
Feb 13, 2022
by
longpanda
Browse files
1.0.66 release
parent
c57717ae
Changes
287
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
812 additions
and
85 deletions
+812
-85
.github/ISSUE_TEMPLATE/issue_template.yml
.github/ISSUE_TEMPLATE/issue_template.yml
+1
-1
EDK2/edk2_mod/edk2-edk2-stable201911/MdeModulePkg/Application/Ventoy/Ventoy.c
...dk2-stable201911/MdeModulePkg/Application/Ventoy/Ventoy.c
+6
-3
GRUB2/MOD_SRC/grub-2.04/grub-core/kern/file.c
GRUB2/MOD_SRC/grub-2.04/grub-core/kern/file.c
+94
-3
GRUB2/MOD_SRC/grub-2.04/grub-core/kern/fs.c
GRUB2/MOD_SRC/grub-2.04/grub-core/kern/fs.c
+38
-0
GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_cmd.c
GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_cmd.c
+366
-29
GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_def.h
GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_def.h
+17
-1
GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_plugin.c
GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_plugin.c
+25
-11
GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_vhd.c
GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_vhd.c
+5
-0
GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_windows.c
GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_windows.c
+196
-18
GRUB2/MOD_SRC/grub-2.04/include/grub/file.h
GRUB2/MOD_SRC/grub-2.04/include/grub/file.h
+8
-1
GRUB2/MOD_SRC/grub-2.04/include/grub/fs.h
GRUB2/MOD_SRC/grub-2.04/include/grub/fs.h
+1
-0
GRUB2/MOD_SRC/grub-2.04/include/grub/ventoy.h
GRUB2/MOD_SRC/grub-2.04/include/grub/ventoy.h
+14
-0
IMG/cpio/ventoy/hook/ventoy-hook-lib.sh
IMG/cpio/ventoy/hook/ventoy-hook-lib.sh
+25
-18
IMG/cpio/ventoy/loop/cloudready/ventoy-hook.sh
IMG/cpio/ventoy/loop/cloudready/ventoy-hook.sh
+4
-0
IMG/cpio/ventoy/loop/fydeos/ventoy-hook.sh
IMG/cpio/ventoy/loop/fydeos/ventoy-hook.sh
+4
-0
INSTALL/README
INSTALL/README
+8
-0
INSTALL/grub/arm64-efi/affs.mod
INSTALL/grub/arm64-efi/affs.mod
+0
-0
INSTALL/grub/arm64-efi/afs.mod
INSTALL/grub/arm64-efi/afs.mod
+0
-0
INSTALL/grub/arm64-efi/bfs.mod
INSTALL/grub/arm64-efi/bfs.mod
+0
-0
INSTALL/grub/arm64-efi/btrfs.mod
INSTALL/grub/arm64-efi/btrfs.mod
+0
-0
No files found.
.github/ISSUE_TEMPLATE/issue_template.yml
View file @
ba5978d2
...
@@ -21,7 +21,7 @@ body:
...
@@ -21,7 +21,7 @@ body:
attributes
:
attributes
:
label
:
Ventoy Version
label
:
Ventoy Version
description
:
What version of ventoy are you running?
description
:
What version of ventoy are you running?
placeholder
:
1.0.6
5
placeholder
:
1.0.6
6
validations
:
validations
:
required
:
true
required
:
true
-
type
:
dropdown
-
type
:
dropdown
...
...
EDK2/edk2_mod/edk2-edk2-stable201911/MdeModulePkg/Application/Ventoy/Ventoy.c
View file @
ba5978d2
...
@@ -229,12 +229,14 @@ static void EFIAPI ventoy_dump_chain(ventoy_chain_head *chain)
...
@@ -229,12 +229,14 @@ static void EFIAPI ventoy_dump_chain(ventoy_chain_head *chain)
debug
(
"os_param->vtoy_img_size=<%llu>"
,
chain
->
os_param
.
vtoy_img_size
);
debug
(
"os_param->vtoy_img_size=<%llu>"
,
chain
->
os_param
.
vtoy_img_size
);
debug
(
"os_param->vtoy_img_location_addr=<0x%llx>"
,
chain
->
os_param
.
vtoy_img_location_addr
);
debug
(
"os_param->vtoy_img_location_addr=<0x%llx>"
,
chain
->
os_param
.
vtoy_img_location_addr
);
debug
(
"os_param->vtoy_img_location_len=<%u>"
,
chain
->
os_param
.
vtoy_img_location_len
);
debug
(
"os_param->vtoy_img_location_len=<%u>"
,
chain
->
os_param
.
vtoy_img_location_len
);
debug
(
"os_param->vtoy_reserved=<%u %u %u %u %u>"
,
debug
(
"os_param->vtoy_reserved=<%u %u %u %u
%u %u
%u>"
,
g_os_param_reserved
[
0
],
g_os_param_reserved
[
0
],
g_os_param_reserved
[
1
],
g_os_param_reserved
[
1
],
g_os_param_reserved
[
2
],
g_os_param_reserved
[
2
],
g_os_param_reserved
[
3
],
g_os_param_reserved
[
3
],
g_os_param_reserved
[
4
]
g_os_param_reserved
[
4
],
g_os_param_reserved
[
5
],
g_os_param_reserved
[
6
]
);
);
ventoy_debug_pause
();
ventoy_debug_pause
();
...
@@ -578,7 +580,7 @@ STATIC EFI_STATUS EFIAPI ventoy_find_iso_disk(IN EFI_HANDLE ImageHandle)
...
@@ -578,7 +580,7 @@ STATIC EFI_STATUS EFIAPI ventoy_find_iso_disk(IN EFI_HANDLE ImageHandle)
if
(
CompareMem
(
g_chain
->
os_param
.
vtoy_disk_guid
,
pBuffer
+
0x180
,
16
)
==
0
)
if
(
CompareMem
(
g_chain
->
os_param
.
vtoy_disk_guid
,
pBuffer
+
0x180
,
16
)
==
0
)
{
{
pMBR
=
(
MBR_HEAD
*
)
pBuffer
;
pMBR
=
(
MBR_HEAD
*
)
pBuffer
;
if
(
pMBR
->
PartTbl
[
0
].
FsFlag
!=
0xEE
)
if
(
g_os_param_reserved
[
6
]
==
0
&&
pMBR
->
PartTbl
[
0
].
FsFlag
!=
0xEE
)
{
{
if
(
pMBR
->
PartTbl
[
0
].
StartSectorId
!=
2048
||
if
(
pMBR
->
PartTbl
[
0
].
StartSectorId
!=
2048
||
pMBR
->
PartTbl
[
1
].
SectorCount
!=
65536
||
pMBR
->
PartTbl
[
1
].
SectorCount
!=
65536
||
...
@@ -956,6 +958,7 @@ STATIC EFI_STATUS EFIAPI ventoy_parse_cmdline(IN EFI_HANDLE ImageHandle)
...
@@ -956,6 +958,7 @@ STATIC EFI_STATUS EFIAPI ventoy_parse_cmdline(IN EFI_HANDLE ImageHandle)
debug
(
"memdisk mode iso_buf_size:%u"
,
g_iso_buf_size
);
debug
(
"memdisk mode iso_buf_size:%u"
,
g_iso_buf_size
);
g_chain
=
chain
;
g_chain
=
chain
;
g_os_param_reserved
=
(
UINT8
*
)(
g_chain
->
os_param
.
vtoy_reserved
);
gMemdiskMode
=
TRUE
;
gMemdiskMode
=
TRUE
;
}
}
else
else
...
...
GRUB2/MOD_SRC/grub-2.04/grub-core/kern/file.c
View file @
ba5978d2
...
@@ -106,19 +106,109 @@ int ventoy_check_file_exist(const char * fmt, ...)
...
@@ -106,19 +106,109 @@ int ventoy_check_file_exist(const char * fmt, ...)
}
}
}
}
typedef
struct
grub_vlnk
{
int
srclen
;
char
src
[
512
];
char
dst
[
512
];
struct
grub_vlnk
*
next
;
}
grub_vlnk
;
static
grub_vlnk
*
g_vlnk_list
;
int
grub_file_is_vlnk_suffix
(
const
char
*
name
,
int
len
)
{
grub_uint32_t
suffix
;
if
(
len
>
9
)
{
suffix
=
*
(
grub_uint32_t
*
)(
name
+
len
-
4
);
if
(
grub_strncmp
(
name
+
len
-
9
,
".vlnk."
,
6
)
==
0
)
{
/* .iso .wim .img .vhd .efi .dat */
if
(
suffix
==
0x6F73692E
||
suffix
==
0x6D69772E
||
suffix
==
0x676D692E
||
suffix
==
0x6468762E
||
suffix
==
0x6966652E
||
suffix
==
0x7461642E
)
{
return
1
;
}
}
else
if
(
len
>
10
&&
grub_strncmp
(
name
+
len
-
10
,
".vlnk."
,
6
)
==
0
)
{
/* vhdx vtoy */
if
(
suffix
==
0x78646876
||
suffix
==
0x796F7476
)
{
return
1
;
}
}
}
return
0
;
}
int
grub_file_add_vlnk
(
const
char
*
src
,
const
char
*
dst
)
{
grub_vlnk
*
node
=
NULL
;
if
(
src
&&
dst
)
{
node
=
grub_zalloc
(
sizeof
(
grub_vlnk
));
if
(
node
)
{
node
->
srclen
=
(
int
)
grub_strlen
(
src
);
grub_strncpy
(
node
->
src
,
src
,
sizeof
(
node
->
src
)
-
1
);
grub_strncpy
(
node
->
dst
,
dst
,
sizeof
(
node
->
dst
)
-
1
);
node
->
next
=
g_vlnk_list
;
g_vlnk_list
=
node
;
return
0
;
}
}
return
1
;
}
const
char
*
grub_file_get_vlnk
(
const
char
*
name
,
int
*
vlnk
)
{
int
len
;
grub_vlnk
*
node
=
g_vlnk_list
;
len
=
grub_strlen
(
name
);
if
(
!
grub_file_is_vlnk_suffix
(
name
,
len
))
{
return
name
;
}
while
(
node
)
{
if
(
node
->
srclen
==
len
&&
grub_strcmp
(
name
,
node
->
src
)
==
0
)
{
*
vlnk
=
1
;
return
node
->
dst
;
}
node
=
node
->
next
;
}
return
name
;
}
grub_file_t
grub_file_t
grub_file_open
(
const
char
*
name
,
enum
grub_file_type
type
)
grub_file_open
(
const
char
*
name
,
enum
grub_file_type
type
)
{
{
int
vlnk
=
0
;
grub_device_t
device
=
0
;
grub_device_t
device
=
0
;
grub_file_t
file
=
0
,
last_file
=
0
;
grub_file_t
file
=
0
,
last_file
=
0
;
char
*
device_name
;
char
*
device_name
;
const
char
*
file_name
;
const
char
*
file_name
;
grub_file_filter_id_t
filter
;
grub_file_filter_id_t
filter
;
/* <DESC> : mem:xxx:size:xxx format in chainloader */
/* <DESC> : mem:xxx:size:xxx format in chainloader
grub_strlen(GRUB_MEMFILE_MEM)
*/
if
(
grub_strncmp
(
name
,
GRUB_MEMFILE_MEM
,
grub_strlen
(
GRUB_MEMFILE_MEM
)
)
==
0
)
{
if
(
grub_strncmp
(
name
,
GRUB_MEMFILE_MEM
,
4
)
==
0
)
{
return
grub_memfile_open
(
name
);
return
grub_memfile_open
(
name
);
}
}
if
(
g_vlnk_list
&&
(
type
&
GRUB_FILE_TYPE_NO_VLNK
)
==
0
)
name
=
grub_file_get_vlnk
(
name
,
&
vlnk
);
device_name
=
grub_file_get_device_name
(
name
);
device_name
=
grub_file_get_device_name
(
name
);
if
(
grub_errno
)
if
(
grub_errno
)
...
@@ -141,6 +231,7 @@ grub_file_open (const char *name, enum grub_file_type type)
...
@@ -141,6 +231,7 @@ grub_file_open (const char *name, enum grub_file_type type)
goto
fail
;
goto
fail
;
file
->
device
=
device
;
file
->
device
=
device
;
file
->
vlnk
=
vlnk
;
/* In case of relative pathnames and non-Unix systems (like Windows)
/* In case of relative pathnames and non-Unix systems (like Windows)
* name of host files may not start with `/'. Blocklists for host files
* name of host files may not start with `/'. Blocklists for host files
...
...
GRUB2/MOD_SRC/grub-2.04/grub-core/kern/fs.c
View file @
ba5978d2
...
@@ -42,6 +42,44 @@ probe_dummy_iter (const char *filename __attribute__ ((unused)),
...
@@ -42,6 +42,44 @@ probe_dummy_iter (const char *filename __attribute__ ((unused)),
return
1
;
return
1
;
}
}
grub_fs_t
grub_fs_list_probe
(
grub_device_t
device
,
const
char
**
list
)
{
int
i
;
grub_fs_t
p
;
if
(
!
device
->
disk
)
return
0
;
for
(
p
=
grub_fs_list
;
p
;
p
=
p
->
next
)
{
for
(
i
=
0
;
list
[
i
];
i
++
)
{
if
(
grub_strcmp
(
p
->
name
,
list
[
i
])
==
0
)
break
;
}
if
(
list
[
i
]
==
NULL
)
continue
;
grub_dprintf
(
"fs"
,
"Detecting %s...
\n
"
,
p
->
name
);
(
p
->
fs_dir
)
(
device
,
"/"
,
probe_dummy_iter
,
NULL
);
if
(
grub_errno
==
GRUB_ERR_NONE
)
return
p
;
grub_error_push
();
grub_dprintf
(
"fs"
,
"%s detection failed.
\n
"
,
p
->
name
);
grub_error_pop
();
if
(
grub_errno
!=
GRUB_ERR_BAD_FS
&&
grub_errno
!=
GRUB_ERR_OUT_OF_RANGE
)
{
return
0
;
}
grub_errno
=
GRUB_ERR_NONE
;
}
return
0
;
}
grub_fs_t
grub_fs_t
grub_fs_probe
(
grub_device_t
device
)
grub_fs_probe
(
grub_device_t
device
)
{
{
...
...
GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_cmd.c
View file @
ba5978d2
...
@@ -102,6 +102,7 @@ ventoy_img_chunk_list g_img_chunk_list;
...
@@ -102,6 +102,7 @@ ventoy_img_chunk_list g_img_chunk_list;
int
g_wimboot_enable
=
0
;
int
g_wimboot_enable
=
0
;
ventoy_img_chunk_list
g_wimiso_chunk_list
;
ventoy_img_chunk_list
g_wimiso_chunk_list
;
char
*
g_wimiso_path
=
NULL
;
char
*
g_wimiso_path
=
NULL
;
grub_uint32_t
g_wimiso_size
=
0
;
int
g_vhdboot_enable
=
0
;
int
g_vhdboot_enable
=
0
;
...
@@ -155,6 +156,8 @@ static char g_vtoy_prompt_msg[64];
...
@@ -155,6 +156,8 @@ static char g_vtoy_prompt_msg[64];
static
char
g_json_case_mis_path
[
32
];
static
char
g_json_case_mis_path
[
32
];
static
ventoy_vlnk_part
*
g_vlnk_part_list
=
NULL
;
static
int
ventoy_get_fs_type
(
const
char
*
fs
)
static
int
ventoy_get_fs_type
(
const
char
*
fs
)
{
{
if
(
NULL
==
fs
)
if
(
NULL
==
fs
)
...
@@ -699,32 +702,6 @@ grub_file_t ventoy_grub_file_open(enum grub_file_type type, const char *fmt, ...
...
@@ -699,32 +702,6 @@ grub_file_t ventoy_grub_file_open(enum grub_file_type type, const char *fmt, ...
return
file
;
return
file
;
}
}
int
ventoy_is_file_exist
(
const
char
*
fmt
,
...)
{
va_list
ap
;
int
len
;
char
*
pos
=
NULL
;
char
buf
[
256
]
=
{
0
};
grub_snprintf
(
buf
,
sizeof
(
buf
),
"%s"
,
"[ -f
\"
"
);
pos
=
buf
+
6
;
va_start
(
ap
,
fmt
);
len
=
grub_vsnprintf
(
pos
,
255
,
fmt
,
ap
);
va_end
(
ap
);
grub_strncpy
(
pos
+
len
,
"
\"
]"
,
3
);
debug
(
"script exec %s
\n
"
,
buf
);
if
(
0
==
grub_script_execute_sourcecode
(
buf
))
{
return
1
;
}
return
0
;
}
int
ventoy_is_dir_exist
(
const
char
*
fmt
,
...)
int
ventoy_is_dir_exist
(
const
char
*
fmt
,
...)
{
{
va_list
ap
;
va_list
ap
;
...
@@ -1007,6 +984,7 @@ static grub_err_t ventoy_cmd_load_wimboot(grub_extcmd_context_t ctxt, int argc,
...
@@ -1007,6 +984,7 @@ static grub_err_t ventoy_cmd_load_wimboot(grub_extcmd_context_t ctxt, int argc,
(
void
)
args
;
(
void
)
args
;
g_wimboot_enable
=
0
;
g_wimboot_enable
=
0
;
g_wimiso_size
=
0
;
grub_check_free
(
g_wimiso_path
);
grub_check_free
(
g_wimiso_path
);
grub_check_free
(
g_wimiso_chunk_list
.
chunk
);
grub_check_free
(
g_wimiso_chunk_list
.
chunk
);
...
@@ -1030,7 +1008,7 @@ static grub_err_t ventoy_cmd_load_wimboot(grub_extcmd_context_t ctxt, int argc,
...
@@ -1030,7 +1008,7 @@ static grub_err_t ventoy_cmd_load_wimboot(grub_extcmd_context_t ctxt, int argc,
g_wimboot_enable
=
1
;
g_wimboot_enable
=
1
;
g_wimiso_path
=
grub_strdup
(
args
[
0
]);
g_wimiso_path
=
grub_strdup
(
args
[
0
]);
g_wimiso_size
=
(
grub_uint32_t
)(
file
->
size
);
grub_file_close
(
file
);
grub_file_close
(
file
);
return
0
;
return
0
;
...
@@ -1074,6 +1052,11 @@ static grub_err_t ventoy_cmd_concat_efi_iso(grub_extcmd_context_t ctxt, int argc
...
@@ -1074,6 +1052,11 @@ static grub_err_t ventoy_cmd_concat_efi_iso(grub_extcmd_context_t ctxt, int argc
return
1
;
return
1
;
}
}
if
(
grub_strncmp
(
args
[
0
],
g_iso_path
,
grub_strlen
(
g_iso_path
)))
{
file
->
vlnk
=
1
;
}
totlen
+=
ventoy_align_2k
(
file
->
size
);
totlen
+=
ventoy_align_2k
(
file
->
size
);
dirent
=
(
ventoy_iso9660_override
*
)(
buf
+
offset
);
dirent
=
(
ventoy_iso9660_override
*
)(
buf
+
offset
);
...
@@ -1611,12 +1594,231 @@ static int ventoy_img_name_valid(const char *filename, grub_size_t namelen)
...
@@ -1611,12 +1594,231 @@ static int ventoy_img_name_valid(const char *filename, grub_size_t namelen)
return
1
;
return
1
;
}
}
static
int
ventoy_vlnk_iterate_partition
(
struct
grub_disk
*
disk
,
const
grub_partition_t
partition
,
void
*
data
)
{
ventoy_vlnk_part
*
node
=
NULL
;
grub_uint32_t
*
pSig
=
(
grub_uint32_t
*
)
data
;
node
=
grub_zalloc
(
sizeof
(
ventoy_vlnk_part
));
if
(
node
)
{
node
->
disksig
=
*
pSig
;
node
->
partoffset
=
(
partition
->
start
<<
GRUB_DISK_SECTOR_BITS
);
grub_snprintf
(
node
->
disk
,
sizeof
(
node
->
disk
)
-
1
,
"%s"
,
disk
->
name
);
grub_snprintf
(
node
->
device
,
sizeof
(
node
->
device
)
-
1
,
"%s,%d"
,
disk
->
name
,
partition
->
number
+
1
);
node
->
next
=
g_vlnk_part_list
;
g_vlnk_part_list
=
node
;
}
return
0
;
}
static
int
ventoy_vlnk_iterate_disk
(
const
char
*
name
,
void
*
data
)
{
grub_disk_t
disk
;
grub_uint32_t
sig
;
(
void
)
data
;
disk
=
grub_disk_open
(
name
);
if
(
disk
)
{
grub_disk_read
(
disk
,
0
,
0x1b8
,
4
,
&
sig
);
/* skip ventoy device self */
if
(
sig
!=
*
(
grub_uint32_t
*
)
data
)
{
grub_partition_iterate
(
disk
,
ventoy_vlnk_iterate_partition
,
&
sig
);
}
grub_disk_close
(
disk
);
}
return
0
;
}
static
int
ventoy_vlnk_probe_fs
(
ventoy_vlnk_part
*
cur
)
{
const
char
*
fs
[
ventoy_fs_max
+
1
]
=
{
"exfat"
,
"ntfs"
,
"ext2"
,
"xfs"
,
"udf"
,
"fat"
,
NULL
};
if
(
!
cur
->
dev
)
{
cur
->
dev
=
grub_device_open
(
cur
->
device
);
}
if
(
cur
->
dev
)
{
cur
->
fs
=
grub_fs_list_probe
(
cur
->
dev
,
fs
);
}
return
0
;
}
static
int
ventoy_check_vlnk_data
(
ventoy_vlnk
*
vlnk
,
int
print
,
char
*
dst
,
int
size
)
{
int
diskfind
=
0
;
int
partfind
=
0
;
int
filefind
=
0
;
char
*
disk
,
*
device
;
grub_uint32_t
readcrc
,
calccrc
;
ventoy_vlnk_part
*
cur
;
grub_fs_t
fs
=
NULL
;
if
(
grub_memcmp
(
&
(
vlnk
->
guid
),
&
g_ventoy_guid
,
sizeof
(
ventoy_guid
)))
{
if
(
print
)
{
grub_printf
(
"VLNK invalid guid
\n
"
);
grub_refresh
();
}
return
1
;
}
readcrc
=
vlnk
->
crc32
;
vlnk
->
crc32
=
0
;
calccrc
=
grub_getcrc32c
(
0
,
vlnk
,
sizeof
(
ventoy_vlnk
));
if
(
readcrc
!=
calccrc
)
{
if
(
print
)
{
grub_printf
(
"VLNK invalid crc 0x%08x 0x%08x
\n
"
,
calccrc
,
readcrc
);
grub_refresh
();
}
return
1
;
}
if
(
!
g_vlnk_part_list
)
{
grub_disk_dev_iterate
(
ventoy_vlnk_iterate_disk
,
g_ventoy_part_info
->
MBR
.
BootCode
+
0x1b8
);
}
for
(
cur
=
g_vlnk_part_list
;
cur
&&
filefind
==
0
;
cur
=
cur
->
next
)
{
if
(
cur
->
disksig
==
vlnk
->
disk_signature
)
{
diskfind
=
1
;
disk
=
cur
->
disk
;
if
(
cur
->
partoffset
==
vlnk
->
part_offset
)
{
partfind
=
1
;
device
=
cur
->
device
;
if
(
cur
->
probe
==
0
)
{
cur
->
probe
=
1
;
ventoy_vlnk_probe_fs
(
cur
);
}
if
(
!
fs
)
{
fs
=
cur
->
fs
;
}
if
(
cur
->
fs
)
{
struct
grub_file
file
;
grub_memset
(
&
file
,
0
,
sizeof
(
file
));
file
.
device
=
cur
->
dev
;
if
(
cur
->
fs
->
fs_open
(
&
file
,
vlnk
->
filepath
)
==
GRUB_ERR_NONE
)
{
filefind
=
1
;
cur
->
fs
->
fs_close
(
&
file
);
grub_snprintf
(
dst
,
size
-
1
,
"(%s)%s"
,
cur
->
device
,
vlnk
->
filepath
);
}
}
}
}
}
if
(
print
)
{
grub_printf
(
"
\n
==== VLNK Information ====
\n
"
"Disk Signature: %08x
\n
"
"Partition Offset: %llu
\n
"
"File Path: <%s>
\n\n
"
,
vlnk
->
disk_signature
,
(
ulonglong
)
vlnk
->
part_offset
,
vlnk
->
filepath
);
if
(
diskfind
)
{
grub_printf
(
"Disk Find: [ YES ] [ %s ]
\n
"
,
disk
);
}
else
{
grub_printf
(
"Disk Find: [ NO ]
\n
"
);
}
if
(
partfind
)
{
grub_printf
(
"Part Find: [ YES ] [ %s ] [ %s ]
\n
"
,
device
,
fs
?
fs
->
name
:
"N/A"
);
}
else
{
grub_printf
(
"Part Find: [ NO ]
\n
"
);
}
grub_printf
(
"File Find: [ %s ]
\n
"
,
filefind
?
"YES"
:
"NO"
);
if
(
filefind
)
{
grub_printf
(
"VLNK File: <%s>
\n
"
,
dst
);
}
grub_printf
(
"
\n
"
);
grub_refresh
();
}
return
(
1
-
filefind
);
}
int
ventoy_add_vlnk_file
(
char
*
dir
,
const
char
*
name
)
{
int
rc
=
1
;
char
src
[
512
];
char
dst
[
512
];
grub_file_t
file
=
NULL
;
ventoy_vlnk
vlnk
;
if
(
!
dir
)
{
grub_snprintf
(
src
,
sizeof
(
src
),
"%s%s"
,
g_iso_path
,
name
);
}
else
if
(
dir
[
0
]
==
'/'
)
{
grub_snprintf
(
src
,
sizeof
(
src
),
"%s%s%s"
,
g_iso_path
,
dir
,
name
);
}
else
{
grub_snprintf
(
src
,
sizeof
(
src
),
"%s/%s%s"
,
g_iso_path
,
dir
,
name
);
}
file
=
grub_file_open
(
src
,
VENTOY_FILE_TYPE
);
if
(
!
file
)
{
return
1
;
}
grub_memset
(
&
vlnk
,
0
,
sizeof
(
vlnk
));
grub_file_read
(
file
,
&
vlnk
,
sizeof
(
vlnk
));
grub_file_close
(
file
);
if
(
ventoy_check_vlnk_data
(
&
vlnk
,
0
,
dst
,
sizeof
(
dst
))
==
0
)
{
rc
=
grub_file_add_vlnk
(
src
,
dst
);
}
return
rc
;
}
static
int
ventoy_collect_img_files
(
const
char
*
filename
,
const
struct
grub_dirhook_info
*
info
,
void
*
data
)
static
int
ventoy_collect_img_files
(
const
char
*
filename
,
const
struct
grub_dirhook_info
*
info
,
void
*
data
)
{
{
//int i = 0;
//int i = 0;
int
type
=
0
;
int
type
=
0
;
int
ignore
=
0
;
int
ignore
=
0
;
int
index
=
0
;
int
index
=
0
;
int
vlnk
=
0
;
grub_size_t
len
;
grub_size_t
len
;
img_info
*
img
;
img_info
*
img
;
img_info
*
tail
;
img_info
*
tail
;
...
@@ -1785,6 +1987,18 @@ static int ventoy_collect_img_files(const char *filename, const struct grub_dirh
...
@@ -1785,6 +1987,18 @@ static int ventoy_collect_img_files(const char *filename, const struct grub_dirh
return
0
;
return
0
;
}
}
}
}
if
(
info
->
size
==
VTOY_FILT_MIN_FILE_SIZE
||
info
->
size
==
0
)
{
if
(
grub_file_is_vlnk_suffix
(
filename
,
len
))
{
vlnk
=
1
;
if
(
ventoy_add_vlnk_file
(
node
->
dir
,
filename
)
!=
0
)
{
return
0
;
}
}
}
img
=
grub_zalloc
(
sizeof
(
img_info
));
img
=
grub_zalloc
(
sizeof
(
img_info
));
if
(
img
)
if
(
img
)
...
@@ -1796,9 +2010,16 @@ static int ventoy_collect_img_files(const char *filename, const struct grub_dirh
...
@@ -1796,9 +2010,16 @@ static int ventoy_collect_img_files(const char *filename, const struct grub_dirh
img
->
pathlen
=
grub_snprintf
(
img
->
path
,
sizeof
(
img
->
path
),
"%s%s"
,
node
->
dir
,
img
->
name
);
img
->
pathlen
=
grub_snprintf
(
img
->
path
,
sizeof
(
img
->
path
),
"%s%s"
,
node
->
dir
,
img
->
name
);
img
->
size
=
info
->
size
;
img
->
size
=
info
->
size
;
if
(
0
==
img
->
size
)
if
(
vlnk
||
0
==
img
->
size
)
{
{
img
->
size
=
ventoy_grub_get_file_size
(
"%s/%s%s"
,
g_iso_path
,
node
->
dir
,
filename
);
if
(
node
->
dir
[
0
]
==
'/'
)
{
img
->
size
=
ventoy_grub_get_file_size
(
"%s%s%s"
,
g_iso_path
,
node
->
dir
,
filename
);
}
else
{
img
->
size
=
ventoy_grub_get_file_size
(
"%s/%s%s"
,
g_iso_path
,
node
->
dir
,
filename
);
}
}
}
if
(
img
->
size
<
VTOY_FILT_MIN_FILE_SIZE
)
if
(
img
->
size
<
VTOY_FILT_MIN_FILE_SIZE
)
...
@@ -2803,6 +3024,10 @@ void ventoy_fill_os_param(grub_file_t file, ventoy_os_param *param)
...
@@ -2803,6 +3024,10 @@ void ventoy_fill_os_param(grub_file_t file, ventoy_os_param *param)
param
->
vtoy_reserved
[
5
]
=
1
;
param
->
vtoy_reserved
[
5
]
=
1
;
}
}
/* ventoy_disk_signature used for vlnk */
param
->
vtoy_reserved
[
6
]
=
file
->
vlnk
;
grub_memcpy
(
param
->
vtoy_reserved
+
7
,
g_ventoy_part_info
->
MBR
.
BootCode
+
0x1b8
,
4
);
/* calculate checksum */
/* calculate checksum */
for
(
i
=
0
;
i
<
sizeof
(
ventoy_os_param
);
i
++
)
for
(
i
=
0
;
i
<
sizeof
(
ventoy_os_param
);
i
++
)
{
{
...
@@ -5084,6 +5309,114 @@ out:
...
@@ -5084,6 +5309,114 @@ out:
return
ret
;
return
ret
;
}
}
static
grub_err_t
grub_cmd_vlnk_dump_part
(
grub_extcmd_context_t
ctxt
,
int
argc
,
char
**
args
)
{
int
n
=
0
;
ventoy_vlnk_part
*
node
;
(
void
)
ctxt
;
(
void
)
argc
;
(
void
)
args
;
for
(
node
=
g_vlnk_part_list
;
node
;
node
=
node
->
next
)
{
grub_printf
(
"[%d] %s disksig:%08x offset:%llu fs:%s
\n
"
,
++
n
,
node
->
device
,
node
->
disksig
,
(
ulonglong
)
node
->
partoffset
,
(
node
->
fs
?
node
->
fs
->
name
:
"N/A"
));
}
return
0
;
}
static
grub_err_t
grub_cmd_is_vlnk_name
(
grub_extcmd_context_t
ctxt
,
int
argc
,
char
**
args
)
{
int
len
=
0
;
(
void
)
ctxt
;
if
(
argc
==
1
)
{
len
=
(
int
)
grub_strlen
(
args
[
0
]);
if
(
grub_file_is_vlnk_suffix
(
args
[
0
],
len
))
{
return
0
;
}
}
return
1
;
}
static
grub_err_t
grub_cmd_get_vlnk_dst
(
grub_extcmd_context_t
ctxt
,
int
argc
,
char
**
args
)
{
int
vlnk
=
0
;
const
char
*
name
=
NULL
;
(
void
)
ctxt
;
if
(
argc
==
2
)
{
grub_env_unset
(
args
[
1
]);
name
=
grub_file_get_vlnk
(
args
[
0
],
&
vlnk
);
if
(
vlnk
)
{
debug
(
"VLNK SRC: <%s>
\n
"
,
args
[
0
]);
debug
(
"VLNK DST: <%s>
\n
"
,
name
);
grub_env_set
(
args
[
1
],
name
);
return
0
;
}
}
return
1
;
}
static
grub_err_t
grub_cmd_check_vlnk
(
grub_extcmd_context_t
ctxt
,
int
argc
,
char
**
args
)
{
int
ret
=
1
;
int
len
=
0
;
grub_file_t
file
=
NULL
;
ventoy_vlnk
vlnk
;
char
dst
[
512
];
(
void
)
ctxt
;
if
(
argc
!=
1
)
{
goto
out
;
}
len
=
(
int
)
grub_strlen
(
args
[
0
]);
if
(
!
grub_file_is_vlnk_suffix
(
args
[
0
],
len
))
{
grub_printf
(
"Invalid vlnk suffix
\n
"
);
goto
out
;
}
file
=
grub_file_open
(
args
[
0
],
VENTOY_FILE_TYPE
|
GRUB_FILE_TYPE_NO_VLNK
);
if
(
!
file
)
{
grub_printf
(
"Failed to open %s
\n
"
,
args
[
0
]);
goto
out
;
}
if
(
file
->
size
!=
32768
)
{
grub_printf
(
"Invalid vlnk file (size=%llu).
\n
"
,
(
ulonglong
)
file
->
size
);
goto
out
;
}
grub_memset
(
&
vlnk
,
0
,
sizeof
(
vlnk
));
grub_file_read
(
file
,
&
vlnk
,
sizeof
(
vlnk
));
ret
=
ventoy_check_vlnk_data
(
&
vlnk
,
1
,
dst
,
sizeof
(
dst
));
out:
grub_refresh
();
check_free
(
file
,
grub_file_close
);
grub_errno
=
GRUB_ERR_NONE
;
return
ret
;
}
int
ventoy_env_init
(
void
)
int
ventoy_env_init
(
void
)
{
{
char
buf
[
64
];
char
buf
[
64
];
...
@@ -5271,6 +5604,10 @@ static cmd_para ventoy_cmds[] =
...
@@ -5271,6 +5604,10 @@ static cmd_para ventoy_cmds[] =
{
"vt_append_extra_sector"
,
ventoy_cmd_append_ext_sector
,
0
,
NULL
,
""
,
""
,
NULL
},
{
"vt_append_extra_sector"
,
ventoy_cmd_append_ext_sector
,
0
,
NULL
,
""
,
""
,
NULL
},
{
"gptpriority"
,
grub_cmd_gptpriority
,
0
,
NULL
,
""
,
""
,
NULL
},
{
"gptpriority"
,
grub_cmd_gptpriority
,
0
,
NULL
,
""
,
""
,
NULL
},
{
"vt_syslinux_need_nojoliet"
,
grub_cmd_syslinux_nojoliet
,
0
,
NULL
,
""
,
""
,
NULL
},
{
"vt_syslinux_need_nojoliet"
,
grub_cmd_syslinux_nojoliet
,
0
,
NULL
,
""
,
""
,
NULL
},
{
"vt_vlnk_check"
,
grub_cmd_check_vlnk
,
0
,
NULL
,
""
,
""
,
NULL
},
{
"vt_vlnk_dump_part"
,
grub_cmd_vlnk_dump_part
,
0
,
NULL
,
""
,
""
,
NULL
},
{
"vt_is_vlnk_name"
,
grub_cmd_is_vlnk_name
,
0
,
NULL
,
""
,
""
,
NULL
},
{
"vt_get_vlnk_dst"
,
grub_cmd_get_vlnk_dst
,
0
,
NULL
,
""
,
""
,
NULL
},
};
};
int
ventoy_register_all_cmd
(
void
)
int
ventoy_register_all_cmd
(
void
)
...
...
GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_def.h
View file @
ba5978d2
...
@@ -304,6 +304,7 @@ extern ventoy_guid g_ventoy_guid;
...
@@ -304,6 +304,7 @@ extern ventoy_guid g_ventoy_guid;
extern
ventoy_img_chunk_list
g_img_chunk_list
;
extern
ventoy_img_chunk_list
g_img_chunk_list
;
extern
ventoy_img_chunk_list
g_wimiso_chunk_list
;
extern
ventoy_img_chunk_list
g_wimiso_chunk_list
;
extern
char
*
g_wimiso_path
;
extern
char
*
g_wimiso_path
;
extern
grub_uint32_t
g_wimiso_size
;
extern
char
g_arch_mode_suffix
[
64
];
extern
char
g_arch_mode_suffix
[
64
];
extern
const
char
*
g_menu_prefix
[
img_type_max
];
extern
const
char
*
g_menu_prefix
[
img_type_max
];
...
@@ -604,7 +605,6 @@ grub_err_t ventoy_cmd_trailer_cpio(grub_extcmd_context_t ctxt, int argc, char **
...
@@ -604,7 +605,6 @@ grub_err_t ventoy_cmd_trailer_cpio(grub_extcmd_context_t ctxt, int argc, char **
int
ventoy_cpio_newc_fill_head
(
void
*
buf
,
int
filesize
,
const
void
*
filedata
,
const
char
*
name
);
int
ventoy_cpio_newc_fill_head
(
void
*
buf
,
int
filesize
,
const
void
*
filedata
,
const
char
*
name
);
grub_file_t
ventoy_grub_file_open
(
enum
grub_file_type
type
,
const
char
*
fmt
,
...);
grub_file_t
ventoy_grub_file_open
(
enum
grub_file_type
type
,
const
char
*
fmt
,
...);
grub_uint64_t
ventoy_grub_get_file_size
(
const
char
*
fmt
,
...);
grub_uint64_t
ventoy_grub_get_file_size
(
const
char
*
fmt
,
...);
int
ventoy_is_file_exist
(
const
char
*
fmt
,
...);
int
ventoy_is_dir_exist
(
const
char
*
fmt
,
...);
int
ventoy_is_dir_exist
(
const
char
*
fmt
,
...);
int
ventoy_fill_data
(
grub_uint32_t
buflen
,
char
*
buffer
);
int
ventoy_fill_data
(
grub_uint32_t
buflen
,
char
*
buffer
);
grub_err_t
ventoy_cmd_load_plugin
(
grub_extcmd_context_t
ctxt
,
int
argc
,
char
**
args
);
grub_err_t
ventoy_cmd_load_plugin
(
grub_extcmd_context_t
ctxt
,
int
argc
,
char
**
args
);
...
@@ -826,6 +826,7 @@ typedef struct ventoy_video_mode
...
@@ -826,6 +826,7 @@ typedef struct ventoy_video_mode
typedef
struct
file_fullpath
typedef
struct
file_fullpath
{
{
char
path
[
256
];
char
path
[
256
];
int
vlnk_add
;
}
file_fullpath
;
}
file_fullpath
;
typedef
struct
theme_list
typedef
struct
theme_list
...
@@ -1153,5 +1154,20 @@ struct g_ventoy_map{
...
@@ -1153,5 +1154,20 @@ struct g_ventoy_map{
};
};
#pragma pack()
#pragma pack()
typedef
struct
ventoy_vlnk_part
{
grub_uint32_t
disksig
;
grub_uint64_t
partoffset
;
char
disk
[
64
];
char
device
[
64
];
grub_device_t
dev
;
grub_fs_t
fs
;
int
probe
;
struct
ventoy_vlnk_part
*
next
;
}
ventoy_vlnk_part
;
extern
char
g_iso_path
[
256
];
int
ventoy_add_vlnk_file
(
char
*
dir
,
const
char
*
name
);
#endif
/* __VENTOY_DEF_H__ */
#endif
/* __VENTOY_DEF_H__ */
GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_plugin.c
View file @
ba5978d2
...
@@ -171,11 +171,11 @@ static int ventoy_plugin_theme_check(VTOY_JSON *json, const char *isodisk)
...
@@ -171,11 +171,11 @@ static int ventoy_plugin_theme_check(VTOY_JSON *json, const char *isodisk)
grub_printf
(
"file: %s
\n
"
,
value
);
grub_printf
(
"file: %s
\n
"
,
value
);
if
(
value
[
0
]
==
'/'
)
if
(
value
[
0
]
==
'/'
)
{
{
exist
=
ventoy_
is
_file_exist
(
"%s%s"
,
isodisk
,
value
);
exist
=
ventoy_
check
_file_exist
(
"%s%s"
,
isodisk
,
value
);
}
}
else
else
{
{
exist
=
ventoy_
is
_file_exist
(
"%s/ventoy/%s"
,
isodisk
,
value
);
exist
=
ventoy_
check
_file_exist
(
"%s/ventoy/%s"
,
isodisk
,
value
);
}
}
if
(
exist
==
0
)
if
(
exist
==
0
)
...
@@ -195,11 +195,11 @@ static int ventoy_plugin_theme_check(VTOY_JSON *json, const char *isodisk)
...
@@ -195,11 +195,11 @@ static int ventoy_plugin_theme_check(VTOY_JSON *json, const char *isodisk)
grub_printf
(
"file: %s
\n
"
,
value
);
grub_printf
(
"file: %s
\n
"
,
value
);
if
(
value
[
0
]
==
'/'
)
if
(
value
[
0
]
==
'/'
)
{
{
exist
=
ventoy_
is
_file_exist
(
"%s%s"
,
isodisk
,
value
);
exist
=
ventoy_
check
_file_exist
(
"%s%s"
,
isodisk
,
value
);
}
}
else
else
{
{
exist
=
ventoy_
is
_file_exist
(
"%s/ventoy/%s"
,
isodisk
,
value
);
exist
=
ventoy_
check
_file_exist
(
"%s/ventoy/%s"
,
isodisk
,
value
);
}
}
if
(
exist
==
0
)
if
(
exist
==
0
)
...
@@ -463,7 +463,7 @@ static int ventoy_plugin_check_path(const char *path, const char *file)
...
@@ -463,7 +463,7 @@ static int ventoy_plugin_check_path(const char *path, const char *file)
return
1
;
return
1
;
}
}
if
(
!
ventoy_
is
_file_exist
(
"%s%s"
,
path
,
file
))
if
(
!
ventoy_
check
_file_exist
(
"%s%s"
,
path
,
file
))
{
{
grub_printf
(
"%s%s does NOT exist
\n
"
,
path
,
file
);
grub_printf
(
"%s%s does NOT exist
\n
"
,
path
,
file
);
return
1
;
return
1
;
...
@@ -561,7 +561,7 @@ static int ventoy_plugin_parse_fullpath
...
@@ -561,7 +561,7 @@ static int ventoy_plugin_parse_fullpath
{
{
debug
(
"%s is string type data
\n
"
,
node
->
pcName
);
debug
(
"%s is string type data
\n
"
,
node
->
pcName
);
if
((
node
->
unData
.
pcStrVal
[
0
]
!=
'/'
)
||
(
!
ventoy_
is
_file_exist
(
"%s%s"
,
isodisk
,
node
->
unData
.
pcStrVal
)))
if
((
node
->
unData
.
pcStrVal
[
0
]
!=
'/'
)
||
(
!
ventoy_
check
_file_exist
(
"%s%s"
,
isodisk
,
node
->
unData
.
pcStrVal
)))
{
{
debug
(
"%s%s file not found
\n
"
,
isodisk
,
node
->
unData
.
pcStrVal
);
debug
(
"%s%s file not found
\n
"
,
isodisk
,
node
->
unData
.
pcStrVal
);
return
1
;
return
1
;
...
@@ -596,7 +596,7 @@ static int ventoy_plugin_parse_fullpath
...
@@ -596,7 +596,7 @@ static int ventoy_plugin_parse_fullpath
for
(
count
=
0
,
child
=
node
->
pstChild
;
child
;
child
=
child
->
pstNext
)
for
(
count
=
0
,
child
=
node
->
pstChild
;
child
;
child
=
child
->
pstNext
)
{
{
if
(
ventoy_
is
_file_exist
(
"%s%s"
,
isodisk
,
child
->
unData
.
pcStrVal
))
if
(
ventoy_
check
_file_exist
(
"%s%s"
,
isodisk
,
child
->
unData
.
pcStrVal
))
{
{
grub_snprintf
(
path
->
path
,
sizeof
(
path
->
path
),
"%s"
,
child
->
unData
.
pcStrVal
);
grub_snprintf
(
path
->
path
,
sizeof
(
path
->
path
),
"%s"
,
child
->
unData
.
pcStrVal
);
path
++
;
path
++
;
...
@@ -1401,7 +1401,7 @@ static int ventoy_plugin_menualias_check(VTOY_JSON *json, const char *isodisk)
...
@@ -1401,7 +1401,7 @@ static int ventoy_plugin_menualias_check(VTOY_JSON *json, const char *isodisk)
{
{
grub_printf
(
"image: <%s> [ * ]
\n
"
,
path
);
grub_printf
(
"image: <%s> [ * ]
\n
"
,
path
);
}
}
else
if
(
ventoy_
is
_file_exist
(
"%s%s"
,
isodisk
,
path
))
else
if
(
ventoy_
check
_file_exist
(
"%s%s"
,
isodisk
,
path
))
{
{
grub_printf
(
"image: <%s> [ OK ]
\n
"
,
path
);
grub_printf
(
"image: <%s> [ OK ]
\n
"
,
path
);
}
}
...
@@ -1542,7 +1542,7 @@ static int ventoy_plugin_menutip_check(VTOY_JSON *json, const char *isodisk)
...
@@ -1542,7 +1542,7 @@ static int ventoy_plugin_menutip_check(VTOY_JSON *json, const char *isodisk)
{
{
grub_printf
(
"image: <%s> [ * ]
\n
"
,
path
);
grub_printf
(
"image: <%s> [ * ]
\n
"
,
path
);
}
}
else
if
(
ventoy_
is
_file_exist
(
"%s%s"
,
isodisk
,
path
))
else
if
(
ventoy_
check
_file_exist
(
"%s%s"
,
isodisk
,
path
))
{
{
grub_printf
(
"image: <%s> [ OK ]
\n
"
,
path
);
grub_printf
(
"image: <%s> [ OK ]
\n
"
,
path
);
}
}
...
@@ -2684,6 +2684,8 @@ persistence_config * ventoy_plugin_find_persistent(const char *isopath)
...
@@ -2684,6 +2684,8 @@ persistence_config * ventoy_plugin_find_persistent(const char *isopath)
int
ventoy_plugin_get_persistent_chunklist
(
const
char
*
isopath
,
int
index
,
ventoy_img_chunk_list
*
chunk_list
)
int
ventoy_plugin_get_persistent_chunklist
(
const
char
*
isopath
,
int
index
,
ventoy_img_chunk_list
*
chunk_list
)
{
{
int
rc
=
1
;
int
rc
=
1
;
int
len
=
0
;
char
*
path
=
NULL
;
grub_uint64_t
start
=
0
;
grub_uint64_t
start
=
0
;
grub_file_t
file
=
NULL
;
grub_file_t
file
=
NULL
;
persistence_config
*
node
=
NULL
;
persistence_config
*
node
=
NULL
;
...
@@ -2704,10 +2706,22 @@ int ventoy_plugin_get_persistent_chunklist(const char *isopath, int index, vento
...
@@ -2704,10 +2706,22 @@ int ventoy_plugin_get_persistent_chunklist(const char *isopath, int index, vento
return
1
;
return
1
;
}
}
file
=
ventoy_grub_file_open
(
VENTOY_FILE_TYPE
,
"%s%s"
,
g_iso_disk_name
,
node
->
backendpath
[
index
].
path
);
path
=
node
->
backendpath
[
index
].
path
;
if
(
node
->
backendpath
[
index
].
vlnk_add
==
0
)
{
len
=
grub_strlen
(
path
);
if
(
len
>
9
&&
grub_strncmp
(
path
+
len
-
9
,
".vlnk.dat"
,
9
)
==
0
)
{
ventoy_add_vlnk_file
(
NULL
,
path
);
node
->
backendpath
[
index
].
vlnk_add
=
1
;
}
}
file
=
ventoy_grub_file_open
(
VENTOY_FILE_TYPE
,
"%s%s"
,
g_iso_disk_name
,
path
);
if
(
!
file
)
if
(
!
file
)
{
{
debug
(
"Failed to open file %s%s
\n
"
,
g_iso_disk_name
,
node
->
backendpath
[
index
].
path
);
debug
(
"Failed to open file %s%s
\n
"
,
g_iso_disk_name
,
path
);
goto
end
;
goto
end
;
}
}
...
...
GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_vhd.c
View file @
ba5978d2
...
@@ -667,6 +667,11 @@ grub_err_t ventoy_cmd_raw_chain_data(grub_extcmd_context_t ctxt, int argc, char
...
@@ -667,6 +667,11 @@ grub_err_t ventoy_cmd_raw_chain_data(grub_extcmd_context_t ctxt, int argc, char
return
1
;
return
1
;
}
}
if
(
grub_strncmp
(
args
[
0
],
g_iso_path
,
grub_strlen
(
g_iso_path
)))
{
file
->
vlnk
=
1
;
}
img_chunk_size
=
g_img_chunk_list
.
cur_chunk
*
sizeof
(
ventoy_img_chunk
);
img_chunk_size
=
g_img_chunk_list
.
cur_chunk
*
sizeof
(
ventoy_img_chunk
);
size
=
sizeof
(
ventoy_chain_head
)
+
img_chunk_size
;
size
=
sizeof
(
ventoy_chain_head
)
+
img_chunk_size
;
...
...
GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_windows.c
View file @
ba5978d2
...
@@ -1994,21 +1994,12 @@ static grub_uint32_t ventoy_get_wim_iso_offset(const char *filepath)
...
@@ -1994,21 +1994,12 @@ static grub_uint32_t ventoy_get_wim_iso_offset(const char *filepath)
return
imgoffset
;
return
imgoffset
;
}
}
static
int
ventoy_get_wim_chunklist
(
const
char
*
filenam
e
,
ventoy_img_chunk_list
*
wimchunk
,
grub_uint64_t
*
wimsize
)
static
int
ventoy_get_wim_chunklist
(
grub_file_t
wimfil
e
,
ventoy_img_chunk_list
*
wimchunk
)
{
{
grub_file_t
wimfile
;
wimfile
=
ventoy_grub_file_open
(
VENTOY_FILE_TYPE
,
"%s"
,
filename
);
if
(
!
wimfile
)
{
return
1
;
}
grub_memset
(
wimchunk
,
0
,
sizeof
(
ventoy_img_chunk_list
));
grub_memset
(
wimchunk
,
0
,
sizeof
(
ventoy_img_chunk_list
));
wimchunk
->
chunk
=
grub_malloc
(
sizeof
(
ventoy_img_chunk
)
*
DEFAULT_CHUNK_NUM
);
wimchunk
->
chunk
=
grub_malloc
(
sizeof
(
ventoy_img_chunk
)
*
DEFAULT_CHUNK_NUM
);
if
(
NULL
==
wimchunk
->
chunk
)
if
(
NULL
==
wimchunk
->
chunk
)
{
{
grub_file_close
(
wimfile
);
return
grub_error
(
GRUB_ERR_OUT_OF_MEMORY
,
"Can't allocate image chunk memoty
\n
"
);
return
grub_error
(
GRUB_ERR_OUT_OF_MEMORY
,
"Can't allocate image chunk memoty
\n
"
);
}
}
...
@@ -2017,9 +2008,6 @@ static int ventoy_get_wim_chunklist(const char *filename, ventoy_img_chunk_list
...
@@ -2017,9 +2008,6 @@ static int ventoy_get_wim_chunklist(const char *filename, ventoy_img_chunk_list
ventoy_get_block_list
(
wimfile
,
wimchunk
,
wimfile
->
device
->
disk
->
partition
->
start
);
ventoy_get_block_list
(
wimfile
,
wimchunk
,
wimfile
->
device
->
disk
->
partition
->
start
);
*
wimsize
=
wimfile
->
size
;
grub_file_close
(
wimfile
);
return
0
;
return
0
;
}
}
...
@@ -2058,7 +2046,7 @@ grub_err_t ventoy_cmd_wim_check_bootable(grub_extcmd_context_t ctxt, int argc, c
...
@@ -2058,7 +2046,7 @@ grub_err_t ventoy_cmd_wim_check_bootable(grub_extcmd_context_t ctxt, int argc, c
VENTOY_CMD_RETURN
(
GRUB_ERR_NONE
);
VENTOY_CMD_RETURN
(
GRUB_ERR_NONE
);
}
}
grub_err_t
ventoy_
cmd
_wim_chain_data
(
grub_
extcmd_context_t
ctxt
,
int
argc
,
char
**
args
)
static
grub_err_t
ventoy_
vlnk
_wim_chain_data
(
grub_
file_t
wimfile
)
{
{
grub_uint32_t
i
=
0
;
grub_uint32_t
i
=
0
;
grub_uint32_t
imgoffset
=
0
;
grub_uint32_t
imgoffset
=
0
;
...
@@ -2079,10 +2067,172 @@ grub_err_t ventoy_cmd_wim_chain_data(grub_extcmd_context_t ctxt, int argc, char
...
@@ -2079,10 +2067,172 @@ grub_err_t ventoy_cmd_wim_chain_data(grub_extcmd_context_t ctxt, int argc, char
ventoy_img_chunk_list
wimchunk
;
ventoy_img_chunk_list
wimchunk
;
char
envbuf
[
128
];
char
envbuf
[
128
];
(
void
)
ctxt
;
debug
(
"vlnk wim chain data begin <%s> ...
\n
"
,
wimfile
->
name
);
(
void
)
argc
;
if
(
NULL
==
g_wimiso_chunk_list
.
chunk
||
NULL
==
g_wimiso_path
)
{
grub_printf
(
"ventoy not ready
\n
"
);
return
1
;
}
imgoffset
=
ventoy_get_wim_iso_offset
(
g_wimiso_path
);
if
(
imgoffset
==
0
)
{
grub_printf
(
"image offset not found
\n
"
);
return
1
;
}
if
(
0
!=
ventoy_get_wim_chunklist
(
wimfile
,
&
wimchunk
))
{
grub_printf
(
"Failed to get wim chunklist
\n
"
);
return
1
;
}
wimsize
=
wimfile
->
size
;
file
=
ventoy_grub_file_open
(
VENTOY_FILE_TYPE
,
"%s"
,
g_wimiso_path
);
if
(
!
file
)
{
return
1
;
}
boot_catlog
=
ventoy_get_iso_boot_catlog
(
file
);
img_chunk1_size
=
g_wimiso_chunk_list
.
cur_chunk
*
sizeof
(
ventoy_img_chunk
);
img_chunk2_size
=
wimchunk
.
cur_chunk
*
sizeof
(
ventoy_img_chunk
);
override_size
=
sizeof
(
ventoy_override_chunk
)
+
g_wimiso_size
;
size
=
sizeof
(
ventoy_chain_head
)
+
img_chunk1_size
+
img_chunk2_size
+
override_size
;
pLastChain
=
grub_env_get
(
"vtoy_chain_mem_addr"
);
if
(
pLastChain
)
{
chain
=
(
ventoy_chain_head
*
)
grub_strtoul
(
pLastChain
,
NULL
,
16
);
if
(
chain
)
{
debug
(
"free last chain memory %p
\n
"
,
chain
);
grub_free
(
chain
);
}
}
chain
=
grub_malloc
(
size
);
if
(
!
chain
)
{
grub_printf
(
"Failed to alloc chain memory size %u
\n
"
,
size
);
grub_file_close
(
file
);
return
1
;
}
grub_snprintf
(
envbuf
,
sizeof
(
envbuf
),
"0x%lx"
,
(
unsigned
long
)
chain
);
grub_env_set
(
"vtoy_chain_mem_addr"
,
envbuf
);
grub_snprintf
(
envbuf
,
sizeof
(
envbuf
),
"%u"
,
size
);
grub_env_set
(
"vtoy_chain_mem_size"
,
envbuf
);
grub_memset
(
chain
,
0
,
sizeof
(
ventoy_chain_head
));
/* part 1: os parameter */
g_ventoy_chain_type
=
ventoy_chain_wim
;
ventoy_fill_os_param
(
wimfile
,
&
(
chain
->
os_param
));
/* part 2: chain head */
disk
=
wimfile
->
device
->
disk
;
chain
->
disk_drive
=
disk
->
id
;
chain
->
disk_sector_size
=
(
1
<<
disk
->
log_sector_size
);
chain
->
real_img_size_in_bytes
=
ventoy_align_2k
(
file
->
size
)
+
ventoy_align_2k
(
wimsize
);
chain
->
virt_img_size_in_bytes
=
chain
->
real_img_size_in_bytes
;
chain
->
boot_catalog
=
boot_catlog
;
if
(
!
ventoy_is_efi_os
())
{
grub_file_seek
(
file
,
boot_catlog
*
2048
);
grub_file_read
(
file
,
chain
->
boot_catalog_sector
,
sizeof
(
chain
->
boot_catalog_sector
));
}
/* part 3: image chunk */
chain
->
img_chunk_offset
=
sizeof
(
ventoy_chain_head
);
chain
->
img_chunk_num
=
g_wimiso_chunk_list
.
cur_chunk
+
wimchunk
.
cur_chunk
;
grub_memcpy
((
char
*
)
chain
+
chain
->
img_chunk_offset
,
g_wimiso_chunk_list
.
chunk
,
img_chunk1_size
);
chunknode
=
(
ventoy_img_chunk
*
)((
char
*
)
chain
+
chain
->
img_chunk_offset
);
for
(
i
=
0
;
i
<
g_wimiso_chunk_list
.
cur_chunk
;
i
++
)
{
chunknode
->
disk_end_sector
=
chunknode
->
disk_end_sector
-
chunknode
->
disk_start_sector
;
chunknode
->
disk_start_sector
=
0
;
chunknode
++
;
}
/* fs cluster size >= 2048, so don't need to proc align */
/* align by 2048 */
chunknode
=
wimchunk
.
chunk
+
wimchunk
.
cur_chunk
-
1
;
i
=
(
chunknode
->
disk_end_sector
+
1
-
chunknode
->
disk_start_sector
)
%
4
;
if
(
i
)
{
chunknode
->
disk_end_sector
+=
4
-
i
;
}
isosector
=
(
grub_uint32_t
)((
file
->
size
+
2047
)
/
2048
);
for
(
i
=
0
;
i
<
wimchunk
.
cur_chunk
;
i
++
)
{
chunknode
=
wimchunk
.
chunk
+
i
;
chunknode
->
img_start_sector
=
isosector
;
chunknode
->
img_end_sector
=
chunknode
->
img_start_sector
+
((
chunknode
->
disk_end_sector
+
1
-
chunknode
->
disk_start_sector
)
/
4
)
-
1
;
isosector
=
chunknode
->
img_end_sector
+
1
;
}
grub_memcpy
((
char
*
)
chain
+
chain
->
img_chunk_offset
+
img_chunk1_size
,
wimchunk
.
chunk
,
img_chunk2_size
);
/* part 4: override chunk */
chain
->
override_chunk_offset
=
chain
->
img_chunk_offset
+
img_chunk1_size
+
img_chunk2_size
;
chain
->
override_chunk_num
=
1
;
debug
(
"wim chain data begin <%s> ...
\n
"
,
args
[
0
]);
override
=
(
ventoy_override_chunk
*
)((
char
*
)
chain
+
chain
->
override_chunk_offset
);
override
->
img_offset
=
0
;
override
->
override_size
=
g_wimiso_size
;
grub_file_seek
(
file
,
0
);
grub_file_read
(
file
,
override
->
override_data
,
file
->
size
);
dirent
=
(
ventoy_iso9660_override
*
)(
override
->
override_data
+
imgoffset
);
dirent
->
first_sector
=
(
grub_uint32_t
)((
file
->
size
+
2047
)
/
2048
);
dirent
->
size
=
(
grub_uint32_t
)(
wimsize
);
dirent
->
first_sector_be
=
grub_swap_bytes32
(
dirent
->
first_sector
);
dirent
->
size_be
=
grub_swap_bytes32
(
dirent
->
size
);
debug
(
"imgoffset=%u first_sector=0x%x size=0x%x
\n
"
,
imgoffset
,
dirent
->
first_sector
,
dirent
->
size
);
if
(
ventoy_is_efi_os
()
==
0
)
{
ventoy_windows_drive_map
(
chain
);
}
grub_file_close
(
file
);
VENTOY_CMD_RETURN
(
GRUB_ERR_NONE
);
}
static
grub_err_t
ventoy_normal_wim_chain_data
(
grub_file_t
wimfile
)
{
grub_uint32_t
i
=
0
;
grub_uint32_t
imgoffset
=
0
;
grub_uint32_t
size
=
0
;
grub_uint32_t
isosector
=
0
;
grub_uint64_t
wimsize
=
0
;
grub_uint32_t
boot_catlog
=
0
;
grub_uint32_t
img_chunk1_size
=
0
;
grub_uint32_t
img_chunk2_size
=
0
;
grub_uint32_t
override_size
=
0
;
grub_file_t
file
;
grub_disk_t
disk
;
const
char
*
pLastChain
=
NULL
;
ventoy_chain_head
*
chain
;
ventoy_iso9660_override
*
dirent
;
ventoy_img_chunk
*
chunknode
;
ventoy_override_chunk
*
override
;
ventoy_img_chunk_list
wimchunk
;
char
envbuf
[
128
];
debug
(
"normal wim chain data begin <%s> ...
\n
"
,
wimfile
->
name
);
if
(
NULL
==
g_wimiso_chunk_list
.
chunk
||
NULL
==
g_wimiso_path
)
if
(
NULL
==
g_wimiso_chunk_list
.
chunk
||
NULL
==
g_wimiso_path
)
{
{
...
@@ -2097,11 +2247,12 @@ grub_err_t ventoy_cmd_wim_chain_data(grub_extcmd_context_t ctxt, int argc, char
...
@@ -2097,11 +2247,12 @@ grub_err_t ventoy_cmd_wim_chain_data(grub_extcmd_context_t ctxt, int argc, char
return
1
;
return
1
;
}
}
if
(
0
!=
ventoy_get_wim_chunklist
(
args
[
0
]
,
&
wimchunk
,
&
wimsize
))
if
(
0
!=
ventoy_get_wim_chunklist
(
wimfile
,
&
wimchunk
))
{
{
grub_printf
(
"Failed to get wim chunklist
\n
"
);
grub_printf
(
"Failed to get wim chunklist
\n
"
);
return
1
;
return
1
;
}
}
wimsize
=
wimfile
->
size
;
file
=
ventoy_grub_file_open
(
VENTOY_FILE_TYPE
,
"%s"
,
g_wimiso_path
);
file
=
ventoy_grub_file_open
(
VENTOY_FILE_TYPE
,
"%s"
,
g_wimiso_path
);
if
(
!
file
)
if
(
!
file
)
...
@@ -2214,6 +2365,33 @@ grub_err_t ventoy_cmd_wim_chain_data(grub_extcmd_context_t ctxt, int argc, char
...
@@ -2214,6 +2365,33 @@ grub_err_t ventoy_cmd_wim_chain_data(grub_extcmd_context_t ctxt, int argc, char
VENTOY_CMD_RETURN
(
GRUB_ERR_NONE
);
VENTOY_CMD_RETURN
(
GRUB_ERR_NONE
);
}
}
grub_err_t
ventoy_cmd_wim_chain_data
(
grub_extcmd_context_t
ctxt
,
int
argc
,
char
**
args
)
{
grub_err_t
ret
;
grub_file_t
wimfile
;
(
void
)
ctxt
;
(
void
)
argc
;
wimfile
=
grub_file_open
(
args
[
0
],
VENTOY_FILE_TYPE
);
if
(
!
wimfile
)
{
return
1
;
}
if
(
wimfile
->
vlnk
)
{
ret
=
ventoy_vlnk_wim_chain_data
(
wimfile
);
}
else
{
ret
=
ventoy_normal_wim_chain_data
(
wimfile
);
}
grub_file_close
(
wimfile
);
return
ret
;
}
int
ventoy_chain_file_size
(
const
char
*
path
)
int
ventoy_chain_file_size
(
const
char
*
path
)
{
{
int
size
;
int
size
;
...
...
GRUB2/MOD_SRC/grub-2.04/include/grub/file.h
View file @
ba5978d2
...
@@ -132,7 +132,8 @@ enum grub_file_type
...
@@ -132,7 +132,8 @@ enum grub_file_type
/* --skip-sig is specified. */
/* --skip-sig is specified. */
GRUB_FILE_TYPE_SKIP_SIGNATURE
=
0x10000
,
GRUB_FILE_TYPE_SKIP_SIGNATURE
=
0x10000
,
GRUB_FILE_TYPE_NO_DECOMPRESS
=
0x20000
GRUB_FILE_TYPE_NO_DECOMPRESS
=
0x20000
,
GRUB_FILE_TYPE_NO_VLNK
=
0x40000
,
};
};
/* File description. */
/* File description. */
...
@@ -141,6 +142,8 @@ struct grub_file
...
@@ -141,6 +142,8 @@ struct grub_file
/* File name. */
/* File name. */
char
*
name
;
char
*
name
;
int
vlnk
;
/* The underlying device. */
/* The underlying device. */
grub_device_t
device
;
grub_device_t
device
;
...
@@ -213,6 +216,10 @@ grub_ssize_t EXPORT_FUNC(grub_file_read) (grub_file_t file, void *buf,
...
@@ -213,6 +216,10 @@ grub_ssize_t EXPORT_FUNC(grub_file_read) (grub_file_t file, void *buf,
grub_off_t
EXPORT_FUNC
(
grub_file_seek
)
(
grub_file_t
file
,
grub_off_t
offset
);
grub_off_t
EXPORT_FUNC
(
grub_file_seek
)
(
grub_file_t
file
,
grub_off_t
offset
);
grub_err_t
EXPORT_FUNC
(
grub_file_close
)
(
grub_file_t
file
);
grub_err_t
EXPORT_FUNC
(
grub_file_close
)
(
grub_file_t
file
);
int
EXPORT_FUNC
(
grub_file_is_vlnk_suffix
)(
const
char
*
name
,
int
len
);
int
EXPORT_FUNC
(
grub_file_add_vlnk
)(
const
char
*
src
,
const
char
*
dst
);
const
char
*
EXPORT_FUNC
(
grub_file_get_vlnk
)(
const
char
*
name
,
int
*
vlnk
);
/* Return value of grub_file_size() in case file size is unknown. */
/* Return value of grub_file_size() in case file size is unknown. */
#define GRUB_FILE_SIZE_UNKNOWN 0xffffffffffffffffULL
#define GRUB_FILE_SIZE_UNKNOWN 0xffffffffffffffffULL
...
...
GRUB2/MOD_SRC/grub-2.04/include/grub/fs.h
View file @
ba5978d2
...
@@ -128,5 +128,6 @@ grub_fs_unregister (grub_fs_t fs)
...
@@ -128,5 +128,6 @@ grub_fs_unregister (grub_fs_t fs)
#define FOR_FILESYSTEMS(var) FOR_LIST_ELEMENTS((var), (grub_fs_list))
#define FOR_FILESYSTEMS(var) FOR_LIST_ELEMENTS((var), (grub_fs_list))
grub_fs_t
EXPORT_FUNC
(
grub_fs_probe
)
(
grub_device_t
device
);
grub_fs_t
EXPORT_FUNC
(
grub_fs_probe
)
(
grub_device_t
device
);
grub_fs_t
EXPORT_FUNC
(
grub_fs_list_probe
)
(
grub_device_t
device
,
const
char
**
list
);
#endif
/* ! GRUB_FS_HEADER */
#endif
/* ! GRUB_FS_HEADER */
GRUB2/MOD_SRC/grub-2.04/include/grub/ventoy.h
View file @
ba5978d2
...
@@ -122,6 +122,8 @@ typedef struct ventoy_os_param
...
@@ -122,6 +122,8 @@ typedef struct ventoy_os_param
* vtoy_reserved[3]: vtoy_iso_format 0:iso9660 1:udf
* vtoy_reserved[3]: vtoy_iso_format 0:iso9660 1:udf
* vtoy_reserved[4]: vtoy_windows_cd_prompt
* vtoy_reserved[4]: vtoy_windows_cd_prompt
* vtoy_reserved[5]: vtoy_linux_remount
* vtoy_reserved[5]: vtoy_linux_remount
* vtoy_reserved[6]: vtoy_vlnk
* vtoy_reserved[7~10]: vtoy_disk_sig[4] used for vlnk
*
*
*/
*/
grub_uint8_t
vtoy_reserved
[
32
];
// Internal use by ventoy
grub_uint8_t
vtoy_reserved
[
32
];
// Internal use by ventoy
...
@@ -151,11 +153,23 @@ typedef struct ventoy_secure_data
...
@@ -151,11 +153,23 @@ typedef struct ventoy_secure_data
grub_uint8_t
magic2
[
16
];
/* VENTOY_GUID */
grub_uint8_t
magic2
[
16
];
/* VENTOY_GUID */
}
ventoy_secure_data
;
}
ventoy_secure_data
;
typedef
struct
ventoy_vlnk
{
ventoy_guid
guid
;
// VENTOY_GUID
grub_uint32_t
crc32
;
// crc32
grub_uint32_t
disk_signature
;
grub_uint64_t
part_offset
;
// in bytes
char
filepath
[
384
];
grub_uint8_t
reserved
[
96
];
}
ventoy_vlnk
;
#pragma pack()
#pragma pack()
// compile assert check : sizeof(ventoy_os_param) must be 512
// compile assert check : sizeof(ventoy_os_param) must be 512
COMPILE_ASSERT
(
1
,
sizeof
(
ventoy_os_param
)
==
512
);
COMPILE_ASSERT
(
1
,
sizeof
(
ventoy_os_param
)
==
512
);
COMPILE_ASSERT
(
2
,
sizeof
(
ventoy_secure_data
)
==
4096
);
COMPILE_ASSERT
(
2
,
sizeof
(
ventoy_secure_data
)
==
4096
);
COMPILE_ASSERT
(
3
,
sizeof
(
ventoy_vlnk
)
==
512
);
...
...
IMG/cpio/ventoy/hook/ventoy-hook-lib.sh
View file @
ba5978d2
...
@@ -31,6 +31,7 @@ HEAD=$BUSYBOX_PATH/head
...
@@ -31,6 +31,7 @@ HEAD=$BUSYBOX_PATH/head
VTOY_DM_PATH
=
/dev/mapper/ventoy
VTOY_DM_PATH
=
/dev/mapper/ventoy
VTOY_DEBUG_LEVEL
=
$(
$BUSYBOX_PATH
/hexdump
-n
1
-s
450
-e
'1/1 "%02x"'
$VTOY_PATH
/ventoy_os_param
)
VTOY_DEBUG_LEVEL
=
$(
$BUSYBOX_PATH
/hexdump
-n
1
-s
450
-e
'1/1 "%02x"'
$VTOY_PATH
/ventoy_os_param
)
VTOY_LINUX_REMOUNT
=
$(
$BUSYBOX_PATH
/hexdump
-n
1
-s
454
-e
'1/1 "%02x"'
$VTOY_PATH
/ventoy_os_param
)
VTOY_LINUX_REMOUNT
=
$(
$BUSYBOX_PATH
/hexdump
-n
1
-s
454
-e
'1/1 "%02x"'
$VTOY_PATH
/ventoy_os_param
)
VTOY_VLNK_BOOT
=
$(
$BUSYBOX_PATH
/hexdump
-n
1
-s
455
-e
'1/1 "%02x"'
$VTOY_PATH
/ventoy_os_param
)
if
[
"
$VTOY_DEBUG_LEVEL
"
=
"01"
]
;
then
if
[
"
$VTOY_DEBUG_LEVEL
"
=
"01"
]
;
then
if
[
-e
/dev/console
]
;
then
if
[
-e
/dev/console
]
;
then
...
@@ -65,12 +66,16 @@ set_ventoy_hook_finish() {
...
@@ -65,12 +66,16 @@ set_ventoy_hook_finish() {
echo
'Y'
>
$VTOY_PATH
/hook_finish
echo
'Y'
>
$VTOY_PATH
/hook_finish
}
}
get_ventoy_disk_name
()
{
get_ventoy_disk_name
()
{
line
=
$(
$VTOY_PATH
/tool/vtoydump
-f
/ventoy/ventoy_os_param
)
if
[
"
$VTOY_VLNK_BOOT
"
=
"01"
]
;
then
if
[
$?
-eq
0
]
;
then
$VTOY_PATH
/tool/vtoydump
-t
/ventoy/ventoy_os_param
echo
${
line
%%#*
}
else
else
line
=
$(
$VTOY_PATH
/tool/vtoydump
-f
/ventoy/ventoy_os_param
)
echo
"unknown"
if
[
$?
-eq
0
]
;
then
echo
${
line
%%#*
}
else
echo
"unknown"
fi
fi
fi
}
}
...
@@ -121,14 +126,6 @@ check_usb_disk_ready() {
...
@@ -121,14 +126,6 @@ check_usb_disk_ready() {
[
-e
"
${
vtpart2
}
"
]
[
-e
"
${
vtpart2
}
"
]
}
}
is_ventoy_disk
()
{
if
$VTOY_PATH
/tool/vtoydump
-f
$VTOY_PATH
/ventoy_os_param
-c
"
$1
"
;
then
$BUSYBOX_PATH
/true
else
$BUSYBOX_PATH
/false
fi
}
not_ventoy_disk
()
{
not_ventoy_disk
()
{
if
echo
$1
|
$EGREP
-q
"nvme.*p
$|
mmc.*p
$|
nbd.*p$"
;
then
if
echo
$1
|
$EGREP
-q
"nvme.*p
$|
mmc.*p
$|
nbd.*p$"
;
then
vtDiskName
=
${
1
:0:-1
}
vtDiskName
=
${
1
:0:-1
}
...
@@ -136,10 +133,15 @@ not_ventoy_disk() {
...
@@ -136,10 +133,15 @@ not_ventoy_disk() {
vtDiskName
=
$1
vtDiskName
=
$1
fi
fi
if
$VTOY_PATH
/tool/vtoydump
-f
$VTOY_PATH
/ventoy_os_param
-c
"
$vtDiskName
"
;
then
if
[
"
$VTOY_VLNK_BOOT
"
=
"01"
]
;
then
$BUSYBOX_PATH
/false
vtVtoyDisk
=
$(
$VTOY_PATH
/tool/vtoydump
-t
$VTOY_PATH
/ventoy_os_param
)
[
"
$vtVtoyDisk
"
!=
"/dev/
$vtDiskName
"
]
else
else
$BUSYBOX_PATH
/true
if
$VTOY_PATH
/tool/vtoydump
-f
$VTOY_PATH
/ventoy_os_param
-c
"
$vtDiskName
"
;
then
$BUSYBOX_PATH
/false
else
$BUSYBOX_PATH
/true
fi
fi
fi
}
}
...
@@ -803,7 +805,12 @@ is_inotify_ventoy_part() {
...
@@ -803,7 +805,12 @@ is_inotify_ventoy_part() {
fi
fi
if
[
-e
/dev/
$vtShortName
]
;
then
if
[
-e
/dev/
$vtShortName
]
;
then
$VTOY_PATH
/tool/vtoydump
-f
$VTOY_PATH
/ventoy_os_param
-c
$vtShortName
if
[
"
$VTOY_VLNK_BOOT
"
=
"01"
]
;
then
vtOrgDiskName
=
$(
$VTOY_PATH
/tool/vtoydump
-t
$VTOY_PATH
/ventoy_os_param
)
[
"
$vtOrgDiskName
"
=
"/dev/
$vtShortName
"
]
else
$VTOY_PATH
/tool/vtoydump
-f
$VTOY_PATH
/ventoy_os_param
-c
$vtShortName
fi
return
return
fi
fi
fi
fi
...
...
IMG/cpio/ventoy/loop/cloudready/ventoy-hook.sh
View file @
ba5978d2
...
@@ -129,6 +129,10 @@ mount -t devtmpfs dev /newdev
...
@@ -129,6 +129,10 @@ mount -t devtmpfs dev /newdev
cp
-a
/dev/mapper/ventoy
*
/newdev/mapper/
cp
-a
/dev/mapper/ventoy
*
/newdev/mapper/
cp
-a
/dev/ventoy
*
/newdev/
cp
-a
/dev/ventoy
*
/newdev/
if
[
"
$VTOY_VLNK_BOOT
"
=
"01"
]
;
then
vtLine
=
$(
$VTOY_PATH
/tool/vtoydump
-f
/ventoy/ventoy_os_param
)
vtdiskname
=
${
vtLine
%%#*
}
fi
vtshortname
=
"
${
vtdiskname
#/dev/
}
"
vtshortname
=
"
${
vtdiskname
#/dev/
}
"
mv
/newdev/
${
vtshortname
}
/newdev/backup_
${
vtshortname
}
mv
/newdev/
${
vtshortname
}
/newdev/backup_
${
vtshortname
}
...
...
IMG/cpio/ventoy/loop/fydeos/ventoy-hook.sh
View file @
ba5978d2
...
@@ -129,6 +129,10 @@ mount -t devtmpfs dev /newdev
...
@@ -129,6 +129,10 @@ mount -t devtmpfs dev /newdev
cp
-a
/dev/mapper/ventoy
*
/newdev/mapper/
cp
-a
/dev/mapper/ventoy
*
/newdev/mapper/
cp
-a
/dev/ventoy
*
/newdev/
cp
-a
/dev/ventoy
*
/newdev/
if
[
"
$VTOY_VLNK_BOOT
"
=
"01"
]
;
then
vtLine
=
$(
$VTOY_PATH
/tool/vtoydump
-f
/ventoy/ventoy_os_param
)
vtdiskname
=
${
vtLine
%%#*
}
fi
vtshortname
=
"
${
vtdiskname
#/dev/
}
"
vtshortname
=
"
${
vtdiskname
#/dev/
}
"
mv
/newdev/
${
vtshortname
}
/newdev/backup_
${
vtshortname
}
mv
/newdev/
${
vtshortname
}
/newdev/backup_
${
vtshortname
}
...
...
INSTALL/README
View file @
ba5978d2
...
@@ -26,6 +26,14 @@ Please refer https://www.ventoy.net/en/doc_start.html for details.
...
@@ -26,6 +26,14 @@ Please refer https://www.ventoy.net/en/doc_start.html for details.
1. sudo sh VentoyPlugson.sh
1. sudo sh VentoyPlugson.sh
2. open your browser and visit http://127.0.0.1:24681
2. open your browser and visit http://127.0.0.1:24681
========== VentoyVlnk.sh ===============
Usage: sudo sh VentoyVlnk.sh CMD FILE
CMD:
-c FILE create vlnk for FILE
-l VLNK parse vlnk file
-v print verbose info
-h print this help
========= VentoyGUI ===================
========= VentoyGUI ===================
VentoyGUI is native GUI program for Linux (GTK/QT)
VentoyGUI is native GUI program for Linux (GTK/QT)
...
...
INSTALL/grub/arm64-efi/affs.mod
View file @
ba5978d2
No preview for this file type
INSTALL/grub/arm64-efi/afs.mod
View file @
ba5978d2
No preview for this file type
INSTALL/grub/arm64-efi/bfs.mod
View file @
ba5978d2
No preview for this file type
INSTALL/grub/arm64-efi/btrfs.mod
View file @
ba5978d2
No preview for this file type
Prev
1
2
3
4
5
…
15
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