mirror of
https://github.com/ventoy/Ventoy.git
synced 2026-04-24 06:36:17 +00:00
Compare commits
51 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dba7530b21 | ||
|
|
e9b4c86082 | ||
|
|
dbcdf51950 | ||
|
|
de3e6c6d1d | ||
|
|
3c0df07b92 | ||
|
|
c1c27cd30c | ||
|
|
167c87402c | ||
|
|
d35b8431fe | ||
|
|
a1771bd9b8 | ||
|
|
ed61a955bf | ||
|
|
e7cf29fd9d | ||
|
|
b5d87d394a | ||
|
|
36da0e0f3d | ||
|
|
903fd7aa01 | ||
|
|
81728a817c | ||
|
|
f68d4a8076 | ||
|
|
f6c248e983 | ||
|
|
0906cd34fe | ||
|
|
d3b911d249 | ||
|
|
5c6e1c2446 | ||
|
|
3a97ab9165 | ||
|
|
6fe6231790 | ||
|
|
9564f125a7 | ||
|
|
e380575b91 | ||
|
|
0fd49126bd | ||
|
|
a466d787b8 | ||
|
|
ab5d00bafb | ||
|
|
450caa6654 | ||
|
|
ef93b55c91 | ||
|
|
4d7fcc26d4 | ||
|
|
3597f15814 | ||
|
|
f7e4a7a6ec | ||
|
|
65b88aabc5 | ||
|
|
c42abd33c2 | ||
|
|
af34df278f | ||
|
|
68fd17df5b | ||
|
|
628a72db2f | ||
|
|
a20ee878df | ||
|
|
3de3a36e9f | ||
|
|
06f164ef70 | ||
|
|
40fbc041ea | ||
|
|
935516ed49 | ||
|
|
a71d4513e4 | ||
|
|
82fef5314b | ||
|
|
052a0152e4 | ||
|
|
5fae0ca35f | ||
|
|
6482f2e7b3 | ||
|
|
bd8aebf166 | ||
|
|
3c05d55b8a | ||
|
|
92ed0c995e | ||
|
|
dc7e310828 |
@@ -85,13 +85,14 @@
|
|||||||
<tr> <td>./INSTALL/tool/i386/V2DServer</td>
|
<tr> <td>./INSTALL/tool/i386/V2DServer</td>
|
||||||
<tr> <td>./INSTALL/tool/mips64el/V2DServer</td>
|
<tr> <td>./INSTALL/tool/mips64el/V2DServer</td>
|
||||||
<tr> <td>./INSTALL/tool/x86_64/V2DServer</td>
|
<tr> <td>./INSTALL/tool/x86_64/V2DServer</td>
|
||||||
<tr> <td>./INSTALL/tool/aarch64/mkexfatfs</td> <td rowspan=8>build</td> <td rowspan=8>Build Instructions:<br/>./DOC/BuildVentoyFromSource.txt 4.9<br/>./ExFAT/buidexfat.sh<br/>./ExFAT/buidexfat_aarch64.sh<br/>./ExFAT/buidlibfuse.sh<br/>./ExFAT/buidlibfuse_aarch64.sh<br/></td> </tr>
|
<tr> <td>./INSTALL/tool/aarch64/mkexfatfs</td> <td rowspan=9>build</td> <td rowspan=8>Build Instructions:<br/>./DOC/BuildVentoyFromSource.txt 4.9<br/>./ExFAT/buidexfat.sh<br/>./ExFAT/buidexfat_aarch64.sh<br/>./ExFAT/buidlibfuse.sh<br/>./ExFAT/buidlibfuse_aarch64.sh<br/></td> </tr>
|
||||||
<tr> <td>./INSTALL/tool/aarch64/mount.exfat-fuse</td>
|
<tr> <td>./INSTALL/tool/aarch64/mount.exfat-fuse</td>
|
||||||
<tr> <td>./INSTALL/tool/i386/mkexfatfs</td>
|
<tr> <td>./INSTALL/tool/i386/mkexfatfs</td>
|
||||||
<tr> <td>./INSTALL/tool/i386/mount.exfat-fuse</td>
|
<tr> <td>./INSTALL/tool/i386/mount.exfat-fuse</td>
|
||||||
<tr> <td>./INSTALL/tool/mips64el/mkexfatfs</td>
|
<tr> <td>./INSTALL/tool/mips64el/mkexfatfs</td>
|
||||||
<tr> <td>./INSTALL/tool/mips64el/mount.exfat-fuse</td>
|
<tr> <td>./INSTALL/tool/mips64el/mount.exfat-fuse</td>
|
||||||
<tr> <td>./INSTALL/tool/x86_64/mkexfatfs</td>
|
<tr> <td>./INSTALL/tool/x86_64/mkexfatfs</td>
|
||||||
|
<tr> <td>./INSTALL/tool/x86_64/mkexfatfs_static</td>
|
||||||
<tr> <td>./INSTALL/tool/x86_64/mount.exfat-fuse</td>
|
<tr> <td>./INSTALL/tool/x86_64/mount.exfat-fuse</td>
|
||||||
<tr> <td>./INSTALL/tool/aarch64/vlnk</td> <td rowspan=4>build</td> <td rowspan=4>Build Instructions:<br/>./Vlnk/build.sh</td> </tr>
|
<tr> <td>./INSTALL/tool/aarch64/vlnk</td> <td rowspan=4>build</td> <td rowspan=4>Build Instructions:<br/>./Vlnk/build.sh</td> </tr>
|
||||||
<tr> <td>./INSTALL/tool/i386/vlnk</td>
|
<tr> <td>./INSTALL/tool/i386/vlnk</td>
|
||||||
|
|||||||
@@ -1,7 +0,0 @@
|
|||||||
|
|
||||||
obj-m += dm_patch.o
|
|
||||||
|
|
||||||
EXTRA_CFLAGS := -Wall
|
|
||||||
|
|
||||||
dm_patch-objs := dmpatch.o
|
|
||||||
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
|
|
||||||
obj-m += dm_patch_ibt.o
|
|
||||||
|
|
||||||
EXTRA_CFLAGS := -Wall -DVTOY_IBT -fcf-protection=branch -mindirect-branch-register
|
|
||||||
|
|
||||||
dm_patch_ibt-objs := dmpatch.o
|
|
||||||
|
|
||||||
@@ -1,632 +0,0 @@
|
|||||||
/******************************************************************************
|
|
||||||
* dmpatch.c ---- patch for device-mapper
|
|
||||||
*
|
|
||||||
* 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/>.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <linux/init.h>
|
|
||||||
#include <linux/module.h>
|
|
||||||
#include <linux/kallsyms.h>
|
|
||||||
#include <linux/mutex.h>
|
|
||||||
#include <linux/mempool.h>
|
|
||||||
#include <linux/delay.h>
|
|
||||||
#include <linux/wait.h>
|
|
||||||
#include <linux/slab.h>
|
|
||||||
|
|
||||||
#define MAX_PATCH 4
|
|
||||||
|
|
||||||
#define magic_sig 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF
|
|
||||||
|
|
||||||
typedef int (*kprobe_reg_pf)(void *);
|
|
||||||
typedef void (*kprobe_unreg_pf)(void *);
|
|
||||||
typedef int (*printk_pf)(const char *fmt, ...);
|
|
||||||
typedef int (*set_memory_attr_pf)(unsigned long addr, int numpages);
|
|
||||||
|
|
||||||
#pragma pack(1)
|
|
||||||
typedef struct ko_param
|
|
||||||
{
|
|
||||||
unsigned char magic[16];
|
|
||||||
unsigned long struct_size;
|
|
||||||
unsigned long pgsize;
|
|
||||||
unsigned long printk_addr;
|
|
||||||
unsigned long ro_addr;
|
|
||||||
unsigned long rw_addr;
|
|
||||||
unsigned long reg_kprobe_addr;
|
|
||||||
unsigned long unreg_kprobe_addr;
|
|
||||||
unsigned long sym_get_addr;
|
|
||||||
unsigned long sym_get_size;
|
|
||||||
unsigned long sym_put_addr;
|
|
||||||
unsigned long sym_put_size;
|
|
||||||
unsigned long kv_major;
|
|
||||||
unsigned long ibt;
|
|
||||||
unsigned long kv_minor;
|
|
||||||
unsigned long blkdev_get_addr;
|
|
||||||
unsigned long blkdev_put_addr;
|
|
||||||
unsigned long bdev_open_addr;
|
|
||||||
unsigned long kv_subminor;
|
|
||||||
unsigned long bdev_file_open_addr;
|
|
||||||
unsigned long padding[1];
|
|
||||||
}ko_param;
|
|
||||||
|
|
||||||
#pragma pack()
|
|
||||||
|
|
||||||
static printk_pf kprintf = NULL;
|
|
||||||
static set_memory_attr_pf set_mem_ro = NULL;
|
|
||||||
static set_memory_attr_pf set_mem_rw = NULL;
|
|
||||||
static kprobe_reg_pf reg_kprobe = NULL;
|
|
||||||
static kprobe_unreg_pf unreg_kprobe = NULL;
|
|
||||||
|
|
||||||
static volatile ko_param g_ko_param =
|
|
||||||
{
|
|
||||||
{ magic_sig },
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
|
||||||
};
|
|
||||||
|
|
||||||
#if defined(CONFIG_X86_64)
|
|
||||||
#define PATCH_OP_POS1 3
|
|
||||||
#define CODE_MATCH1(code, i) \
|
|
||||||
(code[i] == 0x40 && code[i + 1] == 0x80 && code[i + 2] == 0xce && code[i + 3] == 0x80)
|
|
||||||
|
|
||||||
#define PATCH_OP_POS2 1
|
|
||||||
#define CODE_MATCH2(code, i) \
|
|
||||||
(code[i] == 0x0C && code[i + 1] == 0x80 && code[i + 2] == 0x89 && code[i + 3] == 0xC6)
|
|
||||||
|
|
||||||
#define PATCH_OP_POS3 4
|
|
||||||
#define CODE_MATCH3(code, i) \
|
|
||||||
(code[i] == 0x44 && code[i + 1] == 0x89 && code[i + 2] == 0xe8 && code[i + 3] == 0x0c && code[i + 4] == 0x80)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#elif defined(CONFIG_X86_32)
|
|
||||||
#define PATCH_OP_POS1 2
|
|
||||||
#define CODE_MATCH1(code, i) \
|
|
||||||
(code[i] == 0x80 && code[i + 1] == 0xca && code[i + 2] == 0x80 && code[i + 3] == 0xe8)
|
|
||||||
|
|
||||||
#define PATCH_OP_POS2 PATCH_OP_POS1
|
|
||||||
#define CODE_MATCH2 CODE_MATCH1
|
|
||||||
#define PATCH_OP_POS3 PATCH_OP_POS1
|
|
||||||
#define CODE_MATCH3 CODE_MATCH1
|
|
||||||
|
|
||||||
|
|
||||||
#else
|
|
||||||
#error "unsupported arch"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef VTOY_IBT
|
|
||||||
#ifdef CONFIG_X86_64
|
|
||||||
/* Using 64-bit values saves one instruction clearing the high half of low */
|
|
||||||
#define DECLARE_ARGS(val, low, high) unsigned long low, high
|
|
||||||
#define EAX_EDX_VAL(val, low, high) ((low) | (high) << 32)
|
|
||||||
#define EAX_EDX_RET(val, low, high) "=a" (low), "=d" (high)
|
|
||||||
#else
|
|
||||||
#define DECLARE_ARGS(val, low, high) unsigned long long val
|
|
||||||
#define EAX_EDX_VAL(val, low, high) (val)
|
|
||||||
#define EAX_EDX_RET(val, low, high) "=A" (val)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define EX_TYPE_WRMSR 8
|
|
||||||
#define EX_TYPE_RDMSR 9
|
|
||||||
#define MSR_IA32_S_CET 0x000006a2 /* kernel mode cet */
|
|
||||||
#define CET_ENDBR_EN (1ULL << 2)
|
|
||||||
|
|
||||||
/* Exception table entry */
|
|
||||||
#ifdef __ASSEMBLY__
|
|
||||||
|
|
||||||
#define _ASM_EXTABLE_TYPE(from, to, type) \
|
|
||||||
.pushsection "__ex_table","a" ; \
|
|
||||||
.balign 4 ; \
|
|
||||||
.long (from) - . ; \
|
|
||||||
.long (to) - . ; \
|
|
||||||
.long type ; \
|
|
||||||
.popsection
|
|
||||||
|
|
||||||
#else /* ! __ASSEMBLY__ */
|
|
||||||
|
|
||||||
#define _ASM_EXTABLE_TYPE(from, to, type) \
|
|
||||||
" .pushsection \"__ex_table\",\"a\"\n" \
|
|
||||||
" .balign 4\n" \
|
|
||||||
" .long (" #from ") - .\n" \
|
|
||||||
" .long (" #to ") - .\n" \
|
|
||||||
" .long " __stringify(type) " \n" \
|
|
||||||
" .popsection\n"
|
|
||||||
|
|
||||||
#endif /* __ASSEMBLY__ */
|
|
||||||
#endif /* VTOY_IBT */
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define vdebug(fmt, args...) if(kprintf) kprintf(KERN_ERR fmt, ##args)
|
|
||||||
|
|
||||||
static unsigned int g_claim_ptr = 0;
|
|
||||||
static unsigned char *g_get_patch[MAX_PATCH] = { NULL };
|
|
||||||
static unsigned char *g_put_patch[MAX_PATCH] = { NULL };
|
|
||||||
|
|
||||||
static int notrace dmpatch_kv_above(unsigned long Major, unsigned long Minor, unsigned long SubMinor)
|
|
||||||
{
|
|
||||||
if (g_ko_param.kv_major != Major)
|
|
||||||
{
|
|
||||||
return (g_ko_param.kv_major > Major) ? 1 : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (g_ko_param.kv_minor != Minor)
|
|
||||||
{
|
|
||||||
return (g_ko_param.kv_minor > Minor) ? 1 : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (g_ko_param.kv_subminor != SubMinor)
|
|
||||||
{
|
|
||||||
return (g_ko_param.kv_subminor > SubMinor) ? 1 : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void notrace dmpatch_restore_code(int bytes, unsigned char *opCode, unsigned int code)
|
|
||||||
{
|
|
||||||
unsigned long align;
|
|
||||||
|
|
||||||
if (opCode)
|
|
||||||
{
|
|
||||||
align = (unsigned long)opCode / g_ko_param.pgsize * g_ko_param.pgsize;
|
|
||||||
set_mem_rw(align, 1);
|
|
||||||
if (bytes == 1)
|
|
||||||
{
|
|
||||||
*opCode = (unsigned char)code;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
*(unsigned int *)opCode = code;
|
|
||||||
}
|
|
||||||
set_mem_ro(align, 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static int notrace dmpatch_replace_code
|
|
||||||
(
|
|
||||||
int style,
|
|
||||||
unsigned long addr,
|
|
||||||
unsigned long size,
|
|
||||||
int expect,
|
|
||||||
const char *desc,
|
|
||||||
unsigned char **patch
|
|
||||||
)
|
|
||||||
{
|
|
||||||
int i = 0;
|
|
||||||
int cnt = 0;
|
|
||||||
unsigned long align;
|
|
||||||
unsigned char *opCode = (unsigned char *)addr;
|
|
||||||
|
|
||||||
vdebug("patch for %s style[%d] 0x%lx %d\n", desc, style, addr, (int)size);
|
|
||||||
|
|
||||||
for (i = 0; i < (int)size - 8; i++)
|
|
||||||
{
|
|
||||||
if (style == 1)
|
|
||||||
{
|
|
||||||
if (CODE_MATCH1(opCode, i) && cnt < MAX_PATCH)
|
|
||||||
{
|
|
||||||
patch[cnt] = opCode + i + PATCH_OP_POS1;
|
|
||||||
cnt++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (style == 2)
|
|
||||||
{
|
|
||||||
if (CODE_MATCH2(opCode, i) && cnt < MAX_PATCH)
|
|
||||||
{
|
|
||||||
patch[cnt] = opCode + i + PATCH_OP_POS2;
|
|
||||||
cnt++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (style == 3)
|
|
||||||
{
|
|
||||||
if (CODE_MATCH3(opCode, i) && cnt < MAX_PATCH)
|
|
||||||
{
|
|
||||||
patch[cnt] = opCode + i + PATCH_OP_POS3;
|
|
||||||
cnt++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (cnt != expect || cnt >= MAX_PATCH)
|
|
||||||
{
|
|
||||||
vdebug("patch error: cnt=%d expect=%d\n", cnt, expect);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
for (i = 0; i < cnt; i++)
|
|
||||||
{
|
|
||||||
opCode = patch[i];
|
|
||||||
align = (unsigned long)opCode / g_ko_param.pgsize * g_ko_param.pgsize;
|
|
||||||
|
|
||||||
set_mem_rw(align, 1);
|
|
||||||
*opCode = 0;
|
|
||||||
set_mem_ro(align, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static unsigned long notrace dmpatch_find_call_offset(unsigned long addr, unsigned long size, unsigned long func)
|
|
||||||
{
|
|
||||||
unsigned long i = 0;
|
|
||||||
unsigned long dest;
|
|
||||||
unsigned char *opCode = NULL;
|
|
||||||
unsigned char aucOffset[8] = { 0, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF };
|
|
||||||
|
|
||||||
opCode = (unsigned char *)addr;
|
|
||||||
|
|
||||||
for (i = 0; i + 4 < size; i++)
|
|
||||||
{
|
|
||||||
if (opCode[i] == 0xE8)
|
|
||||||
{
|
|
||||||
aucOffset[0] = opCode[i + 1];
|
|
||||||
aucOffset[1] = opCode[i + 2];
|
|
||||||
aucOffset[2] = opCode[i + 3];
|
|
||||||
aucOffset[3] = opCode[i + 4];
|
|
||||||
|
|
||||||
dest = addr + i + 5 + *(unsigned long *)aucOffset;
|
|
||||||
if (dest == func)
|
|
||||||
{
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static unsigned int notrace dmpatch_patch_claim_ptr(void)
|
|
||||||
{
|
|
||||||
unsigned long i = 0;
|
|
||||||
unsigned long t = 0;
|
|
||||||
unsigned long offset1 = 0;
|
|
||||||
unsigned long offset2 = 0;
|
|
||||||
unsigned long align = 0;
|
|
||||||
unsigned char *opCode = NULL;
|
|
||||||
|
|
||||||
opCode = (unsigned char *)g_ko_param.sym_get_addr;
|
|
||||||
for (i = 0; i < 4; i++)
|
|
||||||
{
|
|
||||||
vdebug("%02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X\n",
|
|
||||||
opCode[i + 0], opCode[i + 1], opCode[i + 2], opCode[i + 3],
|
|
||||||
opCode[i + 4], opCode[i + 5], opCode[i + 6], opCode[i + 7],
|
|
||||||
opCode[i + 8], opCode[i + 9], opCode[i + 10], opCode[i + 11],
|
|
||||||
opCode[i + 12], opCode[i + 13], opCode[i + 14], opCode[i + 15]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (dmpatch_kv_above(6, 7, 0)) /* >= 6.7 kernel */
|
|
||||||
{
|
|
||||||
vdebug("Get addr: 0x%lx %lu open 0x%lx\n", g_ko_param.sym_get_addr, g_ko_param.sym_get_size, g_ko_param.bdev_open_addr);
|
|
||||||
offset1 = dmpatch_find_call_offset(g_ko_param.sym_get_addr, g_ko_param.sym_get_size, g_ko_param.bdev_open_addr);
|
|
||||||
if (offset1 == 0)
|
|
||||||
{
|
|
||||||
vdebug("call bdev_open_addr Not found\n");
|
|
||||||
|
|
||||||
vdebug("Get addr: 0x%lx %lu file_open 0x%lx\n", g_ko_param.sym_get_addr, g_ko_param.sym_get_size, g_ko_param.bdev_file_open_addr);
|
|
||||||
offset1 = dmpatch_find_call_offset(g_ko_param.sym_get_addr, g_ko_param.sym_get_size, g_ko_param.bdev_file_open_addr);
|
|
||||||
if (offset1 == 0)
|
|
||||||
{
|
|
||||||
vdebug("call bdev_file_open_addr Not found\n");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
vdebug("Get addr: 0x%lx %lu 0x%lx\n", g_ko_param.sym_get_addr, g_ko_param.sym_get_size, g_ko_param.blkdev_get_addr);
|
|
||||||
vdebug("Put addr: 0x%lx %lu 0x%lx\n", g_ko_param.sym_put_addr, g_ko_param.sym_put_size, g_ko_param.blkdev_put_addr);
|
|
||||||
|
|
||||||
offset1 = dmpatch_find_call_offset(g_ko_param.sym_get_addr, g_ko_param.sym_get_size, g_ko_param.blkdev_get_addr);
|
|
||||||
offset2 = dmpatch_find_call_offset(g_ko_param.sym_put_addr, g_ko_param.sym_put_size, g_ko_param.blkdev_put_addr);
|
|
||||||
if (offset1 == 0 || offset2 == 0)
|
|
||||||
{
|
|
||||||
vdebug("call blkdev_get or blkdev_put Not found, %lu %lu\n", offset1, offset2);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
vdebug("call addr1:0x%lx call addr2:0x%lx\n",
|
|
||||||
g_ko_param.sym_get_addr + offset1,
|
|
||||||
g_ko_param.sym_put_addr + offset2);
|
|
||||||
|
|
||||||
opCode = (unsigned char *)g_ko_param.sym_get_addr;
|
|
||||||
for (i = offset1 - 1, t = 0; (i > 0) && (t < 24); i--, t++)
|
|
||||||
{
|
|
||||||
/* rdx */
|
|
||||||
if (opCode[i] == 0x48 && opCode[i + 1] == 0xc7 && opCode[i + 2] == 0xc2)
|
|
||||||
{
|
|
||||||
g_claim_ptr = *(unsigned int *)(opCode + i + 3);
|
|
||||||
g_get_patch[0] = opCode + i + 3;
|
|
||||||
vdebug("claim_ptr(%08X) found at get addr 0x%lx\n", g_claim_ptr, g_ko_param.sym_get_addr + i + 3);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (g_claim_ptr == 0)
|
|
||||||
{
|
|
||||||
vdebug("Claim_ptr not found in get\n");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
align = (unsigned long)g_get_patch[0] / g_ko_param.pgsize * g_ko_param.pgsize;
|
|
||||||
set_mem_rw(align, 1);
|
|
||||||
*(unsigned int *)(g_get_patch[0]) = 0;
|
|
||||||
set_mem_ro(align, 1);
|
|
||||||
|
|
||||||
|
|
||||||
if (offset2 > 0)
|
|
||||||
{
|
|
||||||
opCode = (unsigned char *)g_ko_param.sym_put_addr;
|
|
||||||
for (i = offset2 - 1, t = 0; (i > 0) && (t < 24); i--, t++)
|
|
||||||
{
|
|
||||||
/* rsi */
|
|
||||||
if (opCode[i] == 0x48 && opCode[i + 1] == 0xc7 && opCode[i + 2] == 0xc6)
|
|
||||||
{
|
|
||||||
if (*(unsigned int *)(opCode + i + 3) == g_claim_ptr)
|
|
||||||
{
|
|
||||||
vdebug("claim_ptr found at put addr 0x%lx\n", g_ko_param.sym_put_addr + i + 3);
|
|
||||||
g_put_patch[0] = opCode + i + 3;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (g_put_patch[0] == 0)
|
|
||||||
{
|
|
||||||
vdebug("Claim_ptr not found in put\n");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
align = (unsigned long)g_put_patch[0] / g_ko_param.pgsize * g_ko_param.pgsize;
|
|
||||||
set_mem_rw(align, 1);
|
|
||||||
*(unsigned int *)(g_put_patch[0]) = 0;
|
|
||||||
set_mem_ro(align, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef VTOY_IBT
|
|
||||||
static __always_inline unsigned long long dmpatch_rdmsr(unsigned int msr)
|
|
||||||
{
|
|
||||||
DECLARE_ARGS(val, low, high);
|
|
||||||
|
|
||||||
asm volatile("1: rdmsr\n"
|
|
||||||
"2:\n"
|
|
||||||
_ASM_EXTABLE_TYPE(1b, 2b, EX_TYPE_RDMSR)
|
|
||||||
: EAX_EDX_RET(val, low, high) : "c" (msr));
|
|
||||||
|
|
||||||
return EAX_EDX_VAL(val, low, high);
|
|
||||||
}
|
|
||||||
|
|
||||||
static __always_inline void dmpatch_wrmsr(unsigned int msr, u32 low, u32 high)
|
|
||||||
{
|
|
||||||
asm volatile("1: wrmsr\n"
|
|
||||||
"2:\n"
|
|
||||||
_ASM_EXTABLE_TYPE(1b, 2b, EX_TYPE_WRMSR)
|
|
||||||
: : "c" (msr), "a"(low), "d" (high) : "memory");
|
|
||||||
}
|
|
||||||
|
|
||||||
static u64 notrace dmpatch_ibt_save(void)
|
|
||||||
{
|
|
||||||
u64 msr = 0;
|
|
||||||
u64 val = 0;
|
|
||||||
|
|
||||||
msr = dmpatch_rdmsr(MSR_IA32_S_CET);
|
|
||||||
val = msr & ~CET_ENDBR_EN;
|
|
||||||
dmpatch_wrmsr(MSR_IA32_S_CET, (u32)(val & 0xffffffffULL), (u32)(val >> 32));
|
|
||||||
|
|
||||||
return msr;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void notrace dmpatch_ibt_restore(u64 save)
|
|
||||||
{
|
|
||||||
u64 msr;
|
|
||||||
|
|
||||||
msr = dmpatch_rdmsr(MSR_IA32_S_CET);
|
|
||||||
|
|
||||||
msr &= ~CET_ENDBR_EN;
|
|
||||||
msr |= (save & CET_ENDBR_EN);
|
|
||||||
|
|
||||||
dmpatch_wrmsr(MSR_IA32_S_CET, (u32)(msr & 0xffffffffULL), (u32)(msr >> 32));
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
static u64 notrace dmpatch_ibt_save(void) { return 0; }
|
|
||||||
static void notrace dmpatch_ibt_restore(u64 save) { (void)save; }
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static int notrace dmpatch_process(unsigned long a, unsigned long b, unsigned long c)
|
|
||||||
{
|
|
||||||
int r = 0;
|
|
||||||
int rc = 0;
|
|
||||||
unsigned long kv_major = 0;
|
|
||||||
unsigned long kv_minor = 0;
|
|
||||||
unsigned long kv_subminor = 0;
|
|
||||||
|
|
||||||
vdebug("dmpatch_process as KV %d.%d.%d ...\n", (int)a, (int)b, (int)c);
|
|
||||||
|
|
||||||
kv_major = g_ko_param.kv_major;
|
|
||||||
kv_minor = g_ko_param.kv_minor;
|
|
||||||
kv_subminor = g_ko_param.kv_subminor;
|
|
||||||
|
|
||||||
g_ko_param.kv_major = a;
|
|
||||||
g_ko_param.kv_minor = b;
|
|
||||||
g_ko_param.kv_subminor = c;
|
|
||||||
|
|
||||||
if (dmpatch_kv_above(6, 5, 0)) /* >= kernel 6.5 */
|
|
||||||
{
|
|
||||||
vdebug("new interface patch dm_get_table_device...\n");
|
|
||||||
r = dmpatch_patch_claim_ptr();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
r = dmpatch_replace_code(1, g_ko_param.sym_get_addr, g_ko_param.sym_get_size, 2, "dm_get_table_device", g_get_patch);
|
|
||||||
if (r && g_ko_param.kv_major >= 5)
|
|
||||||
{
|
|
||||||
vdebug("new2 patch dm_get_table_device...\n");
|
|
||||||
r = dmpatch_replace_code(2, g_ko_param.sym_get_addr, g_ko_param.sym_get_size, 1, "dm_get_table_device", g_get_patch);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (r && g_ko_param.kv_major >= 5)
|
|
||||||
{
|
|
||||||
vdebug("new3 patch dm_get_table_device...\n");
|
|
||||||
r = dmpatch_replace_code(3, g_ko_param.sym_get_addr, g_ko_param.sym_get_size, 1, "dm_get_table_device", g_get_patch);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (r)
|
|
||||||
{
|
|
||||||
rc = -EFAULT;
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
vdebug("patch dm_get_table_device success\n");
|
|
||||||
|
|
||||||
if (dmpatch_kv_above(6, 5, 0))
|
|
||||||
{
|
|
||||||
r = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
r = dmpatch_replace_code(1, g_ko_param.sym_put_addr, g_ko_param.sym_put_size, 1, "dm_put_table_device", g_put_patch);
|
|
||||||
if (r)
|
|
||||||
{
|
|
||||||
rc = -EFAULT;
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
vdebug("patch dm_put_table_device success\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
vdebug("#####################################\n");
|
|
||||||
vdebug("######## dm patch success ###########\n");
|
|
||||||
vdebug("#####################################\n");
|
|
||||||
|
|
||||||
out:
|
|
||||||
|
|
||||||
g_ko_param.kv_major = kv_major;
|
|
||||||
g_ko_param.kv_minor = kv_minor;
|
|
||||||
g_ko_param.kv_subminor = kv_subminor;
|
|
||||||
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int notrace dmpatch_init(void)
|
|
||||||
{
|
|
||||||
int rc = 0;
|
|
||||||
u64 msr = 0;
|
|
||||||
|
|
||||||
if (g_ko_param.ibt == 0x8888)
|
|
||||||
{
|
|
||||||
msr = dmpatch_ibt_save();
|
|
||||||
}
|
|
||||||
|
|
||||||
kprintf = (printk_pf)(g_ko_param.printk_addr);
|
|
||||||
|
|
||||||
vdebug("dmpatch_init start pagesize=%lu kernel=%lu.%lu.%lu ...\n",
|
|
||||||
g_ko_param.pgsize, g_ko_param.kv_major, g_ko_param.kv_minor, g_ko_param.kv_subminor);
|
|
||||||
|
|
||||||
if (g_ko_param.struct_size != sizeof(ko_param))
|
|
||||||
{
|
|
||||||
vdebug("Invalid struct size %d %d\n", (int)g_ko_param.struct_size, (int)sizeof(ko_param));
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (g_ko_param.sym_get_addr == 0 || g_ko_param.sym_put_addr == 0 ||
|
|
||||||
g_ko_param.ro_addr == 0 || g_ko_param.rw_addr == 0)
|
|
||||||
{
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
set_mem_ro = (set_memory_attr_pf)(g_ko_param.ro_addr);
|
|
||||||
set_mem_rw = (set_memory_attr_pf)(g_ko_param.rw_addr);
|
|
||||||
reg_kprobe = (kprobe_reg_pf)g_ko_param.reg_kprobe_addr;
|
|
||||||
unreg_kprobe = (kprobe_unreg_pf)g_ko_param.unreg_kprobe_addr;
|
|
||||||
|
|
||||||
rc = dmpatch_process(g_ko_param.kv_major, g_ko_param.kv_minor, g_ko_param.kv_subminor);
|
|
||||||
if (rc)
|
|
||||||
{
|
|
||||||
if (g_ko_param.kv_major >= 5)
|
|
||||||
{
|
|
||||||
rc = dmpatch_process(6, 5, 0);
|
|
||||||
if (rc)
|
|
||||||
{
|
|
||||||
rc = dmpatch_process(6, 7, 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (g_ko_param.ibt == 0x8888)
|
|
||||||
{
|
|
||||||
dmpatch_ibt_restore(msr);
|
|
||||||
}
|
|
||||||
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void notrace dmpatch_exit(void)
|
|
||||||
{
|
|
||||||
int i = 0;
|
|
||||||
u64 msr;
|
|
||||||
|
|
||||||
if (g_ko_param.ibt == 0x8888)
|
|
||||||
{
|
|
||||||
msr = dmpatch_ibt_save();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (g_claim_ptr)
|
|
||||||
{
|
|
||||||
dmpatch_restore_code(4, g_get_patch[0], g_claim_ptr);
|
|
||||||
if (g_put_patch[0])
|
|
||||||
{
|
|
||||||
dmpatch_restore_code(4, g_put_patch[0], g_claim_ptr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
for (i = 0; i < MAX_PATCH; i++)
|
|
||||||
{
|
|
||||||
dmpatch_restore_code(1, g_get_patch[i], 0x80);
|
|
||||||
dmpatch_restore_code(1, g_put_patch[i], 0x80);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
vdebug("dmpatch_exit success\n");
|
|
||||||
|
|
||||||
if (g_ko_param.ibt == 0x8888)
|
|
||||||
{
|
|
||||||
dmpatch_ibt_restore(msr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
module_init(dmpatch_init);
|
|
||||||
module_exit(dmpatch_exit);
|
|
||||||
|
|
||||||
|
|
||||||
MODULE_DESCRIPTION("dmpatch driver");
|
|
||||||
MODULE_AUTHOR("longpanda <admin@ventoy.net>");
|
|
||||||
MODULE_LICENSE("GPL");
|
|
||||||
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
1. install ubuntu 22.04 5.15.0-25
|
|
||||||
2. apt-get install build-essential flex libncurses-dev linux-headers-generic linux-source libssl-dev bison yacc vim libelf-dev ...... and so on
|
|
||||||
3. cp /lib/modules/5.15.0-25-generic/build/Module.symvers ./
|
|
||||||
4. /boot/config-5.15.0-25-generic as .config make oldconfig
|
|
||||||
5. make menuconfig
|
|
||||||
1. close CONFIG_STACKPROTECTOR
|
|
||||||
2. close CONFIG_RETPOLINE
|
|
||||||
3. close CONFIG_UBSAN_BOUNDS
|
|
||||||
4. close CONFIG_UBSAN_ENUM
|
|
||||||
|
|
||||||
6. modify ./scripts/mod/modpost.c
|
|
||||||
1. skip add_srcversion (just return)
|
|
||||||
2. force add_retpoline (#ifdef --> #ifndef)
|
|
||||||
3. force add_intree_flag
|
|
||||||
|
|
||||||
7. make modules_prepare LOCALVERSION=-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
|
||||||
|
|
||||||
8. Append padding at the end of struct module <include/linux/module.h>
|
|
||||||
struct module {
|
|
||||||
enum module_state state;
|
|
||||||
|
|
||||||
/* Member of list of modules */
|
|
||||||
struct list_head list;
|
|
||||||
|
|
||||||
/* Unique handle for this module */
|
|
||||||
char name[MODULE_NAME_LEN];
|
|
||||||
|
|
||||||
....
|
|
||||||
|
|
||||||
char padding[1024];
|
|
||||||
};
|
|
||||||
|
|
||||||
This is because struct module size is different in different kernel versions or with different CONFIG item.
|
|
||||||
|
|
||||||
|
|
||||||
9. make modules M=/home/dmpatch
|
|
||||||
10. strip --strip-debug /home/dmpatch/dm_patch.ko
|
|
||||||
|
|
||||||
@@ -1,65 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
FTPIP=192.168.44.1
|
|
||||||
FTPUSR='a:a'
|
|
||||||
|
|
||||||
rm -f dmpatch.c Makefile Makefile_IBT
|
|
||||||
|
|
||||||
for f in dmpatch.c Makefile Makefile_IBT; do
|
|
||||||
curl -s -u $FTPUSR ftp://$FTPIP/$f -o $f
|
|
||||||
if [ -f $f ]; then
|
|
||||||
echo "download $f OK ..."
|
|
||||||
else
|
|
||||||
echo "download $f FAILED ..."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
rm -f *.ko
|
|
||||||
|
|
||||||
|
|
||||||
echo "build dm_patch.ko ..."
|
|
||||||
rm -rf ./aa
|
|
||||||
mkdir ./aa
|
|
||||||
|
|
||||||
cp -a *.c aa/
|
|
||||||
cp -a Makefile aa/
|
|
||||||
|
|
||||||
cd /home/panda/linux-source-5.15.0
|
|
||||||
make modules M=/home/panda/build/aa/
|
|
||||||
strip --strip-debug /home/panda/build/aa/dm_patch.ko
|
|
||||||
cd -
|
|
||||||
|
|
||||||
cp -a aa/dm_patch.ko ./
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
echo "build dm_patch_ibt.ko ..."
|
|
||||||
rm -rf ./aa
|
|
||||||
mkdir ./aa
|
|
||||||
|
|
||||||
cp -a *.c aa/
|
|
||||||
cp -a Makefile_IBT aa/Makefile
|
|
||||||
|
|
||||||
cd /home/panda/linux-source-5.15.0
|
|
||||||
make modules M=/home/panda/build/aa/
|
|
||||||
strip --strip-debug /home/panda/build/aa/dm_patch_ibt.ko
|
|
||||||
cd -
|
|
||||||
|
|
||||||
cp -a aa/dm_patch_ibt.ko ./
|
|
||||||
|
|
||||||
rm -rf ./aa
|
|
||||||
|
|
||||||
|
|
||||||
curl -s -T dm_patch.ko -u $FTPUSR ftp://$FTPIP/dm_patch_64.ko || exit 1
|
|
||||||
curl -s -T dm_patch_ibt.ko -u $FTPUSR ftp://$FTPIP/dm_patch_ibt_64.ko || exit 1
|
|
||||||
|
|
||||||
|
|
||||||
if [ -f ./dm_patch.ko -a -f ./dm_patch_ibt.ko ]; then
|
|
||||||
echo -e "\n\n=============== SUCCESS =============\n\n"
|
|
||||||
else
|
|
||||||
echo -e "\n\n=============== FAILED ==============\n\n"
|
|
||||||
fi
|
|
||||||
|
|
||||||
@@ -232,7 +232,7 @@
|
|||||||
SHA-256: cde08b6a2cf5ad914f05203e18e3f7c2ed6060a63604e3d75536f19b55e8e0af
|
SHA-256: cde08b6a2cf5ad914f05203e18e3f7c2ed6060a63604e3d75536f19b55e8e0af
|
||||||
|
|
||||||
5.8 imdisk
|
5.8 imdisk
|
||||||
download http://www.ltr-data.se/files/imdiskinst.exe and extract it by 7zip.
|
download http://static.ltr-data.se/files/imdiskinst_2.0.10.exe and extract it by 7zip.
|
||||||
|
|
||||||
INSTALL/ventoy/imdisk/64/imdisk.sys --> sys/amd64/imdisk.sys SHA-256: 6702202220268787e361f5a82dae53362c8e6c6dcd240bb01b44dd77ae0788da
|
INSTALL/ventoy/imdisk/64/imdisk.sys --> sys/amd64/imdisk.sys SHA-256: 6702202220268787e361f5a82dae53362c8e6c6dcd240bb01b44dd77ae0788da
|
||||||
INSTALL/ventoy/imdisk/64/imdisk.exe --> cli/amd64/imdisk.exe SHA-256: 9759175380af836869443e5f21ce2e33022125d154bc6b3d1c04dc36b190de04
|
INSTALL/ventoy/imdisk/64/imdisk.exe --> cli/amd64/imdisk.exe SHA-256: 9759175380af836869443e5f21ce2e33022125d154bc6b3d1c04dc36b190de04
|
||||||
@@ -274,3 +274,4 @@
|
|||||||
5.14 ./LiveCD/ISO/EFI/boot/vmlinuz64
|
5.14 ./LiveCD/ISO/EFI/boot/vmlinuz64
|
||||||
download from http://www.tinycorelinux.net/11.x/x86_64/archive/11.0/distribution_files/vmlinuz64
|
download from http://www.tinycorelinux.net/11.x/x86_64/archive/11.0/distribution_files/vmlinuz64
|
||||||
vmlinuz64 SHA-256: 641077fc1f9914af244c248453005f56536ba9e7f54ba3e52402f26709ddb8a5
|
vmlinuz64 SHA-256: 641077fc1f9914af244c248453005f56536ba9e7f54ba3e52402f26709ddb8a5
|
||||||
|
|
||||||
|
|||||||
@@ -1263,6 +1263,11 @@ EFI_STATUS EFIAPI VentoyEfiMain
|
|||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (g_os_param_reserved[11])
|
||||||
|
{
|
||||||
|
ventoy_lock_res(g_os_param_reserved[11]);
|
||||||
|
}
|
||||||
|
|
||||||
ventoy_disable_ex_filesystem();
|
ventoy_disable_ex_filesystem();
|
||||||
|
|
||||||
if (gMemdiskMode)
|
if (gMemdiskMode)
|
||||||
@@ -1341,6 +1346,11 @@ EFI_STATUS EFIAPI VentoyEfiMain
|
|||||||
|
|
||||||
ventoy_enable_ex_filesystem();
|
ventoy_enable_ex_filesystem();
|
||||||
|
|
||||||
|
if (g_os_param_reserved[11])
|
||||||
|
{
|
||||||
|
ventoy_unlock_res();
|
||||||
|
}
|
||||||
|
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -428,6 +428,8 @@ EFI_STATUS ventoy_hook_1st_cdrom_start(VOID);
|
|||||||
EFI_STATUS ventoy_hook_1st_cdrom_stop(VOID);
|
EFI_STATUS ventoy_hook_1st_cdrom_stop(VOID);
|
||||||
EFI_STATUS ventoy_disable_ex_filesystem(VOID);
|
EFI_STATUS ventoy_disable_ex_filesystem(VOID);
|
||||||
EFI_STATUS ventoy_enable_ex_filesystem(VOID);
|
EFI_STATUS ventoy_enable_ex_filesystem(VOID);
|
||||||
|
EFI_STATUS ventoy_lock_res(UINT8 LockType);
|
||||||
|
EFI_STATUS ventoy_unlock_res(VOID);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -1797,3 +1797,176 @@ EFI_STATUS ventoy_hook_1st_cdrom_stop(VOID)
|
|||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
/* For force highest resolution for Windows/WinPE */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
STATIC UINT32 g_org_mode_num = 0;
|
||||||
|
STATIC EFI_GRAPHICS_OUTPUT_PROTOCOL_SET_MODE g_org_set_mode = NULL;
|
||||||
|
|
||||||
|
STATIC EFI_STATUS EFIAPI ventoy_set_mode
|
||||||
|
(
|
||||||
|
IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This,
|
||||||
|
IN UINT32 ModeNumber
|
||||||
|
)
|
||||||
|
{
|
||||||
|
(void)This;
|
||||||
|
(void)ModeNumber;
|
||||||
|
|
||||||
|
/* Force highest resolution */
|
||||||
|
return EFI_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
STATIC EFI_STATUS EFIAPI ventoy_set_mode2
|
||||||
|
(
|
||||||
|
IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This,
|
||||||
|
IN UINT32 ModeNumber
|
||||||
|
)
|
||||||
|
{
|
||||||
|
UINTN Size;
|
||||||
|
EFI_STATUS rc;
|
||||||
|
EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *info = NULL;
|
||||||
|
|
||||||
|
/* Force >= 1024x768 */
|
||||||
|
rc = This->QueryMode(This, ModeNumber, &Size, &info);
|
||||||
|
if (rc == EFI_SUCCESS)
|
||||||
|
{
|
||||||
|
if (info->HorizontalResolution < 1024 || info->VerticalResolution < 768)
|
||||||
|
{
|
||||||
|
return EFI_SUCCESS;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return g_org_set_mode(This, ModeNumber);
|
||||||
|
}
|
||||||
|
|
||||||
|
EFI_STATUS ventoy_lock_res(UINT8 LockType)
|
||||||
|
{
|
||||||
|
UINT32 i = 0;
|
||||||
|
UINT32 x = 0;
|
||||||
|
UINT32 y = 0;
|
||||||
|
UINT32 SelMode = 0;
|
||||||
|
UINT32 CurMode = 0;
|
||||||
|
UINT32 Highest = 0;
|
||||||
|
UINT32 M1024_768 = MAX_UINT32;
|
||||||
|
UINTN Size;
|
||||||
|
EFI_STATUS rc;
|
||||||
|
EFI_GRAPHICS_OUTPUT_PROTOCOL *gop = NULL;
|
||||||
|
EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *info = NULL;
|
||||||
|
|
||||||
|
/* already hook */
|
||||||
|
if (g_org_set_mode)
|
||||||
|
{
|
||||||
|
return EFI_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 1: Highest 2: 1024x768 3: >= 1024x768 */
|
||||||
|
if (LockType == 0 || LockType > 3)
|
||||||
|
{
|
||||||
|
return EFI_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
rc = gBS->LocateProtocol(&gEfiGraphicsOutputProtocolGuid, NULL, (void **)&gop);
|
||||||
|
if (rc != EFI_SUCCESS)
|
||||||
|
{
|
||||||
|
debug("Failed to locate GOP protocol");
|
||||||
|
return EFI_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (LockType == 3)
|
||||||
|
{
|
||||||
|
g_org_mode_num = MAX_UINT32;
|
||||||
|
g_org_set_mode = gop->SetMode;
|
||||||
|
gop->SetMode = ventoy_set_mode2;
|
||||||
|
return EFI_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
CurMode = gop->Mode->Mode;
|
||||||
|
|
||||||
|
for (i = 0 ; i < gop->Mode->MaxMode ; i++)
|
||||||
|
{
|
||||||
|
/* Get mode information */
|
||||||
|
if (gop->QueryMode(gop, i, &Size, &info) == EFI_SUCCESS)
|
||||||
|
{
|
||||||
|
if (info->HorizontalResolution == 1024 && info->VerticalResolution == 768)
|
||||||
|
{
|
||||||
|
M1024_768 = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (x < info->HorizontalResolution ||
|
||||||
|
(x == info->HorizontalResolution && y < info->VerticalResolution))
|
||||||
|
{
|
||||||
|
Highest = i;
|
||||||
|
x = info->HorizontalResolution;
|
||||||
|
y = info->VerticalResolution;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (LockType == 1)
|
||||||
|
{
|
||||||
|
SelMode = Highest;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (M1024_768 == MAX_UINT32)
|
||||||
|
{
|
||||||
|
SelMode = Highest;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SelMode = M1024_768;
|
||||||
|
x = 1024;
|
||||||
|
y = 768;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (SelMode != CurMode)
|
||||||
|
{
|
||||||
|
gop->SetMode(gop, SelMode);
|
||||||
|
}
|
||||||
|
debug("Lock resolution to Mode:%d %d x %d", SelMode, x, y);
|
||||||
|
|
||||||
|
|
||||||
|
g_org_mode_num = CurMode;
|
||||||
|
g_org_set_mode = gop->SetMode;
|
||||||
|
gop->SetMode = ventoy_set_mode;
|
||||||
|
|
||||||
|
return EFI_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
EFI_STATUS ventoy_unlock_res(VOID)
|
||||||
|
{
|
||||||
|
EFI_STATUS rc;
|
||||||
|
EFI_GRAPHICS_OUTPUT_PROTOCOL *gop = NULL;
|
||||||
|
|
||||||
|
/* not hooked yet */
|
||||||
|
if (!g_org_set_mode)
|
||||||
|
{
|
||||||
|
return EFI_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
rc = gBS->LocateProtocol(&gEfiGraphicsOutputProtocolGuid, NULL, (void **)&gop);
|
||||||
|
if (rc != EFI_SUCCESS)
|
||||||
|
{
|
||||||
|
debug("Failed to locate GOP protocol");
|
||||||
|
return EFI_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (g_org_mode_num != MAX_UINT32)
|
||||||
|
{
|
||||||
|
g_org_set_mode(gop, g_org_mode_num);
|
||||||
|
}
|
||||||
|
|
||||||
|
gop->SetMode = g_org_set_mode;
|
||||||
|
g_org_set_mode = NULL;
|
||||||
|
return EFI_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
2282
GRUB2/MOD_SRC/grub-2.04/grub-core/fs/btrfs.c
Normal file
2282
GRUB2/MOD_SRC/grub-2.04/grub-core/fs/btrfs.c
Normal file
File diff suppressed because it is too large
Load Diff
@@ -466,6 +466,37 @@ grub_err_t grub_disk_blocklist_read(void *chunklist, grub_uint64_t sector,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
grub_err_t grub_disk_blocklist_read2(grub_disk_t disk, grub_uint64_t sector,
|
||||||
|
grub_uint64_t size, char *buf)
|
||||||
|
{
|
||||||
|
ventoy_img_chunk_list *chunk_list = (ventoy_img_chunk_list *)(disk->read_hook_data);
|
||||||
|
|
||||||
|
if (buf < chunk_list->buf || buf >= chunk_list->buf + VTOY_CHUNK_BUF_SIZE)
|
||||||
|
{
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((chunk_list->buf + chunk_list->last_off) != buf)
|
||||||
|
{
|
||||||
|
chunk_list->err_code = VTOY_CHUNK_ERR_NOT_FLAT;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (chunk_list->last_off + size > VTOY_CHUNK_BUF_SIZE)
|
||||||
|
{
|
||||||
|
chunk_list->err_code = VTOY_CHUNK_ERR_OVER_FLOW;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
chunk_list->last_off += (grub_uint32_t)size;
|
||||||
|
if (chunk_list->last_off == VTOY_CHUNK_BUF_SIZE)
|
||||||
|
{
|
||||||
|
chunk_list->last_off = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return grub_disk_blocklist_read(chunk_list, sector, size, disk->log_sector_size);
|
||||||
|
}
|
||||||
|
|
||||||
/* Read data from the disk. */
|
/* Read data from the disk. */
|
||||||
grub_err_t
|
grub_err_t
|
||||||
grub_disk_read (grub_disk_t disk, grub_disk_addr_t sector,
|
grub_disk_read (grub_disk_t disk, grub_disk_addr_t sector,
|
||||||
@@ -475,6 +506,14 @@ grub_disk_read (grub_disk_t disk, grub_disk_addr_t sector,
|
|||||||
{
|
{
|
||||||
return grub_disk_blocklist_read((ventoy_img_chunk_list *)disk->read_hook_data, sector, size, disk->log_sector_size);
|
return grub_disk_blocklist_read((ventoy_img_chunk_list *)disk->read_hook_data, sector, size, disk->log_sector_size);
|
||||||
}
|
}
|
||||||
|
else if (disk->read_hook == (grub_disk_read_hook_t)(void *)grub_disk_blocklist_read2)
|
||||||
|
{
|
||||||
|
grub_err_t rv = grub_disk_blocklist_read2(disk, sector, size, (char *)buf);
|
||||||
|
if (rv != 2)
|
||||||
|
{
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* First of all, check if the region is within the disk. */
|
/* First of all, check if the region is within the disk. */
|
||||||
if (grub_disk_adjust_range (disk, §or, &offset, size) != GRUB_ERR_NONE)
|
if (grub_disk_adjust_range (disk, §or, &offset, size) != GRUB_ERR_NONE)
|
||||||
|
|||||||
@@ -1134,6 +1134,7 @@ show_menu (grub_menu_t menu, int nested, int autobooted)
|
|||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
int ndown;
|
int ndown;
|
||||||
|
char *pos = NULL;
|
||||||
int boot_entry;
|
int boot_entry;
|
||||||
grub_menu_entry_t e;
|
grub_menu_entry_t e;
|
||||||
int auto_boot;
|
int auto_boot;
|
||||||
@@ -1176,14 +1177,27 @@ show_menu (grub_menu_t menu, int nested, int autobooted)
|
|||||||
|
|
||||||
if (2 == e->argc && e->args && e->args[1] && grub_strncmp(e->args[1], "VTOY_RUN_RET", 12) == 0)
|
if (2 == e->argc && e->args && e->args[1] && grub_strncmp(e->args[1], "VTOY_RUN_RET", 12) == 0)
|
||||||
break;
|
break;
|
||||||
else if (2 == e->argc && e->args && e->args[1] && grub_strncmp(e->args[1], "VTOY_RUN_SET", 12) == 0) {
|
else if (2 == e->argc && e->args && e->args[1] && grub_strncmp(e->args[1], "VTOY_RUN_SET_", 13) == 0) {
|
||||||
ndown = (int)grub_strtol(e->args[1] + 12, NULL, 10);
|
pos = NULL;
|
||||||
|
ndown = (int)grub_strtol(e->args[1] + 13, &pos, 10);
|
||||||
while (ndown > 0)
|
while (ndown > 0)
|
||||||
{
|
{
|
||||||
ventoy_menu_push_key(GRUB_TERM_KEY_DOWN);
|
ventoy_menu_push_key(GRUB_TERM_KEY_DOWN);
|
||||||
ndown--;
|
ndown--;
|
||||||
}
|
}
|
||||||
|
|
||||||
ventoy_menu_push_key('\n');
|
ventoy_menu_push_key('\n');
|
||||||
|
|
||||||
|
if (pos && *pos == '_')
|
||||||
|
{
|
||||||
|
ndown = (int)grub_strtol(pos + 1, NULL, 10);
|
||||||
|
while (ndown > 0)
|
||||||
|
{
|
||||||
|
ventoy_menu_push_key(GRUB_TERM_KEY_DOWN);
|
||||||
|
ndown--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -431,11 +431,12 @@ int ventoy_global_var_init(void)
|
|||||||
|
|
||||||
static ctrl_var_cfg g_ctrl_vars[] =
|
static ctrl_var_cfg g_ctrl_vars[] =
|
||||||
{
|
{
|
||||||
{ "VTOY_WIN11_BYPASS_CHECK", 1 },
|
{ "VTOY_WIN11_BYPASS_CHECK", "1" },
|
||||||
{ "VTOY_WIN11_BYPASS_NRO", 1 },
|
{ "VTOY_WIN11_BYPASS_NRO", "1" },
|
||||||
{ "VTOY_LINUX_REMOUNT", 0 },
|
{ "VTOY_LINUX_REMOUNT", "0" },
|
||||||
{ "VTOY_SECONDARY_BOOT_MENU", 1 },
|
{ "VTOY_SECONDARY_BOOT_MENU", "1" },
|
||||||
{ NULL, 0 }
|
{ "VTOY_WIN_UEFI_RES_LOCK", "3" },
|
||||||
|
{ NULL, "" }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const char * ventoy_ctrl_var_read_hook(struct grub_env_var *var, const char *val)
|
static const char * ventoy_ctrl_var_read_hook(struct grub_env_var *var, const char *val)
|
||||||
@@ -446,7 +447,7 @@ static const char * ventoy_ctrl_var_read_hook(struct grub_env_var *var, const ch
|
|||||||
{
|
{
|
||||||
if (grub_strcmp(g_ctrl_vars[i].name, var->name) == 0)
|
if (grub_strcmp(g_ctrl_vars[i].name, var->name) == 0)
|
||||||
{
|
{
|
||||||
return g_ctrl_vars[i].value ? "1" : "0";
|
return g_ctrl_vars[i].szval;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -461,14 +462,14 @@ static char * ventoy_ctrl_var_write_hook(struct grub_env_var *var, const char *v
|
|||||||
{
|
{
|
||||||
if (grub_strcmp(g_ctrl_vars[i].name, var->name) == 0)
|
if (grub_strcmp(g_ctrl_vars[i].name, var->name) == 0)
|
||||||
{
|
{
|
||||||
if (val && val[0] == '1' && val[1] == 0)
|
if (val && grub_isdigit(val[0]) && val[1] == 0)
|
||||||
{
|
{
|
||||||
g_ctrl_vars[i].value = 1;
|
g_ctrl_vars[i].szval[0] = val[0];
|
||||||
return grub_strdup("1");
|
return grub_strdup(val);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
g_ctrl_vars[i].value = 0;
|
g_ctrl_vars[i].szval[0] = '0';
|
||||||
return grub_strdup("0");
|
return grub_strdup("0");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -479,12 +480,13 @@ static char * ventoy_ctrl_var_write_hook(struct grub_env_var *var, const char *v
|
|||||||
|
|
||||||
int ventoy_ctrl_var_init(void)
|
int ventoy_ctrl_var_init(void)
|
||||||
{
|
{
|
||||||
int i;
|
ctrl_var_cfg *cfg = g_ctrl_vars;
|
||||||
|
|
||||||
for (i = 0; g_ctrl_vars[i].name; i++)
|
while (cfg->name)
|
||||||
{
|
{
|
||||||
ventoy_env_export(g_ctrl_vars[i].name, g_ctrl_vars[i].value ? "1" : "0");
|
ventoy_env_export(cfg->name, cfg->szval);
|
||||||
grub_register_variable_hook(g_ctrl_vars[i].name, ventoy_ctrl_var_read_hook, ventoy_ctrl_var_write_hook);
|
grub_register_variable_hook(cfg->name, ventoy_ctrl_var_read_hook, ventoy_ctrl_var_write_hook);
|
||||||
|
cfg++;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -202,6 +202,10 @@ int ventoy_get_fs_type(const char *fs)
|
|||||||
{
|
{
|
||||||
return ventoy_fs_fat;
|
return ventoy_fs_fat;
|
||||||
}
|
}
|
||||||
|
else if (grub_strncmp(fs, "btrfs", 5) == 0)
|
||||||
|
{
|
||||||
|
return ventoy_fs_btrfs;
|
||||||
|
}
|
||||||
|
|
||||||
return ventoy_fs_max;
|
return ventoy_fs_max;
|
||||||
}
|
}
|
||||||
@@ -1696,7 +1700,7 @@ static int ventoy_vlnk_probe_fs(ventoy_vlnk_part *cur)
|
|||||||
{
|
{
|
||||||
const char *fs[ventoy_fs_max + 1] =
|
const char *fs[ventoy_fs_max + 1] =
|
||||||
{
|
{
|
||||||
"exfat", "ntfs", "ext2", "xfs", "udf", "fat", NULL
|
"exfat", "ntfs", "ext2", "xfs", "udf", "fat", "btrfs", NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!cur->dev)
|
if (!cur->dev)
|
||||||
@@ -3241,6 +3245,25 @@ void ventoy_fill_os_param(grub_file_t file, ventoy_os_param *param)
|
|||||||
param->vtoy_reserved[6] = file->vlnk;
|
param->vtoy_reserved[6] = file->vlnk;
|
||||||
grub_memcpy(param->vtoy_reserved + 7, g_ventoy_part_info->MBR.BootCode + 0x1b8, 4);
|
grub_memcpy(param->vtoy_reserved + 7, g_ventoy_part_info->MBR.BootCode + 0x1b8, 4);
|
||||||
|
|
||||||
|
|
||||||
|
/* Windows UEFI force resolution lock */
|
||||||
|
if (g_ventoy_chain_type == 1) /* Windows */
|
||||||
|
{
|
||||||
|
val = ventoy_get_env("VTOY_WIN_UEFI_RES_LOCK");
|
||||||
|
if (val && val[1] == 0)
|
||||||
|
{
|
||||||
|
if (val[0] == '1')
|
||||||
|
{
|
||||||
|
param->vtoy_reserved[11] = 1;
|
||||||
|
}
|
||||||
|
else if (val[0] == '2')
|
||||||
|
{
|
||||||
|
param->vtoy_reserved[11] = 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* calculate checksum */
|
/* calculate checksum */
|
||||||
for (i = 0; i < sizeof(ventoy_os_param); i++)
|
for (i = 0; i < sizeof(ventoy_os_param); i++)
|
||||||
{
|
{
|
||||||
@@ -3251,13 +3274,49 @@ void ventoy_fill_os_param(grub_file_t file, ventoy_os_param *param)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ventoy_check_block_list(grub_file_t file, ventoy_img_chunk_list *chunklist, grub_disk_addr_t start)
|
static const char* g_chunk_err_msg[VTOY_CHUNK_ERR_MAX] =
|
||||||
|
{
|
||||||
|
"success",
|
||||||
|
"File system use more than 1 disks! (maybe RAID)",
|
||||||
|
"File system enable RAID feature, this is NOT supported!",
|
||||||
|
"File is compressed in disk, this is not supported!",
|
||||||
|
"File not flat in disk! (maybe compressed)",
|
||||||
|
"Read buffer overflow!",
|
||||||
|
};
|
||||||
|
|
||||||
|
static const char * ventoy_get_chunk_err_msg(grub_uint32_t err)
|
||||||
|
{
|
||||||
|
if (err < VTOY_CHUNK_ERR_MAX)
|
||||||
|
{
|
||||||
|
return g_chunk_err_msg[err];
|
||||||
|
}
|
||||||
|
|
||||||
|
return "XXXX";
|
||||||
|
}
|
||||||
|
|
||||||
|
int ventoy_check_block_list(grub_file_t file, ventoy_img_chunk_list *chunklist,
|
||||||
|
grub_disk_addr_t start, char *err, grub_uint32_t len)
|
||||||
{
|
{
|
||||||
grub_uint32_t i = 0;
|
grub_uint32_t i = 0;
|
||||||
grub_uint64_t total = 0;
|
grub_uint64_t total = 0;
|
||||||
grub_uint64_t fileblk = 0;
|
grub_uint64_t fileblk = 0;
|
||||||
ventoy_img_chunk *chunk = NULL;
|
ventoy_img_chunk *chunk = NULL;
|
||||||
|
|
||||||
|
if (chunklist->err_code)
|
||||||
|
{
|
||||||
|
if (err)
|
||||||
|
{
|
||||||
|
grub_snprintf(err, len, "%s", ventoy_get_chunk_err_msg(chunklist->err_code));
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (err)
|
||||||
|
{
|
||||||
|
grub_snprintf(err, len, "Unsupported chunk list.");
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < chunklist->cur_chunk; i++)
|
for (i = 0; i < chunklist->cur_chunk; i++)
|
||||||
{
|
{
|
||||||
chunk = chunklist->chunk + i;
|
chunk = chunklist->chunk + i;
|
||||||
@@ -3307,6 +3366,10 @@ int ventoy_get_block_list(grub_file_t file, ventoy_img_chunk_list *chunklist, gr
|
|||||||
{
|
{
|
||||||
grub_ext_get_file_chunk(start, file, chunklist);
|
grub_ext_get_file_chunk(start, file, chunklist);
|
||||||
}
|
}
|
||||||
|
else if (fs_type == ventoy_fs_btrfs)
|
||||||
|
{
|
||||||
|
grub_btrfs_get_file_chunk(start, file, chunklist);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
file->read_hook = (grub_disk_read_hook_t)(void *)grub_disk_blocklist_read;
|
file->read_hook = (grub_disk_read_hook_t)(void *)grub_disk_blocklist_read;
|
||||||
@@ -3366,8 +3429,10 @@ int ventoy_get_block_list(grub_file_t file, ventoy_img_chunk_list *chunklist, gr
|
|||||||
static grub_err_t ventoy_cmd_img_sector(grub_extcmd_context_t ctxt, int argc, char **args)
|
static grub_err_t ventoy_cmd_img_sector(grub_extcmd_context_t ctxt, int argc, char **args)
|
||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
|
int fs_type;
|
||||||
grub_file_t file;
|
grub_file_t file;
|
||||||
grub_disk_addr_t start;
|
grub_disk_addr_t start;
|
||||||
|
char errmsg[128];
|
||||||
|
|
||||||
(void)ctxt;
|
(void)ctxt;
|
||||||
(void)argc;
|
(void)argc;
|
||||||
@@ -3387,7 +3452,8 @@ static grub_err_t ventoy_cmd_img_sector(grub_extcmd_context_t ctxt, int argc, ch
|
|||||||
grub_free(g_img_chunk_list.chunk);
|
grub_free(g_img_chunk_list.chunk);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ventoy_get_fs_type(file->fs->name) >= ventoy_fs_max)
|
fs_type = ventoy_get_fs_type(file->fs->name);
|
||||||
|
if (fs_type >= ventoy_fs_max)
|
||||||
{
|
{
|
||||||
grub_file_close(file);
|
grub_file_close(file);
|
||||||
return grub_error(GRUB_ERR_BAD_ARGUMENT, "Unsupported filesystem %s\n", file->fs->name);
|
return grub_error(GRUB_ERR_BAD_ARGUMENT, "Unsupported filesystem %s\n", file->fs->name);
|
||||||
@@ -3408,12 +3474,17 @@ static grub_err_t ventoy_cmd_img_sector(grub_extcmd_context_t ctxt, int argc, ch
|
|||||||
|
|
||||||
ventoy_get_block_list(file, &g_img_chunk_list, start);
|
ventoy_get_block_list(file, &g_img_chunk_list, start);
|
||||||
|
|
||||||
rc = ventoy_check_block_list(file, &g_img_chunk_list, start);
|
rc = ventoy_check_block_list(file, &g_img_chunk_list, start, errmsg, sizeof(errmsg));
|
||||||
grub_file_close(file);
|
grub_file_close(file);
|
||||||
|
|
||||||
if (rc)
|
if (rc)
|
||||||
{
|
{
|
||||||
return grub_error(GRUB_ERR_NOT_IMPLEMENTED_YET, "Unsupported chunk list.\n");
|
if (fs_type == ventoy_fs_btrfs)
|
||||||
|
{
|
||||||
|
vtoy_tip(10, "%s\n\nWill exit in 10 seconds...\n", errmsg);
|
||||||
|
grub_exit();
|
||||||
|
}
|
||||||
|
return grub_error(GRUB_ERR_NOT_IMPLEMENTED_YET, "%s\n", errmsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
grub_memset(&g_grub_param->file_replace, 0, sizeof(g_grub_param->file_replace));
|
grub_memset(&g_grub_param->file_replace, 0, sizeof(g_grub_param->file_replace));
|
||||||
@@ -3950,6 +4021,7 @@ static grub_err_t ventoy_cmd_test_block_list(grub_extcmd_context_t ctxt, int arg
|
|||||||
grub_uint32_t i;
|
grub_uint32_t i;
|
||||||
grub_file_t file;
|
grub_file_t file;
|
||||||
ventoy_img_chunk_list chunklist;
|
ventoy_img_chunk_list chunklist;
|
||||||
|
char errmsg[128];
|
||||||
|
|
||||||
(void)ctxt;
|
(void)ctxt;
|
||||||
(void)argc;
|
(void)argc;
|
||||||
@@ -3973,8 +4045,9 @@ static grub_err_t ventoy_cmd_test_block_list(grub_extcmd_context_t ctxt, int arg
|
|||||||
|
|
||||||
ventoy_get_block_list(file, &chunklist, 0);
|
ventoy_get_block_list(file, &chunklist, 0);
|
||||||
|
|
||||||
if (0 != ventoy_check_block_list(file, &chunklist, 0))
|
if (0 != ventoy_check_block_list(file, &chunklist, 0, errmsg, sizeof(errmsg)))
|
||||||
{
|
{
|
||||||
|
grub_printf("%s\n", errmsg);
|
||||||
grub_printf("########## UNSUPPORTED ###############\n");
|
grub_printf("########## UNSUPPORTED ###############\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -6985,6 +7058,7 @@ static cmd_para ventoy_cmds[] =
|
|||||||
{ "vt_cmp_checksum", ventoy_cmd_cmp_checksum, 0, NULL, "", "", NULL },
|
{ "vt_cmp_checksum", ventoy_cmd_cmp_checksum, 0, NULL, "", "", NULL },
|
||||||
{ "vt_push_menu_lang", ventoy_cmd_push_menulang, 0, NULL, "", "", NULL },
|
{ "vt_push_menu_lang", ventoy_cmd_push_menulang, 0, NULL, "", "", NULL },
|
||||||
{ "vt_pop_menu_lang", ventoy_cmd_pop_menulang, 0, NULL, "", "", NULL },
|
{ "vt_pop_menu_lang", ventoy_cmd_pop_menulang, 0, NULL, "", "", NULL },
|
||||||
|
{ "vt_linux_initrd", ventoy_cmd_linux_initrd, 0, NULL, "", "", NULL },
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -37,6 +37,7 @@
|
|||||||
#define VTOY_SIZE_4MB (4 * 1024 * 1024)
|
#define VTOY_SIZE_4MB (4 * 1024 * 1024)
|
||||||
#define VTOY_SIZE_512KB (512 * 1024)
|
#define VTOY_SIZE_512KB (512 * 1024)
|
||||||
#define VTOY_SIZE_1KB 1024
|
#define VTOY_SIZE_1KB 1024
|
||||||
|
#define VTOY_SIZE_4KB 4096
|
||||||
#define VTOY_SIZE_32KB (32 * 1024)
|
#define VTOY_SIZE_32KB (32 * 1024)
|
||||||
#define VTOY_SIZE_128KB (128 * 1024)
|
#define VTOY_SIZE_128KB (128 * 1024)
|
||||||
|
|
||||||
@@ -95,6 +96,12 @@
|
|||||||
return (err);\
|
return (err);\
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define vtoy_tip(wait_seconds, fmt, ...) \
|
||||||
|
grub_printf(fmt, __VA_ARGS__); \
|
||||||
|
grub_refresh(); \
|
||||||
|
grub_sleep(wait_seconds)
|
||||||
|
|
||||||
|
|
||||||
#define VTOY_APPEND_NEWBUF(buf) \
|
#define VTOY_APPEND_NEWBUF(buf) \
|
||||||
{\
|
{\
|
||||||
char *__c = buf;\
|
char *__c = buf;\
|
||||||
@@ -656,6 +663,7 @@ grub_uint32_t ventoy_get_iso_boot_catlog(grub_file_t file);
|
|||||||
int ventoy_has_efi_eltorito(grub_file_t file, grub_uint32_t sector);
|
int ventoy_has_efi_eltorito(grub_file_t file, grub_uint32_t sector);
|
||||||
grub_err_t ventoy_cmd_linux_chain_data(grub_extcmd_context_t ctxt, int argc, char **args);
|
grub_err_t ventoy_cmd_linux_chain_data(grub_extcmd_context_t ctxt, int argc, char **args);
|
||||||
grub_err_t ventoy_cmd_linux_systemd_menu(grub_extcmd_context_t ctxt, int argc, char **args);
|
grub_err_t ventoy_cmd_linux_systemd_menu(grub_extcmd_context_t ctxt, int argc, char **args);
|
||||||
|
grub_err_t ventoy_cmd_linux_initrd(grub_extcmd_context_t ctxt, int argc, char **args);
|
||||||
grub_err_t ventoy_cmd_linux_limine_menu(grub_extcmd_context_t ctxt, int argc, char **args);
|
grub_err_t ventoy_cmd_linux_limine_menu(grub_extcmd_context_t ctxt, int argc, char **args);
|
||||||
grub_err_t ventoy_cmd_linux_locate_initrd(grub_extcmd_context_t ctxt, int argc, char **args);
|
grub_err_t ventoy_cmd_linux_locate_initrd(grub_extcmd_context_t ctxt, int argc, char **args);
|
||||||
grub_err_t ventoy_cmd_initrd_count(grub_extcmd_context_t ctxt, int argc, char **args);
|
grub_err_t ventoy_cmd_initrd_count(grub_extcmd_context_t ctxt, int argc, char **args);
|
||||||
@@ -1150,7 +1158,7 @@ int ventoy_plugin_find_conf_replace(const char *iso, conf_replace *nodes[VTOY_MA
|
|||||||
dud * ventoy_plugin_find_dud(const char *iso);
|
dud * ventoy_plugin_find_dud(const char *iso);
|
||||||
int ventoy_plugin_load_dud(dud *node, const char *isopart);
|
int ventoy_plugin_load_dud(dud *node, const char *isopart);
|
||||||
int ventoy_get_block_list(grub_file_t file, ventoy_img_chunk_list *chunklist, grub_disk_addr_t start);
|
int ventoy_get_block_list(grub_file_t file, ventoy_img_chunk_list *chunklist, grub_disk_addr_t start);
|
||||||
int ventoy_check_block_list(grub_file_t file, ventoy_img_chunk_list *chunklist, grub_disk_addr_t start);
|
int ventoy_check_block_list(grub_file_t file, ventoy_img_chunk_list *chunklist, grub_disk_addr_t start, char *err, grub_uint32_t len);
|
||||||
void ventoy_plugin_dump_persistence(void);
|
void ventoy_plugin_dump_persistence(void);
|
||||||
grub_err_t ventoy_cmd_set_theme(grub_extcmd_context_t ctxt, int argc, char **args);
|
grub_err_t ventoy_cmd_set_theme(grub_extcmd_context_t ctxt, int argc, char **args);
|
||||||
grub_err_t ventoy_cmd_set_theme_path(grub_extcmd_context_t ctxt, int argc, char **args);
|
grub_err_t ventoy_cmd_set_theme_path(grub_extcmd_context_t ctxt, int argc, char **args);
|
||||||
@@ -1273,6 +1281,7 @@ typedef struct systemd_menu_ctx
|
|||||||
{
|
{
|
||||||
char *dev;
|
char *dev;
|
||||||
char *buf;
|
char *buf;
|
||||||
|
const char *initrd_cmd;
|
||||||
int pos;
|
int pos;
|
||||||
int len;
|
int len;
|
||||||
}systemd_menu_ctx;
|
}systemd_menu_ctx;
|
||||||
@@ -1287,7 +1296,7 @@ typedef struct global_var_cfg
|
|||||||
typedef struct ctrl_var_cfg
|
typedef struct ctrl_var_cfg
|
||||||
{
|
{
|
||||||
const char *name;
|
const char *name;
|
||||||
int value;
|
char szval[2];
|
||||||
}ctrl_var_cfg;
|
}ctrl_var_cfg;
|
||||||
|
|
||||||
#define vtoy_check_goto_out(p) if (!p) goto out
|
#define vtoy_check_goto_out(p) if (!p) goto out
|
||||||
|
|||||||
@@ -1867,7 +1867,7 @@ static int ventoy_systemd_conf_hook(const char *filename, const struct grub_dirh
|
|||||||
ctx->pos = oldpos;
|
ctx->pos = oldpos;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
vtoy_len_ssprintf(ctx->buf, ctx->pos, ctx->len, " echo \"Downloading kernel ...\"\n linux %s ", tag);
|
vtoy_len_ssprintf(ctx->buf, ctx->pos, ctx->len, " echo \"Loading kernel ...\"\n linux %s ", tag);
|
||||||
|
|
||||||
/* kernel options */
|
/* kernel options */
|
||||||
grub_memcpy(filebuf, bkbuf, file->size);
|
grub_memcpy(filebuf, bkbuf, file->size);
|
||||||
@@ -1876,7 +1876,7 @@ static int ventoy_systemd_conf_hook(const char *filename, const struct grub_dirh
|
|||||||
|
|
||||||
|
|
||||||
/* initrd xxx xxx xxx */
|
/* initrd xxx xxx xxx */
|
||||||
vtoy_len_ssprintf(ctx->buf, ctx->pos, ctx->len, " echo \"Downloading initrd ...\"\n initrd ");
|
vtoy_len_ssprintf(ctx->buf, ctx->pos, ctx->len, " echo \"Loading initrd ...\"\n %s ", ctx->initrd_cmd);
|
||||||
grub_memcpy(filebuf, bkbuf, file->size);
|
grub_memcpy(filebuf, bkbuf, file->size);
|
||||||
tag = ventoy_systemd_conf_tag(filebuf, "initrd", 1);
|
tag = ventoy_systemd_conf_tag(filebuf, "initrd", 1);
|
||||||
while (tag)
|
while (tag)
|
||||||
@@ -1893,6 +1893,34 @@ out:
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
grub_err_t ventoy_cmd_linux_initrd(grub_extcmd_context_t ctxt, int argc, char **args)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
int pos = 0;
|
||||||
|
char *buf = NULL;
|
||||||
|
|
||||||
|
(void)ctxt;
|
||||||
|
|
||||||
|
buf = (char *)grub_malloc(VTOY_SIZE_4KB);
|
||||||
|
if (!buf)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
pos += grub_snprintf(buf + pos, VTOY_SIZE_4KB - pos, "initrd mem:%s:size:%s",
|
||||||
|
grub_env_get("ventoy_cpio_addr"), grub_env_get("ventoy_cpio_size"));
|
||||||
|
|
||||||
|
for (i = 0; i < argc; i++)
|
||||||
|
{
|
||||||
|
pos += grub_snprintf(buf + pos, VTOY_SIZE_4KB - pos, " newc:initrd%03d:%s", i + 1, args[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
grub_script_execute_sourcecode(buf);
|
||||||
|
grub_free(buf);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
grub_err_t ventoy_cmd_linux_systemd_menu(grub_extcmd_context_t ctxt, int argc, char **args)
|
grub_err_t ventoy_cmd_linux_systemd_menu(grub_extcmd_context_t ctxt, int argc, char **args)
|
||||||
{
|
{
|
||||||
static char *buf = NULL;
|
static char *buf = NULL;
|
||||||
@@ -1936,6 +1964,7 @@ grub_err_t ventoy_cmd_linux_systemd_menu(grub_extcmd_context_t ctxt, int argc, c
|
|||||||
|
|
||||||
ctx.dev = args[0];
|
ctx.dev = args[0];
|
||||||
ctx.buf = buf;
|
ctx.buf = buf;
|
||||||
|
ctx.initrd_cmd = args[2] ? args[2] : "initrd";
|
||||||
ctx.pos = 0;
|
ctx.pos = 0;
|
||||||
ctx.len = VTOY_LINUX_SYSTEMD_MENU_MAX_BUF;
|
ctx.len = VTOY_LINUX_SYSTEMD_MENU_MAX_BUF;
|
||||||
fs->fs_dir(dev, "/loader/entries", ventoy_systemd_conf_hook, &ctx);
|
fs->fs_dir(dev, "/loader/entries", ventoy_systemd_conf_hook, &ctx);
|
||||||
|
|||||||
@@ -2765,7 +2765,7 @@ int ventoy_plugin_get_persistent_chunklist(const char *isopath, int index, vento
|
|||||||
start = file->device->disk->partition->start;
|
start = file->device->disk->partition->start;
|
||||||
ventoy_get_block_list(file, chunk_list, start);
|
ventoy_get_block_list(file, chunk_list, start);
|
||||||
|
|
||||||
if (0 != ventoy_check_block_list(file, chunk_list, start))
|
if (0 != ventoy_check_block_list(file, chunk_list, start, NULL, 0))
|
||||||
{
|
{
|
||||||
grub_free(chunk_list->chunk);
|
grub_free(chunk_list->chunk);
|
||||||
chunk_list->chunk = NULL;
|
chunk_list->chunk = NULL;
|
||||||
|
|||||||
@@ -197,6 +197,8 @@ grub_disk_t EXPORT_FUNC(grub_disk_open) (const char *name);
|
|||||||
void EXPORT_FUNC(grub_disk_close) (grub_disk_t disk);
|
void EXPORT_FUNC(grub_disk_close) (grub_disk_t disk);
|
||||||
grub_err_t EXPORT_FUNC(grub_disk_blocklist_read)(void *chunklist, grub_uint64_t sector,
|
grub_err_t EXPORT_FUNC(grub_disk_blocklist_read)(void *chunklist, grub_uint64_t sector,
|
||||||
grub_uint64_t size, grub_uint32_t log_sector_size);
|
grub_uint64_t size, grub_uint32_t log_sector_size);
|
||||||
|
grub_err_t EXPORT_FUNC(grub_disk_blocklist_read2)(grub_disk_t disk, grub_uint64_t sector,
|
||||||
|
grub_uint64_t size, char *buf);
|
||||||
|
|
||||||
grub_err_t EXPORT_FUNC(grub_disk_read) (grub_disk_t disk,
|
grub_err_t EXPORT_FUNC(grub_disk_read) (grub_disk_t disk,
|
||||||
grub_disk_addr_t sector,
|
grub_disk_addr_t sector,
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ typedef enum ventoy_fs_type
|
|||||||
ventoy_fs_xfs, /* 3: XFS */
|
ventoy_fs_xfs, /* 3: XFS */
|
||||||
ventoy_fs_udf, /* 4: UDF */
|
ventoy_fs_udf, /* 4: UDF */
|
||||||
ventoy_fs_fat, /* 5: FAT */
|
ventoy_fs_fat, /* 5: FAT */
|
||||||
|
ventoy_fs_btrfs, /* 6: BTRFS */
|
||||||
|
|
||||||
ventoy_fs_max
|
ventoy_fs_max
|
||||||
}ventoy_fs_type;
|
}ventoy_fs_type;
|
||||||
@@ -124,6 +125,7 @@ typedef struct ventoy_os_param
|
|||||||
* vtoy_reserved[5]: vtoy_linux_remount
|
* vtoy_reserved[5]: vtoy_linux_remount
|
||||||
* vtoy_reserved[6]: vtoy_vlnk
|
* vtoy_reserved[6]: vtoy_vlnk
|
||||||
* vtoy_reserved[7~10]: vtoy_disk_sig[4] used for vlnk
|
* vtoy_reserved[7~10]: vtoy_disk_sig[4] used for vlnk
|
||||||
|
* vtoy_reserved[11]: vtoy_win_uefi_max_res
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
grub_uint8_t vtoy_reserved[32]; // Internal use by ventoy
|
grub_uint8_t vtoy_reserved[32]; // Internal use by ventoy
|
||||||
@@ -252,12 +254,15 @@ typedef struct ventoy_virt_chunk
|
|||||||
#define DEFAULT_CHUNK_NUM 1024
|
#define DEFAULT_CHUNK_NUM 1024
|
||||||
typedef struct ventoy_img_chunk_list
|
typedef struct ventoy_img_chunk_list
|
||||||
{
|
{
|
||||||
|
char *buf;
|
||||||
|
grub_uint32_t last_off;
|
||||||
|
grub_uint32_t err_code;
|
||||||
|
|
||||||
grub_uint32_t max_chunk;
|
grub_uint32_t max_chunk;
|
||||||
grub_uint32_t cur_chunk;
|
grub_uint32_t cur_chunk;
|
||||||
ventoy_img_chunk *chunk;
|
ventoy_img_chunk *chunk;
|
||||||
}ventoy_img_chunk_list;
|
}ventoy_img_chunk_list;
|
||||||
|
|
||||||
|
|
||||||
#pragma pack()
|
#pragma pack()
|
||||||
|
|
||||||
#define ventoy_filt_register grub_file_filter_register
|
#define ventoy_filt_register grub_file_filter_register
|
||||||
@@ -291,7 +296,21 @@ typedef struct ventoy_grub_param
|
|||||||
|
|
||||||
#pragma pack()
|
#pragma pack()
|
||||||
|
|
||||||
|
#define VTOY_CHUNK_BUF_SIZE (4 * 1024 * 1024)
|
||||||
|
|
||||||
|
typedef enum vtoy_chunk_err
|
||||||
|
{
|
||||||
|
VTOY_CHUNK_ERR_NONE = 0,
|
||||||
|
VTOY_CHUNK_ERR_MULTI_DEV,
|
||||||
|
VTOY_CHUNK_ERR_RAID,
|
||||||
|
VTOY_CHUNK_ERR_COMPRESS,
|
||||||
|
VTOY_CHUNK_ERR_NOT_FLAT,
|
||||||
|
VTOY_CHUNK_ERR_OVER_FLOW,
|
||||||
|
VTOY_CHUNK_ERR_MAX
|
||||||
|
}vtoy_chunk_err;
|
||||||
|
|
||||||
int grub_ext_get_file_chunk(grub_uint64_t part_start, grub_file_t file, ventoy_img_chunk_list *chunk_list);
|
int grub_ext_get_file_chunk(grub_uint64_t part_start, grub_file_t file, ventoy_img_chunk_list *chunk_list);
|
||||||
|
int grub_btrfs_get_file_chunk(grub_uint64_t part_start, grub_file_t file, ventoy_img_chunk_list *chunk_list);
|
||||||
int grub_fat_get_file_chunk(grub_uint64_t part_start, grub_file_t file, ventoy_img_chunk_list *chunk_list);
|
int grub_fat_get_file_chunk(grub_uint64_t part_start, grub_file_t file, ventoy_img_chunk_list *chunk_list);
|
||||||
void grub_iso9660_set_nojoliet(int nojoliet);
|
void grub_iso9660_set_nojoliet(int nojoliet);
|
||||||
int grub_iso9660_is_joliet(void);
|
int grub_iso9660_is_joliet(void);
|
||||||
|
|||||||
@@ -48,3 +48,6 @@ else
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
PATH=$VTPATH_OLD
|
PATH=$VTPATH_OLD
|
||||||
|
|
||||||
|
set_ventoy_hook_finish
|
||||||
|
|
||||||
|
|||||||
@@ -67,4 +67,5 @@ fi
|
|||||||
|
|
||||||
if [ -f $VTOY_PATH/ventoy_persistent_map ]; then
|
if [ -f $VTOY_PATH/ventoy_persistent_map ]; then
|
||||||
$SED "1 aexport cow_label=vtoycow" -i /init
|
$SED "1 aexport cow_label=vtoycow" -i /init
|
||||||
|
$SED "/parse.*cmdline/aecho cow_label=vtoycow>>/tmp/cmdline" -i /init
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -49,3 +49,6 @@ else
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
PATH=$VTPATH_OLD
|
PATH=$VTPATH_OLD
|
||||||
|
|
||||||
|
set_ventoy_hook_finish
|
||||||
|
|
||||||
|
|||||||
@@ -52,3 +52,6 @@ ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2"
|
|||||||
# fi
|
# fi
|
||||||
|
|
||||||
PATH=$VTPATH_OLD
|
PATH=$VTPATH_OLD
|
||||||
|
|
||||||
|
|
||||||
|
set_ventoy_hook_finish
|
||||||
|
|||||||
@@ -36,3 +36,6 @@ ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2"
|
|||||||
|
|
||||||
PATH=$VTPATH_OLD
|
PATH=$VTPATH_OLD
|
||||||
|
|
||||||
|
|
||||||
|
set_ventoy_hook_finish
|
||||||
|
|
||||||
|
|||||||
@@ -30,3 +30,6 @@ for i in 0 1 2 3 4 5 6 7 8 9; do
|
|||||||
done
|
done
|
||||||
|
|
||||||
ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2"
|
ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2"
|
||||||
|
|
||||||
|
set_ventoy_hook_finish
|
||||||
|
|
||||||
|
|||||||
@@ -47,3 +47,6 @@ else
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2"
|
ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2"
|
||||||
|
|
||||||
|
set_ventoy_hook_finish
|
||||||
|
|
||||||
|
|||||||
@@ -39,3 +39,6 @@ ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2" "noreplace"
|
|||||||
|
|
||||||
$BUSYBOX_PATH/rm -f /dev/dm-*
|
$BUSYBOX_PATH/rm -f /dev/dm-*
|
||||||
|
|
||||||
|
|
||||||
|
set_ventoy_hook_finish
|
||||||
|
|
||||||
|
|||||||
@@ -119,3 +119,6 @@ fi
|
|||||||
|
|
||||||
PATH=$VTPATH_OLD
|
PATH=$VTPATH_OLD
|
||||||
|
|
||||||
|
|
||||||
|
set_ventoy_hook_finish
|
||||||
|
|
||||||
|
|||||||
@@ -41,3 +41,6 @@ fi
|
|||||||
|
|
||||||
PATH=$VTPATH_OLD
|
PATH=$VTPATH_OLD
|
||||||
|
|
||||||
|
|
||||||
|
set_ventoy_hook_finish
|
||||||
|
|
||||||
|
|||||||
@@ -80,3 +80,6 @@ ventoy_os_install_dmsetup $vtdiskname
|
|||||||
ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2" "noreplace"
|
ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2" "noreplace"
|
||||||
|
|
||||||
PATH=$VTPATH_OLD
|
PATH=$VTPATH_OLD
|
||||||
|
|
||||||
|
set_ventoy_hook_finish
|
||||||
|
|
||||||
|
|||||||
@@ -75,3 +75,6 @@ ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2" "noreplace"
|
|||||||
|
|
||||||
PATH=$VTPATH_OLD
|
PATH=$VTPATH_OLD
|
||||||
|
|
||||||
|
|
||||||
|
set_ventoy_hook_finish
|
||||||
|
|
||||||
|
|||||||
@@ -33,11 +33,13 @@ echo "_vtRet1=$_vtRet1 _vtRet2=$_vtRet2 ..." >> $VTLOG
|
|||||||
|
|
||||||
if [ $_vtRet1 -ne 0 -a $_vtRet2 -eq 0 ]; then
|
if [ $_vtRet1 -ne 0 -a $_vtRet2 -eq 0 ]; then
|
||||||
vtFindFlag=0
|
vtFindFlag=0
|
||||||
$GREP '`value from`' /usr/* -r | $AWK -F: '{print $1}' | while read vtline; do
|
$GREP '`value from`' /usr/* -r | $AWK -F: '{print $1}' > $VTOY_PATH/.porteus
|
||||||
|
while read vtline; do
|
||||||
echo "hooking $vtline ..." >> $VTLOG
|
echo "hooking $vtline ..." >> $VTLOG
|
||||||
$SED "s#\`value from\`#$vtPath#g" -i $vtline
|
$SED "s#\`value from\`#$vtPath#g" -i $vtline
|
||||||
vtFindFlag=1
|
vtFindFlag=1
|
||||||
done
|
done < $VTOY_PATH/.porteus
|
||||||
|
rm -f $VTOY_PATH/.porteus
|
||||||
|
|
||||||
if [ $vtFindFlag -eq 0 ]; then
|
if [ $vtFindFlag -eq 0 ]; then
|
||||||
if $GREP -q '`value from`' /linuxrc; then
|
if $GREP -q '`value from`' /linuxrc; then
|
||||||
|
|||||||
@@ -81,3 +81,6 @@ ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2" "noreplace"
|
|||||||
|
|
||||||
PATH=$VTPATH_OLD
|
PATH=$VTPATH_OLD
|
||||||
|
|
||||||
|
|
||||||
|
set_ventoy_hook_finish
|
||||||
|
|
||||||
|
|||||||
@@ -58,6 +58,9 @@ ventoy_get_debian_distro() {
|
|||||||
if $GREP -q 'Tails' /etc/os-release; then
|
if $GREP -q 'Tails' /etc/os-release; then
|
||||||
echo 'tails'; return
|
echo 'tails'; return
|
||||||
fi
|
fi
|
||||||
|
if $GREP -q 'NAME="Kylin"' /etc/os-release; then
|
||||||
|
echo 'kylin'; return
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if $GREP -q 'slax/' /proc/cmdline; then
|
if $GREP -q 'slax/' /proc/cmdline; then
|
||||||
|
|||||||
@@ -39,3 +39,6 @@ $BUSYBOX_PATH/insmod $vtLoopExDir/dm-mod/$(uname -r)/64/dm-mod.ko
|
|||||||
ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2" "noreplace"
|
ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2" "noreplace"
|
||||||
|
|
||||||
PATH=$VTPATH_OLD
|
PATH=$VTPATH_OLD
|
||||||
|
|
||||||
|
set_ventoy_hook_finish
|
||||||
|
|
||||||
|
|||||||
@@ -84,3 +84,6 @@ cp -a /dev/$vtDM /dev/ventoy
|
|||||||
ln -s /dev/$vtDM /dev/root
|
ln -s /dev/$vtDM /dev/root
|
||||||
|
|
||||||
PATH=$VTPATH_OLD
|
PATH=$VTPATH_OLD
|
||||||
|
|
||||||
|
set_ventoy_hook_finish
|
||||||
|
|
||||||
|
|||||||
@@ -34,3 +34,6 @@ for i in 0 1 2 3 4 5 6 7 8 9; do
|
|||||||
done
|
done
|
||||||
|
|
||||||
ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2" "noreplace"
|
ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2" "noreplace"
|
||||||
|
|
||||||
|
set_ventoy_hook_finish
|
||||||
|
|
||||||
|
|||||||
@@ -48,3 +48,6 @@ else
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
PATH=$VTPATH_OLD
|
PATH=$VTPATH_OLD
|
||||||
|
|
||||||
|
set_ventoy_hook_finish
|
||||||
|
|
||||||
|
|||||||
@@ -68,3 +68,6 @@ ventoy_os_install_dmsetup_by_unsquashfs $vtdiskname
|
|||||||
ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2" "noreplace"
|
ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2" "noreplace"
|
||||||
|
|
||||||
PATH=$VTPATH_OLD
|
PATH=$VTPATH_OLD
|
||||||
|
|
||||||
|
set_ventoy_hook_finish
|
||||||
|
|
||||||
|
|||||||
@@ -72,3 +72,6 @@ ventoy_os_install_device_mapper $vtdiskname
|
|||||||
ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2"
|
ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2"
|
||||||
|
|
||||||
PATH=$VTPATH_OLD
|
PATH=$VTPATH_OLD
|
||||||
|
|
||||||
|
set_ventoy_hook_finish
|
||||||
|
|
||||||
|
|||||||
@@ -36,3 +36,6 @@ blkdev_num=$($VTOY_PATH/tool/dmsetup ls | grep ventoy | sed 's/.*(\([0-9][0-9]*\
|
|||||||
mknod -m 0660 /dev/ventoy b $blkdev_num
|
mknod -m 0660 /dev/ventoy b $blkdev_num
|
||||||
|
|
||||||
PATH=$VTPATH_OLD
|
PATH=$VTPATH_OLD
|
||||||
|
|
||||||
|
set_ventoy_hook_finish
|
||||||
|
|
||||||
|
|||||||
@@ -36,3 +36,6 @@ vtDM=$(ventoy_find_dm_id ${blkdev_num})
|
|||||||
echo -n "/dev/$vtDM" > /ventoy/rootdev
|
echo -n "/dev/$vtDM" > /ventoy/rootdev
|
||||||
|
|
||||||
PATH=$VTPATH_OLD
|
PATH=$VTPATH_OLD
|
||||||
|
|
||||||
|
set_ventoy_hook_finish
|
||||||
|
|
||||||
|
|||||||
@@ -36,3 +36,6 @@ blkdev_num=$($VTOY_PATH/tool/dmsetup ls | grep ventoy | sed 's/.*(\([0-9][0-9]*\
|
|||||||
mknod -m 0660 /dev/ventoy b $blkdev_num
|
mknod -m 0660 /dev/ventoy b $blkdev_num
|
||||||
|
|
||||||
PATH=$VTPATH_OLD
|
PATH=$VTPATH_OLD
|
||||||
|
|
||||||
|
set_ventoy_hook_finish
|
||||||
|
|
||||||
|
|||||||
@@ -72,6 +72,12 @@ ventoy_udev_disk_common_hook $* "noreplace"
|
|||||||
|
|
||||||
$BUSYBOX_PATH/mount $VTOY_DM_PATH /mnt/ventoy
|
$BUSYBOX_PATH/mount $VTOY_DM_PATH /mnt/ventoy
|
||||||
|
|
||||||
|
#fix Oracle Linux 6.9 install issue
|
||||||
|
if $GREP -q -i 'Oracle Linux' /mnt/ventoy/.discinfo; then
|
||||||
|
ln -s /mnt/ventoy /mnt/source
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# We do a trick for rhel6 series here.
|
# We do a trick for rhel6 series here.
|
||||||
# Use /dev/$vtCheatLoop and wapper it as a removable cdrom with bind mount.
|
# Use /dev/$vtCheatLoop and wapper it as a removable cdrom with bind mount.
|
||||||
|
|||||||
@@ -33,3 +33,6 @@ fi
|
|||||||
ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2" "noreplace"
|
ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2" "noreplace"
|
||||||
|
|
||||||
PATH=$VTPATH_OLD
|
PATH=$VTPATH_OLD
|
||||||
|
|
||||||
|
set_ventoy_hook_finish
|
||||||
|
|
||||||
|
|||||||
@@ -40,3 +40,6 @@ mknod -m 660 /dev/ventoy b $blkdev_num
|
|||||||
echo "/dev/ventoy" > cdrom.hint
|
echo "/dev/ventoy" > cdrom.hint
|
||||||
|
|
||||||
PATH=$VTPATH_OLD
|
PATH=$VTPATH_OLD
|
||||||
|
|
||||||
|
set_ventoy_hook_finish
|
||||||
|
|
||||||
|
|||||||
@@ -50,3 +50,6 @@ if [ "$1" = "fakecdrom" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
PATH=$VTPATH_OLD
|
PATH=$VTPATH_OLD
|
||||||
|
|
||||||
|
set_ventoy_hook_finish
|
||||||
|
|
||||||
|
|||||||
@@ -63,3 +63,6 @@ blkdev_num=$($VTOY_PATH/tool/dmsetup ls | grep ventoy | sed 's/.*(\([0-9][0-9]*\
|
|||||||
mknod -m 0660 /dev/ventoy b $blkdev_num
|
mknod -m 0660 /dev/ventoy b $blkdev_num
|
||||||
|
|
||||||
PATH=$VTPATH_OLD
|
PATH=$VTPATH_OLD
|
||||||
|
|
||||||
|
set_ventoy_hook_finish
|
||||||
|
|
||||||
|
|||||||
@@ -25,7 +25,19 @@ fi
|
|||||||
|
|
||||||
VTPATH_OLD=$PATH; PATH=$BUSYBOX_PATH:$VTOY_PATH/tool:$PATH
|
VTPATH_OLD=$PATH; PATH=$BUSYBOX_PATH:$VTOY_PATH/tool:$PATH
|
||||||
|
|
||||||
modprobe dm-mod
|
vtlog "Loading dax and dm-mod module ..."
|
||||||
|
$BUSYBOX_PATH/modprobe dax > /dev/null 2>&1
|
||||||
|
$BUSYBOX_PATH/modprobe dm-mod > /dev/null 2>&1
|
||||||
|
|
||||||
|
if $GREP -q 'device-mapper' /proc/devices; then
|
||||||
|
vtlog "dm-mod module check success ..."
|
||||||
|
else
|
||||||
|
vtlog "Need to extract dax and dm-mod module ..."
|
||||||
|
$VTOY_PATH/tool/zstdcat /lib/modules/$(uname -r)/drivers/dax/dax.ko.zst > $VTOY_PATH/extract_dax.ko
|
||||||
|
$BUSYBOX_PATH/insmod $VTOY_PATH/extract_dax.ko
|
||||||
|
$VTOY_PATH/tool/zstdcat /lib/modules/$(uname -r)/drivers/md/dm-mod.ko.zst > $VTOY_PATH/extract_dm_mod.ko
|
||||||
|
$BUSYBOX_PATH/insmod $VTOY_PATH/extract_dm_mod.ko
|
||||||
|
fi
|
||||||
|
|
||||||
wait_for_usb_disk_ready
|
wait_for_usb_disk_ready
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,8 @@
|
|||||||
|
|
||||||
. $VTOY_PATH/hook/ventoy-os-lib.sh
|
. $VTOY_PATH/hook/ventoy-os-lib.sh
|
||||||
|
|
||||||
|
$SED "/Searching/i $BUSYBOX_PATH/sh $VTOY_PATH/hook/t2/disk_hook.sh" -i /init
|
||||||
|
$SED "/disktype/i x=/dev/ventoy" -i /init
|
||||||
$SED "/getdevice *devicefile/i $BUSYBOX_PATH/sh $VTOY_PATH/hook/t2/disk_hook.sh" -i /init
|
$SED "/getdevice *devicefile/i $BUSYBOX_PATH/sh $VTOY_PATH/hook/t2/disk_hook.sh" -i /init
|
||||||
$SED "/getdevice *devicefile/a devicefile=/dev/ventoy" -i /init
|
$SED "/getdevice *devicefile/a devicefile=/dev/ventoy" -i /init
|
||||||
|
|
||||||
|
|||||||
@@ -67,8 +67,11 @@ set_ventoy_hook_finish() {
|
|||||||
|
|
||||||
if [ -f /ventoy/ventoy_iso_part_dm_cmd ]; then
|
if [ -f /ventoy/ventoy_iso_part_dm_cmd ]; then
|
||||||
echo "### create iso part raw dm" >> $VTLOG
|
echo "### create iso part raw dm" >> $VTLOG
|
||||||
|
$CAT $VTOY_PATH/ventoy_raw_table >> $VTLOG
|
||||||
|
echo "### iso part dm cmd" >> $VTLOG
|
||||||
|
$CAT /ventoy/ventoy_iso_part_dm_cmd >> $VTLOG
|
||||||
$BUSYBOX_PATH/sh /ventoy/ventoy_iso_part_dm_cmd >>$VTLOG 2>&1
|
$BUSYBOX_PATH/sh /ventoy/ventoy_iso_part_dm_cmd >>$VTLOG 2>&1
|
||||||
$BUSYBOX_PATH/rm -f /ventoy/ventoy_iso_part_dm_cmd
|
#$BUSYBOX_PATH/rm -f /ventoy/ventoy_iso_part_dm_cmd
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -160,10 +163,10 @@ ventoy_get_vblade_bin() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ventoy_find_bin_path() {
|
ventoy_find_bin_path() {
|
||||||
|
#must use built-in dmsetup, so first try ventoy path. Otherwise ubuntu installer unhappy. #3567
|
||||||
if $BUSYBOX_PATH/which "$1" > /dev/null; then
|
if $BUSYBOX_PATH/which "$1" > /dev/null; then
|
||||||
$BUSYBOX_PATH/which "$1"; return
|
$BUSYBOX_PATH/which "$1"; return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
for vt_path in '/bin' '/sbin' '/usr/bin' '/usr/sbin' '/usr/local/bin' '/usr/local/sbin' '/root/bin'; do
|
for vt_path in '/bin' '/sbin' '/usr/bin' '/usr/sbin' '/usr/local/bin' '/usr/local/sbin' '/root/bin'; do
|
||||||
if [ -e "$vt_path/$1" ]; then
|
if [ -e "$vt_path/$1" ]; then
|
||||||
echo "$vt_path/$1"; return
|
echo "$vt_path/$1"; return
|
||||||
@@ -266,7 +269,9 @@ create_ventoy_device_mapper() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
RAWDISKNAME=$($HEAD -n1 $VTOY_PATH/ventoy_raw_table | $AWK '{print $4}')
|
RAWDISKNAME=$($HEAD -n1 $VTOY_PATH/ventoy_raw_table | $AWK '{print $4}')
|
||||||
echo "$VT_DM_BIN create ${RAWDISKNAME#/dev/} $VTOY_PATH/ventoy_raw_table" > /ventoy/ventoy_iso_part_dm_cmd
|
echo "$VT_DM_BIN create ${RAWDISKNAME#/dev/} $VTOY_PATH/ventoy_raw_table" > /ventoy/ventoy_iso_part_dm_cmd
|
||||||
|
#echo "$VT_DM_BIN mknodes ${RAWDISKNAME#/dev/}" >> /ventoy/ventoy_iso_part_dm_cmd
|
||||||
|
#echo "$VT_DM_BIN ls" >> /ventoy/ventoy_iso_part_dm_cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
create_persistent_device_mapper() {
|
create_persistent_device_mapper() {
|
||||||
|
|||||||
@@ -46,3 +46,6 @@ done
|
|||||||
|
|
||||||
|
|
||||||
PATH=$VTPATH_OLD
|
PATH=$VTPATH_OLD
|
||||||
|
|
||||||
|
set_ventoy_hook_finish
|
||||||
|
|
||||||
|
|||||||
@@ -40,3 +40,6 @@ if ! [ -e $VTOY_DM_PATH ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
PATH=$VTPATH_OLD
|
PATH=$VTPATH_OLD
|
||||||
|
|
||||||
|
set_ventoy_hook_finish
|
||||||
|
|
||||||
|
|||||||
@@ -169,7 +169,7 @@ ventoy_get_os_type() {
|
|||||||
echo 'debian'; return
|
echo 'debian'; return
|
||||||
elif $GREP -q 'Solus' /etc/os-release; then
|
elif $GREP -q 'Solus' /etc/os-release; then
|
||||||
echo 'rhel7'; return
|
echo 'rhel7'; return
|
||||||
elif $GREP -q 'openEuler' /etc/os-release; then
|
elif $GREP -q -i 'openEuler' /etc/os-release; then
|
||||||
echo 'openEuler'; return
|
echo 'openEuler'; return
|
||||||
elif $GREP -q 'fuyu' /etc/os-release; then
|
elif $GREP -q 'fuyu' /etc/os-release; then
|
||||||
echo 'openEuler'; return
|
echo 'openEuler'; return
|
||||||
@@ -177,6 +177,10 @@ ventoy_get_os_type() {
|
|||||||
echo 'deepin'; return
|
echo 'deepin'; return
|
||||||
elif $GREP -q 'chinauos' /etc/os-release; then
|
elif $GREP -q 'chinauos' /etc/os-release; then
|
||||||
echo 'deepin'; return
|
echo 'deepin'; return
|
||||||
|
elif $GREP -qi 'aerynos' /etc/os-release; then
|
||||||
|
echo 'rhel7'; return
|
||||||
|
elif $GREP -qi 'ID_LIKE=debian' /etc/os-release; then
|
||||||
|
echo 'debian'; return
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -312,8 +316,8 @@ ventoy_get_os_type() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
if [ -e /init ]; then
|
if [ -e /etc/initrd-release ]; then
|
||||||
if $GREP -q -m1 'T2 SDE' /init; then
|
if $GREP -q -m1 't2sde' /etc/initrd-release; then
|
||||||
echo 't2'; return
|
echo 't2'; return
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
@@ -373,6 +377,13 @@ ventoy_get_os_type() {
|
|||||||
echo 'openEuler'; return
|
echo 'openEuler'; return
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
if [ -f /etc/kylin-release ]; then
|
||||||
|
if $GREP -i -q -m1 'Kylin.*Server.* V1[1-9] ' /etc/kylin-release; then
|
||||||
|
echo 'openEuler'; return
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if $GREP -q 'chimera' /proc/version; then
|
if $GREP -q 'chimera' /proc/version; then
|
||||||
echo 'chimera'; return
|
echo 'chimera'; return
|
||||||
|
|||||||
@@ -205,7 +205,7 @@ ventoy_get_os_type() {
|
|||||||
echo 'debian'; return
|
echo 'debian'; return
|
||||||
elif $GREP -q 'Solus' /etc/os-release; then
|
elif $GREP -q 'Solus' /etc/os-release; then
|
||||||
echo 'rhel7'; return
|
echo 'rhel7'; return
|
||||||
elif $GREP -q 'openEuler' /etc/os-release; then
|
elif $GREP -q -i 'openEuler' /etc/os-release; then
|
||||||
echo 'openEuler'; return
|
echo 'openEuler'; return
|
||||||
elif $GREP -q 'fuyu' /etc/os-release; then
|
elif $GREP -q 'fuyu' /etc/os-release; then
|
||||||
echo 'openEuler'; return
|
echo 'openEuler'; return
|
||||||
@@ -344,8 +344,8 @@ ventoy_get_os_type() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
if [ -e /init ]; then
|
if [ -e /etc/initrd-release ]; then
|
||||||
if $GREP -q -m1 'T2 SDE' /init; then
|
if $GREP -q -m1 't2sde' /etc/initrd-release; then
|
||||||
echo 't2'; return
|
echo 't2'; return
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -11,7 +11,8 @@ Ventoy2Disk.sh CMD [ OPTION ] /dev/sdX
|
|||||||
|
|
||||||
OPTION: (optional)
|
OPTION: (optional)
|
||||||
-r SIZE_MB preserve some space at the bottom of the disk (only for install)
|
-r SIZE_MB preserve some space at the bottom of the disk (only for install)
|
||||||
-s enable secure boot support (default is disabled)
|
-s enable secure boot support (default is enabled)
|
||||||
|
-S disable secure boot support (default is enabled)
|
||||||
-g use GPT partition style, default is MBR style (only for install)
|
-g use GPT partition style, default is MBR style (only for install)
|
||||||
|
|
||||||
Please refer https://www.ventoy.net/en/doc_start.html for details.
|
Please refer https://www.ventoy.net/en/doc_start.html for details.
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ elif uname -m | grep -E -q 'mips64'; then
|
|||||||
else
|
else
|
||||||
export TOOLDIR=i386
|
export TOOLDIR=i386
|
||||||
fi
|
fi
|
||||||
export PATH="./tool/$TOOLDIR:$PATH"
|
export PATH="$OLDDIR/tool/$TOOLDIR:$PATH"
|
||||||
|
|
||||||
|
|
||||||
echo ''
|
echo ''
|
||||||
@@ -61,6 +61,24 @@ if [ $? -eq 0 ]; then
|
|||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
#use static linked mkexfatfs for musl-libc environment
|
||||||
|
if [ -f mkexfatfs_static ]; then
|
||||||
|
if ldd --version 2>&1 | grep -qi musl; then
|
||||||
|
mv mkexfatfs mkexfatfs_shared
|
||||||
|
mv mkexfatfs_static mkexfatfs
|
||||||
|
else
|
||||||
|
if ./mkexfatfs -V > /dev/null 2>&1; then
|
||||||
|
echo "mkexfatfs can not run, check static version" >> ./log.txt
|
||||||
|
else
|
||||||
|
if ./mkexfatfs_static -V > /dev/null 2>&1; then
|
||||||
|
echo "Use static version of mkexfatfs" >> ./log.txt
|
||||||
|
mv mkexfatfs mkexfatfs_shared
|
||||||
|
mv mkexfatfs_static mkexfatfs
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
cd ../../
|
cd ../../
|
||||||
chmod +x -R ./tool/$TOOLDIR
|
chmod +x -R ./tool/$TOOLDIR
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -4,7 +4,7 @@
|
|||||||
#
|
#
|
||||||
submenu "$VTLANG_CTRL_TEMP_SET" --class=debug_temp_set --class=F5tool {
|
submenu "$VTLANG_CTRL_TEMP_SET" --class=debug_temp_set --class=F5tool {
|
||||||
menuentry "[ $VTOY_WIN11_BYPASS_CHECK ] $VTLANG_WIN11_BYPASS_CHECK" --class=debug_temp_win11_bypass --class=debug_temp_set --class=F5tool \
|
menuentry "[ $VTOY_WIN11_BYPASS_CHECK ] $VTLANG_WIN11_BYPASS_CHECK" --class=debug_temp_win11_bypass --class=debug_temp_set --class=F5tool \
|
||||||
VTOY_RUN_SET0 {
|
VTOY_RUN_SET_0_0 {
|
||||||
if [ "$VTOY_WIN11_BYPASS_CHECK" = "0" ]; then
|
if [ "$VTOY_WIN11_BYPASS_CHECK" = "0" ]; then
|
||||||
set VTOY_WIN11_BYPASS_CHECK=1
|
set VTOY_WIN11_BYPASS_CHECK=1
|
||||||
else
|
else
|
||||||
@@ -13,7 +13,7 @@ submenu "$VTLANG_CTRL_TEMP_SET" --class=debug_temp_set --class=F5tool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
menuentry "[ $VTOY_WIN11_BYPASS_NRO ] $VTLANG_WIN11_BYPASS_NRO" --class=debug_temp_win11_nro --class=debug_temp_set --class=F5tool \
|
menuentry "[ $VTOY_WIN11_BYPASS_NRO ] $VTLANG_WIN11_BYPASS_NRO" --class=debug_temp_win11_nro --class=debug_temp_set --class=F5tool \
|
||||||
VTOY_RUN_SET1 {
|
VTOY_RUN_SET_1_0 {
|
||||||
if [ "$VTOY_WIN11_BYPASS_NRO" = "0" ]; then
|
if [ "$VTOY_WIN11_BYPASS_NRO" = "0" ]; then
|
||||||
set VTOY_WIN11_BYPASS_NRO=1
|
set VTOY_WIN11_BYPASS_NRO=1
|
||||||
else
|
else
|
||||||
@@ -22,7 +22,7 @@ submenu "$VTLANG_CTRL_TEMP_SET" --class=debug_temp_set --class=F5tool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
menuentry "[ $VTOY_SECONDARY_BOOT_MENU ] $VTLANG_SECONDARY_BOOT_MENU" --class=debug_temp_second_menu --class=debug_temp_set --class=F5tool \
|
menuentry "[ $VTOY_SECONDARY_BOOT_MENU ] $VTLANG_SECONDARY_BOOT_MENU" --class=debug_temp_second_menu --class=debug_temp_set --class=F5tool \
|
||||||
VTOY_RUN_SET3 {
|
VTOY_RUN_SET_2_0 {
|
||||||
if [ "$VTOY_SECONDARY_BOOT_MENU" = "0" ]; then
|
if [ "$VTOY_SECONDARY_BOOT_MENU" = "0" ]; then
|
||||||
set VTOY_SECONDARY_BOOT_MENU=1
|
set VTOY_SECONDARY_BOOT_MENU=1
|
||||||
else
|
else
|
||||||
@@ -36,6 +36,42 @@ submenu "$VTLANG_CTRL_TEMP_SET" --class=debug_temp_set --class=F5tool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if [ "$grub_platform" != "pc" ]; then
|
||||||
|
submenu "$VTLANG_WIN_UEFI_RES_LOCK" --class=debug_uefi_res_lock --class=F5tool {
|
||||||
|
set vtActive0="[ ]"
|
||||||
|
set vtActive1="[ ]"
|
||||||
|
set vtActive2="[ ]"
|
||||||
|
set vtActive3="[ ]"
|
||||||
|
if [ "$VTOY_WIN_UEFI_RES_LOCK" = "0" ]; then
|
||||||
|
set vtActive0="[*]"
|
||||||
|
elif [ "$VTOY_WIN_UEFI_RES_LOCK" = "1" ]; then
|
||||||
|
set vtActive1="[*]"
|
||||||
|
elif [ "$VTOY_WIN_UEFI_RES_LOCK" = "2" ]; then
|
||||||
|
set vtActive2="[*]"
|
||||||
|
elif [ "$VTOY_WIN_UEFI_RES_LOCK" = "3" ]; then
|
||||||
|
set vtActive3="[*]"
|
||||||
|
fi
|
||||||
|
|
||||||
|
menuentry "$vtActive0 $VTLANG_UEFI_RES_LOCK_NONE" --class=debug_uefi_res_lock0 --class=F5tool VTOY_RUN_SET_0_1 {
|
||||||
|
set VTOY_WIN_UEFI_RES_LOCK=0
|
||||||
|
}
|
||||||
|
menuentry "$vtActive1 $VTLANG_UEFI_RES_LOCK_MAX" --class=debug_uefi_res_lock1 --class=F5tool VTOY_RUN_SET_1_1 {
|
||||||
|
set VTOY_WIN_UEFI_RES_LOCK=1
|
||||||
|
}
|
||||||
|
menuentry "$vtActive2 $VTLANG_UEFI_RES_LOCK_1024_768" --class=debug_uefi_res_lock2 --class=F5tool VTOY_RUN_SET_2_1 {
|
||||||
|
set VTOY_WIN_UEFI_RES_LOCK=2
|
||||||
|
}
|
||||||
|
menuentry "$vtActive3 $VTLANG_UEFI_RES_LOCK_BE1024_768" --class=debug_uefi_res_lock3 --class=F5tool VTOY_RUN_SET_3_1 {
|
||||||
|
set VTOY_WIN_UEFI_RES_LOCK=3
|
||||||
|
}
|
||||||
|
|
||||||
|
menuentry "$VTLANG_RETURN_PREVIOUS" --class=vtoyret VTOY_RET {
|
||||||
|
echo "Return ..."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
submenu "$VTLANG_MENU_LANG" --class=debug_menu_lang --class=F5tool {
|
submenu "$VTLANG_MENU_LANG" --class=debug_menu_lang --class=F5tool {
|
||||||
source $prefix/menulang.cfg
|
source $prefix/menulang.cfg
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -70,6 +70,12 @@ function ventoy_acpi_param {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function vt_vcfg_pre_proc {
|
||||||
|
vt_img_sector "${vtoy_iso_part}${vt_chosen_path}"
|
||||||
|
vt_load_cpio $vtoy_path "${vt_chosen_path}" ${vtoy_iso_part} "busybox=$ventoy_busybox_ver"
|
||||||
|
vt_trailer_cpio $vtoy_iso_part "$vt_chosen_path"
|
||||||
|
}
|
||||||
|
|
||||||
function ventoy_vcfg_proc {
|
function ventoy_vcfg_proc {
|
||||||
if vt_check_custom_boot "${1}" vt_vcfg; then
|
if vt_check_custom_boot "${1}" vt_vcfg; then
|
||||||
set vtoy_chosen_path="${1}"
|
set vtoy_chosen_path="${1}"
|
||||||
@@ -422,6 +428,16 @@ function distro_specify_initrd_file_phase2 {
|
|||||||
vt_linux_specify_initrd_file /initramfs-linux.img
|
vt_linux_specify_initrd_file /initramfs-linux.img
|
||||||
elif [ -f (loop)/boot/isolinux/initrd.gz ]; then
|
elif [ -f (loop)/boot/isolinux/initrd.gz ]; then
|
||||||
vt_linux_specify_initrd_file /boot/isolinux/initrd.gz
|
vt_linux_specify_initrd_file /boot/isolinux/initrd.gz
|
||||||
|
elif vt_str_begin "$vt_volume_id" "AERYNOS"; then
|
||||||
|
vt_vcfg_pre_proc
|
||||||
|
|
||||||
|
loopback va "${vtoy_iso_part}${vt_chosen_path}"
|
||||||
|
loopback vb (va)/EFI/Boot/efiboot.img
|
||||||
|
|
||||||
|
set root=(vb)
|
||||||
|
vt_systemd_menu (vb) vt_sys_menu_mem vt_linux_initrd
|
||||||
|
configfile "mem:${vt_sys_menu_mem_addr}:size:${vt_sys_menu_mem_size}"
|
||||||
|
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -487,19 +503,19 @@ function ventoy_freebsd_proc {
|
|||||||
ventoy_get_truenas_ver "$1" "${chosen_path}"
|
ventoy_get_truenas_ver "$1" "${chosen_path}"
|
||||||
elif vt_strstr "$vt_volume_id" "FURYBSD"; then
|
elif vt_strstr "$vt_volume_id" "FURYBSD"; then
|
||||||
ventoy_get_furybsd_ver "$1" "${chosen_path}"
|
ventoy_get_furybsd_ver "$1" "${chosen_path}"
|
||||||
elif regexp --set 1:vtBsdVerNum "^(14|13|12|11|10|9)_[0-9]" "$vt_volume_id"; then
|
elif regexp --set 1:vtBsdVerNum "^(15|14|13|12|11|10|9)_[0-9]" "$vt_volume_id"; then
|
||||||
set vt_freebsd_ver=${vtBsdVerNum}.x
|
set vt_freebsd_ver=${vtBsdVerNum}.x
|
||||||
elif [ -d (loop)/usr/midnightbsd-dist ]; then
|
elif [ -d (loop)/usr/midnightbsd-dist ]; then
|
||||||
ventoy_get_midnightbsd_ver "$1" "${chosen_path}"
|
ventoy_get_midnightbsd_ver "$1" "${chosen_path}"
|
||||||
set vtFreeBsdDistro=MidnightBSD
|
set vtFreeBsdDistro=MidnightBSD
|
||||||
elif [ -e (loop)/bin/freebsd-version ]; then
|
elif [ -e (loop)/bin/freebsd-version ]; then
|
||||||
vt_unix_parse_freebsd_ver (loop)/bin/freebsd-version vt_userland_ver
|
vt_unix_parse_freebsd_ver (loop)/bin/freebsd-version vt_userland_ver
|
||||||
if regexp --set 1:vtBsdVerNum "\"(14|13|12|11|10|9)\.[0-9]-" "$vt_userland_ver"; then
|
if regexp --set 1:vtBsdVerNum "\"(15|14|13|12|11|10|9)\.[0-9]-" "$vt_userland_ver"; then
|
||||||
set vt_freebsd_ver=${vtBsdVerNum}.x
|
set vt_freebsd_ver=${vtBsdVerNum}.x
|
||||||
fi
|
fi
|
||||||
elif [ -e (loop)/README.TXT ]; then
|
elif [ -e (loop)/README.TXT ]; then
|
||||||
vt_1st_line (loop)/README.TXT vt_freebsd_line1
|
vt_1st_line (loop)/README.TXT vt_freebsd_line1
|
||||||
if regexp --set 1:vtBsdVerNum "FreeBSD (14|13|12|11|10|9)\.[0-9]-" "$vt_freebsd_line1"; then
|
if regexp --set 1:vtBsdVerNum "FreeBSD (15|14|13|12|11|10|9)\.[0-9]-" "$vt_freebsd_line1"; then
|
||||||
set vt_freebsd_ver=${vtBsdVerNum}.x
|
set vt_freebsd_ver=${vtBsdVerNum}.x
|
||||||
fi
|
fi
|
||||||
elif vt_strstr "${chosen_path}" "MidnightBSD"; then
|
elif vt_strstr "${chosen_path}" "MidnightBSD"; then
|
||||||
@@ -1428,7 +1444,7 @@ function ventoy_iso_busybox_ver {
|
|||||||
|
|
||||||
#special process for deepin-live iso
|
#special process for deepin-live iso
|
||||||
if [ "$vt_chosen_size" = "403701760" ]; then
|
if [ "$vt_chosen_size" = "403701760" ]; then
|
||||||
if vt_str_str "$vt_chosen_path" "/deepin-live"; then
|
if vt_strstr "$vt_chosen_path" "/deepin-live"; then
|
||||||
set ventoy_busybox_ver=64
|
set ventoy_busybox_ver=64
|
||||||
fi
|
fi
|
||||||
elif vt_str_begin "$vt_volume_id" "PHOTON_"; then
|
elif vt_str_begin "$vt_volume_id" "PHOTON_"; then
|
||||||
@@ -1439,6 +1455,8 @@ function ventoy_iso_busybox_ver {
|
|||||||
set ventoy_busybox_ver=64
|
set ventoy_busybox_ver=64
|
||||||
elif vt_str_begin "$vt_volume_id" "KAOS_"; then
|
elif vt_str_begin "$vt_volume_id" "KAOS_"; then
|
||||||
set ventoy_busybox_ver=64
|
set ventoy_busybox_ver=64
|
||||||
|
elif vt_strstr "$vt_volume_id" "x86_64"; then
|
||||||
|
set ventoy_busybox_ver=64
|
||||||
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
@@ -2431,7 +2449,7 @@ function mimg_common_menuentry {
|
|||||||
#############################################################
|
#############################################################
|
||||||
#############################################################
|
#############################################################
|
||||||
|
|
||||||
set VENTOY_VERSION="1.1.06"
|
set VENTOY_VERSION="1.1.12"
|
||||||
|
|
||||||
#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
|
||||||
|
|||||||
19
INSTALL/grub/help/fa_IR.txt
Normal file
19
INSTALL/grub/help/fa_IR.txt
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
L - انتخاب زبان
|
||||||
|
F1 - نمایش راهنما
|
||||||
|
F2 - مرور و بوت کردن فایلها در دیسک محلی
|
||||||
|
F3 - تغییر حالت منو بین درختی <-> لیستی
|
||||||
|
F4 - بوت کردن ویندوز/لینوکس روی دیسک محلی
|
||||||
|
F5 - ابزار های کمکی
|
||||||
|
F6 - بارگیری منوی سفارشی Grub2
|
||||||
|
F7 - تغییر حالت بین حالت GUI <-> حالت TEXT
|
||||||
|
|
||||||
|
m/Ctrl+m - اعتبارسنجی فایل ایمیج (md5/sha1/sha256/sha512)
|
||||||
|
d/Ctrl+d - حالت Memdisk (فقط برای ایمیج های کوچک WinPE/LiveCD ISO/IMG)
|
||||||
|
w/Ctrl+w - حالت WIMBOOT (فقط برای فایل های ایزو Windows/WinPE)
|
||||||
|
r/Ctrl+r - حالت Grub2 (فقط برای برخی از توزیع های لینوکس)
|
||||||
|
i/Ctrl+i - حالت سازگار (فقط برای مشکل زدایی)
|
||||||
|
u/Ctrl+u - بارگیری درایور ISO EFI (تنها برای مشکل زدایی، نمیتوان به صورت رسمی استفاده کرد)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
جهت بازگشت دکمه ESC را کلیک کنید ......
|
||||||
@@ -7,10 +7,10 @@ F5 - 유틸리티
|
|||||||
F6 - 사용자 지정 Grub2 메뉴 불러오기
|
F6 - 사용자 지정 Grub2 메뉴 불러오기
|
||||||
F7 - 그래픽 모드 <-> 텍스트 모드 간에 전환
|
F7 - 그래픽 모드 <-> 텍스트 모드 간에 전환
|
||||||
|
|
||||||
m/Ctrl+m - 체크섬 이미지 파일 (md5/sha1/sha256/sha512)
|
m/Ctrl+m - 이미지 파일 체크섬 (md5/sha1/sha256/sha512)
|
||||||
d/Ctrl+d - Memdisk 모드 (작은 WinPE/LiveCD ISO/IMG 전용)
|
d/Ctrl+d - Memdisk 모드 (작은 WinPE/LiveCD ISO/IMG에만 해당)
|
||||||
w/Ctrl+w - WIMBOOT 모드 (표준 Windows/WinPE ISO 전용)
|
w/Ctrl+w - WIMBOOT 모드 (표준 Windows/WinPE ISO에만 해당)
|
||||||
r/Ctrl+r - Grub2 모드 (일부 Linux 배포판에만 해당)
|
r/Ctrl+r - Grub2 모드 (일반 Linux 배포판에만 해당)
|
||||||
i/Ctrl+i - 호환 모드 (디버그 전용, 공식적으로 사용할 수 없음)
|
i/Ctrl+i - 호환 모드 (디버그 전용, 공식적으로 사용할 수 없음)
|
||||||
u/Ctrl+u - ISO EFI 드라이버 불러오기 (디버그 전용, 공식적으로 사용할 수 없음)
|
u/Ctrl+u - ISO EFI 드라이버 불러오기 (디버그 전용, 공식적으로 사용할 수 없음)
|
||||||
|
|
||||||
|
|||||||
19
INSTALL/grub/help/lg_UG.txt
Normal file
19
INSTALL/grub/help/lg_UG.txt
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
L - Londako Olulimi
|
||||||
|
F1 - Laga obuyambi
|
||||||
|
F2 - Nnoonya era kozesa Fayiro eziri ku Disk
|
||||||
|
F3 - Kyusa endabika ya Menu wakati wa Masaasana (Treeview) ne y'olukalala (ListView)
|
||||||
|
F4 - Ttandika Windows/Linux ku disk erimu
|
||||||
|
F5 - Ebikozesebwa ebirala
|
||||||
|
F6 - Kozesa Grub2 menu gyewerobozza
|
||||||
|
F7 - Okukyuusa okuva mu Bifaananyi (GUI Mode) <-> Bigambo (TEXT Mode)
|
||||||
|
|
||||||
|
m/Ctrl+m - Okukebera Checksum image files (md5/sha1/sha256/sha512)
|
||||||
|
d/Ctrl+d - Memdisk Mode (Ya WinPE/LiveCD ISO/IMG entono zokka)
|
||||||
|
w/Ctrl+w - WIMBOOT Mode (Ya Windows/WinPE ISO zokka)
|
||||||
|
r/Ctrl+r - Grub2 Mode (Ya nkola za Linux ezimu)
|
||||||
|
i/Ctrl+i - Compatible Mode (Ya kutereeza kwokka (debugging))
|
||||||
|
u/Ctrl+u - Kozesa ISO EFI driver (Ya kutereeza kwokka (debugging), tesobola kukozesebwa mu butongole)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
nyiga ESC to okudda emabega ......
|
||||||
@@ -1,18 +1,18 @@
|
|||||||
L - Sele<EFBFBD><EFBFBD>o de Idiomas
|
L - Seleção de Idiomas
|
||||||
F1 - Exibir informa<EFBFBD><EFBFBD>es de ajuda
|
F1 - Exibir informações de ajuda
|
||||||
F2 - Explorar e inicializar os arquivos no disco local
|
F2 - Explorar e inicializar os arquivos no disco local
|
||||||
F3 - Trocar o modo do menu entre Visualiza<EFBFBD><EFBFBD>o em <EFBFBD>rvore <-> Visualiza<EFBFBD><EFBFBD>o em Lista
|
F3 - Trocar o modo do menu entre Visualização em Árvore <-> Visualização em Lista
|
||||||
F4 - Inicializar o Windows/Linux no disco local
|
F4 - Inicializar o Windows/Linux no disco local
|
||||||
F5 - Utilit<EFBFBD>rios
|
F5 - Utilitários
|
||||||
F6 - Carregar o Menu Personalizado do Grub2
|
F6 - Carregar o Menu Personalizado do Grub2
|
||||||
F7 - Trocar entre o Modo GUI <-> Modo TEXTO
|
F7 - Trocar entre o Modo GUI <-> Modo TEXTO
|
||||||
|
|
||||||
m/Ctrl+m - Checksum dos arquivos de imagem (md5/sha1/sha256/sha512)
|
m/Ctrl+m - Checksum dos arquivos de imagem (md5/sha1/sha256/sha512)
|
||||||
d/Ctrl+d - Modo Memdisk (S<EFBFBD> pros pequenos WinPE/LiveCD ISO/IMG)
|
d/Ctrl+d - Modo Memdisk (Só pros pequenos WinPE/LiveCD ISO/IMG)
|
||||||
w/Ctrl+w - Modo WIMBOOT (S<EFBFBD> pra arquivos ISO do Windows/WinPE)
|
w/Ctrl+w - Modo WIMBOOT (Só pra arquivos ISO do Windows/WinPE)
|
||||||
r/Ctrl+r - Modo Grub2 (S<EFBFBD> pra algumas distros do Linux)
|
r/Ctrl+r - Modo Grub2 (Só pra algumas distros do Linux)
|
||||||
i/Ctrl+i - Modo Compat<EFBFBD>vel (S<EFBFBD> pra debugging)
|
i/Ctrl+i - Modo Compatível (Só pra debugging)
|
||||||
u/Ctrl+u - Carregar o driver EFI da ISO (S<EFBFBD> pra debugging, n<EFBFBD>o pode ser usado oficialmente)
|
u/Ctrl+u - Carregar o driver EFI da ISO (Só pra debugging, não pode ser usado oficialmente)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
19
INSTALL/grub/help/sl_SI.txt
Normal file
19
INSTALL/grub/help/sl_SI.txt
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
L - Izbira jezika
|
||||||
|
F1 - Prikaz informacij o pomoči
|
||||||
|
F2 - Brskanje in zagon datotek na lokalnem disku
|
||||||
|
F3 - Preklop med načinom menija Treeview <-> ListView
|
||||||
|
F4 - Zagon Windows/Linux na lokalnem disku
|
||||||
|
F5 - Pripomočki
|
||||||
|
F6 - Naložitev prilagojenega menija Grub2
|
||||||
|
F7 - Preklop med načinom GUI <-> načinom TEXT
|
||||||
|
|
||||||
|
m/Ctrl+m - Preveri kontrolno vsoto slikovnih datotek (md5/sha1/sha256/sha512)
|
||||||
|
d/Ctrl+d - Način Memdisk (samo za majhne WinPE/LiveCD ISO/IMG)
|
||||||
|
w/Ctrl+w - Način WIMBOOT (samo za datoteke Windows/WinPE ISO)
|
||||||
|
r/Ctrl+r – Način Grub2 (samo za nekatere distribucije Linux)
|
||||||
|
i/Ctrl+i – Združljiv način (samo za odpravljanje napak)
|
||||||
|
u/Ctrl+u – Naloži ISO EFI gonilnik (samo za odpravljanje napak, uradno se ne more uporabljati)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Pritisnite ESC za vrnitev ......
|
||||||
@@ -40,17 +40,17 @@ menuentry "$VTLANG_HWINFO" --class=debug_hwinfo --class=F5tool {
|
|||||||
echo "Physical RAM $grub_total_ram MB"
|
echo "Physical RAM $grub_total_ram MB"
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "Manufacture $system_vendor"
|
echo "Manufacturer $system_vendor"
|
||||||
echo "Product Name $system_product"
|
echo "Product Name $system_product"
|
||||||
echo "Version $system_version"
|
echo "Version $system_version"
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "Board Manufacture $board_vendor"
|
echo "Board Manufacturer $board_vendor"
|
||||||
echo "Board Name $board_product"
|
echo "Board Name $board_product"
|
||||||
echo "Board Version $board_version"
|
echo "Board Version $board_version"
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "BIOS Manufacture $bios_vendor"
|
echo "BIOS Manufacturer $bios_vendor"
|
||||||
echo "BIOS Version $bios_ver"
|
echo "BIOS Version $bios_ver"
|
||||||
echo "BIOS Date $bios_date"
|
echo "BIOS Date $bios_date"
|
||||||
echo "BIOS ROM Size $bios_size"
|
echo "BIOS ROM Size $bios_size"
|
||||||
|
|||||||
@@ -88,6 +88,11 @@
|
|||||||
"VTLANG_WIN11_BYPASS_NRO": "تجاوز متطلبات الحساب عبر الإنترنت عند تثبيت Windows 11",
|
"VTLANG_WIN11_BYPASS_NRO": "تجاوز متطلبات الحساب عبر الإنترنت عند تثبيت Windows 11",
|
||||||
"VTLANG_LINUX_REMOUNT": "ضم قسم Ventoy بعد إقلاع Linux",
|
"VTLANG_LINUX_REMOUNT": "ضم قسم Ventoy بعد إقلاع Linux",
|
||||||
"VTLANG_SECONDARY_BOOT_MENU": "اظهر قائمة الإقلاع الثانوية",
|
"VTLANG_SECONDARY_BOOT_MENU": "اظهر قائمة الإقلاع الثانوية",
|
||||||
|
"VTLANG_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_NONE": "None",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_1024_768": "Fixed 1024 x 768",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
|
||||||
|
|
||||||
"MENU_STR_XXX": ""
|
"MENU_STR_XXX": ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -88,6 +88,12 @@
|
|||||||
"VTLANG_WIN11_BYPASS_NRO": "Windows 11 ইনস্টল করার সময় অনলাইন অ্যাকাউন্টের প্রয়োজন বাইপাস করুন",
|
"VTLANG_WIN11_BYPASS_NRO": "Windows 11 ইনস্টল করার সময় অনলাইন অ্যাকাউন্টের প্রয়োজন বাইপাস করুন",
|
||||||
"VTLANG_LINUX_REMOUNT": "লিনাক্স বুটের পরে ভেন্টয় পার্টিশনটি মাউন্ট করুন",
|
"VTLANG_LINUX_REMOUNT": "লিনাক্স বুটের পরে ভেন্টয় পার্টিশনটি মাউন্ট করুন",
|
||||||
"VTLANG_SECONDARY_BOOT_MENU": "গৌণ বুট মেনু দেখান",
|
"VTLANG_SECONDARY_BOOT_MENU": "গৌণ বুট মেনু দেখান",
|
||||||
|
"VTLANG_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_NONE": "None",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_1024_768": "Fixed 1024 x 768",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
|
||||||
|
|
||||||
|
|
||||||
"MENU_STR_XXX": ""
|
"MENU_STR_XXX": ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -88,6 +88,12 @@
|
|||||||
"VTLANG_WIN11_BYPASS_NRO": "Obejít požadování online účtu při instalaci Windows 11",
|
"VTLANG_WIN11_BYPASS_NRO": "Obejít požadování online účtu při instalaci Windows 11",
|
||||||
"VTLANG_LINUX_REMOUNT": "Připojit Ventoy oddíl po spuštění Linuxu",
|
"VTLANG_LINUX_REMOUNT": "Připojit Ventoy oddíl po spuštění Linuxu",
|
||||||
"VTLANG_SECONDARY_BOOT_MENU": "Zobrazit druhou spouštěcí nabídku",
|
"VTLANG_SECONDARY_BOOT_MENU": "Zobrazit druhou spouštěcí nabídku",
|
||||||
|
"VTLANG_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_NONE": "None",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_1024_768": "Fixed 1024 x 768",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
|
||||||
|
|
||||||
|
|
||||||
"MENU_STR_XXX": ""
|
"MENU_STR_XXX": ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -88,6 +88,12 @@
|
|||||||
"VTLANG_WIN11_BYPASS_NRO": "Umgehen Sie die Online-Kontoanforderung bei der Installation von Windows 11",
|
"VTLANG_WIN11_BYPASS_NRO": "Umgehen Sie die Online-Kontoanforderung bei der Installation von Windows 11",
|
||||||
"VTLANG_LINUX_REMOUNT": "Mounten Sie die Ventoy-Partition nach dem Booten von Linux",
|
"VTLANG_LINUX_REMOUNT": "Mounten Sie die Ventoy-Partition nach dem Booten von Linux",
|
||||||
"VTLANG_SECONDARY_BOOT_MENU": "Sekundäres Bootmenü anzeigen",
|
"VTLANG_SECONDARY_BOOT_MENU": "Sekundäres Bootmenü anzeigen",
|
||||||
|
"VTLANG_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_NONE": "None",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_1024_768": "Fixed 1024 x 768",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
|
||||||
|
|
||||||
|
|
||||||
"MENU_STR_XXX": ""
|
"MENU_STR_XXX": ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -88,6 +88,12 @@
|
|||||||
"VTLANG_WIN11_BYPASS_NRO": "Παράκαμψη της απαίτησης online λογαριασμού κατά την εγκατάσταση των Windows 11",
|
"VTLANG_WIN11_BYPASS_NRO": "Παράκαμψη της απαίτησης online λογαριασμού κατά την εγκατάσταση των Windows 11",
|
||||||
"VTLANG_LINUX_REMOUNT": "Προσάρτηση διαμερίσματος Ventoy μετά την εκκίνηση του Linux",
|
"VTLANG_LINUX_REMOUNT": "Προσάρτηση διαμερίσματος Ventoy μετά την εκκίνηση του Linux",
|
||||||
"VTLANG_SECONDARY_BOOT_MENU": "Εμφάνιση δευτερεύοντος μενού εκκίνησης",
|
"VTLANG_SECONDARY_BOOT_MENU": "Εμφάνιση δευτερεύοντος μενού εκκίνησης",
|
||||||
|
"VTLANG_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_NONE": "None",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_1024_768": "Fixed 1024 x 768",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
|
||||||
|
|
||||||
|
|
||||||
"MENU_STR_XXX": ""
|
"MENU_STR_XXX": ""
|
||||||
}
|
}
|
||||||
@@ -88,6 +88,11 @@
|
|||||||
"VTLANG_WIN11_BYPASS_NRO": "Bypass online account requirement when install Windows 11",
|
"VTLANG_WIN11_BYPASS_NRO": "Bypass online account requirement when install Windows 11",
|
||||||
"VTLANG_LINUX_REMOUNT": "Mount Ventoy partition after boot Linux",
|
"VTLANG_LINUX_REMOUNT": "Mount Ventoy partition after boot Linux",
|
||||||
"VTLANG_SECONDARY_BOOT_MENU": "Show secondary boot menu",
|
"VTLANG_SECONDARY_BOOT_MENU": "Show secondary boot menu",
|
||||||
|
"VTLANG_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_NONE": "None",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_1024_768": "Fixed 1024 x 768",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
|
||||||
|
|
||||||
"MENU_STR_XXX": ""
|
"MENU_STR_XXX": ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -88,6 +88,12 @@
|
|||||||
"VTLANG_WIN11_BYPASS_NRO": "Saltar requerimiento de cuenta en linea al instalar Windows 11",
|
"VTLANG_WIN11_BYPASS_NRO": "Saltar requerimiento de cuenta en linea al instalar Windows 11",
|
||||||
"VTLANG_LINUX_REMOUNT": "Montar partición de Ventoy después de arrancar Linux",
|
"VTLANG_LINUX_REMOUNT": "Montar partición de Ventoy después de arrancar Linux",
|
||||||
"VTLANG_SECONDARY_BOOT_MENU": "Mostrar menú de arranque secundario",
|
"VTLANG_SECONDARY_BOOT_MENU": "Mostrar menú de arranque secundario",
|
||||||
|
"VTLANG_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_NONE": "None",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_1024_768": "Fixed 1024 x 768",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
|
||||||
|
|
||||||
|
|
||||||
"MENU_STR_XXX": ""
|
"MENU_STR_XXX": ""
|
||||||
}
|
}
|
||||||
|
|||||||
99
INSTALL/grub/menu/fa_IR.json
Normal file
99
INSTALL/grub/menu/fa_IR.json
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
{
|
||||||
|
"VTLANG_LANGUAGE_NAME": "Persian (فارسی)",
|
||||||
|
|
||||||
|
"VTLANG_STR_HOTKEY_LIST": "L:زبان F1:راهنما F2:مرور F3:نمای لیستی F4:بوت محلی F5:ابزار F6:بازگشت",
|
||||||
|
"VTLANG_STR_HOTKEY_TREE": "L:زبان F1:راهنما F2:مرور F3:نمای درختی F4:بوت محلی F5:ابزار F6:بازگشت",
|
||||||
|
"VTLANG_RETURN_PREVIOUS": "بازگشت به منوی قبلی [Esc]",
|
||||||
|
"VTLANG_RETURN_PRV_NOESC": "بازگشت به منوی قبلی",
|
||||||
|
|
||||||
|
"VTLANG_MENU_LANG": "منوی انتخاب زبان",
|
||||||
|
|
||||||
|
"VTLANG_LB_SBOOT_WINDOWS": "جستجو و بوت ویندوز",
|
||||||
|
"VTLANG_LB_SBOOT_G4D": "جستجو و بوت Grub4dos",
|
||||||
|
"VTLANG_LB_SBOOT_HDD1": "بوت اولین دیسک محلی",
|
||||||
|
"VTLANG_LB_SBOOT_HDD2": "بوت دومین دیسک محلی",
|
||||||
|
"VTLANG_LB_SBOOT_HDD3": "بوت سومین دیسک محلی",
|
||||||
|
"VTLANG_LB_SBOOT_X64EFI": "جستجو و بوت BOOTX64.EFI",
|
||||||
|
"VTLANG_LB_SBOOT_IA32EFI": "جستجو و بوت BOOTIA32.EFI",
|
||||||
|
"VTLANG_LB_SBOOT_AA64EFI": "جستجو و بوت BOOTAA64.EFI",
|
||||||
|
"VTLANG_LB_SBOOT_XORBOOT": "جستجو و بوت xorboot",
|
||||||
|
|
||||||
|
"VTLANG_FILE_CHKSUM": "اعتبارسنجی فایل",
|
||||||
|
"VTLANG_CHKSUM_MD5_CALC": "محاسبه md5sum",
|
||||||
|
"VTLANG_CHKSUM_SHA1_CALC": "محاسبه sha1sum",
|
||||||
|
"VTLANG_CHKSUM_SHA256_CALC": "محاسبه sha256sum",
|
||||||
|
"VTLANG_CHKSUM_SHA512_CALC": "محاسبه sha512sum",
|
||||||
|
"VTLANG_CHKSUM_MD5_CALC_CHK": "محاسبه و بررسی md5sum",
|
||||||
|
"VTLANG_CHKSUM_SHA1_CALC_CHK": "محاسبه و بررسی sha1sum",
|
||||||
|
"VTLANG_CHKSUM_SHA256_CALC_CHK": "محاسبه و بررسی sha256sum",
|
||||||
|
"VTLANG_CHKSUM_SHA512_CALC_CHK": "محاسبه و بررسی sha512sum",
|
||||||
|
|
||||||
|
"VTLANG_POWER": "انرژی",
|
||||||
|
"VTLANG_POWER_REBOOT": "ریبوت",
|
||||||
|
"VTLANG_POWER_HALT": "توقف",
|
||||||
|
"VTLANG_POWER_BOOT_EFIFW": "ریبوت به تنظیمات EFI",
|
||||||
|
|
||||||
|
"VTLANG_KEYBRD_LAYOUT": "نمایه صفحه کلید",
|
||||||
|
"VTLANG_HWINFO": "اطلاعات سخت افزار",
|
||||||
|
|
||||||
|
"VTLANG_RESOLUTION_CFG": "پیکربندی رزولوشن",
|
||||||
|
"VTLANG_SCREEN_MODE": "حالت نمایش صفحه",
|
||||||
|
"VTLANG_SCREEN_TEXT_MODE": "حالت متنی اجباری",
|
||||||
|
"VTLANG_SCREEN_GUI_MODE": "حالت گرافیکی اجباری",
|
||||||
|
|
||||||
|
"VTLANG_THEME_SELECT": "انتخاب تم",
|
||||||
|
|
||||||
|
"VTLANG_UEFI_UTIL": "ابزار های کمکی Ventoy UEFI",
|
||||||
|
"VTLANG_UTIL_SHOW_EFI_DRV": "نمایش درایور های EFI",
|
||||||
|
"VTLANG_UTIL_FIX_BLINIT_FAIL": "رفع خطای Windows BlinitializeLibrary",
|
||||||
|
|
||||||
|
"VTLANG_JSON_CHK_JSON": "بررسی پیکربندی json افزونه (ventoy.json)",
|
||||||
|
"VTLANG_JSON_CHK_CONTROL": "بررسی پیکربندی افزونه کنترل سراسری",
|
||||||
|
"VTLANG_JSON_CHK_THEME": "بررسی پیکربندی افزونه قالب",
|
||||||
|
"VTLANG_JSON_CHK_AUTOINS": "بررسی پیکربندی افزونه نصب خودکار",
|
||||||
|
"VTLANG_JSON_CHK_PERSIST": "بررسی پیکربندی افزونهی تداوم",
|
||||||
|
"VTLANG_JSON_CHK_MENU_ALIAS": "بررسی پیکربندی افزونه نام مستعار منو",
|
||||||
|
"VTLANG_JSON_CHK_MENU_TIP": "بررسی پیکربندی افزونه نکته منو",
|
||||||
|
"VTLANG_JSON_CHK_MENU_CLASS": "بررسی پیکربندی افزونه کلاس منو",
|
||||||
|
"VTLANG_JSON_CHK_INJECTION": "بررسی پیکربندی افزونه تزریق",
|
||||||
|
"VTLANG_JSON_CHK_AUTO_MEMDISK": "بررسی پیکربندی افزونه memdisk خودکار",
|
||||||
|
"VTLANG_JSON_CHK_IMG_LIST": "بررسی پیکربندی افزونه لیست ایمیج ها",
|
||||||
|
"VTLANG_JSON_CHK_IMG_BLIST": "بررسی پیکربندی افزونه لیست سیاه ایمیج",
|
||||||
|
"VTLANG_JSON_CHK_CONF_REPLACE": "بررسی پیکربندی افزونه جایگزینی فایل پیکربندی بوت",
|
||||||
|
"VTLANG_JSON_CHK_DUD": "بررسی پیکربندی افزونه dud",
|
||||||
|
"VTLANG_JSON_CHK_PASSWORD": "بررسی پیکربندی افزونه کلمه عبور",
|
||||||
|
|
||||||
|
"VTLANG_NORMAL_MODE": "بوت در حالت عادی",
|
||||||
|
"VTLANG_WIMBOOT_MODE": "بوت در حالت wimboot",
|
||||||
|
"VTLANG_GRUB2_MODE": "بوت در حالت grub2",
|
||||||
|
"VTLANG_MEMDISK_MODE": "بوت در حالت memdisk",
|
||||||
|
|
||||||
|
"VTLANG_RET_TO_LISTVIEW": "بازگشت به نمای لیستی",
|
||||||
|
"VTLANG_RET_TO_TREEVIEW": "بازگشت به نمای درختی",
|
||||||
|
|
||||||
|
"VTLANG_NO_AUTOINS_SCRIPT": "بوت بدون قالب نصب خودکار",
|
||||||
|
"VTLANG_AUTOINS_USE": "بوت با",
|
||||||
|
|
||||||
|
"VTLANG_NO_PERSIST": "بوت بدون تداوم",
|
||||||
|
"VTLANG_PERSIST_USE": "بوت با",
|
||||||
|
|
||||||
|
"VTLANG_BROWER_RETURN": "بازگشت",
|
||||||
|
|
||||||
|
"VTLANG_ENTER_EXIT": "جهت خروج دکمه Enter را فشار دهید",
|
||||||
|
"VTLANG_ENTER_REBOOT": "جهت ریبوت دکمه Enter را فشار دهید",
|
||||||
|
"VTLANG_ENTER_CONTINUE": "جهت ادامه دکمه Enter را فشار دهید",
|
||||||
|
|
||||||
|
"VTLANG_CTRL_TEMP_SET": "تنظیمات کنترل موقت",
|
||||||
|
"VTLANG_WIN11_BYPASS_CHECK": "دور زدن بررسی CPU/TPM/SecureBoot در هنگام نصب ویندوز 11",
|
||||||
|
"VTLANG_WIN11_BYPASS_NRO": "دور زدن نیاز به حساب کاربری آنلاین هنگام نصب ویندوز 11",
|
||||||
|
"VTLANG_LINUX_REMOUNT": "اتصال پارتیشن Ventoy بعد از بوت لینوکس",
|
||||||
|
"VTLANG_SECONDARY_BOOT_MENU": "نمایش منوی بوت ثانویه",
|
||||||
|
"VTLANG_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_NONE": "None",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_1024_768": "Fixed 1024 x 768",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
|
||||||
|
|
||||||
|
|
||||||
|
"MENU_STR_XXX": ""
|
||||||
|
}
|
||||||
@@ -88,6 +88,12 @@
|
|||||||
"VTLANG_WIN11_BYPASS_NRO": "Contourner l'exigence de compte en ligne lors de l'installation de Windows 11",
|
"VTLANG_WIN11_BYPASS_NRO": "Contourner l'exigence de compte en ligne lors de l'installation de Windows 11",
|
||||||
"VTLANG_LINUX_REMOUNT": "Monter la partition Ventoy après le démarrage de Linux",
|
"VTLANG_LINUX_REMOUNT": "Monter la partition Ventoy après le démarrage de Linux",
|
||||||
"VTLANG_SECONDARY_BOOT_MENU": "Afficher le menu de démarrage secondaire",
|
"VTLANG_SECONDARY_BOOT_MENU": "Afficher le menu de démarrage secondaire",
|
||||||
|
"VTLANG_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_NONE": "None",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_1024_768": "Fixed 1024 x 768",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
|
||||||
|
|
||||||
|
|
||||||
"MENU_STR_XXX": ""
|
"MENU_STR_XXX": ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -88,6 +88,12 @@
|
|||||||
"VTLANG_WIN11_BYPASS_NRO": "विंडोज 11 स्थापित करते समय ऑनलाइन खाते की आवश्यकता बाईपास",
|
"VTLANG_WIN11_BYPASS_NRO": "विंडोज 11 स्थापित करते समय ऑनलाइन खाते की आवश्यकता बाईपास",
|
||||||
"VTLANG_LINUX_REMOUNT": "लिनक्स बूट के बाद वेंटॉय विभाजन को माउंट करें",
|
"VTLANG_LINUX_REMOUNT": "लिनक्स बूट के बाद वेंटॉय विभाजन को माउंट करें",
|
||||||
"VTLANG_SECONDARY_BOOT_MENU": "द्वितीयक बूट मेनू दिखाएं",
|
"VTLANG_SECONDARY_BOOT_MENU": "द्वितीयक बूट मेनू दिखाएं",
|
||||||
|
"VTLANG_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_NONE": "None",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_1024_768": "Fixed 1024 x 768",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
|
||||||
|
|
||||||
|
|
||||||
"MENU_STR_XXX": ""
|
"MENU_STR_XXX": ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -88,6 +88,12 @@
|
|||||||
"VTLANG_WIN11_BYPASS_NRO": "Bypass online account requirement when install Windows 11",
|
"VTLANG_WIN11_BYPASS_NRO": "Bypass online account requirement when install Windows 11",
|
||||||
"VTLANG_LINUX_REMOUNT": "Mount Ventoy partition after boot Linux",
|
"VTLANG_LINUX_REMOUNT": "Mount Ventoy partition after boot Linux",
|
||||||
"VTLANG_SECONDARY_BOOT_MENU": "Show secondary boot menu",
|
"VTLANG_SECONDARY_BOOT_MENU": "Show secondary boot menu",
|
||||||
|
"VTLANG_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_NONE": "None",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_1024_768": "Fixed 1024 x 768",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
|
||||||
|
|
||||||
|
|
||||||
"MENU_STR_XXX": ""
|
"MENU_STR_XXX": ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -88,6 +88,12 @@
|
|||||||
"VTLANG_WIN11_BYPASS_NRO": "Internetes fiók követelményének megkerülése Windows 11 telepítésekor",
|
"VTLANG_WIN11_BYPASS_NRO": "Internetes fiók követelményének megkerülése Windows 11 telepítésekor",
|
||||||
"VTLANG_LINUX_REMOUNT": "Ventoy partíció csatolása a Linux indítása után",
|
"VTLANG_LINUX_REMOUNT": "Ventoy partíció csatolása a Linux indítása után",
|
||||||
"VTLANG_SECONDARY_BOOT_MENU": "Másodlagos indítási menü megjelenítése",
|
"VTLANG_SECONDARY_BOOT_MENU": "Másodlagos indítási menü megjelenítése",
|
||||||
|
"VTLANG_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_NONE": "None",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_1024_768": "Fixed 1024 x 768",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
|
||||||
|
|
||||||
|
|
||||||
"MENU_STR_XXX": ""
|
"MENU_STR_XXX": ""
|
||||||
}
|
}
|
||||||
@@ -43,7 +43,7 @@
|
|||||||
|
|
||||||
"VTLANG_THEME_SELECT": "Pilih Tema",
|
"VTLANG_THEME_SELECT": "Pilih Tema",
|
||||||
|
|
||||||
"VTLANG_UEFI_UTIL": "Ventoy UEFI Utilities",
|
"VTLANG_UEFI_UTIL": "Utilitas UEFI Ventoy",
|
||||||
"VTLANG_UTIL_SHOW_EFI_DRV": "Tampilkan Driver EFI",
|
"VTLANG_UTIL_SHOW_EFI_DRV": "Tampilkan Driver EFI",
|
||||||
"VTLANG_UTIL_FIX_BLINIT_FAIL": "Memperbaiki Kegagalan Windows BlinitializeLibrary",
|
"VTLANG_UTIL_FIX_BLINIT_FAIL": "Memperbaiki Kegagalan Windows BlinitializeLibrary",
|
||||||
|
|
||||||
@@ -80,14 +80,20 @@
|
|||||||
"VTLANG_BROWER_RETURN": "Kembali",
|
"VTLANG_BROWER_RETURN": "Kembali",
|
||||||
|
|
||||||
"VTLANG_ENTER_EXIT": "tekan tombol Enter untuk keluar",
|
"VTLANG_ENTER_EXIT": "tekan tombol Enter untuk keluar",
|
||||||
"VTLANG_ENTER_REBOOT": "tekan tombol Enter untuk reboot",
|
"VTLANG_ENTER_REBOOT": "tekan tombol Enter untuk memulai ulang",
|
||||||
"VTLANG_ENTER_CONTINUE": "tekan tombol Enter untuk melanjutkan",
|
"VTLANG_ENTER_CONTINUE": "tekan tombol Enter untuk melanjutkan",
|
||||||
|
|
||||||
"VTLANG_CTRL_TEMP_SET": "Temporary Control Settings",
|
"VTLANG_CTRL_TEMP_SET": "Pengaturan Kontrol Sementara",
|
||||||
"VTLANG_WIN11_BYPASS_CHECK": "Bypass CPU/TPM/SecureBoot check when install Windows 11",
|
"VTLANG_WIN11_BYPASS_CHECK": "Melewati pemeriksaaan CPU/TPM/SecureBoot ketika memasang Windows 11",
|
||||||
"VTLANG_WIN11_BYPASS_NRO": "Bypass online account requirement when install Windows 11",
|
"VTLANG_WIN11_BYPASS_NRO": "Melewati persyaratan akun online ketika memasang Windows 11",
|
||||||
"VTLANG_LINUX_REMOUNT": "Mount Ventoy partition after boot Linux",
|
"VTLANG_LINUX_REMOUNT": "Memuat partisi Ventoy setelah boot ke Linux",
|
||||||
"VTLANG_SECONDARY_BOOT_MENU": "Show secondary boot menu",
|
"VTLANG_SECONDARY_BOOT_MENU": "Tampilkan menu boot sekunder",
|
||||||
|
"VTLANG_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_NONE": "None",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_1024_768": "Fixed 1024 x 768",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
|
||||||
|
|
||||||
|
|
||||||
"MENU_STR_XXX": ""
|
"MENU_STR_XXX": ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -88,6 +88,12 @@
|
|||||||
"VTLANG_WIN11_BYPASS_NRO": "Durante l'installazione di Windows 11 bypassa il requisito di un account online ",
|
"VTLANG_WIN11_BYPASS_NRO": "Durante l'installazione di Windows 11 bypassa il requisito di un account online ",
|
||||||
"VTLANG_LINUX_REMOUNT": "Dopo l'avvio di Linux monta la partizione Ventoy ",
|
"VTLANG_LINUX_REMOUNT": "Dopo l'avvio di Linux monta la partizione Ventoy ",
|
||||||
"VTLANG_SECONDARY_BOOT_MENU": "Visualizza menu di avvio secondario",
|
"VTLANG_SECONDARY_BOOT_MENU": "Visualizza menu di avvio secondario",
|
||||||
|
"VTLANG_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_NONE": "None",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_1024_768": "Fixed 1024 x 768",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
|
||||||
|
|
||||||
|
|
||||||
"MENU_STR_XXX": ""
|
"MENU_STR_XXX": ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -88,6 +88,12 @@
|
|||||||
"VTLANG_WIN11_BYPASS_NRO": "Bypass online account requirement when install Windows 11",
|
"VTLANG_WIN11_BYPASS_NRO": "Bypass online account requirement when install Windows 11",
|
||||||
"VTLANG_LINUX_REMOUNT": "Mount Ventoy partition after boot Linux",
|
"VTLANG_LINUX_REMOUNT": "Mount Ventoy partition after boot Linux",
|
||||||
"VTLANG_SECONDARY_BOOT_MENU": "Show secondary boot menu",
|
"VTLANG_SECONDARY_BOOT_MENU": "Show secondary boot menu",
|
||||||
|
"VTLANG_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_NONE": "None",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_1024_768": "Fixed 1024 x 768",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
|
||||||
|
|
||||||
|
|
||||||
"MENU_STR_XXX": ""
|
"MENU_STR_XXX": ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -88,6 +88,12 @@
|
|||||||
"VTLANG_WIN11_BYPASS_NRO": "Bypass online account requirement when install Windows 11",
|
"VTLANG_WIN11_BYPASS_NRO": "Bypass online account requirement when install Windows 11",
|
||||||
"VTLANG_LINUX_REMOUNT": "Mount Ventoy partition after boot Linux",
|
"VTLANG_LINUX_REMOUNT": "Mount Ventoy partition after boot Linux",
|
||||||
"VTLANG_SECONDARY_BOOT_MENU": "Show secondary boot menu",
|
"VTLANG_SECONDARY_BOOT_MENU": "Show secondary boot menu",
|
||||||
|
"VTLANG_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_NONE": "None",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_1024_768": "Fixed 1024 x 768",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
|
||||||
|
|
||||||
|
|
||||||
"MENU_STR_XXX": ""
|
"MENU_STR_XXX": ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -88,6 +88,12 @@
|
|||||||
"VTLANG_WIN11_BYPASS_NRO": "Windows 11 설치 시 온라인 계정 요구 사항 무시",
|
"VTLANG_WIN11_BYPASS_NRO": "Windows 11 설치 시 온라인 계정 요구 사항 무시",
|
||||||
"VTLANG_LINUX_REMOUNT": "Linux 부팅 후 Ventoy 파티션 마운트",
|
"VTLANG_LINUX_REMOUNT": "Linux 부팅 후 Ventoy 파티션 마운트",
|
||||||
"VTLANG_SECONDARY_BOOT_MENU": "보조 부팅 메뉴 표시",
|
"VTLANG_SECONDARY_BOOT_MENU": "보조 부팅 메뉴 표시",
|
||||||
|
"VTLANG_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_NONE": "None",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_1024_768": "Fixed 1024 x 768",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
|
||||||
|
|
||||||
|
|
||||||
"MENU_STR_XXX": ""
|
"MENU_STR_XXX": ""
|
||||||
}
|
}
|
||||||
|
|||||||
99
INSTALL/grub/menu/lg_UG.json
Normal file
99
INSTALL/grub/menu/lg_UG.json
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
{
|
||||||
|
"VTLANG_LANGUAGE_NAME": "English (English)",
|
||||||
|
|
||||||
|
"VTLANG_STR_HOTKEY_LIST": "L:Language F1:Help F2:Browse F3:ListView F4:Localboot F5:Tools F6:ExMenu",
|
||||||
|
"VTLANG_STR_HOTKEY_TREE": "L:Language F1:Help F2:Browse F3:TreeView F4:Localboot F5:Tools F6:ExMenu",
|
||||||
|
"VTLANG_RETURN_PREVIOUS": "Return to previous menu [Esc]",
|
||||||
|
"VTLANG_RETURN_PRV_NOESC": "Return to previous menu",
|
||||||
|
|
||||||
|
"VTLANG_MENU_LANG": "Menu Language Select",
|
||||||
|
|
||||||
|
"VTLANG_LB_SBOOT_WINDOWS": "Search and boot Windows",
|
||||||
|
"VTLANG_LB_SBOOT_G4D": "Search and boot Grub4dos",
|
||||||
|
"VTLANG_LB_SBOOT_HDD1": "Boot the 1st local disk",
|
||||||
|
"VTLANG_LB_SBOOT_HDD2": "Boot the 2nd local disk",
|
||||||
|
"VTLANG_LB_SBOOT_HDD3": "Boot the 3rd local disk",
|
||||||
|
"VTLANG_LB_SBOOT_X64EFI": "Search and boot BOOTX64.EFI",
|
||||||
|
"VTLANG_LB_SBOOT_IA32EFI": "Search and boot BOOTIA32.EFI",
|
||||||
|
"VTLANG_LB_SBOOT_AA64EFI": "Search and boot BOOTAA64.EFI",
|
||||||
|
"VTLANG_LB_SBOOT_XORBOOT": "Search and boot xorboot",
|
||||||
|
|
||||||
|
"VTLANG_FILE_CHKSUM": "File checksum",
|
||||||
|
"VTLANG_CHKSUM_MD5_CALC": "Calculate md5sum",
|
||||||
|
"VTLANG_CHKSUM_SHA1_CALC": "Calculate sha1sum",
|
||||||
|
"VTLANG_CHKSUM_SHA256_CALC": "Calculate sha256sum",
|
||||||
|
"VTLANG_CHKSUM_SHA512_CALC": "Calculate sha512sum",
|
||||||
|
"VTLANG_CHKSUM_MD5_CALC_CHK": "Calculate and check md5sum",
|
||||||
|
"VTLANG_CHKSUM_SHA1_CALC_CHK": "Calculate and check sha1sum",
|
||||||
|
"VTLANG_CHKSUM_SHA256_CALC_CHK": "Calculate and check sha256sum",
|
||||||
|
"VTLANG_CHKSUM_SHA512_CALC_CHK": "Calculate and check sha512sum",
|
||||||
|
|
||||||
|
"VTLANG_POWER": "Power",
|
||||||
|
"VTLANG_POWER_REBOOT": "Reboot",
|
||||||
|
"VTLANG_POWER_HALT": "Halt",
|
||||||
|
"VTLANG_POWER_BOOT_EFIFW": "Reboot to EFI setup",
|
||||||
|
|
||||||
|
"VTLANG_KEYBRD_LAYOUT": "Keyboard Layouts",
|
||||||
|
"VTLANG_HWINFO": "Hardware Information",
|
||||||
|
|
||||||
|
"VTLANG_RESOLUTION_CFG": "Resolution Configuration",
|
||||||
|
"VTLANG_SCREEN_MODE": "Screen Display Mode",
|
||||||
|
"VTLANG_SCREEN_TEXT_MODE": "Force Text Mode",
|
||||||
|
"VTLANG_SCREEN_GUI_MODE": "Force Graphics Mode",
|
||||||
|
|
||||||
|
"VTLANG_THEME_SELECT": "Theme Select",
|
||||||
|
|
||||||
|
"VTLANG_UEFI_UTIL": "Ventoy UEFI Utilities",
|
||||||
|
"VTLANG_UTIL_SHOW_EFI_DRV": "Show EFI Drivers",
|
||||||
|
"VTLANG_UTIL_FIX_BLINIT_FAIL": "Fixup Windows BlinitializeLibrary Failure",
|
||||||
|
|
||||||
|
"VTLANG_JSON_CHK_JSON": "Check plugin json configuration (ventoy.json)",
|
||||||
|
"VTLANG_JSON_CHK_CONTROL": "Check global control plugin configuration",
|
||||||
|
"VTLANG_JSON_CHK_THEME": "Check theme plugin configuration",
|
||||||
|
"VTLANG_JSON_CHK_AUTOINS": "Check auto install plugin configuration",
|
||||||
|
"VTLANG_JSON_CHK_PERSIST": "Check persistence plugin configuration",
|
||||||
|
"VTLANG_JSON_CHK_MENU_ALIAS": "Check menu alias plugin configuration",
|
||||||
|
"VTLANG_JSON_CHK_MENU_TIP": "Check menu tip plugin configuration",
|
||||||
|
"VTLANG_JSON_CHK_MENU_CLASS": "Check menu class plugin configuration",
|
||||||
|
"VTLANG_JSON_CHK_INJECTION": "Check injection plugin configuration",
|
||||||
|
"VTLANG_JSON_CHK_AUTO_MEMDISK": "Check auto memdisk plugin configuration",
|
||||||
|
"VTLANG_JSON_CHK_IMG_LIST": "Check image list plugin configuration",
|
||||||
|
"VTLANG_JSON_CHK_IMG_BLIST": "Check image blacklist plugin configuration",
|
||||||
|
"VTLANG_JSON_CHK_CONF_REPLACE": "Check boot conf replace plugin configuration",
|
||||||
|
"VTLANG_JSON_CHK_DUD": "Check dud plugin configuration",
|
||||||
|
"VTLANG_JSON_CHK_PASSWORD": "Check password plugin configuration",
|
||||||
|
|
||||||
|
"VTLANG_NORMAL_MODE": "Boot in normal mode",
|
||||||
|
"VTLANG_WIMBOOT_MODE": "Boot in wimboot mode",
|
||||||
|
"VTLANG_GRUB2_MODE": "Boot in grub2 mode",
|
||||||
|
"VTLANG_MEMDISK_MODE": "Boot in memdisk mode",
|
||||||
|
|
||||||
|
"VTLANG_RET_TO_LISTVIEW": "Return to ListView",
|
||||||
|
"VTLANG_RET_TO_TREEVIEW": "Return to TreeView",
|
||||||
|
|
||||||
|
"VTLANG_NO_AUTOINS_SCRIPT": "Boot without auto installation template",
|
||||||
|
"VTLANG_AUTOINS_USE": "Boot with",
|
||||||
|
|
||||||
|
"VTLANG_NO_PERSIST": "Boot without persistence",
|
||||||
|
"VTLANG_PERSIST_USE": "Boot with",
|
||||||
|
|
||||||
|
"VTLANG_BROWER_RETURN": "Return",
|
||||||
|
|
||||||
|
"VTLANG_ENTER_EXIT": "press Enter key to exit",
|
||||||
|
"VTLANG_ENTER_REBOOT": "press Enter key to reboot",
|
||||||
|
"VTLANG_ENTER_CONTINUE": "press Enter key to continue",
|
||||||
|
|
||||||
|
"VTLANG_CTRL_TEMP_SET": "Temporary Control Settings",
|
||||||
|
"VTLANG_WIN11_BYPASS_CHECK": "Bypass CPU/TPM/SecureBoot check when install Windows 11",
|
||||||
|
"VTLANG_WIN11_BYPASS_NRO": "Bypass online account requirement when install Windows 11",
|
||||||
|
"VTLANG_LINUX_REMOUNT": "Mount Ventoy partition after boot Linux",
|
||||||
|
"VTLANG_SECONDARY_BOOT_MENU": "Show secondary boot menu",
|
||||||
|
"VTLANG_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_NONE": "None",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_1024_768": "Fixed 1024 x 768",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
|
||||||
|
|
||||||
|
|
||||||
|
"MENU_STR_XXX": ""
|
||||||
|
}
|
||||||
@@ -88,6 +88,12 @@
|
|||||||
"VTLANG_WIN11_BYPASS_NRO": "Pominięcie wymogu posiadania konta online podczas instalacji systemu Windows 11",
|
"VTLANG_WIN11_BYPASS_NRO": "Pominięcie wymogu posiadania konta online podczas instalacji systemu Windows 11",
|
||||||
"VTLANG_LINUX_REMOUNT": "Zamontuj partycję Ventoy po starcie Linuksa",
|
"VTLANG_LINUX_REMOUNT": "Zamontuj partycję Ventoy po starcie Linuksa",
|
||||||
"VTLANG_SECONDARY_BOOT_MENU": "Pokaż dodatkowe menu startowe",
|
"VTLANG_SECONDARY_BOOT_MENU": "Pokaż dodatkowe menu startowe",
|
||||||
|
"VTLANG_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_NONE": "None",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_1024_768": "Fixed 1024 x 768",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
|
||||||
|
|
||||||
|
|
||||||
"MENU_STR_XXX": ""
|
"MENU_STR_XXX": ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -88,6 +88,12 @@
|
|||||||
"VTLANG_WIN11_BYPASS_NRO": "Ignorar o requerimento de conta online quanto instalar o Windows 11",
|
"VTLANG_WIN11_BYPASS_NRO": "Ignorar o requerimento de conta online quanto instalar o Windows 11",
|
||||||
"VTLANG_LINUX_REMOUNT": "Montar a partição do Ventoy após iniciar o Linux",
|
"VTLANG_LINUX_REMOUNT": "Montar a partição do Ventoy após iniciar o Linux",
|
||||||
"VTLANG_SECONDARY_BOOT_MENU": "Mostrar o menu secundário da inicialização",
|
"VTLANG_SECONDARY_BOOT_MENU": "Mostrar o menu secundário da inicialização",
|
||||||
|
"VTLANG_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_NONE": "None",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_1024_768": "Fixed 1024 x 768",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
|
||||||
|
|
||||||
|
|
||||||
"MENU_STR_XXX": ""
|
"MENU_STR_XXX": ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -88,6 +88,12 @@
|
|||||||
"VTLANG_WIN11_BYPASS_NRO": "Ignorar requerimento de conta online quanto instalando Windows 11",
|
"VTLANG_WIN11_BYPASS_NRO": "Ignorar requerimento de conta online quanto instalando Windows 11",
|
||||||
"VTLANG_LINUX_REMOUNT": "Montar partição Ventoy após boot do Linux",
|
"VTLANG_LINUX_REMOUNT": "Montar partição Ventoy após boot do Linux",
|
||||||
"VTLANG_SECONDARY_BOOT_MENU": "Mostar menu seundário de boot",
|
"VTLANG_SECONDARY_BOOT_MENU": "Mostar menu seundário de boot",
|
||||||
|
"VTLANG_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_NONE": "None",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_1024_768": "Fixed 1024 x 768",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
|
||||||
|
|
||||||
|
|
||||||
"MENU_STR_XXX": ""
|
"MENU_STR_XXX": ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -88,6 +88,12 @@
|
|||||||
"VTLANG_WIN11_BYPASS_NRO": "Обойти требование сетевой учётной записи при установке Windows 11",
|
"VTLANG_WIN11_BYPASS_NRO": "Обойти требование сетевой учётной записи при установке Windows 11",
|
||||||
"VTLANG_LINUX_REMOUNT": "Смонтировать раздел Ventoy после загрузки Linux",
|
"VTLANG_LINUX_REMOUNT": "Смонтировать раздел Ventoy после загрузки Linux",
|
||||||
"VTLANG_SECONDARY_BOOT_MENU": "Показать вторичное загрузочное меню",
|
"VTLANG_SECONDARY_BOOT_MENU": "Показать вторичное загрузочное меню",
|
||||||
|
"VTLANG_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_NONE": "None",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_1024_768": "Fixed 1024 x 768",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
|
||||||
|
|
||||||
|
|
||||||
"MENU_STR_XXX": ""
|
"MENU_STR_XXX": ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -88,6 +88,12 @@
|
|||||||
"VTLANG_WIN11_BYPASS_NRO": "Obid zahteve po spletnem računu pri namestitvi sistema Windows 11",
|
"VTLANG_WIN11_BYPASS_NRO": "Obid zahteve po spletnem računu pri namestitvi sistema Windows 11",
|
||||||
"VTLANG_LINUX_REMOUNT": "Priklopi Ventoy particijo po zagonu Linuxa",
|
"VTLANG_LINUX_REMOUNT": "Priklopi Ventoy particijo po zagonu Linuxa",
|
||||||
"VTLANG_SECONDARY_BOOT_MENU": "Prikaz sekundarnega zagonskega menija",
|
"VTLANG_SECONDARY_BOOT_MENU": "Prikaz sekundarnega zagonskega menija",
|
||||||
|
"VTLANG_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_NONE": "None",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_1024_768": "Fixed 1024 x 768",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
|
||||||
|
|
||||||
|
|
||||||
"MENU_STR_XXX": ""
|
"MENU_STR_XXX": ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -88,6 +88,12 @@
|
|||||||
"VTLANG_WIN11_BYPASS_NRO": "Bypass online account requirement when install Windows 11",
|
"VTLANG_WIN11_BYPASS_NRO": "Bypass online account requirement when install Windows 11",
|
||||||
"VTLANG_LINUX_REMOUNT": "Mount Ventoy partition after boot Linux",
|
"VTLANG_LINUX_REMOUNT": "Mount Ventoy partition after boot Linux",
|
||||||
"VTLANG_SECONDARY_BOOT_MENU": "Show secondary boot menu",
|
"VTLANG_SECONDARY_BOOT_MENU": "Show secondary boot menu",
|
||||||
|
"VTLANG_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_NONE": "None",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_1024_768": "Fixed 1024 x 768",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
|
||||||
|
|
||||||
|
|
||||||
"MENU_STR_XXX": ""
|
"MENU_STR_XXX": ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -88,6 +88,12 @@
|
|||||||
"VTLANG_WIN11_BYPASS_NRO": "விண்டோஸ் 11 ஐ நிறுவும் போது ஆன்லைன் கணக்கின் தேவையை புறக்கணிக்கவும்",
|
"VTLANG_WIN11_BYPASS_NRO": "விண்டோஸ் 11 ஐ நிறுவும் போது ஆன்லைன் கணக்கின் தேவையை புறக்கணிக்கவும்",
|
||||||
"VTLANG_LINUX_REMOUNT": "லினக்ஸை துவக்கிய பிறகு Ventoy பகிர்வை ஏற்றவும்",
|
"VTLANG_LINUX_REMOUNT": "லினக்ஸை துவக்கிய பிறகு Ventoy பகிர்வை ஏற்றவும்",
|
||||||
"VTLANG_SECONDARY_BOOT_MENU": "இரண்டாம் நிலை துவக்க பட்டியலைக் காட்டு",
|
"VTLANG_SECONDARY_BOOT_MENU": "இரண்டாம் நிலை துவக்க பட்டியலைக் காட்டு",
|
||||||
|
"VTLANG_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_NONE": "None",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_1024_768": "Fixed 1024 x 768",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
|
||||||
|
|
||||||
|
|
||||||
"MENU_STR_XXX": ""
|
"MENU_STR_XXX": ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -88,6 +88,12 @@
|
|||||||
"VTLANG_WIN11_BYPASS_NRO": "Windows11'i yüklerken, çevrimiçi hesap gereksinimini(OOBE) atla",
|
"VTLANG_WIN11_BYPASS_NRO": "Windows11'i yüklerken, çevrimiçi hesap gereksinimini(OOBE) atla",
|
||||||
"VTLANG_LINUX_REMOUNT": "Linux sistemi önyükledikten sonra, Ventoy bölümünü bağla",
|
"VTLANG_LINUX_REMOUNT": "Linux sistemi önyükledikten sonra, Ventoy bölümünü bağla",
|
||||||
"VTLANG_SECONDARY_BOOT_MENU": "İkincil önyükleme menüsünü göster",
|
"VTLANG_SECONDARY_BOOT_MENU": "İkincil önyükleme menüsünü göster",
|
||||||
|
"VTLANG_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_NONE": "None",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_1024_768": "Fixed 1024 x 768",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
|
||||||
|
|
||||||
|
|
||||||
"MENU_STR_XXX": ""
|
"MENU_STR_XXX": ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -88,6 +88,12 @@
|
|||||||
"VTLANG_WIN11_BYPASS_NRO": "Обійти вимогу онлайн-аккаунту під час інсталяції Windows 11",
|
"VTLANG_WIN11_BYPASS_NRO": "Обійти вимогу онлайн-аккаунту під час інсталяції Windows 11",
|
||||||
"VTLANG_LINUX_REMOUNT": "Монтувати розділ Ventoy після завантаження Linux",
|
"VTLANG_LINUX_REMOUNT": "Монтувати розділ Ventoy після завантаження Linux",
|
||||||
"VTLANG_SECONDARY_BOOT_MENU": "Показувати вторинне меню завантаження",
|
"VTLANG_SECONDARY_BOOT_MENU": "Показувати вторинне меню завантаження",
|
||||||
|
"VTLANG_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_NONE": "None",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_1024_768": "Fixed 1024 x 768",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
|
||||||
|
|
||||||
|
|
||||||
"MENU_STR_XXX": ""
|
"MENU_STR_XXX": ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -88,6 +88,12 @@
|
|||||||
"VTLANG_WIN11_BYPASS_NRO": "Bỏ qua yêu cầu tài khoản trực tuyến khi cài đặt Windows 11",
|
"VTLANG_WIN11_BYPASS_NRO": "Bỏ qua yêu cầu tài khoản trực tuyến khi cài đặt Windows 11",
|
||||||
"VTLANG_LINUX_REMOUNT": "Gắn phân vùng Ventoy sau khi khởi động GNU/Linux",
|
"VTLANG_LINUX_REMOUNT": "Gắn phân vùng Ventoy sau khi khởi động GNU/Linux",
|
||||||
"VTLANG_SECONDARY_BOOT_MENU": "Hiện menu khởi động thứ cấp`",
|
"VTLANG_SECONDARY_BOOT_MENU": "Hiện menu khởi động thứ cấp`",
|
||||||
|
"VTLANG_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_NONE": "None",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_1024_768": "Fixed 1024 x 768",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
|
||||||
|
|
||||||
|
|
||||||
"MENU_STR_XXX": ""
|
"MENU_STR_XXX": ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -88,6 +88,11 @@
|
|||||||
"VTLANG_WIN11_BYPASS_NRO": "安装 Windows 11 时绕过在线账户的要求",
|
"VTLANG_WIN11_BYPASS_NRO": "安装 Windows 11 时绕过在线账户的要求",
|
||||||
"VTLANG_LINUX_REMOUNT": "启动 Linux 系统后挂载 Ventoy 分区",
|
"VTLANG_LINUX_REMOUNT": "启动 Linux 系统后挂载 Ventoy 分区",
|
||||||
"VTLANG_SECONDARY_BOOT_MENU": "显示二级启动菜单",
|
"VTLANG_SECONDARY_BOOT_MENU": "显示二级启动菜单",
|
||||||
|
"VTLANG_WIN_UEFI_RES_LOCK": "UEFI启动 Windows/WinPE 时锁定分辨率",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_NONE": "不锁定",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_MAX": "锁定最高分辨率",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_1024_768": "锁定 1024 x 768",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_BE1024_768": "锁定 1024 x 768 及以上",
|
||||||
|
|
||||||
"MENU_STR_XXX": ""
|
"MENU_STR_XXX": ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -88,6 +88,11 @@
|
|||||||
"VTLANG_WIN11_BYPASS_NRO": "安裝 Windows 11 時繞過登入帳戶的需求",
|
"VTLANG_WIN11_BYPASS_NRO": "安裝 Windows 11 時繞過登入帳戶的需求",
|
||||||
"VTLANG_LINUX_REMOUNT": "啟動 Linux 系統後掛載 Ventoy 分區",
|
"VTLANG_LINUX_REMOUNT": "啟動 Linux 系統後掛載 Ventoy 分區",
|
||||||
"VTLANG_SECONDARY_BOOT_MENU": "顯示次要啟動選單",
|
"VTLANG_SECONDARY_BOOT_MENU": "顯示次要啟動選單",
|
||||||
|
"VTLANG_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_NONE": "None",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_1024_768": "Fixed 1024 x 768",
|
||||||
|
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
|
||||||
|
|
||||||
"MENU_STR_XXX": ""
|
"MENU_STR_XXX": ""
|
||||||
}
|
}
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user