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
c5af17e0
Commit
c5af17e0
authored
Aug 26, 2021
by
longpanda
Browse files
experimental support for chromium os (fydeos/cloudready)
parent
05e208ea
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
800 additions
and
12 deletions
+800
-12
GRUB2/MOD_SRC/grub-2.04/grub-core/partmap/gpt.c
GRUB2/MOD_SRC/grub-2.04/grub-core/partmap/gpt.c
+232
-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
+64
-2
GRUB2/MOD_SRC/grub-2.04/include/grub/partition.h
GRUB2/MOD_SRC/grub-2.04/include/grub/partition.h
+141
-0
IMG/cpio/ventoy/loop/cloudready/ventoy-hook.sh
IMG/cpio/ventoy/loop/cloudready/ventoy-hook.sh
+134
-0
IMG/cpio/ventoy/loop/fydeos/ventoy-hook.sh
IMG/cpio/ventoy/loop/fydeos/ventoy-hook.sh
+134
-0
INSTALL/grub/grub.cfg
INSTALL/grub/grub.cfg
+95
-10
No files found.
GRUB2/MOD_SRC/grub-2.04/grub-core/partmap/gpt.c
0 → 100644
View file @
c5af17e0
/* gpt.c - Read GUID Partition Tables (GPT). */
/*
* GRUB -- GRand Unified Bootloader
* Copyright (C) 2002,2005,2006,2007,2008 Free Software Foundation, Inc.
*
* GRUB 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.
*
* GRUB 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 GRUB. If not, see <http://www.gnu.org/licenses/>.
*/
#include <grub/disk.h>
#include <grub/misc.h>
#include <grub/mm.h>
#include <grub/partition.h>
#include <grub/dl.h>
#include <grub/msdos_partition.h>
#include <grub/gpt_partition.h>
#include <grub/i18n.h>
GRUB_MOD_LICENSE
(
"GPLv3+"
);
static
grub_uint8_t
grub_gpt_magic
[
8
]
=
{
0x45
,
0x46
,
0x49
,
0x20
,
0x50
,
0x41
,
0x52
,
0x54
};
static
const
grub_gpt_part_guid_t
grub_gpt_partition_type_empty
=
GRUB_GPT_PARTITION_TYPE_EMPTY
;
#ifdef GRUB_UTIL
static
const
grub_gpt_part_guid_t
grub_gpt_partition_type_bios_boot
=
GRUB_GPT_PARTITION_TYPE_BIOS_BOOT
;
#endif
/* 512 << 7 = 65536 byte sectors. */
#define MAX_SECTOR_LOG 7
static
struct
grub_partition_map
grub_gpt_partition_map
;
grub_err_t
grub_gpt_partition_map_iterate
(
grub_disk_t
disk
,
grub_partition_iterate_hook_t
hook
,
void
*
hook_data
)
{
struct
grub_partition
part
;
struct
grub_gpt_header
gpt
;
struct
grub_gpt_partentry
entry
;
struct
grub_msdos_partition_mbr
mbr
;
grub_uint64_t
entries
;
unsigned
int
i
;
int
last_offset
=
0
;
int
sector_log
=
0
;
/* Read the protective MBR. */
if
(
grub_disk_read
(
disk
,
0
,
0
,
sizeof
(
mbr
),
&
mbr
))
return
grub_errno
;
/* Check if it is valid. */
if
(
mbr
.
signature
!=
grub_cpu_to_le16_compile_time
(
GRUB_PC_PARTITION_SIGNATURE
))
return
grub_error
(
GRUB_ERR_BAD_PART_TABLE
,
"no signature"
);
/* Make sure the MBR is a protective MBR and not a normal MBR. */
for
(
i
=
0
;
i
<
4
;
i
++
)
if
(
mbr
.
entries
[
i
].
type
==
GRUB_PC_PARTITION_TYPE_GPT_DISK
)
break
;
if
(
i
==
4
)
return
grub_error
(
GRUB_ERR_BAD_PART_TABLE
,
"no GPT partition map found"
);
/* Read the GPT header. */
for
(
sector_log
=
0
;
sector_log
<
MAX_SECTOR_LOG
;
sector_log
++
)
{
if
(
grub_disk_read
(
disk
,
1
<<
sector_log
,
0
,
sizeof
(
gpt
),
&
gpt
))
return
grub_errno
;
if
(
grub_memcmp
(
gpt
.
magic
,
grub_gpt_magic
,
sizeof
(
grub_gpt_magic
))
==
0
)
break
;
}
if
(
sector_log
==
MAX_SECTOR_LOG
)
return
grub_error
(
GRUB_ERR_BAD_PART_TABLE
,
"no valid GPT header"
);
grub_dprintf
(
"gpt"
,
"Read a valid GPT header
\n
"
);
entries
=
grub_le_to_cpu64
(
gpt
.
partitions
)
<<
sector_log
;
for
(
i
=
0
;
i
<
grub_le_to_cpu32
(
gpt
.
maxpart
);
i
++
)
{
if
(
grub_disk_read
(
disk
,
entries
,
last_offset
,
sizeof
(
entry
),
&
entry
))
return
grub_errno
;
if
(
grub_memcmp
(
&
grub_gpt_partition_type_empty
,
&
entry
.
type
,
sizeof
(
grub_gpt_partition_type_empty
)))
{
/* Calculate the first block and the size of the partition. */
part
.
start
=
grub_le_to_cpu64
(
entry
.
start
)
<<
sector_log
;
part
.
len
=
(
grub_le_to_cpu64
(
entry
.
end
)
-
grub_le_to_cpu64
(
entry
.
start
)
+
1
)
<<
sector_log
;
part
.
offset
=
entries
;
part
.
number
=
i
;
part
.
index
=
last_offset
;
part
.
partmap
=
&
grub_gpt_partition_map
;
part
.
parent
=
disk
->
partition
;
part
.
gpt_attrib
=
entry
.
attrib
;
grub_dprintf
(
"gpt"
,
"GPT entry %d: start=%lld, length=%lld
\n
"
,
i
,
(
unsigned
long
long
)
part
.
start
,
(
unsigned
long
long
)
part
.
len
);
if
(
hook
(
disk
,
&
part
,
hook_data
))
return
grub_errno
;
}
last_offset
+=
grub_le_to_cpu32
(
gpt
.
partentry_size
);
if
(
last_offset
==
GRUB_DISK_SECTOR_SIZE
)
{
last_offset
=
0
;
entries
++
;
}
}
return
GRUB_ERR_NONE
;
}
#ifdef GRUB_UTIL
/* Context for gpt_partition_map_embed. */
struct
gpt_partition_map_embed_ctx
{
grub_disk_addr_t
start
,
len
;
};
/* Helper for gpt_partition_map_embed. */
static
int
find_usable_region
(
grub_disk_t
disk
__attribute__
((
unused
)),
const
grub_partition_t
p
,
void
*
data
)
{
struct
gpt_partition_map_embed_ctx
*
ctx
=
data
;
struct
grub_gpt_partentry
gptdata
;
grub_partition_t
p2
;
p2
=
disk
->
partition
;
disk
->
partition
=
p
->
parent
;
if
(
grub_disk_read
(
disk
,
p
->
offset
,
p
->
index
,
sizeof
(
gptdata
),
&
gptdata
))
{
disk
->
partition
=
p2
;
return
0
;
}
disk
->
partition
=
p2
;
/* If there's an embed region, it is in a dedicated partition. */
if
(
!
grub_memcmp
(
&
gptdata
.
type
,
&
grub_gpt_partition_type_bios_boot
,
16
))
{
ctx
->
start
=
p
->
start
;
ctx
->
len
=
p
->
len
;
return
1
;
}
return
0
;
}
static
grub_err_t
gpt_partition_map_embed
(
struct
grub_disk
*
disk
,
unsigned
int
*
nsectors
,
unsigned
int
max_nsectors
,
grub_embed_type_t
embed_type
,
grub_disk_addr_t
**
sectors
)
{
struct
gpt_partition_map_embed_ctx
ctx
=
{
.
start
=
0
,
.
len
=
0
};
unsigned
i
;
grub_err_t
err
;
if
(
embed_type
!=
GRUB_EMBED_PCBIOS
)
return
grub_error
(
GRUB_ERR_NOT_IMPLEMENTED_YET
,
"GPT currently supports only PC-BIOS embedding"
);
err
=
grub_gpt_partition_map_iterate
(
disk
,
find_usable_region
,
&
ctx
);
if
(
err
)
return
err
;
if
(
ctx
.
len
==
0
)
return
grub_error
(
GRUB_ERR_FILE_NOT_FOUND
,
N_
(
"this GPT partition label contains no BIOS Boot Partition;"
" embedding won't be possible"
));
if
(
ctx
.
len
<
*
nsectors
)
return
grub_error
(
GRUB_ERR_OUT_OF_RANGE
,
N_
(
"your BIOS Boot Partition is too small;"
" embedding won't be possible"
));
*
nsectors
=
ctx
.
len
;
if
(
*
nsectors
>
max_nsectors
)
*
nsectors
=
max_nsectors
;
*
sectors
=
grub_malloc
(
*
nsectors
*
sizeof
(
**
sectors
));
if
(
!*
sectors
)
return
grub_errno
;
for
(
i
=
0
;
i
<
*
nsectors
;
i
++
)
(
*
sectors
)[
i
]
=
ctx
.
start
+
i
;
return
GRUB_ERR_NONE
;
}
#endif
/* Partition map type. */
static
struct
grub_partition_map
grub_gpt_partition_map
=
{
.
name
=
"gpt"
,
.
iterate
=
grub_gpt_partition_map_iterate
,
#ifdef GRUB_UTIL
.
embed
=
gpt_partition_map_embed
#endif
};
GRUB_MOD_INIT
(
part_gpt
)
{
grub_partition_map_register
(
&
grub_gpt_partition_map
);
}
GRUB_MOD_FINI
(
part_gpt
)
{
grub_partition_map_unregister
(
&
grub_gpt_partition_map
);
}
GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_cmd.c
View file @
c5af17e0
...
@@ -3491,9 +3491,11 @@ end:
...
@@ -3491,9 +3491,11 @@ end:
static
int
ventoy_img_partition_callback
(
struct
grub_disk
*
disk
,
const
grub_partition_t
partition
,
void
*
data
)
static
int
ventoy_img_partition_callback
(
struct
grub_disk
*
disk
,
const
grub_partition_t
partition
,
void
*
data
)
{
{
int
*
pCnt
=
(
int
*
)
data
;
(
void
)
disk
;
(
void
)
disk
;
(
void
)
data
;
(
*
pCnt
)
++
;
g_part_list_pos
+=
grub_snprintf
(
g_part_list_buf
+
g_part_list_pos
,
VTOY_MAX_SCRIPT_BUF
-
g_part_list_pos
,
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
"
,
"0 %llu linear /dev/ventoy %llu
\n
"
,
(
ulonglong
)
partition
->
len
,
(
ulonglong
)
partition
->
start
);
(
ulonglong
)
partition
->
len
,
(
ulonglong
)
partition
->
start
);
...
@@ -3503,6 +3505,7 @@ static int ventoy_img_partition_callback (struct grub_disk *disk, const grub_par
...
@@ -3503,6 +3505,7 @@ static int ventoy_img_partition_callback (struct grub_disk *disk, const grub_par
static
grub_err_t
ventoy_cmd_img_part_info
(
grub_extcmd_context_t
ctxt
,
int
argc
,
char
**
args
)
static
grub_err_t
ventoy_cmd_img_part_info
(
grub_extcmd_context_t
ctxt
,
int
argc
,
char
**
args
)
{
{
int
cnt
=
0
;
char
*
device_name
=
NULL
;
char
*
device_name
=
NULL
;
grub_device_t
dev
=
NULL
;
grub_device_t
dev
=
NULL
;
char
buf
[
64
];
char
buf
[
64
];
...
@@ -3531,11 +3534,14 @@ static grub_err_t ventoy_cmd_img_part_info(grub_extcmd_context_t ctxt, int argc,
...
@@ -3531,11 +3534,14 @@ static grub_err_t ventoy_cmd_img_part_info(grub_extcmd_context_t ctxt, int argc,
goto
end
;
goto
end
;
}
}
grub_partition_iterate
(
dev
->
disk
,
ventoy_img_partition_callback
,
NULL
);
grub_partition_iterate
(
dev
->
disk
,
ventoy_img_partition_callback
,
&
cnt
);
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_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
);
grub_env_set
(
"vtoy_img_part_file"
,
buf
);
grub_snprintf
(
buf
,
sizeof
(
buf
),
"%d"
,
cnt
);
grub_env_set
(
"vtoy_img_part_cnt"
,
buf
);
end:
end:
check_free
(
device_name
,
grub_free
);
check_free
(
device_name
,
grub_free
);
...
@@ -4792,6 +4798,59 @@ out:
...
@@ -4792,6 +4798,59 @@ out:
VENTOY_CMD_RETURN
(
GRUB_ERR_NONE
);
VENTOY_CMD_RETURN
(
GRUB_ERR_NONE
);
}
}
static
grub_err_t
grub_cmd_gptpriority
(
grub_extcmd_context_t
ctxt
,
int
argc
,
char
**
args
)
{
grub_disk_t
disk
;
grub_partition_t
part
;
char
priority_str
[
3
];
/* Maximum value 15 */
(
void
)
ctxt
;
if
(
argc
<
2
||
argc
>
3
)
return
grub_error
(
GRUB_ERR_BAD_ARGUMENT
,
"gptpriority DISKNAME PARTITIONNUM [VARNAME]"
);
/* Open the disk if it exists */
disk
=
grub_disk_open
(
args
[
0
]);
if
(
!
disk
)
{
return
grub_error
(
GRUB_ERR_BAD_ARGUMENT
,
"Not a disk"
);
}
part
=
grub_partition_probe
(
disk
,
args
[
1
]);
if
(
!
part
)
{
grub_disk_close
(
disk
);
return
grub_error
(
GRUB_ERR_BAD_ARGUMENT
,
"No such partition"
);
}
if
(
grub_strcmp
(
part
->
partmap
->
name
,
"gpt"
))
{
grub_disk_close
(
disk
);
return
grub_error
(
GRUB_ERR_BAD_PART_TABLE
,
"Not a GPT partition"
);
}
grub_snprintf
(
priority_str
,
sizeof
(
priority_str
),
"%u"
,
(
grub_uint32_t
)((
part
->
gpt_attrib
>>
48
)
&
0xfULL
));
if
(
argc
==
3
)
{
grub_env_set
(
args
[
2
],
priority_str
);
grub_env_export
(
args
[
2
]);
}
else
{
grub_printf
(
"Priority is %s
\n
"
,
priority_str
);
}
grub_disk_close
(
disk
);
return
GRUB_ERR_NONE
;
}
int
ventoy_env_init
(
void
)
int
ventoy_env_init
(
void
)
{
{
char
buf
[
64
];
char
buf
[
64
];
...
@@ -4839,6 +4898,8 @@ int ventoy_env_init(void)
...
@@ -4839,6 +4898,8 @@ int ventoy_env_init(void)
return
0
;
return
0
;
}
}
static
cmd_para
ventoy_cmds
[]
=
static
cmd_para
ventoy_cmds
[]
=
{
{
{
"vt_incr"
,
ventoy_cmd_incr
,
0
,
NULL
,
"{Var} {INT}"
,
"Increase integer variable"
,
NULL
},
{
"vt_incr"
,
ventoy_cmd_incr
,
0
,
NULL
,
"{Var} {INT}"
,
"Increase integer variable"
,
NULL
},
...
@@ -4971,6 +5032,7 @@ static cmd_para ventoy_cmds[] =
...
@@ -4971,6 +5032,7 @@ static cmd_para ventoy_cmds[] =
{
"vt_pop_pager"
,
ventoy_cmd_pop_pager
,
0
,
NULL
,
""
,
""
,
NULL
},
{
"vt_pop_pager"
,
ventoy_cmd_pop_pager
,
0
,
NULL
,
""
,
""
,
NULL
},
{
"vt_check_json_path_case"
,
ventoy_cmd_chk_json_pathcase
,
0
,
NULL
,
""
,
""
,
NULL
},
{
"vt_check_json_path_case"
,
ventoy_cmd_chk_json_pathcase
,
0
,
NULL
,
""
,
""
,
NULL
},
{
"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
},
};
};
int
ventoy_register_all_cmd
(
void
)
int
ventoy_register_all_cmd
(
void
)
...
...
GRUB2/MOD_SRC/grub-2.04/include/grub/partition.h
0 → 100644
View file @
c5af17e0
/*
* GRUB -- GRand Unified Bootloader
* Copyright (C) 1999,2000,2001,2002,2004,2006,2007 Free Software Foundation, Inc.
*
* GRUB 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.
*
* GRUB 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 GRUB. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef GRUB_PART_HEADER
#define GRUB_PART_HEADER 1
#include <grub/dl.h>
#include <grub/list.h>
struct
grub_disk
;
typedef
struct
grub_partition
*
grub_partition_t
;
#ifdef GRUB_UTIL
typedef
enum
{
GRUB_EMBED_PCBIOS
}
grub_embed_type_t
;
#endif
typedef
int
(
*
grub_partition_iterate_hook_t
)
(
struct
grub_disk
*
disk
,
const
grub_partition_t
partition
,
void
*
data
);
/* Partition map type. */
struct
grub_partition_map
{
/* The next partition map type. */
struct
grub_partition_map
*
next
;
struct
grub_partition_map
**
prev
;
/* The name of the partition map type. */
const
char
*
name
;
/* Call HOOK with each partition, until HOOK returns non-zero. */
grub_err_t
(
*
iterate
)
(
struct
grub_disk
*
disk
,
grub_partition_iterate_hook_t
hook
,
void
*
hook_data
);
#ifdef GRUB_UTIL
/* Determine sectors available for embedding. */
grub_err_t
(
*
embed
)
(
struct
grub_disk
*
disk
,
unsigned
int
*
nsectors
,
unsigned
int
max_nsectors
,
grub_embed_type_t
embed_type
,
grub_disk_addr_t
**
sectors
);
#endif
};
typedef
struct
grub_partition_map
*
grub_partition_map_t
;
/* Partition description. */
struct
grub_partition
{
/* The partition number. */
int
number
;
/* The start sector (relative to parent). */
grub_disk_addr_t
start
;
/* The length in sector units. */
grub_uint64_t
len
;
/* The offset of the partition table. */
grub_disk_addr_t
offset
;
/* The index of this partition in the partition table. */
int
index
;
/* Parent partition (physically contains this partition). */
struct
grub_partition
*
parent
;
/* The type partition map. */
grub_partition_map_t
partmap
;
/* The type of partition whne it's on MSDOS.
Used for embedding detection. */
grub_uint8_t
msdostype
;
/* The attrib field for GPT. Needed for priority detection. */
grub_uint64_t
gpt_attrib
;
};
grub_partition_t
EXPORT_FUNC
(
grub_partition_probe
)
(
struct
grub_disk
*
disk
,
const
char
*
str
);
int
EXPORT_FUNC
(
grub_partition_iterate
)
(
struct
grub_disk
*
disk
,
grub_partition_iterate_hook_t
hook
,
void
*
hook_data
);
char
*
EXPORT_FUNC
(
grub_partition_get_name
)
(
const
grub_partition_t
partition
);
extern
grub_partition_map_t
EXPORT_VAR
(
grub_partition_map_list
);
#ifndef GRUB_LST_GENERATOR
static
inline
void
grub_partition_map_register
(
grub_partition_map_t
partmap
)
{
grub_list_push
(
GRUB_AS_LIST_P
(
&
grub_partition_map_list
),
GRUB_AS_LIST
(
partmap
));
}
#endif
static
inline
void
grub_partition_map_unregister
(
grub_partition_map_t
partmap
)
{
grub_list_remove
(
GRUB_AS_LIST
(
partmap
));
}
#define FOR_PARTITION_MAPS(var) FOR_LIST_ELEMENTS((var), (grub_partition_map_list))
static
inline
grub_disk_addr_t
grub_partition_get_start
(
const
grub_partition_t
p
)
{
grub_partition_t
part
;
grub_uint64_t
part_start
=
0
;
for
(
part
=
p
;
part
;
part
=
part
->
parent
)
part_start
+=
part
->
start
;
return
part_start
;
}
static
inline
grub_uint64_t
grub_partition_get_len
(
const
grub_partition_t
p
)
{
return
p
->
len
;
}
#endif
/* ! GRUB_PART_HEADER */
IMG/cpio/ventoy/loop/cloudready/ventoy-hook.sh
0 → 100644
View file @
c5af17e0
#!/ventoy/busybox/sh
#************************************************************************************
# Copyright (c) 2021, 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
$*
########"
VTPATH_OLD
=
$PATH
;
PATH
=
$BUSYBOX_PATH
:
$VTOY_PATH
/tool:
$PATH
mkdir
/sys
mount
-t
sysfs sys /sys
mdev
-s
sleep
2
while
[
-n
"Y"
]
;
do
usb_disk
=
$(
get_ventoy_disk_name
)
if
echo
$usb_disk
| egrep
-q
"nvme|mmc|nbd"
;
then
vtpart2
=
${
usb_disk
}
p2
else
vtpart2
=
${
usb_disk
}
2
fi
if
[
-e
"
${
vtpart2
}
"
]
;
then
break
else
sleep
2
mdev
-s
fi
done
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
vtlog
"copy out the e2fsck program ..."
mkdir
/ventoy_rdroot
mkdir
-p
/lib /lib64 /usr/lib64 /sbin
mount
-o
ro /dev/ventoy3 /ventoy_rdroot
>>
$VTLOG
2>&1
cp
-a
/ventoy_rdroot/sbin/e2fsck /sbin/
cp
-a
/ventoy_rdroot/usr/lib64/libext2fs
*
/usr/lib64/
cp
-a
/ventoy_rdroot/usr/lib64/libcom_err
*
/usr/lib64/
cp
-a
/ventoy_rdroot/usr/lib64/libe2p
*
/usr/lib64/
cp
-a
/ventoy_rdroot/lib64/libblk
*
/lib64/
cp
-a
/ventoy_rdroot/lib64/libuuid
*
/lib64/
cp
-a
/ventoy_rdroot/lib64/libdl.
*
/lib64/
cp
-a
/ventoy_rdroot/lib64/libdl-
*
/lib64/
cp
-a
/ventoy_rdroot/lib64/libc.
*
/lib64/
cp
-a
/ventoy_rdroot/lib64/libc-
*
/lib64/
cp
-a
/ventoy_rdroot/lib64/libpthread
*
/lib64/
cp
-a
/ventoy_rdroot/lib64/ld-
*
/lib64/
umount /ventoy_rdroot
vtlog
"========================================="
vtlog
"===== e2fsck -y -v /dev/ventoy1 ====="
e2fsck
-y
-v
/dev/ventoy1
>>
$VTLOG
2>&1
vtlog
"===== e2fsck -y -v /dev/ventoy3 ====="
e2fsck
-y
-v
/dev/ventoy3
>>
$VTLOG
2>&1
vtlog
"===== e2fsck -y -v /dev/ventoy8 ====="
e2fsck
-y
-v
/dev/ventoy8
>>
$VTLOG
2>&1
vtlog
"========================================="
vtlog
"proc devtmpfs ..."
mkdir
/newdev
mount
-t
devtmpfs dev /newdev
cp
-a
/dev/mapper/ventoy
*
/newdev/mapper/
cp
-a
/dev/ventoy
*
/newdev/
vtshortname
=
"
${
vtdiskname
#/dev/
}
"
mv
/newdev/
${
vtshortname
}
/newdev/backup_
${
vtshortname
}
cp
-a
/dev/ventoy /newdev/
${
vtshortname
}
for
i
in
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
;
do
if
[
-e
/dev/ventoy
${
i
}
]
;
then
if
echo
$vtdiskname
| egrep
-q
"nvme|mmc|nbd"
;
then
vtpart
=
p
$i
else
vtpart
=
$i
fi
if
[
-e
/newdev/
${
vtshortname
}${
vtpart
}
]
;
then
mv
/newdev/
${
vtshortname
}${
vtpart
}
/newdev/backup_
${
vtshortname
}${
vtpart
}
fi
cp
-a
/dev/ventoy
${
i
}
/newdev/
${
vtshortname
}${
vtpart
}
if
[
$i
-eq
3
]
;
then
[
-e
/dev/
${
vtshortname
}${
vtpart
}
]
&&
rm
-f
/dev/
${
vtshortname
}${
vtpart
}
cp
-a
/dev/ventoy
${
i
}
/dev/
${
vtshortname
}${
vtpart
}
vt_root_dev
=
"/dev/
${
vtshortname
}${
vtpart
}
"
vtlog
"vt_root_dev=
$vt_root_dev
"
fi
fi
done
cp
-a
$VTLOG
/newdev/ventoy.log
umount /newdev
mount
-o
ro
$vt_root_dev
/ventoy_rdroot
mount
-t
devtmpfs dev /ventoy_rdroot/dev
PATH
=
$VTPATH_OLD
IMG/cpio/ventoy/loop/fydeos/ventoy-hook.sh
0 → 100644
View file @
c5af17e0
#!/ventoy/busybox/sh
#************************************************************************************
# Copyright (c) 2021, 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
$*
########"
VTPATH_OLD
=
$PATH
;
PATH
=
$BUSYBOX_PATH
:
$VTOY_PATH
/tool:
$PATH
mkdir
/sys
mount
-t
sysfs sys /sys
mdev
-s
sleep
2
while
[
-n
"Y"
]
;
do
usb_disk
=
$(
get_ventoy_disk_name
)
if
echo
$usb_disk
| egrep
-q
"nvme|mmc|nbd"
;
then
vtpart2
=
${
usb_disk
}
p2
else
vtpart2
=
${
usb_disk
}
2
fi
if
[
-e
"
${
vtpart2
}
"
]
;
then
break
else
sleep
2
mdev
-s
fi
done
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
vtlog
"copy out the e2fsck program ..."
mkdir
/ventoy_rdroot
mkdir
-p
/lib /lib64 /usr/lib64 /sbin
mount
-o
ro /dev/ventoy3 /ventoy_rdroot
>>
$VTLOG
2>&1
cp
-a
/ventoy_rdroot/sbin/e2fsck /sbin/
cp
-a
/ventoy_rdroot/usr/lib64/libext2fs
*
/usr/lib64/
cp
-a
/ventoy_rdroot/usr/lib64/libcom_err
*
/usr/lib64/
cp
-a
/ventoy_rdroot/usr/lib64/libe2p
*
/usr/lib64/
cp
-a
/ventoy_rdroot/lib64/libblk
*
/lib64/
cp
-a
/ventoy_rdroot/lib64/libuuid
*
/lib64/
cp
-a
/ventoy_rdroot/lib64/libdl.
*
/lib64/
cp
-a
/ventoy_rdroot/lib64/libdl-
*
/lib64/
cp
-a
/ventoy_rdroot/lib64/libc.
*
/lib64/
cp
-a
/ventoy_rdroot/lib64/libc-
*
/lib64/
cp
-a
/ventoy_rdroot/lib64/libpthread
*
/lib64/
cp
-a
/ventoy_rdroot/lib64/ld-
*
/lib64/
umount /ventoy_rdroot
vtlog
"========================================="
vtlog
"===== e2fsck -y -v /dev/ventoy1 ====="
e2fsck
-y
-v
/dev/ventoy1
>>
$VTLOG
2>&1
vtlog
"===== e2fsck -y -v /dev/ventoy3 ====="
e2fsck
-y
-v
/dev/ventoy3
>>
$VTLOG
2>&1
vtlog
"===== e2fsck -y -v /dev/ventoy8 ====="
e2fsck
-y
-v
/dev/ventoy8
>>
$VTLOG
2>&1
vtlog
"========================================="
vtlog
"proc devtmpfs ..."
mkdir
/newdev
mount
-t
devtmpfs dev /newdev
cp
-a
/dev/mapper/ventoy
*
/newdev/mapper/
cp
-a
/dev/ventoy
*
/newdev/
vtshortname
=
"
${
vtdiskname
#/dev/
}
"
mv
/newdev/
${
vtshortname
}
/newdev/backup_
${
vtshortname
}
cp
-a
/dev/ventoy /newdev/
${
vtshortname
}
for
i
in
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
;
do
if
[
-e
/dev/ventoy
${
i
}
]
;
then
if
echo
$vtdiskname
| egrep
-q
"nvme|mmc|nbd"
;
then
vtpart
=
p
$i
else
vtpart
=
$i
fi
if
[
-e
/newdev/
${
vtshortname
}${
vtpart
}
]
;
then
mv
/newdev/
${
vtshortname
}${
vtpart
}
/newdev/backup_
${
vtshortname
}${
vtpart
}
fi
cp
-a
/dev/ventoy
${
i
}
/newdev/
${
vtshortname
}${
vtpart
}
if
[
$i
-eq
3
]
;
then
[
-e
/dev/
${
vtshortname
}${
vtpart
}
]
&&
rm
-f
/dev/
${
vtshortname
}${
vtpart
}
cp
-a
/dev/ventoy
${
i
}
/dev/
${
vtshortname
}${
vtpart
}
vt_root_dev
=
"/dev/
${
vtshortname
}${
vtpart
}
"
vtlog
"vt_root_dev=
$vt_root_dev
"
fi
fi
done
cp
-a
$VTLOG
/newdev/ventoy.log
umount /newdev
mount
-o
ro
$vt_root_dev
/ventoy_rdroot
mount
-t
devtmpfs dev /ventoy_rdroot/dev
PATH
=
$VTPATH_OLD
INSTALL/grub/grub.cfg
View file @
c5af17e0
...
@@ -1499,6 +1499,12 @@ function vtoy_unsupport_menuentry {
...
@@ -1499,6 +1499,12 @@ function vtoy_unsupport_menuentry {
#============================================================#
#============================================================#
#
#
function only_uefi_tip {
echo -e "\n This IMG file is only supported in UEFI mode. \n"
echo -e " 此 IMG 文件只支持在 UEFI 模式下启动。\n"
echo -e "\npress ENTER to exit (请按 回车 键返回) ..."
read vtInputKey
}
function ventoy_img_easyos {
function ventoy_img_easyos {
vt_load_cpio $vtoy_path "${vt_chosen_path}" ${vtoy_iso_part} "busybox=$ventoy_busybox_ver"
vt_load_cpio $vtoy_path "${vt_chosen_path}" ${vtoy_iso_part} "busybox=$ventoy_busybox_ver"
...
@@ -1742,6 +1748,74 @@ function ventoy_img_tails {
...
@@ -1742,6 +1748,74 @@ function ventoy_img_tails {
vt_unset_boot_opt
vt_unset_boot_opt
}
}
function ventoy_img_fydeos {
if [ "$grub_platform" = "pc" ]; then
only_uefi_tip
return
fi
vt_load_cpio $vtoy_path "${vt_chosen_path}" ${vtoy_iso_part} "busybox=64"
vt_trailer_cpio ${vtoy_iso_part} "${vt_chosen_path}" noinit
ventoy_debug_pause
#boot image file
vt_set_boot_opt rdinit=/vtoy/vtoy ventoyos=fydeos
vt_img_hook_root
set grubdisk=vtimghd
set grubpartA=(vtimghd,3)
set grubpartB=(vtimghd,5)
set linuxpartA=(sda,3)
set linuxpartB=(sda,5)
set root=(vtimghd,12)
configfile (vtimghd,12)/efi/boot/grub.cfg
vt_img_unhook_root
vt_unset_boot_opt
unset grubdisk
unset grubpartA
unset grubpartB
unset linuxpartA
unset linuxpartB
}
function ventoy_img_cloudready {
if [ "$grub_platform" = "pc" ]; then
only_uefi_tip
return
fi
vt_load_cpio $vtoy_path "${vt_chosen_path}" ${vtoy_iso_part} "busybox=64"
vt_trailer_cpio ${vtoy_iso_part} "${vt_chosen_path}" noinit
ventoy_debug_pause
#boot image file
vt_set_boot_opt rdinit=/vtoy/vtoy ventoyos=cloudready
vt_img_hook_root
set grubdisk=vtimghd
set grubpartA=(vtimghd,3)
set grubpartB=(vtimghd,5)
set linuxpartA=(sda,3)
set linuxpartB=(sda,5)
set root=(vtimghd,12)
configfile (vtimghd,12)/efi/boot/grub.cfg
vt_img_unhook_root
vt_unset_boot_opt
unset grubdisk
unset grubpartA
unset grubpartB
unset linuxpartA
unset linuxpartB
}
function ventoy_img_memtest86 {
function ventoy_img_memtest86 {
chainloader (vtimghd,1)/efi/boot/BOOTX64.efi
chainloader (vtimghd,1)/efi/boot/BOOTX64.efi
boot
boot
...
@@ -1800,19 +1874,26 @@ function img_common_menuentry {
...
@@ -1800,19 +1874,26 @@ function img_common_menuentry {
vt_get_fs_label (vtimghd,1) vtImgHd1Label
vt_get_fs_label (vtimghd,1) vtImgHd1Label
if [ -d (vtimghd,2)/lib ]; then
if [ "$vtImgHd1Label" = "STATE" ]; then
vt_get_fs_label (vtimghd,3) vtImgHd3Label
elif [ -d (vtimghd,2)/lib ]; then
vt_get_fs_label (vtimghd,2) vtImgHd2Label
vt_get_fs_label (vtimghd,2) vtImgHd2Label
fi
fi
if [ -e (vtimghd,1)/etc/hostname ]; then
if [ -e (vtimghd,1)/etc/hostname ]; then
vt_1st_line (vtimghd,1)/etc/hostname vtImgHostname
vt_1st_line (vtimghd,1)/etc/hostname vtImgHostname
fi
fi
if vt_str_begin "$vtImgHd3Label" "ROOT-"; then
if [ -e (vtimghd,1)/easy.sfs ]; then
if [ -f (vtimghd,3)/etc/os-release.d/ID ]; then
ventoy_img_easyos
vt_1st_line (vtimghd,3)/etc/os-release.d/ID vt_release_line1
elif [ -e (vtimghd,1)/volumio.initrd ]; then
if [ vt_str_begin "$vt_release_line1" "FydeOS" ]; then
ventoy_img_volumio
ventoy_img_fydeos
fi
elif [ -f (vtimghd,3)/etc/cloudready-release ]; then
ventoy_img_cloudready
fi
elif vt_str_begin "$vtImgHd1Label" "LAKKA"; then
elif vt_str_begin "$vtImgHd1Label" "LAKKA"; then
ventoy_img_openelec lakka
ventoy_img_openelec lakka
elif vt_str_begin "$vtImgHd1Label" "LIBREELEC"; then
elif vt_str_begin "$vtImgHd1Label" "LIBREELEC"; then
...
@@ -1827,6 +1908,10 @@ function img_common_menuentry {
...
@@ -1827,6 +1908,10 @@ function img_common_menuentry {
ventoy_img_tails
ventoy_img_tails
elif [ "$vtImgHd2Label" = "RECALBOX" ]; then
elif [ "$vtImgHd2Label" = "RECALBOX" ]; then
ventoy_img_recalbox
ventoy_img_recalbox
elif [ -e (vtimghd,1)/easy.sfs ]; then
ventoy_img_easyos
elif [ -e (vtimghd,1)/volumio.initrd ]; then
ventoy_img_volumio
elif [ -f (vtimghd,2)/loader/entries/ubos.conf ]; then
elif [ -f (vtimghd,2)/loader/entries/ubos.conf ]; then
ventoy_img_ubos
ventoy_img_ubos
elif [ -f (vtimghd,2)/etc/openwrt_version ]; then
elif [ -f (vtimghd,2)/etc/openwrt_version ]; then
...
@@ -1836,7 +1921,7 @@ function img_common_menuentry {
...
@@ -1836,7 +1921,7 @@ function img_common_menuentry {
img_unsupport_tip
img_unsupport_tip
else
else
ventoy_img_memtest86
ventoy_img_memtest86
fi
fi
else
else
vt_linux_chain_data "${vtoy_iso_part}${vt_chosen_path}"
vt_linux_chain_data "${vtoy_iso_part}${vt_chosen_path}"
ventoy_acpi_param ${vtoy_chain_mem_addr} 512
ventoy_acpi_param ${vtoy_chain_mem_addr} 512
...
@@ -1870,7 +1955,7 @@ function img_unsupport_menuentry {
...
@@ -1870,7 +1955,7 @@ function img_unsupport_menuentry {
#############################################################
#############################################################
#############################################################
#############################################################
set VENTOY_VERSION="1.0.5
0
"
set VENTOY_VERSION="1.0.5
1
"
#ACPI not compatible with Window7/8, so disable by default
#ACPI not compatible with Window7/8, so disable by default
set VTOY_PARAM_NO_ACPI=1
set VTOY_PARAM_NO_ACPI=1
...
...
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