mirror of
https://github.com/ventoy/Ventoy.git
synced 2025-09-17 09:21:15 +00:00
Compare commits
61 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
cbbd57eee5 | ||
|
7b08954e57 | ||
|
08634fba9f | ||
|
96c5a25263 | ||
|
43e8ec5785 | ||
|
7279ba9bc8 | ||
|
3929ed55ca | ||
|
fd6580be72 | ||
|
12e8ae26ae | ||
|
82977d9b8a | ||
|
3541735796 | ||
|
c82e4296d3 | ||
|
cc9ff41589 | ||
|
08d218fd82 | ||
|
2185556dfd | ||
|
97be7b8bfb | ||
|
3dd3b7d26f | ||
|
6ded335527 | ||
|
3545dfa29f | ||
|
b0208c8ce3 | ||
|
b1d5237041 | ||
|
a37c6af8d0 | ||
|
61d4248d51 | ||
|
dccefc5277 | ||
|
66d5946bd1 | ||
|
198dcd94a6 | ||
|
f26a927b3e | ||
|
08e7da50ef | ||
|
c7bb6270cc | ||
|
a5e998bcaf | ||
|
15570cd996 | ||
|
e76edf9286 | ||
|
195431479c | ||
|
18f35dafbf | ||
|
519fac719e | ||
|
ee81f89911 | ||
|
b1ad99cde0 | ||
|
715f410832 | ||
|
17da2e2a21 | ||
|
de6eb54853 | ||
|
85f6f3213f | ||
|
80a088babb | ||
|
183175cad2 | ||
|
390eec4218 | ||
|
620bcad324 | ||
|
bae671bd68 | ||
|
1e75385146 | ||
|
725a33f988 | ||
|
1f1769d235 | ||
|
a129996756 | ||
|
8632e56561 | ||
|
8f711c9db9 | ||
|
b0cacd6686 | ||
|
13b2192a59 | ||
|
807d313cd5 | ||
|
2f45cea46e | ||
|
7cdc7386a8 | ||
|
44bb72ca0a | ||
|
5e6b0800bd | ||
|
01c902e026 | ||
|
a68629a931 |
15
.github/workflows/ci.yml
vendored
15
.github/workflows/ci.yml
vendored
@@ -5,6 +5,8 @@ on:
|
||||
branches: [ master ]
|
||||
pull_request:
|
||||
branches: [ master ]
|
||||
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
build:
|
||||
@@ -13,12 +15,19 @@ jobs:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Run docker-compose up
|
||||
run: docker-compose up
|
||||
- uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: ventoy-windows
|
||||
path: INSTALL/ventoy-*windows*
|
||||
- uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: ventoy-linux
|
||||
path: INSTALL/ventoy-*linux*
|
||||
- uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: ventoy-windows
|
||||
path: INSTALL/ventoy-*windows*
|
||||
|
||||
name: ventoy-livecd
|
||||
path: INSTALL/ventoy-*livecd*
|
||||
- uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: xxx-build-log
|
||||
path: DOC/build.log
|
||||
|
24
.github/workflows/sync2gitee.yml
vendored
Normal file
24
.github/workflows/sync2gitee.yml
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
name: Mirror GitHub to Gitee
|
||||
|
||||
on:
|
||||
# Triggers the workflow on push or pull request events but only for the main branch
|
||||
push:
|
||||
branches: [ master ]
|
||||
|
||||
# Allows you to run this workflow manually from the Actions tab
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
run:
|
||||
name: Sync-GitHub-to-Gitee
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Mirror the Github repos to Gitee.
|
||||
uses: Yikun/hub-mirror-action@master
|
||||
with:
|
||||
src: github/ventoy
|
||||
dst: gitee/LongPanda
|
||||
dst_key: ${{ secrets.GITEE_PRIVATE_KEY }}
|
||||
dst_token: ${{ secrets.GITEE_TOKEN }}
|
||||
static_list: "Ventoy"
|
||||
force_update: true
|
@@ -3,7 +3,7 @@
|
||||
1. Compile Enviroment
|
||||
==========================================
|
||||
My build envrioment is CentOS 7.8 x86_64. So here I first explain how to create the build environment from scratch.
|
||||
Because Ventoy is based on many open source projects, so the environment is important. I suggest you test it on a virtual machine first.
|
||||
Because Ventoy is based on many open source projects, so the environment is important. I suggest you test it on a virtual machine firstly.
|
||||
|
||||
1.1 Install CentOS 7.8
|
||||
I use CentOS-7-x86_64-Everything-2003.iso and select Minimal install
|
||||
@@ -14,7 +14,7 @@
|
||||
mpfr.i686 mpfr-devel.i686 zlib.i686 rsync autogen autoconf automake libtool gettext* bison binutils \
|
||||
flex device-mapper-devel SDL libpciaccess libusb freetype freetype-devel gnu-free-* qemu-* virt-* \
|
||||
libvirt* vte* NetworkManager-bluetooth brlapi fuse-devel dejavu* gnu-efi* pesign shim \
|
||||
iscsi-initiator-utils grub2-tools zip nasm acpica-tools glibc-static zlib-static
|
||||
iscsi-initiator-utils grub2-tools zip nasm acpica-tools glibc-static zlib-static xorriso
|
||||
|
||||
|
||||
|
||||
@@ -22,9 +22,9 @@
|
||||
2. Download Source Code
|
||||
==========================================
|
||||
2.1 Download Ventoy source code from github and decompress it.
|
||||
Next I assume that you have unzipped the code into the /home directory (check /home/Ventoy-master/README.md file for the directory level).
|
||||
Next I assume that you have unzipped the code into the /home directory (check /home/Ventoy-master/README.md file for the directory layout).
|
||||
|
||||
2.2 Download third-part source code
|
||||
2.2 Download third-part source code and tool
|
||||
|
||||
https://www.fefe.de/dietlibc/dietlibc-0.34.tar.xz ===> /home/Ventoy-master/DOC/dietlibc-0.34.tar.xz
|
||||
https://musl.libc.org/releases/musl-1.2.1.tar.gz ===> /home/Ventoy-master/DOC/musl-1.2.1.tar.gz
|
||||
@@ -35,6 +35,17 @@
|
||||
https://releases.linaro.org/components/toolchain/binaries/7.4-2019.02/aarch64-linux-gnu/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu.tar.xz ===> /opt/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu.tar.xz
|
||||
https://toolchains.bootlin.com/downloads/releases/toolchains/aarch64/tarballs/aarch64--uclibc--stable-2020.08-1.tar.bz2 ===> /opt/aarch64--uclibc--stable-2020.08-1.tar.bz2
|
||||
|
||||
http://www.tinycorelinux.net/11.x/x86_64/release/distribution_files/vmlinuz64 ===> /home/Ventoy-master/LiveCD/ISO/EFI/boot/vmlinuz64
|
||||
http://www.tinycorelinux.net/11.x/x86_64/release/distribution_files/corepure64.gz ===> /home/Ventoy-master/LiveCD/ISO/EFI/boot/corepure64.gz
|
||||
http://www.tinycorelinux.net/11.x/x86_64/release/distribution_files/modules64.gz ===> /home/Ventoy-master/LiveCD/ISO/EFI/boot/modules64.gz
|
||||
http://distro.ibiblio.org/tinycorelinux/11.x/x86_64/tcz/glib2.tcz /home/Ventoy-master/LiveCD/VTOY/ventoy/tcz/glib2.tcz
|
||||
http://distro.ibiblio.org/tinycorelinux/11.x/x86_64/tcz/libffi.tcz /home/Ventoy-master/LiveCD/VTOY/ventoy/tcz/libffi.tcz
|
||||
http://distro.ibiblio.org/tinycorelinux/11.x/x86_64/tcz/liblvm2.tcz /home/Ventoy-master/LiveCD/VTOY/ventoy/tcz/liblvm2.tcz
|
||||
http://distro.ibiblio.org/tinycorelinux/11.x/x86_64/tcz/ncursesw.tcz /home/Ventoy-master/LiveCD/VTOY/ventoy/tcz/ncursesw.tcz
|
||||
http://distro.ibiblio.org/tinycorelinux/11.x/x86_64/tcz/parted.tcz /home/Ventoy-master/LiveCD/VTOY/ventoy/tcz/parted.tcz
|
||||
http://distro.ibiblio.org/tinycorelinux/11.x/x86_64/tcz/readline.tcz /home/Ventoy-master/LiveCD/VTOY/ventoy/tcz/readline.tcz
|
||||
http://distro.ibiblio.org/tinycorelinux/11.x/x86_64/tcz/udev-lib.tcz /home/Ventoy-master/LiveCD/VTOY/ventoy/tcz/udev-lib.tcz
|
||||
|
||||
2.3 Prepare third-part tools
|
||||
cd /home/Ventoy-master/DOC/
|
||||
tar xf musl-1.2.1.tar.gz
|
||||
@@ -52,20 +63,22 @@
|
||||
==========================================
|
||||
3. All in one script
|
||||
==========================================
|
||||
I have made the whole build process in all_in_one.sh, you can run this script to build and pack ventoy.
|
||||
I have made a all_in_one.sh, you can run this script to build and pack ventoy.
|
||||
If you want to compile a certain part separately, you can continue to refer to the later chapters of this text.
|
||||
|
||||
cd /home/Ventoy-master/INSTALL
|
||||
sh all_in_one.sh
|
||||
|
||||
It should be noted that, some part of Ventoy has 32bit&64bit version (like 4.9 4.10 4.11 follows)
|
||||
all_in_one.sh only build 64bit version of them, if you want to rebuild the 32bit verison. You should create a 32bit CentOS environment and build them.
|
||||
Fortunately these parts are few modified, you only need to build once or you can directly use the binary I have built.
|
||||
It should be noted that:
|
||||
1. Only grub2/EDK2/IPXE will be recompiled in all_in_one.sh. Other part contains the binaries and are few modified, so will no be recompiled everytime.
|
||||
You can rebuild these parts separately if you want.
|
||||
|
||||
2. some part of Ventoy has 32bit&64bit version (like 4.9 4.10 4.11 follows)
|
||||
all_in_one.sh only build 64bit version of them, if you want to rebuild the 32bit verison. You should create a 32bit CentOS environment and build them.
|
||||
Fortunately these parts are few modified, you only need to build once or you can directly use the binary I have built.
|
||||
|
||||
Besides, after a fully compile and pack, you can only build the part you modified (for example grub2) and run ventoy_pack.sh to generate the package.
|
||||
|
||||
|
||||
|
||||
==========================================
|
||||
4. Build every part of Ventoy
|
||||
==========================================
|
||||
|
8
DOC/prepare_env.sh
Normal file
8
DOC/prepare_env.sh
Normal file
@@ -0,0 +1,8 @@
|
||||
#!/bin/bash
|
||||
|
||||
#[ -d /opt/diet64 ] || sh ./installdietlibc.sh
|
||||
|
||||
[ -d /opt/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu ] || tar xf /opt/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu.tar.xz -C /opt
|
||||
|
||||
[ -d /opt/aarch64--uclibc--stable-2020.08-1 ] || tar xf /opt/aarch64--uclibc--stable-2020.08-1.tar.bz2 -C /opt
|
||||
|
15
Dockerfile
15
Dockerfile
@@ -1,17 +1,10 @@
|
||||
FROM centos:7
|
||||
|
||||
RUN yum -y install \
|
||||
RUN yum -y -q install \
|
||||
libXpm net-tools bzip2 wget vim gcc gcc-c++ samba dos2unix glibc-devel glibc.i686 glibc-devel.i686 \
|
||||
mpfr.i686 mpfr-devel.i686 zlib.i686 rsync autogen autoconf automake libtool gettext* bison binutils \
|
||||
mpfr.i686 mpfr-devel.i686 rsync autogen autoconf automake libtool gettext* bison binutils \
|
||||
flex device-mapper-devel SDL libpciaccess libusb freetype freetype-devel gnu-free-* qemu-* virt-* \
|
||||
libvirt* vte* NetworkManager-bluetooth brlapi fuse-devel dejavu* gnu-efi* pesign shim \
|
||||
iscsi-initiator-utils grub2-tools zip nasm acpica-tools glibc-static zlib-static
|
||||
|
||||
CMD cd /ventoy \
|
||||
&& wget -P DOC/ https://www.fefe.de/dietlibc/dietlibc-0.34.tar.xz \
|
||||
&& wget -P GRUB2/ https://ftp.gnu.org/gnu/grub/grub-2.04.tar.xz \
|
||||
&& wget -O EDK2/edk2-edk2-stable201911.zip https://codeload.github.com/tianocore/edk2/zip/edk2-stable201911 \
|
||||
&& wget -O ExFAT/exfat-1.3.0.zip https://codeload.github.com/relan/exfat/zip/v1.3.0 \
|
||||
&& wget -O ExFAT/libfuse-fuse-2.9.9.zip https://codeload.github.com/libfuse/libfuse/zip/fuse-2.9.9 \
|
||||
&& cd INSTALL && ls -la && sh all_in_one.sh
|
||||
iscsi-initiator-utils grub2-tools zip nasm acpica-tools glibc-static zlib-static xorriso
|
||||
|
||||
CMD cd /ventoy/INSTALL && ls -la && sh docker_ci_build.sh
|
||||
|
59
EDK2/build.sh
Normal file
59
EDK2/build.sh
Normal file
@@ -0,0 +1,59 @@
|
||||
#!/bin/sh
|
||||
|
||||
if [ -z "$1" ]; then
|
||||
EDKARCH=X64
|
||||
postfix=x64
|
||||
elif [ "$1" = "ia32" ]; then
|
||||
EDKARCH=IA32
|
||||
postfix=ia32
|
||||
shift
|
||||
elif [ "$1" = "aa64" ]; then
|
||||
EDKARCH=AARCH64
|
||||
postfix=aa64
|
||||
shift
|
||||
fi
|
||||
|
||||
cd edk2-edk2-stable201911
|
||||
|
||||
rm -rf ./Conf/.cache
|
||||
rm -f ./Conf/.AutoGenIdFile.txt
|
||||
|
||||
VTEFI_PATH=Build/MdeModule/RELEASE_GCC48/$EDKARCH/MdeModulePkg/Application/Ventoy/Ventoy/OUTPUT/Ventoy.efi
|
||||
DST_PATH=../../INSTALL/ventoy/ventoy_${postfix}.efi
|
||||
|
||||
VTEFI_PATH2=Build/MdeModule/RELEASE_GCC48/$EDKARCH/MdeModulePkg/Application/VtoyUtil/VtoyUtil/OUTPUT/VtoyUtil.efi
|
||||
DST_PATH2=../../INSTALL/ventoy/vtoyutil_${postfix}.efi
|
||||
|
||||
VTEFI_PATH3=Build/MdeModule/RELEASE_GCC48/$EDKARCH/MdeModulePkg/Application/VDiskChain/VDiskChain/OUTPUT/VDiskChain.efi
|
||||
DST_PATH3=../../VDiskChain/Tool/vdiskchain_${postfix}.efi
|
||||
|
||||
|
||||
rm -f $VTEFI_PATH
|
||||
rm -f $DST_PATH
|
||||
rm -f $VTEFI_PATH2
|
||||
rm -f $DST_PATH2
|
||||
rm -f $VTEFI_PATH3
|
||||
[ -d ../../VDiskChain ] && rm -f $DST_PATH3
|
||||
|
||||
unset WORKSPACE
|
||||
source ./edksetup.sh
|
||||
|
||||
if [ "$EDKARCH" = "AARCH64" ]; then
|
||||
GCC48_AARCH64_PREFIX=aarch64-linux-gnu- \
|
||||
build -p MdeModulePkg/MdeModulePkg.dsc -a $EDKARCH -b RELEASE -t GCC48
|
||||
else
|
||||
build -p MdeModulePkg/MdeModulePkg.dsc -a $EDKARCH -b RELEASE -t GCC48
|
||||
fi
|
||||
|
||||
if [ -e $VTEFI_PATH ] && [ -e $VTEFI_PATH2 ] && [ -e $VTEFI_PATH3 ]; then
|
||||
echo -e '\n\n====================== SUCCESS ========================\n\n'
|
||||
cp -a $VTEFI_PATH $DST_PATH
|
||||
cp -a $VTEFI_PATH2 $DST_PATH2
|
||||
[ -d ../../VDiskChain ] && cp -a $VTEFI_PATH3 $DST_PATH3
|
||||
cd ..
|
||||
else
|
||||
echo -e '\n\n====================== FAILED ========================\n\n'
|
||||
cd ..
|
||||
exit 1
|
||||
fi
|
||||
|
@@ -2,32 +2,20 @@
|
||||
|
||||
rm -rf edk2-edk2-stable201911
|
||||
|
||||
unzip edk2-edk2-stable201911.zip
|
||||
unzip edk2-edk2-stable201911.zip > /dev/null
|
||||
|
||||
/bin/cp -a ./edk2_mod/edk2-edk2-stable201911 ./
|
||||
|
||||
cd edk2-edk2-stable201911
|
||||
|
||||
VTEFI_PATH=Build/MdeModule/RELEASE_GCC48/X64/MdeModulePkg/Application/Ventoy/Ventoy/OUTPUT/Ventoy.efi
|
||||
DST_PATH=../../INSTALL/ventoy/ventoy_x64.efi
|
||||
|
||||
rm -f $VTEFI_PATH
|
||||
rm -f $DST_PATH
|
||||
|
||||
make -j 4 -C BaseTools/
|
||||
cd ..
|
||||
|
||||
source ./edksetup.sh
|
||||
build -p MdeModulePkg/MdeModulePkg.dsc -a X64 -b RELEASE -t GCC48
|
||||
|
||||
if [ -e $VTEFI_PATH ]; then
|
||||
echo -e '\n\n====================== SUCCESS ========================\n\n'
|
||||
cp -a $VTEFI_PATH $DST_PATH
|
||||
cd ..
|
||||
else
|
||||
echo -e '\n\n====================== FAILED ========================\n\n'
|
||||
cd ..
|
||||
exit 1
|
||||
fi
|
||||
echo '======== build EDK2 for i386-efi ==============='
|
||||
sh ./build.sh ia32 || exit 1
|
||||
|
||||
echo '======== build EDK2 for arm64-efi ==============='
|
||||
sh ./build.sh aa64 || exit 1
|
||||
|
||||
echo '======== build EDK2 for x86_64-efi ==============='
|
||||
sh ./build.sh || exit 1
|
||||
|
||||
|
@@ -0,0 +1,466 @@
|
||||
/******************************************************************************
|
||||
* VDiskChain.c
|
||||
*
|
||||
* 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 <Uefi.h>
|
||||
#include <Library/DebugLib.h>
|
||||
#include <Library/PrintLib.h>
|
||||
#include <Library/UefiLib.h>
|
||||
#include <Library/BaseMemoryLib.h>
|
||||
#include <Library/DevicePathLib.h>
|
||||
#include <Library/MemoryAllocationLib.h>
|
||||
#include <Library/UefiBootServicesTableLib.h>
|
||||
#include <Library/UefiRuntimeServicesTableLib.h>
|
||||
#include <Library/UefiApplicationEntryPoint.h>
|
||||
#include <Library/UefiDecompressLib.h>
|
||||
#include <Protocol/LoadedImage.h>
|
||||
#include <Guid/FileInfo.h>
|
||||
#include <Guid/FileSystemInfo.h>
|
||||
#include <Protocol/BlockIo.h>
|
||||
#include <Protocol/RamDisk.h>
|
||||
#include <Protocol/SimpleFileSystem.h>
|
||||
#include <VDiskChain.h>
|
||||
|
||||
BOOLEAN gVDiskDebugPrint = FALSE;
|
||||
vdisk_block_data gVDiskBlockData;
|
||||
|
||||
/* Boot filename */
|
||||
CONST CHAR16 *gEfiBootFileName[] =
|
||||
{
|
||||
L"@",
|
||||
EFI_REMOVABLE_MEDIA_FILE_NAME,
|
||||
#if defined (MDE_CPU_IA32)
|
||||
L"\\EFI\\BOOT\\GRUBIA32.EFI",
|
||||
L"\\EFI\\BOOT\\BOOTia32.EFI",
|
||||
L"\\EFI\\BOOT\\bootia32.efi",
|
||||
L"\\efi\\boot\\bootia32.efi",
|
||||
#elif defined (MDE_CPU_X64)
|
||||
L"\\EFI\\BOOT\\GRUBX64.EFI",
|
||||
L"\\EFI\\BOOT\\BOOTx64.EFI",
|
||||
L"\\EFI\\BOOT\\bootx64.efi",
|
||||
L"\\efi\\boot\\bootx64.efi",
|
||||
#elif defined (MDE_CPU_ARM)
|
||||
L"\\EFI\\BOOT\\GRUBARM.EFI",
|
||||
L"\\EFI\\BOOT\\BOOTarm.EFI",
|
||||
L"\\EFI\\BOOT\\bootarm.efi",
|
||||
L"\\efi\\boot\\bootarm.efi",
|
||||
#elif defined (MDE_CPU_AARCH64)
|
||||
L"\\EFI\\BOOT\\GRUBAA64.EFI",
|
||||
L"\\EFI\\BOOT\\BOOTaa64.EFI",
|
||||
L"\\EFI\\BOOT\\bootaa64.efi",
|
||||
L"\\efi\\boot\\bootaa64.efi",
|
||||
#endif
|
||||
|
||||
};
|
||||
|
||||
UINT8 *g_disk_buf_addr = NULL;
|
||||
UINT64 g_disk_buf_size = 0;
|
||||
|
||||
STATIC EFI_GET_VARIABLE g_org_get_variable = NULL;
|
||||
STATIC EFI_EXIT_BOOT_SERVICES g_org_exit_boot_service = NULL;
|
||||
|
||||
VOID EFIAPI VDiskDebug(IN CONST CHAR8 *Format, ...)
|
||||
{
|
||||
VA_LIST Marker;
|
||||
CHAR16 Buffer[512];
|
||||
|
||||
VA_START (Marker, Format);
|
||||
UnicodeVSPrintAsciiFormat(Buffer, sizeof(Buffer), Format, Marker);
|
||||
VA_END (Marker);
|
||||
|
||||
gST->ConOut->OutputString(gST->ConOut, Buffer);
|
||||
}
|
||||
|
||||
VOID EFIAPI vdisk_clear_input(VOID)
|
||||
{
|
||||
EFI_INPUT_KEY Key;
|
||||
|
||||
gST->ConIn->Reset(gST->ConIn, FALSE);
|
||||
while (EFI_SUCCESS == gST->ConIn->ReadKeyStroke(gST->ConIn, &Key))
|
||||
{
|
||||
;
|
||||
}
|
||||
gST->ConIn->Reset(gST->ConIn, FALSE);
|
||||
}
|
||||
|
||||
STATIC EFI_STATUS EFIAPI vdisk_load_image
|
||||
(
|
||||
IN EFI_HANDLE ImageHandle,
|
||||
IN EFI_DEVICE_PATH_PROTOCOL *pDevicePath,
|
||||
IN CONST CHAR16 *FileName,
|
||||
IN UINTN FileNameLen,
|
||||
OUT EFI_HANDLE *Image
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status = EFI_SUCCESS;
|
||||
CHAR16 TmpBuf[256] = {0};
|
||||
FILEPATH_DEVICE_PATH *pFilePath = NULL;
|
||||
EFI_DEVICE_PATH_PROTOCOL *pImgPath = NULL;
|
||||
|
||||
pFilePath = (FILEPATH_DEVICE_PATH *)TmpBuf;
|
||||
pFilePath->Header.Type = MEDIA_DEVICE_PATH;
|
||||
pFilePath->Header.SubType = MEDIA_FILEPATH_DP;
|
||||
pFilePath->Header.Length[0] = FileNameLen + sizeof(EFI_DEVICE_PATH_PROTOCOL);
|
||||
pFilePath->Header.Length[1] = 0;
|
||||
CopyMem(pFilePath->PathName, FileName, FileNameLen);
|
||||
|
||||
pImgPath = AppendDevicePathNode(pDevicePath, (EFI_DEVICE_PATH_PROTOCOL *)pFilePath);
|
||||
if (!pImgPath)
|
||||
{
|
||||
return EFI_NOT_FOUND;
|
||||
}
|
||||
|
||||
Status = gBS->LoadImage(FALSE, ImageHandle, pImgPath, NULL, 0, Image);
|
||||
|
||||
debug("Load Image File %r DP: <%s>", Status, ConvertDevicePathToText(pImgPath, FALSE, FALSE));
|
||||
|
||||
FreePool(pImgPath);
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
STATIC EFI_STATUS EFIAPI vdisk_decompress_vdisk(IN EFI_LOADED_IMAGE_PROTOCOL *pImageInfo)
|
||||
{
|
||||
UINT32 Size;
|
||||
UINT32 DestinationSize;
|
||||
UINT32 ScratchSize;
|
||||
UINT8 *buf;
|
||||
VOID *ScratchBuf;
|
||||
EFI_STATUS Status = EFI_SUCCESS;
|
||||
|
||||
(VOID)pImageInfo;
|
||||
|
||||
vdisk_get_vdisk_raw(&buf, &Size);
|
||||
UefiDecompressGetInfo(buf + VDISK_MAGIC_LEN, Size - VDISK_MAGIC_LEN, &DestinationSize, &ScratchSize);
|
||||
debug("vdisk: size:%u realsize:%u", Size, DestinationSize);
|
||||
|
||||
g_disk_buf_size = DestinationSize;
|
||||
g_disk_buf_addr = AllocatePool(DestinationSize);
|
||||
ScratchBuf = AllocatePool(ScratchSize);
|
||||
|
||||
Status = UefiDecompress(buf + VDISK_MAGIC_LEN, g_disk_buf_addr, ScratchBuf);
|
||||
FreePool(ScratchBuf);
|
||||
|
||||
debug("Status:%r %p %u", Status, g_disk_buf_addr, (UINT32)g_disk_buf_size);
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
STATIC EFI_STATUS vdisk_patch_vdisk_path(CHAR16 *pos)
|
||||
{
|
||||
UINTN i;
|
||||
UINTN j;
|
||||
CHAR16 *end;
|
||||
CHAR8 *buf = (char *)g_disk_buf_addr;
|
||||
|
||||
if (*pos == L'\"')
|
||||
{
|
||||
pos++;
|
||||
}
|
||||
|
||||
end = StrStr(pos, L".vtoy");
|
||||
end += 5;//string length
|
||||
|
||||
for (i = 0; i < g_disk_buf_size; i++)
|
||||
{
|
||||
if (*(UINT32 *)(buf + i) == 0x59595959)
|
||||
{
|
||||
for (j = 0; j < 300; j++)
|
||||
{
|
||||
if (buf[i + j] != 'Y')
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (j >= 300)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (i >= g_disk_buf_size)
|
||||
{
|
||||
debug("No need to fill vdisk path");
|
||||
return 0;
|
||||
}
|
||||
|
||||
debug("Fill vdisk path at %d", i);
|
||||
|
||||
while (pos != end)
|
||||
{
|
||||
buf[i++] = (CHAR8)(*pos++);
|
||||
}
|
||||
|
||||
buf[i++] = '\"';
|
||||
|
||||
while (buf[i] == 'Y' || buf[i] == '\"')
|
||||
{
|
||||
buf[i] = ' ';
|
||||
i++;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
EFI_STATUS EFIAPI vdisk_get_variable_wrapper
|
||||
(
|
||||
IN CHAR16 *VariableName,
|
||||
IN EFI_GUID *VendorGuid,
|
||||
OUT UINT32 *Attributes, OPTIONAL
|
||||
IN OUT UINTN *DataSize,
|
||||
OUT VOID *Data OPTIONAL
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status = EFI_SUCCESS;
|
||||
|
||||
Status = g_org_get_variable(VariableName, VendorGuid, Attributes, DataSize, Data);
|
||||
if (StrCmp(VariableName, L"SecureBoot") == 0)
|
||||
{
|
||||
if ((*DataSize == 1) && Data)
|
||||
{
|
||||
*(UINT8 *)Data = 0;
|
||||
}
|
||||
}
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
EFI_STATUS EFIAPI vdisk_exit_boot_service_wrapper
|
||||
(
|
||||
IN EFI_HANDLE ImageHandle,
|
||||
IN UINTN MapKey
|
||||
)
|
||||
{
|
||||
return g_org_exit_boot_service(ImageHandle, MapKey);
|
||||
}
|
||||
|
||||
STATIC EFI_STATUS EFIAPI vdisk_disable_secure_boot(IN EFI_HANDLE ImageHandle)
|
||||
{
|
||||
/* step1: wrapper security protocol. */
|
||||
/* Do we still need it since we have been loaded ? */
|
||||
|
||||
|
||||
/* step2: fake SecureBoot variable */
|
||||
g_org_exit_boot_service = gBS->ExitBootServices;
|
||||
gBS->ExitBootServices = vdisk_exit_boot_service_wrapper;
|
||||
|
||||
g_org_get_variable = gRT->GetVariable;
|
||||
gRT->GetVariable = vdisk_get_variable_wrapper;
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
STATIC EFI_STATUS EFIAPI vdisk_parse_cmdline(IN EFI_HANDLE ImageHandle)
|
||||
{
|
||||
CHAR16 *Pos = NULL;
|
||||
CHAR16 *pCmdLine = NULL;
|
||||
EFI_STATUS Status = EFI_SUCCESS;
|
||||
EFI_LOADED_IMAGE_PROTOCOL *pImageInfo = NULL;
|
||||
|
||||
Status = gBS->HandleProtocol(ImageHandle, &gEfiLoadedImageProtocolGuid, (VOID **)&pImageInfo);
|
||||
if (EFI_ERROR(Status))
|
||||
{
|
||||
VDiskDebug("Failed to handle load image protocol %r\n", Status);
|
||||
return Status;
|
||||
}
|
||||
|
||||
pCmdLine = (CHAR16 *)AllocatePool(pImageInfo->LoadOptionsSize + 4);
|
||||
SetMem(pCmdLine, pImageInfo->LoadOptionsSize + 4, 0);
|
||||
CopyMem(pCmdLine, pImageInfo->LoadOptions, pImageInfo->LoadOptionsSize);
|
||||
|
||||
if (StrStr(pCmdLine, L"debug"))
|
||||
{
|
||||
gVDiskDebugPrint = TRUE;
|
||||
}
|
||||
|
||||
debug("cmdline:<%s>", pCmdLine);
|
||||
vdisk_debug_pause();
|
||||
|
||||
Pos = StrStr(pCmdLine, L"vdisk=");
|
||||
if (NULL == Pos || NULL == StrStr(pCmdLine, L".vtoy"))
|
||||
{
|
||||
VDiskDebug("vdisk parameter not found!\n");
|
||||
return EFI_NOT_FOUND;
|
||||
}
|
||||
|
||||
vdisk_decompress_vdisk(pImageInfo);
|
||||
|
||||
vdisk_patch_vdisk_path(Pos + 6);
|
||||
|
||||
if (StrStr(pCmdLine, L"secureboot=off"))
|
||||
{
|
||||
vdisk_disable_secure_boot(ImageHandle);
|
||||
}
|
||||
|
||||
FreePool(pCmdLine);
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
EFI_STATUS EFIAPI vdisk_boot(IN EFI_HANDLE ImageHandle)
|
||||
{
|
||||
UINTN t = 0;
|
||||
UINTN i = 0;
|
||||
UINTN j = 0;
|
||||
UINTN Find = 0;
|
||||
UINTN Count = 0;
|
||||
EFI_HANDLE Image = NULL;
|
||||
EFI_HANDLE *Handles = NULL;
|
||||
EFI_STATUS Status = EFI_SUCCESS;
|
||||
EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *pFile = NULL;
|
||||
EFI_DEVICE_PATH_PROTOCOL *pDevPath = NULL;
|
||||
|
||||
for (t = 0; t < 3; t++)
|
||||
{
|
||||
Count = 0;
|
||||
Handles = NULL;
|
||||
|
||||
Status = gBS->LocateHandleBuffer(ByProtocol, &gEfiSimpleFileSystemProtocolGuid,
|
||||
NULL, &Count, &Handles);
|
||||
if (EFI_ERROR(Status))
|
||||
{
|
||||
return Status;
|
||||
}
|
||||
|
||||
debug("vdisk_boot fs count:%u", Count);
|
||||
|
||||
for (i = 0; i < Count; i++)
|
||||
{
|
||||
Status = gBS->HandleProtocol(Handles[i], &gEfiSimpleFileSystemProtocolGuid, (VOID **)&pFile);
|
||||
if (EFI_ERROR(Status))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
debug("FS:%u Protocol:%p OpenVolume:%p", i, pFile, pFile->OpenVolume);
|
||||
|
||||
Status = gBS->OpenProtocol(Handles[i], &gEfiDevicePathProtocolGuid,
|
||||
(VOID **)&pDevPath,
|
||||
ImageHandle,
|
||||
Handles[i],
|
||||
EFI_OPEN_PROTOCOL_GET_PROTOCOL);
|
||||
if (EFI_ERROR(Status))
|
||||
{
|
||||
debug("Failed to open device path protocol %r", Status);
|
||||
continue;
|
||||
}
|
||||
|
||||
debug("Handle:%p FS DP: <%s>", Handles[i], ConvertDevicePathToText(pDevPath, FALSE, FALSE));
|
||||
if (CompareMem(gVDiskBlockData.Path, pDevPath, gVDiskBlockData.DevicePathCompareLen))
|
||||
{
|
||||
debug("Not ventoy disk file system");
|
||||
continue;
|
||||
}
|
||||
|
||||
for (j = 1; j < ARRAY_SIZE(gEfiBootFileName); j++)
|
||||
{
|
||||
Status = vdisk_load_image(ImageHandle, pDevPath, gEfiBootFileName[j],
|
||||
StrSize(gEfiBootFileName[j]), &Image);
|
||||
if (EFI_SUCCESS == Status)
|
||||
{
|
||||
break;
|
||||
}
|
||||
debug("Failed to load image %r <%s>", Status, gEfiBootFileName[j]);
|
||||
}
|
||||
|
||||
if (j >= ARRAY_SIZE(gEfiBootFileName))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
Find++;
|
||||
debug("Find boot file, now try to boot .....");
|
||||
vdisk_debug_pause();
|
||||
|
||||
if (gVDiskDebugPrint)
|
||||
{
|
||||
gST->ConIn->Reset(gST->ConIn, FALSE);
|
||||
}
|
||||
|
||||
/* can't add debug print here */
|
||||
//ventoy_wrapper_system();
|
||||
Status = gBS->StartImage(Image, NULL, NULL);
|
||||
if (EFI_ERROR(Status))
|
||||
{
|
||||
debug("Failed to start image %r", Status);
|
||||
sleep(3);
|
||||
gBS->UnloadImage(Image);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
FreePool(Handles);
|
||||
|
||||
if (Find == 0)
|
||||
{
|
||||
debug("Fs not found, now wait and retry...");
|
||||
sleep(2);
|
||||
}
|
||||
}
|
||||
|
||||
if (Find == 0)
|
||||
{
|
||||
return EFI_NOT_FOUND;
|
||||
}
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
EFI_STATUS EFIAPI VDiskChainEfiMain
|
||||
(
|
||||
IN EFI_HANDLE ImageHandle,
|
||||
IN EFI_SYSTEM_TABLE *SystemTable
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status = EFI_SUCCESS;
|
||||
|
||||
gST->ConOut->ClearScreen(gST->ConOut);
|
||||
vdisk_clear_input();
|
||||
|
||||
Status = vdisk_parse_cmdline(ImageHandle);
|
||||
if (EFI_ERROR(Status))
|
||||
{
|
||||
return Status;
|
||||
}
|
||||
|
||||
vdisk_install_blockio(ImageHandle, g_disk_buf_size);
|
||||
vdisk_debug_pause();
|
||||
|
||||
Status = vdisk_boot(ImageHandle);
|
||||
|
||||
gBS->DisconnectController(gVDiskBlockData.Handle, NULL, NULL);
|
||||
gBS->UninstallMultipleProtocolInterfaces(gVDiskBlockData.Handle,
|
||||
&gEfiBlockIoProtocolGuid, &gVDiskBlockData.BlockIo,
|
||||
&gEfiDevicePathProtocolGuid, gVDiskBlockData.Path,
|
||||
NULL);
|
||||
|
||||
if (EFI_NOT_FOUND == Status)
|
||||
{
|
||||
gST->ConOut->OutputString(gST->ConOut, L"No bootfile found for UEFI!\r\n");
|
||||
gST->ConOut->OutputString(gST->ConOut, L"Maybe the image does not support " VENTOY_UEFI_DESC L"!\r\n");
|
||||
sleep(30);
|
||||
}
|
||||
|
||||
vdisk_clear_input();
|
||||
gST->ConOut->ClearScreen(gST->ConOut);
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
@@ -0,0 +1,97 @@
|
||||
/******************************************************************************
|
||||
* VDiskChain.h
|
||||
*
|
||||
* 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/>.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __VENTOY_H__
|
||||
#define __VENTOY_H__
|
||||
|
||||
#define VDISK_MAGIC_LEN 32
|
||||
|
||||
#define VDISK_BLOCK_DEVICE_PATH_GUID \
|
||||
{ 0x6ed2134e, 0xc2ea, 0x4943, { 0x99, 0x54, 0xa7, 0x76, 0xe5, 0x9c, 0x12, 0xc3 }}
|
||||
|
||||
#define VDISK_BLOCK_DEVICE_PATH_NAME L"vdisk"
|
||||
|
||||
#if defined (MDE_CPU_IA32)
|
||||
#define VENTOY_UEFI_DESC L"IA32 UEFI"
|
||||
#elif defined (MDE_CPU_X64)
|
||||
#define VENTOY_UEFI_DESC L"X64 UEFI"
|
||||
#elif defined (MDE_CPU_EBC)
|
||||
#elif defined (MDE_CPU_ARM)
|
||||
#define VENTOY_UEFI_DESC L"ARM UEFI"
|
||||
#elif defined (MDE_CPU_AARCH64)
|
||||
#define VENTOY_UEFI_DESC L"ARM64 UEFI"
|
||||
#else
|
||||
#error Unknown Processor Type
|
||||
#endif
|
||||
|
||||
typedef struct vdisk_block_data
|
||||
{
|
||||
EFI_HANDLE Handle;
|
||||
EFI_BLOCK_IO_MEDIA Media; /* Media descriptor */
|
||||
EFI_BLOCK_IO_PROTOCOL BlockIo; /* Block I/O protocol */
|
||||
|
||||
UINTN DevicePathCompareLen;
|
||||
EFI_DEVICE_PATH_PROTOCOL *Path; /* Device path protocol */
|
||||
|
||||
EFI_HANDLE RawBlockIoHandle;
|
||||
EFI_BLOCK_IO_PROTOCOL *pRawBlockIo;
|
||||
EFI_DEVICE_PATH_PROTOCOL *pDiskDevPath;
|
||||
|
||||
/* ventoy disk part2 ESP */
|
||||
EFI_HANDLE DiskFsHandle;
|
||||
EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *pDiskFs;
|
||||
EFI_DEVICE_PATH_PROTOCOL *pDiskFsDevPath;
|
||||
|
||||
EFI_HANDLE IsoDriverImage;
|
||||
}vdisk_block_data;
|
||||
|
||||
|
||||
#define debug(expr, ...) if (gVDiskDebugPrint) VDiskDebug("[VDISK] "expr"\r\n", ##__VA_ARGS__)
|
||||
#define trace(expr, ...) VDiskDebug("[VDISK] "expr"\r\n", ##__VA_ARGS__)
|
||||
#define sleep(sec) gBS->Stall(1000000 * (sec))
|
||||
|
||||
#define vdisk_debug_pause() \
|
||||
if (gVDiskDebugPrint) \
|
||||
{ \
|
||||
UINTN __Index = 0; \
|
||||
gST->ConOut->OutputString(gST->ConOut, L"[VDISK] ###### Press Enter to continue... ######\r\n");\
|
||||
gST->ConIn->Reset(gST->ConIn, FALSE); \
|
||||
gBS->WaitForEvent(1, &gST->ConIn->WaitForKey, &__Index);\
|
||||
}
|
||||
|
||||
extern BOOLEAN gVDiskDebugPrint;
|
||||
VOID EFIAPI VDiskDebug(IN CONST CHAR8 *Format, ...);
|
||||
EFI_STATUS EFIAPI vdisk_block_io_read
|
||||
(
|
||||
IN EFI_BLOCK_IO_PROTOCOL *This,
|
||||
IN UINT32 MediaId,
|
||||
IN EFI_LBA Lba,
|
||||
IN UINTN BufferSize,
|
||||
OUT VOID *Buffer
|
||||
);
|
||||
|
||||
extern UINT8 *g_disk_buf_addr;
|
||||
extern UINT64 g_disk_buf_size;
|
||||
extern vdisk_block_data gVDiskBlockData;
|
||||
EFI_STATUS EFIAPI vdisk_install_blockio(IN EFI_HANDLE ImageHandle, IN UINT64 ImgSize);
|
||||
int vdisk_get_vdisk_raw(UINT8 **buf, UINT32 *size);
|
||||
|
||||
#endif
|
||||
|
@@ -0,0 +1,82 @@
|
||||
#************************************************************************************
|
||||
# Copyright (c) 2020, longpanda <admin@ventoy.net>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License as
|
||||
# published by the Free Software Foundation; either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
#************************************************************************************
|
||||
|
||||
[Defines]
|
||||
INF_VERSION = 0x00010005
|
||||
BASE_NAME = VDiskChain
|
||||
FILE_GUID = 5bce96e3-ba11-4440-833b-299cf5849193
|
||||
MODULE_TYPE = UEFI_APPLICATION
|
||||
VERSION_STRING = 1.0
|
||||
ENTRY_POINT = VDiskChainEfiMain
|
||||
|
||||
|
||||
[Sources]
|
||||
VDiskChain.h
|
||||
VDiskChain.c
|
||||
VDiskRawData.c
|
||||
VDiskChainProtocol.c
|
||||
|
||||
[Packages]
|
||||
MdePkg/MdePkg.dec
|
||||
MdeModulePkg/MdeModulePkg.dec
|
||||
ShellPkg/ShellPkg.dec
|
||||
|
||||
[LibraryClasses]
|
||||
UefiApplicationEntryPoint
|
||||
UefiLib
|
||||
DebugLib
|
||||
UefiDecompressLib
|
||||
|
||||
[Guids]
|
||||
gShellVariableGuid
|
||||
gEfiVirtualCdGuid
|
||||
gEfiFileInfoGuid
|
||||
|
||||
[Protocols]
|
||||
gEfiLoadedImageProtocolGuid
|
||||
gEfiBlockIoProtocolGuid
|
||||
gEfiDevicePathProtocolGuid
|
||||
gEfiSimpleFileSystemProtocolGuid
|
||||
gEfiRamDiskProtocolGuid
|
||||
gEfiAbsolutePointerProtocolGuid
|
||||
gEfiAcpiTableProtocolGuid
|
||||
gEfiBlockIo2ProtocolGuid
|
||||
gEfiBusSpecificDriverOverrideProtocolGuid
|
||||
gEfiComponentNameProtocolGuid
|
||||
gEfiComponentName2ProtocolGuid
|
||||
gEfiDriverBindingProtocolGuid
|
||||
gEfiDiskIoProtocolGuid
|
||||
gEfiDiskIo2ProtocolGuid
|
||||
gEfiGraphicsOutputProtocolGuid
|
||||
gEfiHiiConfigAccessProtocolGuid
|
||||
gEfiHiiFontProtocolGuid
|
||||
gEfiLoadFileProtocolGuid
|
||||
gEfiLoadFile2ProtocolGuid
|
||||
gEfiLoadedImageProtocolGuid
|
||||
gEfiLoadedImageDevicePathProtocolGuid
|
||||
gEfiPciIoProtocolGuid
|
||||
gEfiSerialIoProtocolGuid
|
||||
gEfiSimpleTextInProtocolGuid
|
||||
gEfiSimpleTextInputExProtocolGuid
|
||||
gEfiSimpleTextOutProtocolGuid
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@@ -0,0 +1,264 @@
|
||||
/******************************************************************************
|
||||
* VDiskChainProtocol.c
|
||||
*
|
||||
* 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 <Uefi.h>
|
||||
#include <Library/DebugLib.h>
|
||||
#include <Library/PrintLib.h>
|
||||
#include <Library/UefiLib.h>
|
||||
#include <Library/BaseMemoryLib.h>
|
||||
#include <Library/DevicePathLib.h>
|
||||
#include <Library/MemoryAllocationLib.h>
|
||||
#include <Library/UefiBootServicesTableLib.h>
|
||||
#include <Library/UefiRuntimeServicesTableLib.h>
|
||||
#include <Library/UefiApplicationEntryPoint.h>
|
||||
#include <Protocol/LoadedImage.h>
|
||||
#include <Guid/FileInfo.h>
|
||||
#include <Guid/FileSystemInfo.h>
|
||||
#include <Protocol/BlockIo.h>
|
||||
#include <Protocol/RamDisk.h>
|
||||
#include <Protocol/SimpleFileSystem.h>
|
||||
#include <VDiskChain.h>
|
||||
|
||||
/* EFI block device vendor device path GUID */
|
||||
EFI_GUID gVDiskBlockDevicePathGuid = VDISK_BLOCK_DEVICE_PATH_GUID;
|
||||
|
||||
EFI_STATUS EFIAPI vdisk_block_io_reset
|
||||
(
|
||||
IN EFI_BLOCK_IO_PROTOCOL *This,
|
||||
IN BOOLEAN ExtendedVerification
|
||||
)
|
||||
{
|
||||
(VOID)This;
|
||||
(VOID)ExtendedVerification;
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
EFI_STATUS EFIAPI vdisk_block_io_flush(IN EFI_BLOCK_IO_PROTOCOL *This)
|
||||
{
|
||||
(VOID)This;
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
EFI_STATUS EFIAPI vdisk_block_io_read
|
||||
(
|
||||
IN EFI_BLOCK_IO_PROTOCOL *This,
|
||||
IN UINT32 MediaId,
|
||||
IN EFI_LBA Lba,
|
||||
IN UINTN BufferSize,
|
||||
OUT VOID *Buffer
|
||||
)
|
||||
{
|
||||
(VOID)This;
|
||||
(VOID)MediaId;
|
||||
|
||||
debug("vdisk_block_io_read %lu %lu\n", Lba, BufferSize / 512);
|
||||
CopyMem(Buffer, g_disk_buf_addr + (Lba * 512), BufferSize);
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
EFI_STATUS EFIAPI vdisk_block_io_write
|
||||
(
|
||||
IN EFI_BLOCK_IO_PROTOCOL *This,
|
||||
IN UINT32 MediaId,
|
||||
IN EFI_LBA Lba,
|
||||
IN UINTN BufferSize,
|
||||
IN VOID *Buffer
|
||||
)
|
||||
{
|
||||
(VOID)This;
|
||||
(VOID)MediaId;
|
||||
(VOID)Buffer;
|
||||
|
||||
debug("vdisk_block_io_read %lu %lu\n", Lba, BufferSize / 512);
|
||||
return EFI_WRITE_PROTECTED;
|
||||
}
|
||||
|
||||
EFI_STATUS EFIAPI vdisk_fill_device_path(VOID)
|
||||
{
|
||||
UINTN NameLen = 0;
|
||||
UINT8 TmpBuf[128] = {0};
|
||||
VENDOR_DEVICE_PATH *venPath = NULL;
|
||||
|
||||
venPath = (VENDOR_DEVICE_PATH *)TmpBuf;
|
||||
NameLen = StrSize(VDISK_BLOCK_DEVICE_PATH_NAME);
|
||||
venPath->Header.Type = HARDWARE_DEVICE_PATH;
|
||||
venPath->Header.SubType = HW_VENDOR_DP;
|
||||
venPath->Header.Length[0] = sizeof(VENDOR_DEVICE_PATH) + NameLen;
|
||||
venPath->Header.Length[1] = 0;
|
||||
CopyMem(&venPath->Guid, &gVDiskBlockDevicePathGuid, sizeof(EFI_GUID));
|
||||
CopyMem(venPath + 1, VDISK_BLOCK_DEVICE_PATH_NAME, NameLen);
|
||||
|
||||
gVDiskBlockData.Path = AppendDevicePathNode(NULL, (EFI_DEVICE_PATH_PROTOCOL *)TmpBuf);
|
||||
gVDiskBlockData.DevicePathCompareLen = sizeof(VENDOR_DEVICE_PATH) + NameLen;
|
||||
|
||||
debug("gVDiskBlockData.Path=<%s>\n", ConvertDevicePathToText(gVDiskBlockData.Path, FALSE, FALSE));
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
EFI_STATUS EFIAPI vdisk_connect_driver(IN EFI_HANDLE ControllerHandle, IN CONST CHAR16 *DrvName)
|
||||
{
|
||||
UINTN i = 0;
|
||||
UINTN Count = 0;
|
||||
CHAR16 *DriverName = NULL;
|
||||
EFI_HANDLE *Handles = NULL;
|
||||
EFI_HANDLE DrvHandles[2] = { NULL };
|
||||
EFI_STATUS Status = EFI_SUCCESS;
|
||||
EFI_COMPONENT_NAME_PROTOCOL *NameProtocol = NULL;
|
||||
EFI_COMPONENT_NAME2_PROTOCOL *Name2Protocol = NULL;
|
||||
|
||||
debug("vdisk_connect_driver <%s>...", DrvName);
|
||||
|
||||
Status = gBS->LocateHandleBuffer(ByProtocol, &gEfiComponentName2ProtocolGuid,
|
||||
NULL, &Count, &Handles);
|
||||
if (EFI_ERROR(Status))
|
||||
{
|
||||
return Status;
|
||||
}
|
||||
|
||||
for (i = 0; i < Count; i++)
|
||||
{
|
||||
Status = gBS->HandleProtocol(Handles[i], &gEfiComponentName2ProtocolGuid, (VOID **)&Name2Protocol);
|
||||
if (EFI_ERROR(Status))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
Status = Name2Protocol->GetDriverName(Name2Protocol, "en", &DriverName);
|
||||
if (EFI_ERROR(Status) || NULL == DriverName)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (StrStr(DriverName, DrvName))
|
||||
{
|
||||
debug("Find driver name2:<%s>: <%s>", DriverName, DrvName);
|
||||
DrvHandles[0] = Handles[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (i < Count)
|
||||
{
|
||||
Status = gBS->ConnectController(ControllerHandle, DrvHandles, NULL, TRUE);
|
||||
debug("vdisk_connect_driver:<%s> <%r>", DrvName, Status);
|
||||
goto end;
|
||||
}
|
||||
|
||||
debug("%s NOT found, now try COMPONENT_NAME", DrvName);
|
||||
|
||||
Count = 0;
|
||||
FreePool(Handles);
|
||||
Handles = NULL;
|
||||
|
||||
Status = gBS->LocateHandleBuffer(ByProtocol, &gEfiComponentNameProtocolGuid,
|
||||
NULL, &Count, &Handles);
|
||||
if (EFI_ERROR(Status))
|
||||
{
|
||||
return Status;
|
||||
}
|
||||
|
||||
for (i = 0; i < Count; i++)
|
||||
{
|
||||
Status = gBS->HandleProtocol(Handles[i], &gEfiComponentNameProtocolGuid, (VOID **)&NameProtocol);
|
||||
if (EFI_ERROR(Status))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
Status = NameProtocol->GetDriverName(NameProtocol, "en", &DriverName);
|
||||
if (EFI_ERROR(Status))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (StrStr(DriverName, DrvName))
|
||||
{
|
||||
debug("Find driver name:<%s>: <%s>", DriverName, DrvName);
|
||||
DrvHandles[0] = Handles[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (i < Count)
|
||||
{
|
||||
Status = gBS->ConnectController(ControllerHandle, DrvHandles, NULL, TRUE);
|
||||
debug("vdisk_connect_driver:<%s> <%r>", DrvName, Status);
|
||||
goto end;
|
||||
}
|
||||
|
||||
Status = EFI_NOT_FOUND;
|
||||
|
||||
end:
|
||||
FreePool(Handles);
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
EFI_STATUS EFIAPI vdisk_install_blockio(IN EFI_HANDLE ImageHandle, IN UINT64 ImgSize)
|
||||
{
|
||||
EFI_STATUS Status = EFI_SUCCESS;
|
||||
EFI_BLOCK_IO_PROTOCOL *pBlockIo = &(gVDiskBlockData.BlockIo);
|
||||
|
||||
vdisk_fill_device_path();
|
||||
|
||||
debug("install block io protocol %p", ImageHandle);
|
||||
vdisk_debug_pause();
|
||||
|
||||
gVDiskBlockData.Media.BlockSize = 512;
|
||||
gVDiskBlockData.Media.LastBlock = ImgSize / 512 - 1;
|
||||
gVDiskBlockData.Media.ReadOnly = TRUE;
|
||||
gVDiskBlockData.Media.MediaPresent = 1;
|
||||
gVDiskBlockData.Media.LogicalBlocksPerPhysicalBlock = 1;
|
||||
|
||||
pBlockIo->Revision = EFI_BLOCK_IO_PROTOCOL_REVISION3;
|
||||
pBlockIo->Media = &(gVDiskBlockData.Media);
|
||||
pBlockIo->Reset = vdisk_block_io_reset;
|
||||
pBlockIo->ReadBlocks = vdisk_block_io_read;
|
||||
pBlockIo->WriteBlocks = vdisk_block_io_write;
|
||||
pBlockIo->FlushBlocks = vdisk_block_io_flush;
|
||||
|
||||
Status = gBS->InstallMultipleProtocolInterfaces(&gVDiskBlockData.Handle,
|
||||
&gEfiBlockIoProtocolGuid, &gVDiskBlockData.BlockIo,
|
||||
&gEfiDevicePathProtocolGuid, gVDiskBlockData.Path,
|
||||
NULL);
|
||||
debug("Install protocol %r %p", Status, gVDiskBlockData.Handle);
|
||||
if (EFI_ERROR(Status))
|
||||
{
|
||||
return Status;
|
||||
}
|
||||
|
||||
Status = vdisk_connect_driver(gVDiskBlockData.Handle, L"Disk I/O Driver");
|
||||
debug("Connect disk IO driver %r", Status);
|
||||
|
||||
Status = vdisk_connect_driver(gVDiskBlockData.Handle, L"Partition Driver");
|
||||
debug("Connect partition driver %r", Status);
|
||||
if (EFI_ERROR(Status))
|
||||
{
|
||||
Status = gBS->ConnectController(gVDiskBlockData.Handle, NULL, NULL, TRUE);
|
||||
debug("Connect all controller %r", Status);
|
||||
}
|
||||
|
||||
vdisk_debug_pause();
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
@@ -0,0 +1,2 @@
|
||||
#include <Uefi.h>
|
||||
int vdisk_get_vdisk_raw(UINT8 **buf, UINT32 *size) { *buf = NULL; *size = 0; return 0; }
|
@@ -205,6 +205,7 @@
|
||||
[Components]
|
||||
MdeModulePkg/Application/Ventoy/Ventoy.inf
|
||||
MdeModulePkg/Application/VtoyUtil/VtoyUtil.inf
|
||||
MdeModulePkg/Application/VDiskChain/VDiskChain.inf
|
||||
MdeModulePkg/Application/HelloWorld/HelloWorld.inf
|
||||
MdeModulePkg/Application/DumpDynPcd/DumpDynPcd.inf
|
||||
MdeModulePkg/Application/MemoryProfileInfo/MemoryProfileInfo.inf
|
||||
|
@@ -12,13 +12,15 @@ else
|
||||
fi
|
||||
|
||||
#
|
||||
# use mini-native-x86_64 UCLIBC to build for x86_64
|
||||
# use musl-c to build for x86_64
|
||||
#
|
||||
|
||||
export C_INCLUDE_PATH=$LIBFUSE_DIR/include
|
||||
|
||||
rm -f $name
|
||||
gcc -static -O2 -D_FILE_OFFSET_BITS=64 vtoy_fuse_iso.c -o $name $LIBFUSE_DIR/lib/libfuse.a -lpthread -ldl $opt
|
||||
gcc -specs "/usr/local/musl/lib/musl-gcc.specs" -static -O2 -D_FILE_OFFSET_BITS=64 vtoy_fuse_iso.c $LIBFUSE_DIR/lib/libfuse.a -o $name
|
||||
|
||||
strip --strip-all $name
|
||||
|
||||
if [ -e $name ]; then
|
||||
echo -e "\n############### SUCCESS $name ##################\n"
|
||||
|
@@ -33,7 +33,7 @@ fi
|
||||
|
||||
./makeconf.sh
|
||||
|
||||
./configure --prefix="$LIBFUSE_DIR"
|
||||
./configure --prefix="$LIBFUSE_DIR" CFLAGS='-specs /usr/local/musl/lib/musl-gcc.specs'
|
||||
make -j 16
|
||||
make install
|
||||
cd ..
|
||||
|
Binary file not shown.
Binary file not shown.
@@ -1600,6 +1600,11 @@ module = {
|
||||
common = ventoy/miniz.c;
|
||||
};
|
||||
|
||||
module = {
|
||||
name = setkey;
|
||||
common = term/setkey.c;
|
||||
};
|
||||
|
||||
module = {
|
||||
name = hello;
|
||||
common = hello/hello.c;
|
||||
|
@@ -735,6 +735,8 @@ grub_iso9660_iterate_dir (grub_fshelp_node_t dir,
|
||||
{
|
||||
if ((dirent.flags & FLAG_TYPE) == FLAG_TYPE_DIR)
|
||||
ctx.type = GRUB_FSHELP_DIR;
|
||||
else if ((dirent.flags & FLAG_TYPE) == 3)
|
||||
ctx.type = GRUB_FSHELP_DIR;
|
||||
else
|
||||
ctx.type = GRUB_FSHELP_REG;
|
||||
}
|
||||
|
133
GRUB2/MOD_SRC/grub-2.04/grub-core/kern/term.c
Normal file
133
GRUB2/MOD_SRC/grub-2.04/grub-core/kern/term.c
Normal file
@@ -0,0 +1,133 @@
|
||||
/*
|
||||
* GRUB -- GRand Unified Bootloader
|
||||
* Copyright (C) 2002,2003,2005,2007,2008,2009 Free Software Foundation, Inc.
|
||||
*
|
||||
* GRUB is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* GRUB is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GRUB. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <grub/term.h>
|
||||
#include <grub/err.h>
|
||||
#include <grub/mm.h>
|
||||
#include <grub/misc.h>
|
||||
#include <grub/env.h>
|
||||
#include <grub/time.h>
|
||||
|
||||
struct grub_term_output *grub_term_outputs_disabled;
|
||||
struct grub_term_input *grub_term_inputs_disabled;
|
||||
struct grub_term_output *grub_term_outputs;
|
||||
struct grub_term_input *grub_term_inputs;
|
||||
|
||||
/* Current color state. */
|
||||
grub_uint8_t grub_term_normal_color = GRUB_TERM_DEFAULT_NORMAL_COLOR;
|
||||
grub_uint8_t grub_term_highlight_color = GRUB_TERM_DEFAULT_HIGHLIGHT_COLOR;
|
||||
|
||||
void (*grub_term_poll_usb) (int wait_for_completion) = NULL;
|
||||
void (*grub_net_poll_cards_idle) (void) = NULL;
|
||||
|
||||
/* Put a Unicode character. */
|
||||
static void
|
||||
grub_putcode_dumb (grub_uint32_t code,
|
||||
struct grub_term_output *term)
|
||||
{
|
||||
struct grub_unicode_glyph c =
|
||||
{
|
||||
.base = code,
|
||||
.variant = 0,
|
||||
.attributes = 0,
|
||||
.ncomb = 0,
|
||||
.estimated_width = 1
|
||||
};
|
||||
|
||||
if (code == '\t' && term->getxy)
|
||||
{
|
||||
int n;
|
||||
|
||||
n = GRUB_TERM_TAB_WIDTH - ((term->getxy (term).x)
|
||||
% GRUB_TERM_TAB_WIDTH);
|
||||
while (n--)
|
||||
grub_putcode_dumb (' ', term);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
(term->putchar) (term, &c);
|
||||
if (code == '\n')
|
||||
grub_putcode_dumb ('\r', term);
|
||||
}
|
||||
|
||||
static void
|
||||
grub_xputs_dumb (const char *str)
|
||||
{
|
||||
for (; *str; str++)
|
||||
{
|
||||
grub_term_output_t term;
|
||||
grub_uint32_t code = *str;
|
||||
if (code > 0x7f)
|
||||
code = '?';
|
||||
|
||||
FOR_ACTIVE_TERM_OUTPUTS(term)
|
||||
grub_putcode_dumb (code, term);
|
||||
}
|
||||
}
|
||||
|
||||
void (*grub_xputs) (const char *str) = grub_xputs_dumb;
|
||||
|
||||
int (*grub_key_remap)(int key) = NULL;
|
||||
int
|
||||
grub_getkey_noblock (void)
|
||||
{
|
||||
grub_term_input_t term;
|
||||
|
||||
if (grub_term_poll_usb)
|
||||
grub_term_poll_usb (0);
|
||||
|
||||
if (grub_net_poll_cards_idle)
|
||||
grub_net_poll_cards_idle ();
|
||||
|
||||
FOR_ACTIVE_TERM_INPUTS(term)
|
||||
{
|
||||
int key = term->getkey (term);
|
||||
if (grub_key_remap)
|
||||
key = grub_key_remap(key);
|
||||
if (key != GRUB_TERM_NO_KEY)
|
||||
return key;
|
||||
}
|
||||
|
||||
return GRUB_TERM_NO_KEY;
|
||||
}
|
||||
|
||||
int
|
||||
grub_getkey (void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
grub_refresh ();
|
||||
|
||||
while (1)
|
||||
{
|
||||
ret = grub_getkey_noblock ();
|
||||
if (ret != GRUB_TERM_NO_KEY)
|
||||
return ret;
|
||||
grub_cpu_idle ();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
grub_refresh (void)
|
||||
{
|
||||
struct grub_term_output *term;
|
||||
|
||||
FOR_ACTIVE_TERM_OUTPUTS(term)
|
||||
grub_term_refresh (term);
|
||||
}
|
362
GRUB2/MOD_SRC/grub-2.04/grub-core/term/setkey.c
Normal file
362
GRUB2/MOD_SRC/grub-2.04/grub-core/term/setkey.c
Normal file
@@ -0,0 +1,362 @@
|
||||
/*
|
||||
* GRUB -- GRand Unified Bootloader
|
||||
* Copyright (C) 2020 Free Software Foundation, Inc.
|
||||
*
|
||||
* GRUB is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* GRUB is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GRUB. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <grub/types.h>
|
||||
#include <grub/misc.h>
|
||||
#include <grub/mm.h>
|
||||
#include <grub/env.h>
|
||||
#include <grub/err.h>
|
||||
#include <grub/dl.h>
|
||||
#include <grub/extcmd.h>
|
||||
#include <grub/i18n.h>
|
||||
#include <grub/term.h>
|
||||
|
||||
GRUB_MOD_LICENSE ("GPLv3+");
|
||||
|
||||
#define MAX_KEYMAP 255
|
||||
|
||||
struct keymap
|
||||
{
|
||||
int cnt;
|
||||
int in[MAX_KEYMAP];
|
||||
int out[MAX_KEYMAP];
|
||||
};
|
||||
|
||||
static struct keymap setkey_keymap;
|
||||
|
||||
struct keysym
|
||||
{
|
||||
const char *name; /* the name in unshifted state */
|
||||
int code; /* scan code */
|
||||
};
|
||||
|
||||
/* The table for key symbols. (from GRUB4DOS) */
|
||||
static struct keysym keysym_table[] =
|
||||
{
|
||||
{"escape", GRUB_TERM_ESC}, // ESC
|
||||
{"exclam", 0x21}, // '!'
|
||||
{"at", 0x40}, // '@'
|
||||
{"numbersign", 0x23}, // '#'
|
||||
{"dollar", 0x24}, // '$'
|
||||
{"percent", 0x25}, // '%'
|
||||
{"caret", 0x5E}, // '^'
|
||||
{"ampersand", 0x26}, // '&'
|
||||
{"asterisk", 0x2A}, // '*'
|
||||
{"parenleft", 0x28}, // '('
|
||||
{"parenright", 0x29}, // ')'
|
||||
{"minus", 0x2D}, // '-'
|
||||
{"underscore", 0x5F}, // '_'
|
||||
{"equal", 0x3D}, // '='
|
||||
{"plus", 0x2B}, // '+'
|
||||
{"backspace", GRUB_TERM_BACKSPACE}, // BS
|
||||
{"ctrlbackspace", GRUB_TERM_CTRL | GRUB_TERM_BACKSPACE}, // (DEL)
|
||||
{"tab", GRUB_TERM_TAB}, // Tab
|
||||
{"bracketleft", 0x5B}, // '['
|
||||
{"braceleft", 0x7B}, // '{'
|
||||
{"bracketright", 0x5D}, // ']'
|
||||
{"braceright", 0x7D}, // '}'
|
||||
{"enter", 0x0D}, // Enter
|
||||
{"semicolon", 0x3B}, // ';'
|
||||
{"colon", 0x3A}, // ':'
|
||||
{"quote", 0x27}, // '\''
|
||||
{"doublequote", 0x22}, // '"'
|
||||
{"backquote", 0x60}, // '`'
|
||||
{"tilde", 0x7E}, // '~'
|
||||
{"backslash", 0x5C}, // '\\'
|
||||
{"bar", 0x7C}, // '|'
|
||||
{"comma", 0x2C}, // ','
|
||||
{"less", 0x3C}, // '<'
|
||||
{"period", 0x2E}, // '.'
|
||||
{"greater", 0x3E}, // '>'
|
||||
{"slash", 0x2F}, // '/'
|
||||
{"question", 0x3F}, // '?'
|
||||
{"space", 0x20}, // Space
|
||||
{"F1", GRUB_TERM_KEY_F1},
|
||||
{"F2", GRUB_TERM_KEY_F2},
|
||||
{"F3", GRUB_TERM_KEY_F3},
|
||||
{"F4", GRUB_TERM_KEY_F4},
|
||||
{"F5", GRUB_TERM_KEY_F5},
|
||||
{"F6", GRUB_TERM_KEY_F6},
|
||||
{"F7", GRUB_TERM_KEY_F7},
|
||||
{"F8", GRUB_TERM_KEY_F8},
|
||||
{"F9", GRUB_TERM_KEY_F9},
|
||||
{"F10", GRUB_TERM_KEY_F10},
|
||||
{"F11", GRUB_TERM_KEY_F11},
|
||||
{"F12", GRUB_TERM_KEY_F12},
|
||||
{"home", GRUB_TERM_KEY_HOME},
|
||||
{"uparrow", GRUB_TERM_KEY_UP},
|
||||
{"pageup", GRUB_TERM_KEY_NPAGE}, // PgUp
|
||||
{"leftarrow", GRUB_TERM_KEY_LEFT},
|
||||
{"center", GRUB_TERM_KEY_CENTER}, // keypad center key
|
||||
{"rightarrow", GRUB_TERM_KEY_RIGHT},
|
||||
{"end", GRUB_TERM_KEY_END},
|
||||
{"downarrow", GRUB_TERM_KEY_DOWN},
|
||||
{"pagedown", GRUB_TERM_KEY_PPAGE}, // PgDn
|
||||
{"insert", GRUB_TERM_KEY_INSERT}, // Insert
|
||||
{"delete", GRUB_TERM_KEY_DC}, // Delete
|
||||
{"shiftF1", GRUB_TERM_SHIFT | GRUB_TERM_KEY_F1},
|
||||
{"shiftF2", GRUB_TERM_SHIFT | GRUB_TERM_KEY_F2},
|
||||
{"shiftF3", GRUB_TERM_SHIFT | GRUB_TERM_KEY_F3},
|
||||
{"shiftF4", GRUB_TERM_SHIFT | GRUB_TERM_KEY_F4},
|
||||
{"shiftF5", GRUB_TERM_SHIFT | GRUB_TERM_KEY_F5},
|
||||
{"shiftF6", GRUB_TERM_SHIFT | GRUB_TERM_KEY_F6},
|
||||
{"shiftF7", GRUB_TERM_SHIFT | GRUB_TERM_KEY_F7},
|
||||
{"shiftF8", GRUB_TERM_SHIFT | GRUB_TERM_KEY_F8},
|
||||
{"shiftF9", GRUB_TERM_SHIFT | GRUB_TERM_KEY_F9},
|
||||
{"shiftF10", GRUB_TERM_SHIFT | GRUB_TERM_KEY_F10},
|
||||
{"shiftF11", GRUB_TERM_SHIFT | GRUB_TERM_KEY_F11},
|
||||
{"shiftF12", GRUB_TERM_SHIFT | GRUB_TERM_KEY_F12},
|
||||
{"ctrlF1", GRUB_TERM_CTRL | GRUB_TERM_KEY_F1},
|
||||
{"ctrlF2", GRUB_TERM_CTRL | GRUB_TERM_KEY_F2},
|
||||
{"ctrlF3", GRUB_TERM_CTRL | GRUB_TERM_KEY_F3},
|
||||
{"ctrlF4", GRUB_TERM_CTRL | GRUB_TERM_KEY_F4},
|
||||
{"ctrlF5", GRUB_TERM_CTRL | GRUB_TERM_KEY_F5},
|
||||
{"ctrlF6", GRUB_TERM_CTRL | GRUB_TERM_KEY_F6},
|
||||
{"ctrlF7", GRUB_TERM_CTRL | GRUB_TERM_KEY_F7},
|
||||
{"ctrlF8", GRUB_TERM_CTRL | GRUB_TERM_KEY_F8},
|
||||
{"ctrlF9", GRUB_TERM_CTRL | GRUB_TERM_KEY_F9},
|
||||
{"ctrlF10", GRUB_TERM_CTRL | GRUB_TERM_KEY_F10},
|
||||
{"ctrlF11", GRUB_TERM_CTRL | GRUB_TERM_KEY_F11},
|
||||
{"ctrlF12", GRUB_TERM_CTRL | GRUB_TERM_KEY_F12},
|
||||
// A=Alt or AltGr. Provided by steve.
|
||||
{"Aq", GRUB_TERM_ALT | 0x71},
|
||||
{"Aw", GRUB_TERM_ALT | 0x77},
|
||||
{"Ae", GRUB_TERM_ALT | 0x65},
|
||||
{"Ar", GRUB_TERM_ALT | 0x72},
|
||||
{"At", GRUB_TERM_ALT | 0x74},
|
||||
{"Ay", GRUB_TERM_ALT | 0x79},
|
||||
{"Au", GRUB_TERM_ALT | 0x75},
|
||||
{"Ai", GRUB_TERM_ALT | 0x69},
|
||||
{"Ao", GRUB_TERM_ALT | 0x6F},
|
||||
{"Ap", GRUB_TERM_ALT | 0x70},
|
||||
{"Aa", GRUB_TERM_ALT | 0x61},
|
||||
{"As", GRUB_TERM_ALT | 0x73},
|
||||
{"Ad", GRUB_TERM_ALT | 0x64},
|
||||
{"Af", GRUB_TERM_ALT | 0x66},
|
||||
{"Ag", GRUB_TERM_ALT | 0x67},
|
||||
{"Ah", GRUB_TERM_ALT | 0x68},
|
||||
{"Aj", GRUB_TERM_ALT | 0x6A},
|
||||
{"Ak", GRUB_TERM_ALT | 0x6B},
|
||||
{"Al", GRUB_TERM_ALT | 0x6C},
|
||||
{"Az", GRUB_TERM_ALT | 0x7A},
|
||||
{"Ax", GRUB_TERM_ALT | 0x78},
|
||||
{"Ac", GRUB_TERM_ALT | 0x63},
|
||||
{"Av", GRUB_TERM_ALT | 0x76},
|
||||
{"Ab", GRUB_TERM_ALT | 0x62},
|
||||
{"An", GRUB_TERM_ALT | 0x6E},
|
||||
{"Am", GRUB_TERM_ALT | 0x6D},
|
||||
{"A1", GRUB_TERM_ALT | 0x31},
|
||||
{"A2", GRUB_TERM_ALT | 0x32},
|
||||
{"A3", GRUB_TERM_ALT | 0x33},
|
||||
{"A4", GRUB_TERM_ALT | 0x34},
|
||||
{"A5", GRUB_TERM_ALT | 0x35},
|
||||
{"A6", GRUB_TERM_ALT | 0x36},
|
||||
{"A7", GRUB_TERM_ALT | 0x37},
|
||||
{"A8", GRUB_TERM_ALT | 0x38},
|
||||
{"A9", GRUB_TERM_ALT | 0x39},
|
||||
{"A0", GRUB_TERM_ALT | 0x30},
|
||||
//{"oem102", 0x5c},
|
||||
//{"shiftoem102", 0x7c},
|
||||
{"Aminus", GRUB_TERM_ALT | 0x2D},
|
||||
{"Aequal", GRUB_TERM_ALT | 0x3D},
|
||||
{"Abracketleft", GRUB_TERM_ALT | 0x5B},
|
||||
{"Abracketright", GRUB_TERM_ALT | 0x5D},
|
||||
{"Asemicolon", GRUB_TERM_ALT | 0x3B},
|
||||
{"Aquote", GRUB_TERM_ALT | 0x27},
|
||||
{"Abackquote", GRUB_TERM_ALT | 0x60},
|
||||
{"Abackslash", GRUB_TERM_ALT | 0x5C},
|
||||
{"Acomma", GRUB_TERM_ALT | 0x2C},
|
||||
{"Aperiod", GRUB_TERM_ALT | 0x2E},
|
||||
{"Aslash", GRUB_TERM_ALT | 0x2F},
|
||||
{"Acolon", GRUB_TERM_ALT | 0x3A},
|
||||
{"Aplus", GRUB_TERM_ALT | 0x2B},
|
||||
{"Aless", GRUB_TERM_ALT | 0x3C},
|
||||
{"Aunderscore", GRUB_TERM_ALT | 0x5F},
|
||||
{"Agreater", GRUB_TERM_ALT | 0x3E},
|
||||
{"Aquestion", GRUB_TERM_ALT | 0x3F},
|
||||
{"Atilde", GRUB_TERM_ALT | 0x7E},
|
||||
{"Abraceleft", GRUB_TERM_ALT | 0x7B},
|
||||
{"Abar", GRUB_TERM_ALT | 0x7C},
|
||||
{"Abraceright", GRUB_TERM_ALT | 0x7D},
|
||||
{"Adoublequote", GRUB_TERM_ALT | 0x22},
|
||||
};
|
||||
|
||||
static int grub_keymap_getkey (int key)
|
||||
{
|
||||
int i;
|
||||
if (key == GRUB_TERM_NO_KEY)
|
||||
return key;
|
||||
if (setkey_keymap.cnt > MAX_KEYMAP)
|
||||
setkey_keymap.cnt = MAX_KEYMAP;
|
||||
for (i = 0; i < setkey_keymap.cnt; i++)
|
||||
{
|
||||
if (key == setkey_keymap.in[i])
|
||||
{
|
||||
key = setkey_keymap.out[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
return key;
|
||||
}
|
||||
|
||||
static void
|
||||
grub_keymap_reset (void)
|
||||
{
|
||||
grub_memset (&setkey_keymap, 0, sizeof (struct keymap));
|
||||
}
|
||||
|
||||
static grub_err_t
|
||||
grub_keymap_add (int in, int out)
|
||||
{
|
||||
if (in == GRUB_TERM_NO_KEY || out == GRUB_TERM_NO_KEY)
|
||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, "invalid key: %d -> %d", in, out);
|
||||
if (setkey_keymap.cnt >= MAX_KEYMAP)
|
||||
return grub_error (GRUB_ERR_OUT_OF_MEMORY,
|
||||
"keymap FULL %d", setkey_keymap.cnt);
|
||||
setkey_keymap.in[setkey_keymap.cnt] = in;
|
||||
setkey_keymap.out[setkey_keymap.cnt] = out;
|
||||
setkey_keymap.cnt++;
|
||||
return GRUB_ERR_NONE;
|
||||
}
|
||||
|
||||
static void
|
||||
grub_keymap_enable (void)
|
||||
{
|
||||
grub_key_remap = grub_keymap_getkey;
|
||||
}
|
||||
|
||||
static void
|
||||
grub_keymap_disable (void)
|
||||
{
|
||||
grub_key_remap = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
grub_keymap_status (void)
|
||||
{
|
||||
int i;
|
||||
if (setkey_keymap.cnt > MAX_KEYMAP)
|
||||
setkey_keymap.cnt = MAX_KEYMAP;
|
||||
for (i = 0; i < setkey_keymap.cnt; i++)
|
||||
{
|
||||
grub_printf ("0x%x -> 0x%x\n", setkey_keymap.in[i], setkey_keymap.out[i]);
|
||||
}
|
||||
}
|
||||
|
||||
static const struct grub_arg_option options[] =
|
||||
{
|
||||
{"reset", 'r', 0, N_("Reset keymap."), 0, 0},
|
||||
{"enable", 'e', 0, N_("Enable keymap."), 0, 0},
|
||||
{"disable", 'd', 0, N_("Disable keymap."), 0, 0},
|
||||
{"status", 's', 0, N_("Display keymap."), 0, 0},
|
||||
{0, 0, 0, 0, 0, 0}
|
||||
};
|
||||
|
||||
enum options
|
||||
{
|
||||
SETKEY_RESET,
|
||||
SETKEY_ENABLE,
|
||||
SETKEY_DISABLE,
|
||||
SETKEY_STATUS,
|
||||
};
|
||||
|
||||
static int
|
||||
ishex (const char *str)
|
||||
{
|
||||
if (grub_strlen (str) < 3 || str[0] != '0')
|
||||
return 0;
|
||||
if (str[1] != 'x' && str[1] != 'X')
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int
|
||||
parse_key (const char *str)
|
||||
{
|
||||
int i;
|
||||
if (ishex (str))
|
||||
return grub_strtol (str, NULL, 16);
|
||||
if (grub_strlen (str) == 1)
|
||||
return (int) str[0];
|
||||
for (i = 0; i < (int) (sizeof (keysym_table) / sizeof (keysym_table[0])); i++)
|
||||
{
|
||||
if (grub_strcmp (str, keysym_table[i].name) == 0)
|
||||
return keysym_table[i].code;
|
||||
}
|
||||
grub_error (GRUB_ERR_BAD_ARGUMENT, "invalid key %s", str);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static grub_err_t
|
||||
grub_cmd_setkey (grub_extcmd_context_t ctxt, int argc, char **args)
|
||||
{
|
||||
struct grub_arg_list *state = ctxt->state;
|
||||
int in, out;
|
||||
if (state[SETKEY_ENABLE].set)
|
||||
{
|
||||
grub_keymap_enable ();
|
||||
goto out;
|
||||
}
|
||||
if (state[SETKEY_DISABLE].set)
|
||||
{
|
||||
grub_keymap_disable ();
|
||||
goto out;
|
||||
}
|
||||
if (state[SETKEY_RESET].set)
|
||||
{
|
||||
grub_keymap_reset ();
|
||||
goto out;
|
||||
}
|
||||
if (state[SETKEY_STATUS].set)
|
||||
{
|
||||
grub_keymap_status ();
|
||||
goto out;
|
||||
}
|
||||
if (argc != 2)
|
||||
{
|
||||
grub_printf
|
||||
("Key names: 0-9, A-Z, a-z or escape, exclam, at, numbersign, dollar,"
|
||||
"percent, caret, ampersand, asterisk, parenleft, parenright, minus,"
|
||||
"underscore, equal, plus, backspace, tab, bracketleft, braceleft,"
|
||||
"bracketright, braceright, enter, semicolon, colon, quote, doublequote,"
|
||||
"backquote, tilde, backslash, bar, comma, less, period, greater,"
|
||||
"slash, question, alt, space, delete, [ctrl|shift]F1-12."
|
||||
"For Alt+ prefix with A, e.g. \'setkey at Aequal\'.");
|
||||
goto out;
|
||||
}
|
||||
in = parse_key (args[1]);
|
||||
out = parse_key (args[0]);
|
||||
if (!in || !out)
|
||||
goto out;
|
||||
grub_keymap_add (in, out);
|
||||
out:
|
||||
return grub_errno;
|
||||
}
|
||||
|
||||
static grub_extcmd_t cmd;
|
||||
|
||||
GRUB_MOD_INIT(setkey)
|
||||
{
|
||||
cmd = grub_register_extcmd ("setkey", grub_cmd_setkey, 0, N_("NEW_KEY USA_KEY"),
|
||||
N_("Map default USA_KEY to NEW_KEY."), options);
|
||||
}
|
||||
|
||||
GRUB_MOD_FINI(setkey)
|
||||
{
|
||||
grub_unregister_extcmd (cmd);
|
||||
}
|
2587
GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/miniz.c
Normal file
2587
GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/miniz.c
Normal file
File diff suppressed because it is too large
Load Diff
2
GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/miniz.h
Normal file
2
GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/miniz.h
Normal file
@@ -0,0 +1,2 @@
|
||||
#define MINIZ_HEADER_FILE_ONLY
|
||||
#include "miniz.c"
|
@@ -36,6 +36,7 @@
|
||||
#include <grub/misc.h>
|
||||
#include <grub/kernel.h>
|
||||
#ifdef GRUB_MACHINE_EFI
|
||||
#include <grub/efi/api.h>
|
||||
#include <grub/efi/efi.h>
|
||||
#endif
|
||||
#include <grub/time.h>
|
||||
@@ -122,6 +123,10 @@ static int g_video_mode_max = 0;
|
||||
static int g_video_mode_num = 0;
|
||||
static ventoy_video_mode *g_video_mode_list = NULL;
|
||||
|
||||
static int g_enumerate_time_checked = 0;
|
||||
static grub_uint64_t g_enumerate_start_time_ms;
|
||||
static grub_uint64_t g_enumerate_finish_time_ms;
|
||||
|
||||
static const char *g_menu_class[] =
|
||||
{
|
||||
"vtoyiso", "vtoywim", "vtoyefi", "vtoyimg", "vtoyvhd", "vtoyvtoy"
|
||||
@@ -534,6 +539,26 @@ static grub_err_t ventoy_cmd_incr(grub_extcmd_context_t ctxt, int argc, char **a
|
||||
VENTOY_CMD_RETURN(GRUB_ERR_NONE);
|
||||
}
|
||||
|
||||
static grub_err_t ventoy_cmd_mod(grub_extcmd_context_t ctxt, int argc, char **args)
|
||||
{
|
||||
ulonglong value1 = 0;
|
||||
ulonglong value2 = 0;
|
||||
char buf[32];
|
||||
|
||||
if (argc != 3)
|
||||
{
|
||||
return grub_error(GRUB_ERR_BAD_ARGUMENT, "Usage: %s {Int} {Int} {Variable}", cmd_raw_name);
|
||||
}
|
||||
|
||||
value1 = grub_strtoull(args[0], NULL, 10);
|
||||
value2 = grub_strtoull(args[1], NULL, 10);
|
||||
|
||||
grub_snprintf(buf, sizeof(buf), "%llu", (value1 & (value2 - 1)));
|
||||
grub_env_set(args[2], buf);
|
||||
|
||||
VENTOY_CMD_RETURN(GRUB_ERR_NONE);
|
||||
}
|
||||
|
||||
static grub_err_t ventoy_cmd_file_size(grub_extcmd_context_t ctxt, int argc, char **args)
|
||||
{
|
||||
int rc = 1;
|
||||
@@ -1031,7 +1056,7 @@ int ventoy_cmp_img(img_info *img1, img_info *img2)
|
||||
int c1 = 0;
|
||||
int c2 = 0;
|
||||
|
||||
if (g_plugin_image_list)
|
||||
if (g_plugin_image_list == VENTOY_IMG_WHITE_LIST)
|
||||
{
|
||||
return (img1->plugin_list_index - img2->plugin_list_index);
|
||||
}
|
||||
@@ -1069,7 +1094,7 @@ static int ventoy_cmp_subdir(img_iterator_node *node1, img_iterator_node *node2)
|
||||
int c1 = 0;
|
||||
int c2 = 0;
|
||||
|
||||
if (g_plugin_image_list)
|
||||
if (g_plugin_image_list == VENTOY_IMG_WHITE_LIST)
|
||||
{
|
||||
return (node1->plugin_list_index - node2->plugin_list_index);
|
||||
}
|
||||
@@ -1140,7 +1165,7 @@ static int ventoy_check_ignore_flag(const char *filename, const struct grub_dirh
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ventoy_colect_img_files(const char *filename, const struct grub_dirhook_info *info, void *data)
|
||||
static int ventoy_collect_img_files(const char *filename, const struct grub_dirhook_info *info, void *data)
|
||||
{
|
||||
//int i = 0;
|
||||
int type = 0;
|
||||
@@ -1153,6 +1178,18 @@ static int ventoy_colect_img_files(const char *filename, const struct grub_dirho
|
||||
img_iterator_node *new_node;
|
||||
img_iterator_node *node = (img_iterator_node *)data;
|
||||
|
||||
if (g_enumerate_time_checked == 0)
|
||||
{
|
||||
g_enumerate_finish_time_ms = grub_get_time_ms();
|
||||
if ((g_enumerate_finish_time_ms - g_enumerate_start_time_ms) >= 3000)
|
||||
{
|
||||
grub_cls();
|
||||
grub_printf("\n\n Ventoy scanning files, please wait...\n");
|
||||
grub_refresh();
|
||||
g_enumerate_time_checked = 1;
|
||||
}
|
||||
}
|
||||
|
||||
len = grub_strlen(filename);
|
||||
|
||||
if (info->dir)
|
||||
@@ -1173,7 +1210,7 @@ static int ventoy_colect_img_files(const char *filename, const struct grub_dirho
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (g_plugin_image_list)
|
||||
if (g_plugin_image_list == VENTOY_IMG_WHITE_LIST)
|
||||
{
|
||||
grub_snprintf(g_img_swap_tmp_buf, sizeof(g_img_swap_tmp_buf), "%s%s/", node->dir, filename);
|
||||
index = ventoy_plugin_get_image_list_index(vtoy_class_directory, g_img_swap_tmp_buf);
|
||||
@@ -1261,6 +1298,15 @@ static int ventoy_colect_img_files(const char *filename, const struct grub_dirho
|
||||
{
|
||||
type = img_type_vtoy;
|
||||
}
|
||||
else if (len >= 9 && 0 == grub_strcasecmp(filename + len - 5, ".vcfg"))
|
||||
{
|
||||
if (filename[len - 9] == '.' || (len >= 10 && filename[len - 10] == '.'))
|
||||
{
|
||||
grub_snprintf(g_img_swap_tmp_buf, sizeof(g_img_swap_tmp_buf), "%s%s", node->dir, filename);
|
||||
ventoy_plugin_add_custom_boot(g_img_swap_tmp_buf);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
@@ -1275,11 +1321,16 @@ static int ventoy_colect_img_files(const char *filename, const struct grub_dirho
|
||||
{
|
||||
grub_snprintf(g_img_swap_tmp_buf, sizeof(g_img_swap_tmp_buf), "%s%s", node->dir, filename);
|
||||
index = ventoy_plugin_get_image_list_index(vtoy_class_image_file, g_img_swap_tmp_buf);
|
||||
if (index == 0)
|
||||
if (VENTOY_IMG_WHITE_LIST == g_plugin_image_list && index == 0)
|
||||
{
|
||||
debug("File %s not found in image_list plugin config...\n", g_img_swap_tmp_buf);
|
||||
return 0;
|
||||
}
|
||||
else if (VENTOY_IMG_BLACK_LIST == g_plugin_image_list && index > 0)
|
||||
{
|
||||
debug("File %s found in image_blacklist plugin config...\n", g_img_swap_tmp_buf);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
img = grub_zalloc(sizeof(img_info));
|
||||
@@ -1772,12 +1823,25 @@ int ventoy_check_device(grub_device_t dev)
|
||||
|
||||
if (workaround)
|
||||
{
|
||||
ventoy_part_table *PartTbl = g_ventoy_part_info->MBR.PartTbl;
|
||||
if (PartTbl[1].StartSectorId != PartTbl[0].StartSectorId + PartTbl[0].SectorCount ||
|
||||
PartTbl[1].SectorCount != 65536)
|
||||
if (grub_strncmp(g_ventoy_part_info->Head.Signature, "EFI PART", 8) == 0)
|
||||
{
|
||||
grub_file_close(file);
|
||||
return ventoy_check_device_result(6);
|
||||
ventoy_gpt_part_tbl *PartTbl = g_ventoy_part_info->PartTbl;
|
||||
if (PartTbl[1].StartLBA != PartTbl[0].LastLBA + 1 ||
|
||||
(PartTbl[1].LastLBA + 1 - PartTbl[1].StartLBA) != 65536)
|
||||
{
|
||||
grub_file_close(file);
|
||||
return ventoy_check_device_result(6);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ventoy_part_table *PartTbl = g_ventoy_part_info->MBR.PartTbl;
|
||||
if (PartTbl[1].StartSectorId != PartTbl[0].StartSectorId + PartTbl[0].SectorCount ||
|
||||
PartTbl[1].SectorCount != 65536)
|
||||
{
|
||||
grub_file_close(file);
|
||||
return ventoy_check_device_result(6);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -1920,6 +1984,9 @@ static grub_err_t ventoy_cmd_list_img(grub_extcmd_context_t ctxt, int argc, char
|
||||
return grub_error(GRUB_ERR_BAD_ARGUMENT, "Must clear image before list");
|
||||
}
|
||||
|
||||
g_enumerate_time_checked = 0;
|
||||
g_enumerate_start_time_ms = grub_get_time_ms();
|
||||
|
||||
strdata = ventoy_get_env("VTOY_FILT_DOT_UNDERSCORE_FILE");
|
||||
if (strdata && strdata[0] == '1' && strdata[1] == 0)
|
||||
{
|
||||
@@ -1989,7 +2056,7 @@ static grub_err_t ventoy_cmd_list_img(grub_extcmd_context_t ctxt, int argc, char
|
||||
|
||||
for (node = &g_img_iterator_head; node; node = node->next)
|
||||
{
|
||||
fs->fs_dir(dev, node->dir, ventoy_colect_img_files, node);
|
||||
fs->fs_dir(dev, node->dir, ventoy_collect_img_files, node);
|
||||
}
|
||||
|
||||
strdata = ventoy_get_env("VTOY_TREE_VIEW_MENU_STYLE");
|
||||
@@ -2248,6 +2315,7 @@ int ventoy_has_efi_eltorito(grub_file_t file, grub_uint32_t sector)
|
||||
int i;
|
||||
int x86count = 0;
|
||||
grub_uint8_t buf[512];
|
||||
grub_uint8_t parttype[] = { 0x04, 0x06, 0x0B, 0x0C };
|
||||
|
||||
grub_file_seek(file, sector * 2048);
|
||||
grub_file_read(file, buf, sizeof(buf));
|
||||
@@ -2278,6 +2346,18 @@ int ventoy_has_efi_eltorito(grub_file_t file, grub_uint32_t sector)
|
||||
}
|
||||
}
|
||||
|
||||
if (x86count && buf[32] == 0x88 && buf[33] == 0x04)
|
||||
{
|
||||
for (i = 0; i < (int)(ARRAY_SIZE(parttype)); i++)
|
||||
{
|
||||
if (buf[36] == parttype[i])
|
||||
{
|
||||
debug("hard disk image assume %s efi eltorito, part type 0x%x\n", file->name, buf[36]);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
debug("%s does not contain efi eltorito\n", file->name);
|
||||
return 0;
|
||||
}
|
||||
@@ -3205,14 +3285,15 @@ static grub_err_t ventoy_cmd_parse_volume(grub_extcmd_context_t ctxt, int argc,
|
||||
int len;
|
||||
grub_file_t file;
|
||||
char buf[64];
|
||||
grub_uint64_t size;
|
||||
ventoy_iso9660_vd pvd;
|
||||
|
||||
(void)ctxt;
|
||||
(void)argc;
|
||||
|
||||
if (argc != 3)
|
||||
if (argc != 4)
|
||||
{
|
||||
return grub_error(GRUB_ERR_BAD_ARGUMENT, "Usage: %s sysid volid \n", cmd_raw_name);
|
||||
return grub_error(GRUB_ERR_BAD_ARGUMENT, "Usage: %s sysid volid space \n", cmd_raw_name);
|
||||
}
|
||||
|
||||
file = ventoy_grub_file_open(VENTOY_FILE_TYPE, "%s", args[0]);
|
||||
@@ -3238,6 +3319,11 @@ static grub_err_t ventoy_cmd_parse_volume(grub_extcmd_context_t ctxt, int argc,
|
||||
grub_memcpy(buf, pvd.vol, sizeof(pvd.vol));
|
||||
ventoy_set_env(args[2], buf);
|
||||
|
||||
size = pvd.space;
|
||||
size *= 2048;
|
||||
grub_snprintf(buf, sizeof(buf), "%llu", (ulonglong)size);
|
||||
ventoy_set_env(args[3], buf);
|
||||
|
||||
end:
|
||||
grub_file_close(file);
|
||||
|
||||
@@ -3304,6 +3390,36 @@ static grub_err_t ventoy_cmd_img_unhook_root(grub_extcmd_context_t ctxt, int arg
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef GRUB_MACHINE_EFI
|
||||
static grub_err_t ventoy_cmd_check_secureboot_var(grub_extcmd_context_t ctxt, int argc, char **args)
|
||||
{
|
||||
int ret = 1;
|
||||
grub_uint8_t *var;
|
||||
grub_size_t size;
|
||||
grub_efi_guid_t global = GRUB_EFI_GLOBAL_VARIABLE_GUID;
|
||||
|
||||
(void)ctxt;
|
||||
(void)argc;
|
||||
(void)args;
|
||||
|
||||
var = grub_efi_get_variable("SecureBoot", &global, &size);
|
||||
if (var && *var == 1)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
#else
|
||||
static grub_err_t ventoy_cmd_check_secureboot_var(grub_extcmd_context_t ctxt, int argc, char **args)
|
||||
{
|
||||
(void)ctxt;
|
||||
(void)argc;
|
||||
(void)args;
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
static grub_err_t ventoy_cmd_acpi_param(grub_extcmd_context_t ctxt, int argc, char **args)
|
||||
{
|
||||
int i;
|
||||
@@ -3580,6 +3696,31 @@ static grub_err_t ventoy_cmd_load_part_table(grub_extcmd_context_t ctxt, int arg
|
||||
return 0;
|
||||
}
|
||||
|
||||
static grub_err_t ventoy_cmd_check_custom_boot(grub_extcmd_context_t ctxt, int argc, char **args)
|
||||
{
|
||||
int ret = 1;
|
||||
const char *vcfg = NULL;
|
||||
|
||||
(void)argc;
|
||||
(void)ctxt;
|
||||
|
||||
vcfg = ventoy_plugin_get_custom_boot(args[0]);
|
||||
if (vcfg)
|
||||
{
|
||||
debug("custom boot <%s>:<%s>\n", args[0], vcfg);
|
||||
grub_env_set(args[1], vcfg);
|
||||
ret = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
debug("custom boot <%s>:<NOT FOUND>\n", args[0]);
|
||||
}
|
||||
|
||||
grub_errno = 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
static grub_err_t ventoy_cmd_part_exist(grub_extcmd_context_t ctxt, int argc, char **args)
|
||||
{
|
||||
int id;
|
||||
@@ -3772,6 +3913,36 @@ static grub_err_t ventoy_cmd_basename(grub_extcmd_context_t ctxt, int argc, char
|
||||
return 0;
|
||||
}
|
||||
|
||||
static grub_err_t ventoy_cmd_basefile(grub_extcmd_context_t ctxt, int argc, char **args)
|
||||
{
|
||||
int i;
|
||||
int len;
|
||||
const char *buf;
|
||||
|
||||
(void)ctxt;
|
||||
|
||||
if (argc != 2)
|
||||
{
|
||||
debug("ventoy_cmd_basefile, invalid param num %d\n", argc);
|
||||
return 1;
|
||||
}
|
||||
|
||||
buf = args[0];
|
||||
len = (int)grub_strlen(buf);
|
||||
for (i = len; i > 0; i--)
|
||||
{
|
||||
if (buf[i - 1] == '/')
|
||||
{
|
||||
grub_env_set(args[1], buf + i);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
grub_env_set(args[1], buf);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static grub_err_t ventoy_cmd_enum_video_mode(grub_extcmd_context_t ctxt, int argc, char **args)
|
||||
{
|
||||
struct grub_video_mode_info info;
|
||||
@@ -4019,6 +4190,7 @@ static int ventoy_env_init(void)
|
||||
static cmd_para ventoy_cmds[] =
|
||||
{
|
||||
{ "vt_incr", ventoy_cmd_incr, 0, NULL, "{Var} {INT}", "Increase integer variable", NULL },
|
||||
{ "vt_mod", ventoy_cmd_mod, 0, NULL, "{Int} {Int} {Var}", "mod integer variable", NULL },
|
||||
{ "vt_strstr", ventoy_cmd_strstr, 0, NULL, "", "", NULL },
|
||||
{ "vt_str_begin", ventoy_cmd_strbegin, 0, NULL, "", "", NULL },
|
||||
{ "vt_debug", ventoy_cmd_debug, 0, NULL, "{on|off}", "turn debug on/off", NULL },
|
||||
@@ -4038,6 +4210,8 @@ static cmd_para ventoy_cmds[] =
|
||||
{ "vt_patch_vhdboot", ventoy_cmd_patch_vhdboot, 0, NULL, "", "", NULL },
|
||||
{ "vt_raw_chain_data", ventoy_cmd_raw_chain_data, 0, NULL, "", "", NULL },
|
||||
{ "vt_get_vtoy_type", ventoy_cmd_get_vtoy_type, 0, NULL, "", "", NULL },
|
||||
{ "vt_check_custom_boot", ventoy_cmd_check_custom_boot, 0, NULL, "", "", NULL },
|
||||
{ "vt_dump_custom_boot", ventoy_cmd_dump_custom_boot, 0, NULL, "", "", NULL },
|
||||
|
||||
{ "vt_skip_svd", ventoy_cmd_skip_svd, 0, NULL, "", "", NULL },
|
||||
{ "vt_cpio_busybox64", ventoy_cmd_cpio_busybox_64, 0, NULL, "", "", NULL },
|
||||
@@ -4052,6 +4226,7 @@ static cmd_para ventoy_cmds[] =
|
||||
{ "vt_get_fs_label", ventoy_cmd_get_fs_label, 0, NULL, "", "", NULL },
|
||||
{ "vt_fs_enum_1st_file", ventoy_cmd_fs_enum_1st_file, 0, NULL, "", "", NULL },
|
||||
{ "vt_file_basename", ventoy_cmd_basename, 0, NULL, "", "", NULL },
|
||||
{ "vt_file_basefile", ventoy_cmd_basefile, 0, NULL, "", "", NULL },
|
||||
{ "vt_enum_video_mode", ventoy_cmd_enum_video_mode, 0, NULL, "", "", NULL },
|
||||
{ "vt_get_video_mode", ventoy_cmd_get_video_mode, 0, NULL, "", "", NULL },
|
||||
{ "vt_update_cur_video_mode", vt_cmd_update_cur_video_mode, 0, NULL, "", "", NULL },
|
||||
@@ -4124,6 +4299,7 @@ static cmd_para ventoy_cmds[] =
|
||||
{ "vt_img_hook_root", ventoy_cmd_img_hook_root, 0, NULL, "", "", NULL },
|
||||
{ "vt_img_unhook_root", ventoy_cmd_img_unhook_root, 0, NULL, "", "", NULL },
|
||||
{ "vt_acpi_param", ventoy_cmd_acpi_param, 0, NULL, "", "", NULL },
|
||||
{ "vt_check_secureboot_var", ventoy_cmd_check_secureboot_var, 0, NULL, "", "", NULL },
|
||||
|
||||
};
|
||||
|
||||
|
@@ -163,6 +163,8 @@ typedef struct ventoy_iso9660_vd
|
||||
grub_uint8_t res;
|
||||
char sys[32];
|
||||
char vol[32];
|
||||
grub_uint8_t res2[8];
|
||||
grub_uint32_t space;
|
||||
}ventoy_iso9660_vd;
|
||||
|
||||
#pragma pack()
|
||||
@@ -799,6 +801,19 @@ typedef struct menu_class
|
||||
struct menu_class *next;
|
||||
}menu_class;
|
||||
|
||||
#define vtoy_custom_boot_image_file 0
|
||||
#define vtoy_custom_boot_directory 1
|
||||
|
||||
typedef struct custom_boot
|
||||
{
|
||||
int type;
|
||||
int pathlen;
|
||||
char path[256];
|
||||
char cfg[256];
|
||||
|
||||
struct custom_boot *next;
|
||||
}custom_boot;
|
||||
|
||||
#define vtoy_max_replace_file_size (2 * 1024 * 1024)
|
||||
typedef struct conf_replace
|
||||
{
|
||||
@@ -867,7 +882,11 @@ extern int g_ventoy_iso_uefi_drv;
|
||||
extern int g_ventoy_case_insensitive;
|
||||
extern grub_uint8_t g_ventoy_chain_type;
|
||||
extern int g_vhdboot_enable;
|
||||
|
||||
#define VENTOY_IMG_WHITE_LIST 1
|
||||
#define VENTOY_IMG_BLACK_LIST 2
|
||||
extern int g_plugin_image_list;
|
||||
|
||||
extern ventoy_gpt_info *g_ventoy_part_info;
|
||||
extern grub_uint64_t g_conf_replace_offset;
|
||||
extern grub_uint64_t g_svd_replace_offset;
|
||||
@@ -939,6 +958,9 @@ grub_err_t ventoy_cmd_get_vtoy_type(grub_extcmd_context_t ctxt, int argc, char *
|
||||
int ventoy_check_password(const vtoy_password *pwd, int retry);
|
||||
int ventoy_gzip_compress(void *mem_in, int mem_in_len, void *mem_out, int mem_out_len);
|
||||
grub_uint64_t ventoy_get_part1_size(ventoy_gpt_info *gpt);
|
||||
int ventoy_plugin_add_custom_boot(const char *vcfgpath);
|
||||
const char * ventoy_plugin_get_custom_boot(const char *isopath);
|
||||
grub_err_t ventoy_cmd_dump_custom_boot(grub_extcmd_context_t ctxt, int argc, char **args);
|
||||
|
||||
#endif /* __VENTOY_DEF_H__ */
|
||||
|
||||
|
@@ -49,6 +49,7 @@ static menu_password *g_pwd_head = NULL;
|
||||
static persistence_config *g_persistence_head = NULL;
|
||||
static menu_alias *g_menu_alias_head = NULL;
|
||||
static menu_class *g_menu_class_head = NULL;
|
||||
static custom_boot *g_custom_boot_head = NULL;
|
||||
static injection_config *g_injection_head = NULL;
|
||||
static auto_memdisk *g_auto_memdisk_head = NULL;
|
||||
static image_list *g_image_list_head = NULL;
|
||||
@@ -1382,6 +1383,124 @@ static int ventoy_plugin_menuclass_check(VTOY_JSON *json, const char *isodisk)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ventoy_plugin_custom_boot_entry(VTOY_JSON *json, const char *isodisk)
|
||||
{
|
||||
int type;
|
||||
int len;
|
||||
const char *key = NULL;
|
||||
const char *cfg = NULL;
|
||||
VTOY_JSON *pNode = NULL;
|
||||
custom_boot *tail = NULL;
|
||||
custom_boot *node = NULL;
|
||||
custom_boot *next = NULL;
|
||||
|
||||
(void)isodisk;
|
||||
|
||||
if (json->enDataType != JSON_TYPE_ARRAY)
|
||||
{
|
||||
debug("Not array %d\n", json->enDataType);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (g_custom_boot_head)
|
||||
{
|
||||
for (node = g_custom_boot_head; node; node = next)
|
||||
{
|
||||
next = node->next;
|
||||
grub_free(node);
|
||||
}
|
||||
|
||||
g_custom_boot_head = NULL;
|
||||
}
|
||||
|
||||
for (pNode = json->pstChild; pNode; pNode = pNode->pstNext)
|
||||
{
|
||||
type = vtoy_custom_boot_image_file;
|
||||
key = vtoy_json_get_string_ex(pNode->pstChild, "file");
|
||||
if (!key)
|
||||
{
|
||||
key = vtoy_json_get_string_ex(pNode->pstChild, "dir");
|
||||
type = vtoy_custom_boot_directory;
|
||||
}
|
||||
|
||||
cfg = vtoy_json_get_string_ex(pNode->pstChild, "vcfg");
|
||||
if (key && cfg)
|
||||
{
|
||||
node = grub_zalloc(sizeof(custom_boot));
|
||||
if (node)
|
||||
{
|
||||
node->type = type;
|
||||
node->pathlen = grub_snprintf(node->path, sizeof(node->path), "%s", key);
|
||||
len = (int)grub_snprintf(node->cfg, sizeof(node->cfg), "%s", cfg);
|
||||
|
||||
if (len >= 5 && grub_strncmp(node->cfg + len - 5, ".vcfg", 5) == 0)
|
||||
{
|
||||
if (g_custom_boot_head)
|
||||
{
|
||||
tail->next = node;
|
||||
}
|
||||
else
|
||||
{
|
||||
g_custom_boot_head = node;
|
||||
}
|
||||
tail = node;
|
||||
}
|
||||
else
|
||||
{
|
||||
grub_free(node);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ventoy_plugin_custom_boot_check(VTOY_JSON *json, const char *isodisk)
|
||||
{
|
||||
int type;
|
||||
int len;
|
||||
const char *key = NULL;
|
||||
const char *cfg = NULL;
|
||||
VTOY_JSON *pNode = NULL;
|
||||
|
||||
(void)isodisk;
|
||||
|
||||
if (json->enDataType != JSON_TYPE_ARRAY)
|
||||
{
|
||||
grub_printf("Not array %d\n", json->enDataType);
|
||||
return 1;
|
||||
}
|
||||
|
||||
for (pNode = json->pstChild; pNode; pNode = pNode->pstNext)
|
||||
{
|
||||
type = vtoy_custom_boot_image_file;
|
||||
key = vtoy_json_get_string_ex(pNode->pstChild, "file");
|
||||
if (!key)
|
||||
{
|
||||
key = vtoy_json_get_string_ex(pNode->pstChild, "dir");
|
||||
type = vtoy_custom_boot_directory;
|
||||
}
|
||||
|
||||
cfg = vtoy_json_get_string_ex(pNode->pstChild, "vcfg");
|
||||
len = (int)grub_strlen(cfg);
|
||||
if (key && cfg)
|
||||
{
|
||||
if (len < 5 || grub_strncmp(cfg + len - 5, ".vcfg", 5))
|
||||
{
|
||||
grub_printf("<%s> does not have \".vcfg\" suffix\n\n", cfg);
|
||||
}
|
||||
else
|
||||
{
|
||||
grub_printf("%s: <%s>\n", (type == vtoy_custom_boot_directory) ? "dir" : "file", key);
|
||||
grub_printf("vcfg: <%s>\n\n", cfg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ventoy_plugin_conf_replace_entry(VTOY_JSON *json, const char *isodisk)
|
||||
{
|
||||
const char *isof = NULL;
|
||||
@@ -1625,7 +1744,14 @@ static int ventoy_plugin_image_list_entry(VTOY_JSON *json, const char *isodisk)
|
||||
g_image_list_head = NULL;
|
||||
}
|
||||
|
||||
g_plugin_image_list = 1;
|
||||
if (grub_strcmp(json->pcName, "image_blacklist") == 0)
|
||||
{
|
||||
g_plugin_image_list = VENTOY_IMG_BLACK_LIST;
|
||||
}
|
||||
else
|
||||
{
|
||||
g_plugin_image_list = VENTOY_IMG_WHITE_LIST;
|
||||
}
|
||||
|
||||
for (pNode = json->pstChild; pNode; pNode = pNode->pstNext)
|
||||
{
|
||||
@@ -1693,9 +1819,11 @@ static plugin_entry g_plugin_entries[] =
|
||||
{ "injection", ventoy_plugin_injection_entry, ventoy_plugin_injection_check },
|
||||
{ "auto_memdisk", ventoy_plugin_auto_memdisk_entry, ventoy_plugin_auto_memdisk_check },
|
||||
{ "image_list", ventoy_plugin_image_list_entry, ventoy_plugin_image_list_check },
|
||||
{ "image_blacklist", ventoy_plugin_image_list_entry, ventoy_plugin_image_list_check },
|
||||
{ "conf_replace", ventoy_plugin_conf_replace_entry, ventoy_plugin_conf_replace_check },
|
||||
{ "dud", ventoy_plugin_dud_entry, ventoy_plugin_dud_check },
|
||||
{ "password", ventoy_plugin_pwd_entry, ventoy_plugin_pwd_check },
|
||||
{ "custom_boot", ventoy_plugin_custom_boot_entry, ventoy_plugin_custom_boot_check },
|
||||
};
|
||||
|
||||
static int ventoy_parse_plugin_config(VTOY_JSON *json, const char *isodisk)
|
||||
@@ -2057,6 +2185,96 @@ const char * ventoy_plugin_get_menu_class(int type, const char *name)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int ventoy_plugin_add_custom_boot(const char *vcfgpath)
|
||||
{
|
||||
int len;
|
||||
custom_boot *node = NULL;
|
||||
|
||||
node = grub_zalloc(sizeof(custom_boot));
|
||||
if (node)
|
||||
{
|
||||
node->type = vtoy_custom_boot_image_file;
|
||||
node->pathlen = grub_snprintf(node->path, sizeof(node->path), "%s", vcfgpath);
|
||||
grub_snprintf(node->cfg, sizeof(node->cfg), "%s", vcfgpath);
|
||||
|
||||
/* .vcfg */
|
||||
len = node->pathlen - 5;
|
||||
node->path[len] = 0;
|
||||
node->pathlen = len;
|
||||
|
||||
if (g_custom_boot_head)
|
||||
{
|
||||
node->next = g_custom_boot_head;
|
||||
}
|
||||
g_custom_boot_head = node;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
const char * ventoy_plugin_get_custom_boot(const char *isopath)
|
||||
{
|
||||
int i;
|
||||
int len;
|
||||
custom_boot *node = NULL;
|
||||
|
||||
if (!g_custom_boot_head)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
len = (int)grub_strlen(isopath);
|
||||
|
||||
for (node = g_custom_boot_head; node; node = node->next)
|
||||
{
|
||||
if (node->type == vtoy_custom_boot_image_file)
|
||||
{
|
||||
if (node->pathlen == len && grub_strncmp(isopath, node->path, len) == 0)
|
||||
{
|
||||
return node->cfg;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (node->pathlen < len && isopath[node->pathlen] == '/' &&
|
||||
grub_strncmp(isopath, node->path, node->pathlen) == 0)
|
||||
{
|
||||
for (i = node->pathlen + 1; i < len; i++)
|
||||
{
|
||||
if (isopath[i] == '/')
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (i >= len)
|
||||
{
|
||||
return node->cfg;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
grub_err_t ventoy_cmd_dump_custom_boot(grub_extcmd_context_t ctxt, int argc, char **args)
|
||||
{
|
||||
custom_boot *node = NULL;
|
||||
|
||||
(void)argc;
|
||||
(void)ctxt;
|
||||
(void)args;
|
||||
|
||||
for (node = g_custom_boot_head; node; node = node->next)
|
||||
{
|
||||
grub_printf("[%s] <%s>:<%s>\n", (node->type == vtoy_custom_boot_directory) ? "dir" : "file",
|
||||
node->path, node->cfg);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ventoy_plugin_check_memdisk(const char *isopath)
|
||||
{
|
||||
int len;
|
||||
|
466
GRUB2/MOD_SRC/grub-2.04/include/grub/term.h
Normal file
466
GRUB2/MOD_SRC/grub-2.04/include/grub/term.h
Normal file
@@ -0,0 +1,466 @@
|
||||
/*
|
||||
* GRUB -- GRand Unified Bootloader
|
||||
* Copyright (C) 2002,2003,2005,2007,2008,2009,2010 Free Software Foundation, Inc.
|
||||
*
|
||||
* GRUB is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* GRUB is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GRUB. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef GRUB_TERM_HEADER
|
||||
#define GRUB_TERM_HEADER 1
|
||||
|
||||
#define GRUB_TERM_NO_KEY 0
|
||||
|
||||
/* Internal codes used by GRUB to represent terminal input. */
|
||||
/* Only for keys otherwise not having shifted modification. */
|
||||
#define GRUB_TERM_SHIFT 0x01000000
|
||||
#define GRUB_TERM_CTRL 0x02000000
|
||||
#define GRUB_TERM_ALT 0x04000000
|
||||
|
||||
/* Keys without associated character. */
|
||||
#define GRUB_TERM_EXTENDED 0x00800000
|
||||
#define GRUB_TERM_KEY_MASK 0x00ffffff
|
||||
|
||||
#define GRUB_TERM_KEY_LEFT (GRUB_TERM_EXTENDED | 0x4b)
|
||||
#define GRUB_TERM_KEY_RIGHT (GRUB_TERM_EXTENDED | 0x4d)
|
||||
#define GRUB_TERM_KEY_UP (GRUB_TERM_EXTENDED | 0x48)
|
||||
#define GRUB_TERM_KEY_DOWN (GRUB_TERM_EXTENDED | 0x50)
|
||||
#define GRUB_TERM_KEY_HOME (GRUB_TERM_EXTENDED | 0x47)
|
||||
#define GRUB_TERM_KEY_END (GRUB_TERM_EXTENDED | 0x4f)
|
||||
#define GRUB_TERM_KEY_DC (GRUB_TERM_EXTENDED | 0x53)
|
||||
#define GRUB_TERM_KEY_PPAGE (GRUB_TERM_EXTENDED | 0x49)
|
||||
#define GRUB_TERM_KEY_NPAGE (GRUB_TERM_EXTENDED | 0x51)
|
||||
#define GRUB_TERM_KEY_F1 (GRUB_TERM_EXTENDED | 0x3b)
|
||||
#define GRUB_TERM_KEY_F2 (GRUB_TERM_EXTENDED | 0x3c)
|
||||
#define GRUB_TERM_KEY_F3 (GRUB_TERM_EXTENDED | 0x3d)
|
||||
#define GRUB_TERM_KEY_F4 (GRUB_TERM_EXTENDED | 0x3e)
|
||||
#define GRUB_TERM_KEY_F5 (GRUB_TERM_EXTENDED | 0x3f)
|
||||
#define GRUB_TERM_KEY_F6 (GRUB_TERM_EXTENDED | 0x40)
|
||||
#define GRUB_TERM_KEY_F7 (GRUB_TERM_EXTENDED | 0x41)
|
||||
#define GRUB_TERM_KEY_F8 (GRUB_TERM_EXTENDED | 0x42)
|
||||
#define GRUB_TERM_KEY_F9 (GRUB_TERM_EXTENDED | 0x43)
|
||||
#define GRUB_TERM_KEY_F10 (GRUB_TERM_EXTENDED | 0x44)
|
||||
#define GRUB_TERM_KEY_F11 (GRUB_TERM_EXTENDED | 0x57)
|
||||
#define GRUB_TERM_KEY_F12 (GRUB_TERM_EXTENDED | 0x58)
|
||||
#define GRUB_TERM_KEY_INSERT (GRUB_TERM_EXTENDED | 0x52)
|
||||
#define GRUB_TERM_KEY_CENTER (GRUB_TERM_EXTENDED | 0x4c)
|
||||
|
||||
/* Hex value is used for ESC, since '\e' is nonstandard */
|
||||
#define GRUB_TERM_ESC 0x1b
|
||||
#define GRUB_TERM_TAB '\t'
|
||||
#define GRUB_TERM_BACKSPACE '\b'
|
||||
|
||||
#define GRUB_PROGRESS_NO_UPDATE -1
|
||||
#define GRUB_PROGRESS_FAST 0
|
||||
#define GRUB_PROGRESS_SLOW 2
|
||||
|
||||
#ifndef ASM_FILE
|
||||
|
||||
#include <grub/err.h>
|
||||
#include <grub/symbol.h>
|
||||
#include <grub/types.h>
|
||||
#include <grub/unicode.h>
|
||||
#include <grub/list.h>
|
||||
|
||||
/* These are used to represent the various color states we use. */
|
||||
typedef enum
|
||||
{
|
||||
/* The color used to display all text that does not use the
|
||||
user defined colors below. */
|
||||
GRUB_TERM_COLOR_STANDARD,
|
||||
/* The user defined colors for normal text. */
|
||||
GRUB_TERM_COLOR_NORMAL,
|
||||
/* The user defined colors for highlighted text. */
|
||||
GRUB_TERM_COLOR_HIGHLIGHT
|
||||
}
|
||||
grub_term_color_state;
|
||||
|
||||
/* Flags for representing the capabilities of a terminal. */
|
||||
/* Some notes about the flags:
|
||||
- These flags are used by higher-level functions but not terminals
|
||||
themselves.
|
||||
- If a terminal is dumb, you may assume that only putchar, getkey and
|
||||
checkkey are called.
|
||||
- Some fancy features (setcolorstate, setcolor and setcursor) can be set
|
||||
to NULL. */
|
||||
|
||||
/* Set when input characters shouldn't be echoed back. */
|
||||
#define GRUB_TERM_NO_ECHO (1 << 0)
|
||||
/* Set when the editing feature should be disabled. */
|
||||
#define GRUB_TERM_NO_EDIT (1 << 1)
|
||||
/* Set when the terminal cannot do fancy things. */
|
||||
#define GRUB_TERM_DUMB (1 << 2)
|
||||
/* Which encoding does terminal expect stream to be. */
|
||||
#define GRUB_TERM_CODE_TYPE_SHIFT 3
|
||||
#define GRUB_TERM_CODE_TYPE_MASK (7 << GRUB_TERM_CODE_TYPE_SHIFT)
|
||||
/* Only ASCII characters accepted. */
|
||||
#define GRUB_TERM_CODE_TYPE_ASCII (0 << GRUB_TERM_CODE_TYPE_SHIFT)
|
||||
/* Expects CP-437 characters (ASCII + pseudographics). */
|
||||
#define GRUB_TERM_CODE_TYPE_CP437 (1 << GRUB_TERM_CODE_TYPE_SHIFT)
|
||||
/* UTF-8 stream in logical order. Usually used for terminals
|
||||
which just forward the stream to another computer. */
|
||||
#define GRUB_TERM_CODE_TYPE_UTF8_LOGICAL (2 << GRUB_TERM_CODE_TYPE_SHIFT)
|
||||
/* UTF-8 in visual order. Like UTF-8 logical but for buggy endpoints. */
|
||||
#define GRUB_TERM_CODE_TYPE_UTF8_VISUAL (3 << GRUB_TERM_CODE_TYPE_SHIFT)
|
||||
/* Glyph description in visual order. */
|
||||
#define GRUB_TERM_CODE_TYPE_VISUAL_GLYPHS (4 << GRUB_TERM_CODE_TYPE_SHIFT)
|
||||
|
||||
|
||||
/* Bitmasks for modifier keys returned by grub_getkeystatus. */
|
||||
#define GRUB_TERM_STATUS_RSHIFT (1 << 0)
|
||||
#define GRUB_TERM_STATUS_LSHIFT (1 << 1)
|
||||
#define GRUB_TERM_STATUS_RCTRL (1 << 2)
|
||||
#define GRUB_TERM_STATUS_RALT (1 << 3)
|
||||
#define GRUB_TERM_STATUS_SCROLL (1 << 4)
|
||||
#define GRUB_TERM_STATUS_NUM (1 << 5)
|
||||
#define GRUB_TERM_STATUS_CAPS (1 << 6)
|
||||
#define GRUB_TERM_STATUS_LCTRL (1 << 8)
|
||||
#define GRUB_TERM_STATUS_LALT (1 << 9)
|
||||
|
||||
/* Menu-related geometrical constants. */
|
||||
|
||||
/* The number of columns/lines between messages/borders/etc. */
|
||||
#define GRUB_TERM_MARGIN 1
|
||||
|
||||
/* The number of columns of scroll information. */
|
||||
#define GRUB_TERM_SCROLL_WIDTH 1
|
||||
|
||||
struct grub_term_input
|
||||
{
|
||||
/* The next terminal. */
|
||||
struct grub_term_input *next;
|
||||
struct grub_term_input **prev;
|
||||
|
||||
/* The terminal name. */
|
||||
const char *name;
|
||||
|
||||
/* Initialize the terminal. */
|
||||
grub_err_t (*init) (struct grub_term_input *term);
|
||||
|
||||
/* Clean up the terminal. */
|
||||
grub_err_t (*fini) (struct grub_term_input *term);
|
||||
|
||||
/* Get a character if any input character is available. Otherwise return -1 */
|
||||
int (*getkey) (struct grub_term_input *term);
|
||||
|
||||
/* Get keyboard modifier status. */
|
||||
int (*getkeystatus) (struct grub_term_input *term);
|
||||
|
||||
void *data;
|
||||
};
|
||||
typedef struct grub_term_input *grub_term_input_t;
|
||||
|
||||
/* Made in a way to fit into uint32_t and so be passed in a register. */
|
||||
struct grub_term_coordinate
|
||||
{
|
||||
grub_uint16_t x;
|
||||
grub_uint16_t y;
|
||||
};
|
||||
|
||||
struct grub_term_output
|
||||
{
|
||||
/* The next terminal. */
|
||||
struct grub_term_output *next;
|
||||
struct grub_term_output **prev;
|
||||
|
||||
/* The terminal name. */
|
||||
const char *name;
|
||||
|
||||
/* Initialize the terminal. */
|
||||
grub_err_t (*init) (struct grub_term_output *term);
|
||||
|
||||
/* Clean up the terminal. */
|
||||
grub_err_t (*fini) (struct grub_term_output *term);
|
||||
|
||||
/* Put a character. C is encoded in Unicode. */
|
||||
void (*putchar) (struct grub_term_output *term,
|
||||
const struct grub_unicode_glyph *c);
|
||||
|
||||
/* Get the number of columns occupied by a given character C. C is
|
||||
encoded in Unicode. */
|
||||
grub_size_t (*getcharwidth) (struct grub_term_output *term,
|
||||
const struct grub_unicode_glyph *c);
|
||||
|
||||
/* Get the screen size. */
|
||||
struct grub_term_coordinate (*getwh) (struct grub_term_output *term);
|
||||
|
||||
/* Get the cursor position. The return value is ((X << 8) | Y). */
|
||||
struct grub_term_coordinate (*getxy) (struct grub_term_output *term);
|
||||
|
||||
/* Go to the position (X, Y). */
|
||||
void (*gotoxy) (struct grub_term_output *term,
|
||||
struct grub_term_coordinate pos);
|
||||
|
||||
/* Clear the screen. */
|
||||
void (*cls) (struct grub_term_output *term);
|
||||
|
||||
/* Set the current color to be used */
|
||||
void (*setcolorstate) (struct grub_term_output *term,
|
||||
grub_term_color_state state);
|
||||
|
||||
/* Turn on/off the cursor. */
|
||||
void (*setcursor) (struct grub_term_output *term, int on);
|
||||
|
||||
/* Update the screen. */
|
||||
void (*refresh) (struct grub_term_output *term);
|
||||
|
||||
/* gfxterm only: put in fullscreen mode. */
|
||||
grub_err_t (*fullscreen) (void);
|
||||
|
||||
/* The feature flags defined above. */
|
||||
grub_uint32_t flags;
|
||||
|
||||
/* Progress data. */
|
||||
grub_uint32_t progress_update_divisor;
|
||||
grub_uint32_t progress_update_counter;
|
||||
|
||||
void *data;
|
||||
};
|
||||
typedef struct grub_term_output *grub_term_output_t;
|
||||
|
||||
#define GRUB_TERM_DEFAULT_NORMAL_COLOR 0x07
|
||||
#define GRUB_TERM_DEFAULT_HIGHLIGHT_COLOR 0x70
|
||||
#define GRUB_TERM_DEFAULT_STANDARD_COLOR 0x07
|
||||
|
||||
/* Current color state. */
|
||||
extern grub_uint8_t EXPORT_VAR(grub_term_normal_color);
|
||||
extern grub_uint8_t EXPORT_VAR(grub_term_highlight_color);
|
||||
|
||||
extern struct grub_term_output *EXPORT_VAR(grub_term_outputs_disabled);
|
||||
extern struct grub_term_input *EXPORT_VAR(grub_term_inputs_disabled);
|
||||
extern struct grub_term_output *EXPORT_VAR(grub_term_outputs);
|
||||
extern struct grub_term_input *EXPORT_VAR(grub_term_inputs);
|
||||
|
||||
static inline void
|
||||
grub_term_register_input (const char *name __attribute__ ((unused)),
|
||||
grub_term_input_t term)
|
||||
{
|
||||
if (grub_term_inputs)
|
||||
grub_list_push (GRUB_AS_LIST_P (&grub_term_inputs_disabled),
|
||||
GRUB_AS_LIST (term));
|
||||
else
|
||||
{
|
||||
/* If this is the first terminal, enable automatically. */
|
||||
if (! term->init || term->init (term) == GRUB_ERR_NONE)
|
||||
grub_list_push (GRUB_AS_LIST_P (&grub_term_inputs), GRUB_AS_LIST (term));
|
||||
}
|
||||
}
|
||||
|
||||
static inline void
|
||||
grub_term_register_input_inactive (const char *name __attribute__ ((unused)),
|
||||
grub_term_input_t term)
|
||||
{
|
||||
grub_list_push (GRUB_AS_LIST_P (&grub_term_inputs_disabled),
|
||||
GRUB_AS_LIST (term));
|
||||
}
|
||||
|
||||
static inline void
|
||||
grub_term_register_input_active (const char *name __attribute__ ((unused)),
|
||||
grub_term_input_t term)
|
||||
{
|
||||
if (! term->init || term->init (term) == GRUB_ERR_NONE)
|
||||
grub_list_push (GRUB_AS_LIST_P (&grub_term_inputs), GRUB_AS_LIST (term));
|
||||
}
|
||||
|
||||
static inline void
|
||||
grub_term_register_output (const char *name __attribute__ ((unused)),
|
||||
grub_term_output_t term)
|
||||
{
|
||||
if (grub_term_outputs)
|
||||
grub_list_push (GRUB_AS_LIST_P (&grub_term_outputs_disabled),
|
||||
GRUB_AS_LIST (term));
|
||||
else
|
||||
{
|
||||
/* If this is the first terminal, enable automatically. */
|
||||
if (! term->init || term->init (term) == GRUB_ERR_NONE)
|
||||
grub_list_push (GRUB_AS_LIST_P (&grub_term_outputs),
|
||||
GRUB_AS_LIST (term));
|
||||
}
|
||||
}
|
||||
|
||||
static inline void
|
||||
grub_term_register_output_inactive (const char *name __attribute__ ((unused)),
|
||||
grub_term_output_t term)
|
||||
{
|
||||
grub_list_push (GRUB_AS_LIST_P (&grub_term_outputs_disabled),
|
||||
GRUB_AS_LIST (term));
|
||||
}
|
||||
|
||||
static inline void
|
||||
grub_term_register_output_active (const char *name __attribute__ ((unused)),
|
||||
grub_term_output_t term)
|
||||
{
|
||||
if (! term->init || term->init (term) == GRUB_ERR_NONE)
|
||||
grub_list_push (GRUB_AS_LIST_P (&grub_term_outputs),
|
||||
GRUB_AS_LIST (term));
|
||||
}
|
||||
|
||||
static inline void
|
||||
grub_term_unregister_input (grub_term_input_t term)
|
||||
{
|
||||
grub_list_remove (GRUB_AS_LIST (term));
|
||||
grub_list_remove (GRUB_AS_LIST (term));
|
||||
}
|
||||
|
||||
static inline void
|
||||
grub_term_unregister_output (grub_term_output_t term)
|
||||
{
|
||||
grub_list_remove (GRUB_AS_LIST (term));
|
||||
grub_list_remove (GRUB_AS_LIST (term));
|
||||
}
|
||||
|
||||
#define FOR_ACTIVE_TERM_INPUTS(var) FOR_LIST_ELEMENTS((var), (grub_term_inputs))
|
||||
#define FOR_DISABLED_TERM_INPUTS(var) FOR_LIST_ELEMENTS((var), (grub_term_inputs_disabled))
|
||||
#define FOR_ACTIVE_TERM_OUTPUTS(var) FOR_LIST_ELEMENTS((var), (grub_term_outputs))
|
||||
#define FOR_DISABLED_TERM_OUTPUTS(var) FOR_LIST_ELEMENTS((var), (grub_term_outputs_disabled))
|
||||
|
||||
void grub_putcode (grub_uint32_t code, struct grub_term_output *term);
|
||||
int EXPORT_FUNC(grub_getkey) (void);
|
||||
int EXPORT_FUNC(grub_getkey_noblock) (void);
|
||||
extern int (*EXPORT_VAR (grub_key_remap))(int key);
|
||||
void grub_cls (void);
|
||||
void EXPORT_FUNC(grub_refresh) (void);
|
||||
void grub_puts_terminal (const char *str, struct grub_term_output *term);
|
||||
struct grub_term_coordinate *grub_term_save_pos (void);
|
||||
void grub_term_restore_pos (struct grub_term_coordinate *pos);
|
||||
|
||||
static inline unsigned grub_term_width (struct grub_term_output *term)
|
||||
{
|
||||
return term->getwh(term).x ? : 80;
|
||||
}
|
||||
|
||||
static inline unsigned grub_term_height (struct grub_term_output *term)
|
||||
{
|
||||
return term->getwh(term).y ? : 24;
|
||||
}
|
||||
|
||||
static inline struct grub_term_coordinate
|
||||
grub_term_getxy (struct grub_term_output *term)
|
||||
{
|
||||
return term->getxy (term);
|
||||
}
|
||||
|
||||
static inline void
|
||||
grub_term_refresh (struct grub_term_output *term)
|
||||
{
|
||||
if (term->refresh)
|
||||
term->refresh (term);
|
||||
}
|
||||
|
||||
static inline void
|
||||
grub_term_gotoxy (struct grub_term_output *term, struct grub_term_coordinate pos)
|
||||
{
|
||||
term->gotoxy (term, pos);
|
||||
}
|
||||
|
||||
static inline void
|
||||
grub_term_setcolorstate (struct grub_term_output *term,
|
||||
grub_term_color_state state)
|
||||
{
|
||||
if (term->setcolorstate)
|
||||
term->setcolorstate (term, state);
|
||||
}
|
||||
|
||||
static inline void
|
||||
grub_setcolorstate (grub_term_color_state state)
|
||||
{
|
||||
struct grub_term_output *term;
|
||||
|
||||
FOR_ACTIVE_TERM_OUTPUTS(term)
|
||||
grub_term_setcolorstate (term, state);
|
||||
}
|
||||
|
||||
/* Turn on/off the cursor. */
|
||||
static inline void
|
||||
grub_term_setcursor (struct grub_term_output *term, int on)
|
||||
{
|
||||
if (term->setcursor)
|
||||
term->setcursor (term, on);
|
||||
}
|
||||
|
||||
static inline void
|
||||
grub_term_cls (struct grub_term_output *term)
|
||||
{
|
||||
if (term->cls)
|
||||
(term->cls) (term);
|
||||
else
|
||||
{
|
||||
grub_putcode ('\n', term);
|
||||
grub_term_refresh (term);
|
||||
}
|
||||
}
|
||||
|
||||
#if HAVE_FONT_SOURCE
|
||||
|
||||
grub_size_t
|
||||
grub_unicode_estimate_width (const struct grub_unicode_glyph *c);
|
||||
|
||||
#else
|
||||
|
||||
static inline grub_size_t
|
||||
grub_unicode_estimate_width (const struct grub_unicode_glyph *c __attribute__ ((unused)))
|
||||
{
|
||||
if (grub_unicode_get_comb_type (c->base))
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#define GRUB_TERM_TAB_WIDTH 8
|
||||
|
||||
static inline grub_size_t
|
||||
grub_term_getcharwidth (struct grub_term_output *term,
|
||||
const struct grub_unicode_glyph *c)
|
||||
{
|
||||
if (c->base == '\t')
|
||||
return GRUB_TERM_TAB_WIDTH;
|
||||
|
||||
if (term->getcharwidth)
|
||||
return term->getcharwidth (term, c);
|
||||
else if (((term->flags & GRUB_TERM_CODE_TYPE_MASK)
|
||||
== GRUB_TERM_CODE_TYPE_UTF8_LOGICAL)
|
||||
|| ((term->flags & GRUB_TERM_CODE_TYPE_MASK)
|
||||
== GRUB_TERM_CODE_TYPE_UTF8_VISUAL)
|
||||
|| ((term->flags & GRUB_TERM_CODE_TYPE_MASK)
|
||||
== GRUB_TERM_CODE_TYPE_VISUAL_GLYPHS))
|
||||
return grub_unicode_estimate_width (c);
|
||||
else
|
||||
return 1;
|
||||
}
|
||||
|
||||
struct grub_term_autoload
|
||||
{
|
||||
struct grub_term_autoload *next;
|
||||
char *name;
|
||||
char *modname;
|
||||
};
|
||||
|
||||
extern struct grub_term_autoload *grub_term_input_autoload;
|
||||
extern struct grub_term_autoload *grub_term_output_autoload;
|
||||
|
||||
static inline void
|
||||
grub_print_spaces (struct grub_term_output *term, int number_spaces)
|
||||
{
|
||||
while (--number_spaces >= 0)
|
||||
grub_putcode (' ', term);
|
||||
}
|
||||
|
||||
extern void (*EXPORT_VAR (grub_term_poll_usb)) (int wait_for_completion);
|
||||
|
||||
#define GRUB_TERM_REPEAT_PRE_INTERVAL 400
|
||||
#define GRUB_TERM_REPEAT_INTERVAL 50
|
||||
|
||||
#endif /* ! ASM_FILE */
|
||||
|
||||
#endif /* ! GRUB_TERM_HEADER */
|
@@ -12,12 +12,12 @@ make install
|
||||
PATH=$PATH:$VT_DIR/GRUB2/INSTALL/bin/:$VT_DIR/GRUB2/INSTALL/sbin/
|
||||
|
||||
net_modules_legacy="net tftp http"
|
||||
all_modules_legacy="date drivemap blocklist regexp newc vga_text ntldr search at_keyboard usb_keyboard gcry_md5 hashsum gzio xzio lzopio lspci pci ext2 xfs ventoy chain read halt iso9660 linux16 test true sleep reboot echo videotest videoinfo videotest_checksum video_colors video_cirrus video_bochs vga vbe video_fb font video gettext extcmd terminal linux minicmd help configfile tr trig boot biosdisk disk ls tar squash4 password_pbkdf2 all_video png jpeg part_gpt part_msdos fat exfat ntfs loopback gzio normal udf gfxmenu gfxterm gfxterm_background gfxterm_menu"
|
||||
all_modules_legacy="setkey date drivemap blocklist regexp newc vga_text ntldr search at_keyboard usb_keyboard gcry_md5 hashsum gzio xzio lzopio lspci pci ext2 xfs ventoy chain read halt iso9660 linux16 test true sleep reboot echo videotest videoinfo videotest_checksum video_colors video_cirrus video_bochs vga vbe video_fb font video gettext extcmd terminal linux minicmd help configfile tr trig boot biosdisk disk ls tar squash4 password_pbkdf2 all_video png jpeg part_gpt part_msdos fat exfat ntfs loopback gzio normal udf gfxmenu gfxterm gfxterm_background gfxterm_menu"
|
||||
|
||||
net_modules_uefi="efinet net tftp http"
|
||||
all_modules_uefi="blocklist ventoy test regexp newc search at_keyboard usb_keyboard gcry_md5 hashsum gzio xzio lzopio ext2 xfs read halt sleep serial terminfo png password_pbkdf2 gcry_sha512 pbkdf2 part_gpt part_msdos ls tar squash4 loopback part_apple minicmd diskfilter linux relocator jpeg iso9660 udf hfsplus halt acpi mmap gfxmenu video_colors trig bitmap_scale gfxterm bitmap font fat exfat ntfs fshelp efifwsetup reboot echo configfile normal terminal gettext chain priority_queue bufio datetime cat extcmd crypto gzio boot all_video efi_gop efi_uga video_bochs video_cirrus video video_fb gfxterm_background gfxterm_menu"
|
||||
all_modules_uefi="setkey blocklist ventoy test true regexp newc search at_keyboard usb_keyboard gcry_md5 hashsum gzio xzio lzopio ext2 xfs read halt sleep serial terminfo png password_pbkdf2 gcry_sha512 pbkdf2 part_gpt part_msdos ls tar squash4 loopback part_apple minicmd diskfilter linux relocator jpeg iso9660 udf hfsplus halt acpi mmap gfxmenu video_colors trig bitmap_scale gfxterm bitmap font fat exfat ntfs fshelp efifwsetup reboot echo configfile normal terminal gettext chain priority_queue bufio datetime cat extcmd crypto gzio boot all_video efi_gop efi_uga video_bochs video_cirrus video video_fb gfxterm_background gfxterm_menu"
|
||||
|
||||
all_modules_arm64_uefi="blocklist ventoy test regexp newc search gcry_md5 hashsum gzio xzio lzopio ext2 xfs read halt sleep serial terminfo png password_pbkdf2 gcry_sha512 pbkdf2 part_gpt part_msdos ls tar squash4 loopback part_apple minicmd diskfilter linux jpeg iso9660 udf hfsplus halt acpi mmap gfxmenu video_colors trig bitmap_scale gfxterm bitmap font fat exfat ntfs fshelp efifwsetup reboot echo configfile normal terminal gettext chain priority_queue bufio datetime cat extcmd crypto gzio boot all_video efi_gop video video_fb gfxterm_background gfxterm_menu"
|
||||
all_modules_arm64_uefi="setkey blocklist ventoy test true regexp newc search gcry_md5 hashsum gzio xzio lzopio ext2 xfs read halt sleep serial terminfo png password_pbkdf2 gcry_sha512 pbkdf2 part_gpt part_msdos ls tar squash4 loopback part_apple minicmd diskfilter linux jpeg iso9660 udf hfsplus halt acpi mmap gfxmenu video_colors trig bitmap_scale gfxterm bitmap font fat exfat ntfs fshelp efifwsetup reboot echo configfile normal terminal gettext chain priority_queue bufio datetime cat extcmd crypto gzio boot all_video efi_gop video video_fb gfxterm_background gfxterm_menu"
|
||||
|
||||
|
||||
if [ "$1" = "uefi" ]; then
|
||||
|
@@ -11,25 +11,60 @@ mkdir SRC
|
||||
mkdir NBP
|
||||
mkdir PXE
|
||||
|
||||
tar -xvf grub-2.04.tar.xz -C ./SRC/
|
||||
tar -xf grub-2.04.tar.xz -C ./SRC/
|
||||
|
||||
/bin/cp -a ./MOD_SRC/grub-2.04 ./SRC/
|
||||
|
||||
cd ./SRC/grub-2.04
|
||||
|
||||
# build for Legacy BIOS
|
||||
./autogen.sh
|
||||
./configure --prefix=$VT_GRUB_DIR/INSTALL/
|
||||
make -j 16
|
||||
sh install.sh
|
||||
|
||||
# build for UEFI
|
||||
# build for x86_64-efi
|
||||
echo '======== build grub2 for x86_64-efi ==============='
|
||||
make distclean
|
||||
./autogen.sh
|
||||
./configure --with-platform=efi --prefix=$VT_GRUB_DIR/INSTALL/
|
||||
make -j 16
|
||||
make -j 16 || exit 1
|
||||
sh install.sh uefi
|
||||
|
||||
|
||||
#build for i386-efi
|
||||
echo '======== build grub2 for i386-efi ==============='
|
||||
make distclean
|
||||
./autogen.sh
|
||||
./configure --target=i386 --with-platform=efi --prefix=$VT_GRUB_DIR/INSTALL/
|
||||
make -j 16 || exit 1
|
||||
sh install.sh i386efi
|
||||
|
||||
|
||||
|
||||
#build for arm64 EFI
|
||||
echo '======== build grub2 for arm64-efi ==============='
|
||||
PATH=$PATH:/opt/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/bin
|
||||
make distclean
|
||||
./autogen.sh
|
||||
./configure --prefix=$VT_GRUB_DIR/INSTALL/ \
|
||||
--target=aarch64 --with-platform=efi \
|
||||
--host=x86_64-linux-gnu \
|
||||
HOST_CC=x86_64-linux-gnu-gcc \
|
||||
BUILD_CC=gcc \
|
||||
TARGET_CC=aarch64-linux-gnu-gcc \
|
||||
TARGET_OBJCOPY=aarch64-linux-gnu-objcopy \
|
||||
TARGET_STRIP=aarch64-linux-gnu-strip TARGET_NM=aarch64-linux-gnu-nm \
|
||||
TARGET_RANLIB=aarch64-linux-gnu-ranlib
|
||||
make -j 16 || exit 1
|
||||
sh install.sh arm64
|
||||
|
||||
|
||||
|
||||
# build for i386-pc
|
||||
echo '======== build grub2 for i386-pc ==============='
|
||||
make distclean
|
||||
./autogen.sh
|
||||
./configure --target=i386 --with-platform=pc --prefix=$VT_GRUB_DIR/INSTALL/
|
||||
make -j 16 || exit 1
|
||||
sh install.sh
|
||||
|
||||
|
||||
|
||||
cd ../../
|
||||
|
||||
|
@@ -19,7 +19,7 @@
|
||||
|
||||
####################################################################
|
||||
# #
|
||||
# Step 1 : extract busybox & set busybox enviroment #
|
||||
# Step 1 : extract busybox & set busybox environment #
|
||||
# #
|
||||
####################################################################
|
||||
|
||||
@@ -98,12 +98,21 @@ if [ -e $BUSYBOX_PATH/32h ]; then
|
||||
ln -s $BUSYBOX_PATH/xzminidecaa64 $BUSYBOX_PATH/xzminidec
|
||||
ln -s $VTOY_PATH/tool/dmsetupaa64 $VTOY_PATH/tool/dmsetup
|
||||
ln -s $VTOY_PATH/tool/lunzipaa64 $VTOY_PATH/tool/lunzip
|
||||
|
||||
rm -f $VTOY_PATH/tool/lz4cat $VTOY_PATH/tool/zstdcat
|
||||
ln -s $VTOY_PATH/tool/lz4cataa64 $VTOY_PATH/tool/lz4cat
|
||||
ln -s $VTOY_PATH/tool/zstdcataa64 $VTOY_PATH/tool/zstdcat
|
||||
|
||||
else
|
||||
echo "Use x86_64 busybox toolkit ..." >>$VTLOG
|
||||
echo x86_64 > $VTOY_PATH/ventoy_arch
|
||||
ln -s $BUSYBOX_PATH/xzminidec64 $BUSYBOX_PATH/xzminidec
|
||||
ln -s $VTOY_PATH/tool/dmsetup64 $VTOY_PATH/tool/dmsetup
|
||||
ln -s $VTOY_PATH/tool/lunzip64 $VTOY_PATH/tool/lunzip
|
||||
|
||||
rm -f $VTOY_PATH/tool/lz4cat $VTOY_PATH/tool/zstdcat
|
||||
ln -s $VTOY_PATH/tool/lz4cat64 $VTOY_PATH/tool/lz4cat
|
||||
ln -s $VTOY_PATH/tool/zstdcat64 $VTOY_PATH/tool/zstdcat
|
||||
fi
|
||||
else
|
||||
echo "Use i386 busybox toolkit ..." >>$VTLOG
|
||||
|
@@ -21,8 +21,6 @@
|
||||
|
||||
VTPATH_OLD=$PATH; PATH=$BUSYBOX_PATH:$VTOY_PATH/tool:$PATH
|
||||
|
||||
wait_for_usb_disk_ready
|
||||
|
||||
vtdiskname=$(get_ventoy_disk_name)
|
||||
if [ "$vtdiskname" = "unknown" ]; then
|
||||
vtlog "ventoy disk not found"
|
||||
@@ -30,6 +28,14 @@ if [ "$vtdiskname" = "unknown" ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if check_usb_disk_ready "$vtdiskname"; then
|
||||
vtlog "check_usb_disk_ready ok"
|
||||
else
|
||||
vtlog "check_usb_disk_ready error"
|
||||
PATH=$VTPATH_OLD
|
||||
exit 0
|
||||
fi
|
||||
|
||||
ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2"
|
||||
|
||||
# blkdev_num=$($VTOY_PATH/tool/dmsetup ls | grep ventoy | sed 's/.*(\([0-9][0-9]*\),.*\([0-9][0-9]*\).*/\1:\2/')
|
||||
|
@@ -19,6 +19,6 @@
|
||||
|
||||
. $VTOY_PATH/hook/ventoy-os-lib.sh
|
||||
|
||||
$SED "/^ *mdev *-s/a $BUSYBOX_PATH/sh $VTOY_PATH/hook/austrumi/disk_hook.sh" -i /init
|
||||
$SED "/find_usb *(/a $BUSYBOX_PATH/sh $VTOY_PATH/hook/austrumi/disk_hook.sh" -i /init
|
||||
$SED "s/BOOT_TYPE=livecd/BOOT_TYPE=usb/g" -i /init
|
||||
|
||||
|
@@ -19,7 +19,7 @@
|
||||
|
||||
. /ventoy/hook/ventoy-hook-lib.sh
|
||||
|
||||
# Just for KVM test enviroment
|
||||
# Just for KVM test environment
|
||||
$BUSYBOX_PATH/modprobe virtio_blk 2>/dev/null
|
||||
$BUSYBOX_PATH/modprobe virtio_pci 2>/dev/null
|
||||
|
||||
|
43
IMG/cpio/ventoy/hook/debian/bliss-disk.sh
Normal file
43
IMG/cpio/ventoy/hook/debian/bliss-disk.sh
Normal file
@@ -0,0 +1,43 @@
|
||||
#!/ventoy/busybox/sh
|
||||
#************************************************************************************
|
||||
# Copyright (c) 2020, longpanda <admin@ventoy.net>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License as
|
||||
# published by the Free Software Foundation; either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
#************************************************************************************
|
||||
|
||||
. /ventoy/hook/ventoy-hook-lib.sh
|
||||
|
||||
if is_ventoy_hook_finished; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
vtlog "####### $0 $* ########"
|
||||
|
||||
VTPATH_OLD=$PATH; PATH=$BUSYBOX_PATH:$VTOY_PATH/tool:$PATH
|
||||
|
||||
wait_for_usb_disk_ready
|
||||
|
||||
vtdiskname=$(get_ventoy_disk_name)
|
||||
if [ "$vtdiskname" = "unknown" ]; then
|
||||
vtlog "ventoy disk not found"
|
||||
PATH=$VTPATH_OLD
|
||||
exit 0
|
||||
fi
|
||||
|
||||
ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2"
|
||||
|
||||
PATH=$VTPATH_OLD
|
||||
|
||||
set_ventoy_hook_finish
|
23
IMG/cpio/ventoy/hook/debian/bliss-hook.sh
Normal file
23
IMG/cpio/ventoy/hook/debian/bliss-hook.sh
Normal file
@@ -0,0 +1,23 @@
|
||||
#!/ventoy/busybox/sh
|
||||
#************************************************************************************
|
||||
# Copyright (c) 2020, longpanda <admin@ventoy.net>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License as
|
||||
# published by the Free Software Foundation; either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
#************************************************************************************
|
||||
|
||||
$BUSYBOX_PATH/mkdir /dev
|
||||
$BUSYBOX_PATH/mknod /dev/null c 1 3
|
||||
|
||||
$SED "/echo.*Detecting/a\ $BUSYBOX_PATH/sh $VTOY_PATH/hook/debian/bliss-disk.sh" -i /init
|
@@ -20,3 +20,9 @@
|
||||
$SED '1 apmedia=usbhd' -i /init
|
||||
$SED "/^ *HAVE_PARTS=/a\ $BUSYBOX_PATH/sh $VTOY_PATH/hook/debian/puppy-disk.sh" -i /init
|
||||
$SED "/^ *HAVE_PARTS=/a\ HAVE_PARTS='ventoy|iso9660'" -i /init
|
||||
|
||||
if [ -f /DISTRO_SPECS ]; then
|
||||
if ! [ -d /dev ]; then
|
||||
$BUSYBOX_PATH/mkdir /dev
|
||||
fi
|
||||
fi
|
||||
|
@@ -60,8 +60,6 @@ ventoy_os_install_dmsetup() {
|
||||
fi
|
||||
}
|
||||
|
||||
wait_for_usb_disk_ready
|
||||
|
||||
vtdiskname=$(get_ventoy_disk_name)
|
||||
if [ "$vtdiskname" = "unknown" ]; then
|
||||
vtlog "ventoy disk not found"
|
||||
@@ -69,6 +67,14 @@ if [ "$vtdiskname" = "unknown" ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if check_usb_disk_ready "$vtdiskname"; then
|
||||
vtlog "check_usb_disk_ready ok"
|
||||
else
|
||||
vtlog "check_usb_disk_ready error"
|
||||
PATH=$VTPATH_OLD
|
||||
exit 0
|
||||
fi
|
||||
|
||||
ventoy_os_install_dmsetup $vtdiskname
|
||||
|
||||
ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2" "noreplace"
|
||||
|
@@ -17,4 +17,8 @@
|
||||
#
|
||||
#************************************************************************************
|
||||
|
||||
$SED "/find_data/i\ $BUSYBOX_PATH/sh $VTOY_PATH/hook/debian/slax-disk.sh" -i /init
|
||||
if [ -f /lib/livekitlib ] && $GREP -q 'debug_log.*find_data_try' /lib/livekitlib; then
|
||||
$SED "/debug_log.*find_data_try/a\ $BUSYBOX_PATH/sh $VTOY_PATH/hook/debian/slax-disk.sh" -i /lib/livekitlib
|
||||
else
|
||||
$SED "/find_data/i\ $BUSYBOX_PATH/sh $VTOY_PATH/hook/debian/slax-disk.sh" -i /init
|
||||
fi
|
||||
|
@@ -126,6 +126,7 @@ fi
|
||||
|
||||
if [ -n "$VT_BUS_USB" ]; then
|
||||
vtlog "$1 is USB device"
|
||||
echo /dev/$1 > /ventoy/list-devices-usb-part
|
||||
else
|
||||
vtlog "$1 is NOT USB device (bus $ID_BUS)"
|
||||
|
||||
|
@@ -74,6 +74,14 @@ ventoy_get_debian_distro() {
|
||||
echo 'kylin'; return
|
||||
fi
|
||||
|
||||
if [ -f /scripts/00-ver ]; then
|
||||
if $GREP -q 'Bliss-OS' /scripts/00-ver; then
|
||||
echo 'bliss'; return
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
|
||||
echo 'default'
|
||||
}
|
||||
|
||||
|
@@ -19,7 +19,7 @@
|
||||
|
||||
. /ventoy/hook/ventoy-hook-lib.sh
|
||||
|
||||
# Just for KVM test enviroment
|
||||
# Just for KVM test environment
|
||||
$BUSYBOX_PATH/modprobe virtio_blk 2>/dev/null
|
||||
$BUSYBOX_PATH/modprobe virtio_pci 2>/dev/null
|
||||
|
||||
|
@@ -19,22 +19,43 @@
|
||||
|
||||
. /ventoy/hook/ventoy-hook-lib.sh
|
||||
|
||||
if is_ventoy_hook_finished || not_ventoy_disk "${1:0:-1}"; then
|
||||
if is_ventoy_hook_finished; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
vtlog "####### $0 $* ########"
|
||||
|
||||
VTPATH_OLD=$PATH; PATH=$BUSYBOX_PATH:$VTOY_PATH/tool:$PATH
|
||||
|
||||
wait_for_usb_disk_ready
|
||||
|
||||
vtdiskname=$(get_ventoy_disk_name)
|
||||
if [ "$vtdiskname" = "unknown" ]; then
|
||||
vtlog "ventoy disk not found"
|
||||
PATH=$VTPATH_OLD
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if echo $vtdiskname | egrep -q "nvme.*p[0-9]$|mmc.*p[0-9]$|nbd.*p[0-9]$"; then
|
||||
vPart="${vtdiskname}p2"
|
||||
else
|
||||
vPart="${vtdiskname}2"
|
||||
fi
|
||||
|
||||
# TinyCore linux distro doesn't contain dmsetup, we use aoe here
|
||||
sudo $BUSYBOX_PATH/modprobe aoe aoe_iflist=lo
|
||||
sudo modprobe aoe aoe_iflist=lo
|
||||
if [ -e /sys/module/aoe ]; then
|
||||
VBLADE_BIN=$(ventoy_get_vblade_bin)
|
||||
sudo $VBLADE_BIN -r -f $VTOY_PATH/ventoy_image_map 9 0 lo "/dev/${1:0:-1}" &
|
||||
|
||||
sudo nohup $VBLADE_BIN -r -f $VTOY_PATH/ventoy_image_map 9 0 lo "$vtdiskname" > /dev/null &
|
||||
sleep 2
|
||||
|
||||
while ! [ -b /dev/etherd/e9.0 ]; do
|
||||
vtlog 'Wait for /dev/etherd/e9.0 ....'
|
||||
$SLEEP 0.1
|
||||
sleep 2
|
||||
done
|
||||
|
||||
sudo $BUSYBOX_PATH/cp -a /dev/etherd/e9.0 "/dev/$1"
|
||||
sudo cp -a /dev/etherd/e9.0 "$vPart"
|
||||
|
||||
ventoy_find_bin_run rebuildfstab
|
||||
else
|
||||
@@ -42,4 +63,6 @@ else
|
||||
fi
|
||||
|
||||
# OK finish
|
||||
PATH=$VTPATH_OLD
|
||||
|
||||
set_ventoy_hook_finish
|
@@ -19,6 +19,5 @@
|
||||
|
||||
. $VTOY_PATH/hook/ventoy-os-lib.sh
|
||||
|
||||
ventoy_systemd_udevd_work_around
|
||||
|
||||
ventoy_add_udev_rule_with_name "$VTOY_PATH/hook/tinycore/udev_disk_hook.sh %k" "90-ventoy.rules"
|
||||
$SED "/\[.*-n.*WAITUSB/i\WAITUSB=10" -i /etc/init.d/tc-config
|
||||
$SED "/\[.*-n.*AOE/i\$VTOY_PATH/hook/tinycore/ventoy-disk.sh" -i /etc/init.d/tc-config
|
||||
|
@@ -87,7 +87,7 @@ wait_for_usb_disk_ready() {
|
||||
usb_disk=$(get_ventoy_disk_name)
|
||||
vtlog "wait_for_usb_disk_ready $usb_disk ..."
|
||||
|
||||
if echo $usb_disk | $EGREP -q "nvme|mmc"; then
|
||||
if echo $usb_disk | $EGREP -q "nvme|mmc|nbd"; then
|
||||
vtpart2=${usb_disk}p2
|
||||
else
|
||||
vtpart2=${usb_disk}2
|
||||
@@ -102,6 +102,16 @@ wait_for_usb_disk_ready() {
|
||||
done
|
||||
}
|
||||
|
||||
check_usb_disk_ready() {
|
||||
if echo $1 | $EGREP -q "nvme|mmc|nbd"; then
|
||||
vtpart2=${1}p2
|
||||
else
|
||||
vtpart2=${1}2
|
||||
fi
|
||||
|
||||
[ -e "${vtpart2}" ]
|
||||
}
|
||||
|
||||
is_ventoy_disk() {
|
||||
if $VTOY_PATH/tool/vtoydump -f $VTOY_PATH/ventoy_os_param -c "$1"; then
|
||||
$BUSYBOX_PATH/true
|
||||
@@ -111,7 +121,7 @@ is_ventoy_disk() {
|
||||
}
|
||||
|
||||
not_ventoy_disk() {
|
||||
if echo $1 | $EGREP -q "nvme.*p$|mmc.*p$"; then
|
||||
if echo $1 | $EGREP -q "nvme.*p$|mmc.*p$|nbd.*p$"; then
|
||||
vtDiskName=${1:0:-1}
|
||||
else
|
||||
vtDiskName=$1
|
||||
@@ -476,7 +486,7 @@ ventoy_create_persistent_link() {
|
||||
}
|
||||
|
||||
ventoy_udev_disk_common_hook() {
|
||||
if echo $1 | $EGREP -q "nvme.*p[0-9]$|mmc.*p[0-9]$"; then
|
||||
if echo $1 | $EGREP -q "nvme.*p[0-9]$|mmc.*p[0-9]$|nbd.*p[0-9]$"; then
|
||||
VTDISK="${1:0:-2}"
|
||||
else
|
||||
VTDISK="${1:0:-1}"
|
||||
@@ -548,7 +558,7 @@ is_inotify_ventoy_part() {
|
||||
if echo $1 | $GREP -q "2$"; then
|
||||
if ! [ -e /sys/block/$1 ]; then
|
||||
if [ -e /sys/class/block/$1 ]; then
|
||||
if echo $1 | $EGREP -q "nvme|mmc"; then
|
||||
if echo $1 | $EGREP -q "nvme|mmc|nbd"; then
|
||||
vtShortName=${1:0:-2}
|
||||
else
|
||||
vtShortName=${1:0:-1}
|
||||
|
@@ -38,20 +38,9 @@ if $GREP -q aarch64 $VTOY_PATH/ventoy_arch; then
|
||||
fi
|
||||
done
|
||||
|
||||
$BUSYBOX_PATH/rm -f $VTOY_PATH/tool/lz4cat $VTOY_PATH/tool/zstdcat
|
||||
$BUSYBOX_PATH/cp -a $VTOY_PATH/tool/lz4cataa64 $VTOY_PATH/tool/lz4cat
|
||||
$BUSYBOX_PATH/cp -a $VTOY_PATH/tool/zstdcataa64 $VTOY_PATH/tool/zstdcat
|
||||
|
||||
$BUSYBOX_PATH/cp -a $VTOY_PATH/tool/vtoy_fuse_iso_aa64 $VTOY_PATH/tool/vtoy_fuse_iso
|
||||
$BUSYBOX_PATH/cp -a $VTOY_PATH/tool/unsquashfs_aa64 $VTOY_PATH/tool/vtoy_unsquashfs
|
||||
else
|
||||
|
||||
if $GREP -q x86_64 $VTOY_PATH/ventoy_arch; then
|
||||
$BUSYBOX_PATH/rm -f $VTOY_PATH/tool/lz4cat $VTOY_PATH/tool/zstdcat
|
||||
$BUSYBOX_PATH/cp -a $VTOY_PATH/tool/lz4cat64 $VTOY_PATH/tool/lz4cat
|
||||
$BUSYBOX_PATH/cp -a $VTOY_PATH/tool/zstdcat64 $VTOY_PATH/tool/zstdcat
|
||||
fi
|
||||
|
||||
for vtdir in $(ls $VTOY_PATH/tool/vtoytool/); do
|
||||
echo "try $VTOY_PATH/tool/vtoytool/$vtdir/ ..." >> $VTLOG
|
||||
if $VTOY_PATH/tool/vtoytool/$vtdir/vtoytool_64 --install 2>>$VTLOG; then
|
||||
|
@@ -313,6 +313,12 @@ ventoy_get_os_type() {
|
||||
echo 'austrumi'; return
|
||||
fi
|
||||
|
||||
if [ -f /DISTRO_SPECS ]; then
|
||||
if $GREP -q '[Pp]uppy' /DISTRO_SPECS; then
|
||||
echo 'debian'; return
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "default"
|
||||
}
|
||||
|
||||
|
@@ -3,13 +3,15 @@
|
||||
size=1024
|
||||
fstype=ext4
|
||||
label=casper-rw
|
||||
config=''
|
||||
|
||||
print_usage() {
|
||||
echo 'Usage: CreatePersistentImg.sh [ -s size ] [ -t fstype ] [ -l LABEL ]'
|
||||
echo 'Usage: CreatePersistentImg.sh [ -s size ] [ -t fstype ] [ -l LABEL ] [ -c CFG ]'
|
||||
echo ' OPTION: (optional)'
|
||||
echo ' -s size in MB, default is 1024'
|
||||
echo ' -t filesystem type, default is ext4 ext2/ext3/ext4/xfs are supported now'
|
||||
echo ' -l label, default is casper-rw'
|
||||
echo ' -c configfile name inside the persistence file. File content is "/ union"'
|
||||
echo ''
|
||||
}
|
||||
|
||||
@@ -23,6 +25,9 @@ while [ -n "$1" ]; do
|
||||
elif [ "$1" = "-l" ]; then
|
||||
shift
|
||||
label=$1
|
||||
elif [ "$1" = "-c" ]; then
|
||||
shift
|
||||
config=$1
|
||||
elif [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
|
||||
print_usage
|
||||
exit 0
|
||||
@@ -76,5 +81,18 @@ mkfs -t $fstype $fsopt -L $label $freeloop
|
||||
|
||||
sync
|
||||
|
||||
losetup -d $freeloop
|
||||
if [ -n "$config" ]; then
|
||||
if [ -d ./persist_tmp_mnt ]; then
|
||||
rm -rf ./persist_tmp_mnt
|
||||
fi
|
||||
|
||||
mkdir ./persist_tmp_mnt
|
||||
if mount $freeloop ./persist_tmp_mnt; then
|
||||
echo '/ union' > ./persist_tmp_mnt/$config
|
||||
sync
|
||||
umount ./persist_tmp_mnt
|
||||
fi
|
||||
rm -rf ./persist_tmp_mnt
|
||||
fi
|
||||
|
||||
losetup -d $freeloop
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -17,6 +17,9 @@ Ventoy2Disk.sh CMD [ OPTION ] /dev/sdX
|
||||
Please refer https://www.ventoy.net/en/doc_start.html for details.
|
||||
|
||||
|
||||
========== VentoyWeb.sh ===============
|
||||
1. sudo sh VentoyWeb.sh
|
||||
2. open your browser and visit http://127.0.0.1:24680
|
||||
|
||||
|
||||
|
||||
|
Binary file not shown.
127
INSTALL/VentoyWeb.sh
Normal file
127
INSTALL/VentoyWeb.sh
Normal file
@@ -0,0 +1,127 @@
|
||||
#!/bin/sh
|
||||
|
||||
print_usage() {
|
||||
echo 'Usage: VentoyWeb.sh [ OPTION ]'
|
||||
echo ' OPTION: (optional)'
|
||||
echo ' -H x.x.x.x http server IP address (default is 127.0.0.1)'
|
||||
echo ' -p PORT http server PORT (default is 24680)'
|
||||
echo ' -h print this help'
|
||||
echo ''
|
||||
}
|
||||
|
||||
print_err() {
|
||||
echo ""
|
||||
echo "$*"
|
||||
echo ""
|
||||
}
|
||||
|
||||
uid=$(id -u)
|
||||
if [ $uid -ne 0 ]; then
|
||||
print_err "Please use sudo or run the script as root."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
OLDDIR=$(pwd)
|
||||
|
||||
if uname -a | egrep -q 'aarch64|arm64'; then
|
||||
TOOLDIR=aarch64
|
||||
elif uname -a | egrep -q 'x86_64|amd64'; then
|
||||
TOOLDIR=x86_64
|
||||
else
|
||||
TOOLDIR=i386
|
||||
fi
|
||||
|
||||
if [ ! -f ./tool/$TOOLDIR/V2DServer ]; then
|
||||
if [ -f ${0%VentoyWeb.sh}/tool/$TOOLDIR/V2DServer ]; then
|
||||
cd ${0%VentoyWeb.sh}
|
||||
fi
|
||||
fi
|
||||
|
||||
PATH=./tool/$TOOLDIR:$PATH
|
||||
|
||||
if [ ! -f ./boot/boot.img ]; then
|
||||
if [ -d ./grub ]; then
|
||||
echo "Don't run VentoyWeb.sh here, please download the released install package, and run the script in it."
|
||||
else
|
||||
echo "Please run under the correct directory!"
|
||||
fi
|
||||
exit 1
|
||||
fi
|
||||
|
||||
HOST="127.0.0.1"
|
||||
PORT=24680
|
||||
|
||||
while [ -n "$1" ]; do
|
||||
if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
|
||||
print_usage
|
||||
exit 0
|
||||
elif [ "$1" = "-H" ]; then
|
||||
shift
|
||||
if echo $1 | grep -q '[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*'; then
|
||||
HOST="$1"
|
||||
else
|
||||
print_err "Invalid host $1"
|
||||
exit 1
|
||||
fi
|
||||
elif [ "$1" = "-p" ]; then
|
||||
shift
|
||||
if [ $1 -gt 0 -a $1 -le 65535 ]; then
|
||||
PORT="$1"
|
||||
else
|
||||
print_err "Invalid port $1"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
shift
|
||||
done
|
||||
|
||||
|
||||
if ps -ef | grep "V2DServer.*$HOST.*$PORT" | grep -q -v grep; then
|
||||
print_err "Another ventoy server is running now, please close it first."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
LOGFILE=log.txt
|
||||
#delete the log.txt if it's more than 8MB
|
||||
if [ -f $LOGFILE ]; then
|
||||
logsize=$(stat -c '%s' $LOGFILE)
|
||||
if [ $logsize -gt 8388608 ]; then
|
||||
rm -f $LOGFILE
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
if [ -f ./tool/$TOOLDIR/V2DServer.xz ]; then
|
||||
xz -d ./tool/$TOOLDIR/V2DServer.xz
|
||||
chmod +x ./tool/$TOOLDIR/V2DServer
|
||||
fi
|
||||
|
||||
|
||||
V2DServer "$HOST" "$PORT" &
|
||||
wID=$!
|
||||
sleep 1
|
||||
|
||||
vtVer=$(cat ventoy/version)
|
||||
echo ""
|
||||
echo "==============================================================="
|
||||
if [ "$LANG" = "zh_CN.UTF-8" ]; then
|
||||
echo " Ventoy Server $vtVer 已经启动 ..."
|
||||
echo " 请打开浏览器,访问 http://${HOST}:${PORT}"
|
||||
else
|
||||
echo " Ventoy Server $vtVer is running ..."
|
||||
echo " Please open your browser and visit http://${HOST}:${PORT}"
|
||||
fi
|
||||
echo "==============================================================="
|
||||
echo ""
|
||||
echo "################## Press Ctrl + C to exit #####################"
|
||||
echo ""
|
||||
|
||||
wait $wID
|
||||
|
||||
if [ -n "$OLDDIR" ]; then
|
||||
CURDIR=$(pwd)
|
||||
if [ "$CURDIR" != "$OLDDIR" ]; then
|
||||
cd "$OLDDIR"
|
||||
fi
|
||||
fi
|
@@ -2,63 +2,79 @@
|
||||
|
||||
VTOY_PATH=$PWD/..
|
||||
|
||||
LOG=$VTOY_PATH/DOC/build.log
|
||||
[ -f $LOG ] && rm -f $LOG
|
||||
|
||||
cd $VTOY_PATH/DOC
|
||||
sh installdietlibc.sh
|
||||
echo "prepare_env ..."
|
||||
sh prepare_env.sh
|
||||
|
||||
export PATH=$PATH:/opt/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/bin:/opt/aarch64--uclibc--stable-2020.08-1/bin
|
||||
|
||||
|
||||
echo "build grub2 ..."
|
||||
cd $VTOY_PATH/GRUB2
|
||||
sh buildgrub.sh || exit 1
|
||||
sh buildgrub.sh >> $LOG 2>&1 || exit 1
|
||||
|
||||
echo "build ipxe ..."
|
||||
cd $VTOY_PATH/IPXE
|
||||
sh buildipxe.sh || exit 1
|
||||
sh buildipxe.sh >> $LOG 2>&1 || exit 1
|
||||
|
||||
echo "build edk2 ..."
|
||||
cd $VTOY_PATH/EDK2
|
||||
sh buildedk.sh || exit 1
|
||||
|
||||
cd $VTOY_PATH/VtoyTool
|
||||
sh build.sh || exit 1
|
||||
|
||||
cd $VTOY_PATH/vtoyfat/fat_io_lib
|
||||
sh buildlib.sh
|
||||
|
||||
cd $VTOY_PATH/vtoyfat
|
||||
sh build.sh || exit 1
|
||||
|
||||
cd $VTOY_PATH/vtoygpt
|
||||
sh build.sh || exit 1
|
||||
|
||||
cd $VTOY_PATH/ExFAT
|
||||
sh buidlibfuse.sh || exit 1
|
||||
sh buidexfat.sh || exit 1
|
||||
/bin/cp -a EXFAT/shared/mkexfatfs $VTOY_PATH/INSTALL/tool/mkexfatfs_64
|
||||
/bin/cp -a EXFAT/shared/mount.exfat-fuse $VTOY_PATH/INSTALL/tool/mount.exfat-fuse_64
|
||||
sh buildedk.sh >> $LOG 2>&1 || exit 1
|
||||
|
||||
|
||||
cd $VTOY_PATH/FUSEISO
|
||||
sh build_libfuse.sh
|
||||
sh build.sh
|
||||
|
||||
cd $VTOY_PATH/SQUASHFS/SRC
|
||||
sh build_lz4.sh
|
||||
sh build_lzma.sh
|
||||
sh build_lzo.sh
|
||||
sh build_zstd.sh
|
||||
#
|
||||
# We almost rarely modifiy these code, so no need to build them everytime
|
||||
# If you want to rebuild them, just uncomment them.
|
||||
#
|
||||
|
||||
cd $VTOY_PATH/SQUASHFS/squashfs-tools-4.4/squashfs-tools
|
||||
sh build.sh
|
||||
#cd $VTOY_PATH/VtoyTool
|
||||
#sh build.sh || exit 1
|
||||
|
||||
cd $VTOY_PATH/VBLADE/vblade-master
|
||||
sh build.sh
|
||||
#cd $VTOY_PATH/vtoyfat/fat_io_lib
|
||||
#sh buildlib.sh
|
||||
|
||||
cd $VTOY_PATH/Ventoy2Disk/Ventoy2Disk/xz-embedded-20130513/userspace
|
||||
make -f ventoy_makefile
|
||||
strip --strip-all xzminidec
|
||||
rm -f $VTOY_PATH/IMG/cpio/ventoy/tool/xzminidec
|
||||
cp -a xzminidec $VTOY_PATH/IMG/cpio/ventoy/tool/xzminidec
|
||||
make clean; rm -f *.o
|
||||
#cd $VTOY_PATH/vtoyfat
|
||||
#sh build.sh || exit 1
|
||||
|
||||
#cd $VTOY_PATH/vtoygpt
|
||||
#sh build.sh || exit 1
|
||||
|
||||
#cd $VTOY_PATH/FUSEISO
|
||||
#sh build_libfuse.sh
|
||||
#sh build.sh
|
||||
|
||||
|
||||
# cd $VTOY_PATH/ExFAT
|
||||
# sh buidlibfuse.sh || exit 1
|
||||
# sh buidexfat.sh || exit 1
|
||||
# /bin/cp -a EXFAT/shared/mkexfatfs $VTOY_PATH/INSTALL/tool/mkexfatfs_64
|
||||
# /bin/cp -a EXFAT/shared/mount.exfat-fuse $VTOY_PATH/INSTALL/tool/mount.exfat-fuse_64
|
||||
|
||||
|
||||
# cd $VTOY_PATH/SQUASHFS/SRC
|
||||
# sh build_lz4.sh
|
||||
# sh build_lzma.sh
|
||||
# sh build_lzo.sh
|
||||
# sh build_zstd.sh
|
||||
|
||||
# cd $VTOY_PATH/SQUASHFS/squashfs-tools-4.4/squashfs-tools
|
||||
# sh build.sh
|
||||
|
||||
# cd $VTOY_PATH/VBLADE/vblade-master
|
||||
# sh build.sh
|
||||
|
||||
cd $VTOY_PATH/INSTALL
|
||||
sh ventoy_pack.sh || exit 1
|
||||
|
||||
if [ "$1" = "CI" ]; then
|
||||
Ver=$(date +%m%d%H%M)
|
||||
sed "s/VENTOY_VERSION=.*/VENTOY_VERSION=\"$Ver\"/" -i ./grub/grub.cfg
|
||||
fi
|
||||
|
||||
echo "packing ventoy-$Ver ..."
|
||||
sh ventoy_pack.sh $1 >> $LOG 2>&1 || exit 1
|
||||
|
||||
echo -e '\n============== SUCCESS ==================\n'
|
||||
|
12
INSTALL/docker_ci_build.sh
Normal file
12
INSTALL/docker_ci_build.sh
Normal file
@@ -0,0 +1,12 @@
|
||||
#!/bin/sh
|
||||
|
||||
VTOY_PATH=$PWD/..
|
||||
|
||||
wget -q -P $VTOY_PATH/DOC/ https://www.fefe.de/dietlibc/dietlibc-0.34.tar.xz
|
||||
wget -q -P $VTOY_PATH/DOC/ https://musl.libc.org/releases/musl-1.2.1.tar.gz
|
||||
wget -q -P $VTOY_PATH/GRUB2/ https://ftp.gnu.org/gnu/grub/grub-2.04.tar.xz
|
||||
wget -q -O $VTOY_PATH/EDK2/edk2-edk2-stable201911.zip https://codeload.github.com/tianocore/edk2/zip/edk2-stable201911
|
||||
wget -q -P /opt/ https://releases.linaro.org/components/toolchain/binaries/7.4-2019.02/aarch64-linux-gnu/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu.tar.xz
|
||||
wget -q -P /opt/ https://toolchains.bootlin.com/downloads/releases/toolchains/aarch64/tarballs/aarch64--uclibc--stable-2020.08-1.tar.bz2
|
||||
|
||||
sh all_in_one.sh CI
|
@@ -32,6 +32,7 @@
|
||||
*save_env: loadenv
|
||||
*search: search
|
||||
*serial: serial
|
||||
*setkey: setkey
|
||||
*sha1sum: hashsum
|
||||
*sha256sum: hashsum
|
||||
*sha512sum: hashsum
|
||||
|
@@ -1,4 +1,5 @@
|
||||
videotest: font video gfxmenu
|
||||
setkey: extcmd
|
||||
odc: archelp
|
||||
loopback: extcmd
|
||||
macho:
|
||||
|
Binary file not shown.
@@ -1,4 +1,58 @@
|
||||
|
||||
source $prefix/keyboard.cfg.gz
|
||||
|
||||
submenu "Resolution Configuration" --class=debug_resolution {
|
||||
menuentry 'Return to previous menu [Esc]' --class=vtoyret VTOY_RET {
|
||||
echo 'Return ...'
|
||||
}
|
||||
|
||||
vt_update_cur_video_mode VT_CUR_MODE
|
||||
set vdid=0
|
||||
while [ $vdid -lt $VTOY_VIDEO_MODE_NUM ]; do
|
||||
vt_get_video_mode $vdid vtCurMode
|
||||
|
||||
unset vtActive
|
||||
if [ "$vtCurMode" = "$VT_CUR_MODE" ]; then
|
||||
set vtActive="[*]"
|
||||
fi
|
||||
|
||||
menuentry "$vtCurMode $vtActive" --class=debug_videomode VTOY_RUN_RET {
|
||||
terminal_output console
|
||||
set gfxmode=$1
|
||||
terminal_output gfxterm
|
||||
}
|
||||
|
||||
vt_incr vdid 1
|
||||
done
|
||||
}
|
||||
|
||||
submenu "Screen Display Mode" --class=debug_screen_mode {
|
||||
menuentry 'Force Text Mode' --class=debug_text_mode {
|
||||
terminal_output console
|
||||
}
|
||||
menuentry 'Force Graphics Mode' --class=debug_gui_mode {
|
||||
terminal_output gfxterm
|
||||
}
|
||||
menuentry 'Return to previous menu [Esc]' --class=vtoyret VTOY_RET {
|
||||
echo 'Return ...'
|
||||
}
|
||||
}
|
||||
|
||||
if [ "$grub_platform" != "pc" ]; then
|
||||
submenu 'Ventoy UEFI Utilities' --class=debug_util {
|
||||
menuentry 'Fixup Windows BlinitializeLibrary Failure' --class=debug_util_blinit {
|
||||
chainloader ${vtoy_path}/vtoyutil_${VTOY_EFI_ARCH}.efi env_param=${env_param} ${vtdebug_flag} feature=fix_windows_mmap
|
||||
boot
|
||||
echo -e "\npress ENTER to exit ..."
|
||||
read vtInputKey
|
||||
}
|
||||
|
||||
menuentry 'Return to previous menu [Esc]' --class=vtoyret VTOY_RET {
|
||||
echo 'Return ...'
|
||||
}
|
||||
}
|
||||
fi
|
||||
|
||||
|
||||
submenu 'Check plugin json configuration (ventoy.json)' --class=debug_json {
|
||||
menuentry 'Check global control plugin configuration' --class=debug_control {
|
||||
@@ -85,6 +139,15 @@ submenu 'Check plugin json configuration (ventoy.json)' --class=debug_json {
|
||||
unset pager
|
||||
}
|
||||
|
||||
menuentry 'Check image blacklist plugin configuration' --class=debug_imageblacklist {
|
||||
set pager=1
|
||||
vt_check_plugin_json $vt_plugin_path image_blacklist $vtoy_iso_part
|
||||
|
||||
echo -e "\npress ENTER to exit ..."
|
||||
read vtInputKey
|
||||
unset pager
|
||||
}
|
||||
|
||||
menuentry 'Check boot conf replace plugin configuration' --class=debug_bootconf_replace {
|
||||
set pager=1
|
||||
vt_check_plugin_json $vt_plugin_path conf_replace $vtoy_iso_part
|
||||
@@ -112,63 +175,20 @@ submenu 'Check plugin json configuration (ventoy.json)' --class=debug_json {
|
||||
unset pager
|
||||
}
|
||||
|
||||
menuentry 'Return to previous menu [Esc]' --class=vtoyret VTOY_RET {
|
||||
echo 'Return ...'
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
submenu "Resolution Configuration" --class=debug_resolution {
|
||||
menuentry 'Return to previous menu [Esc]' --class=vtoyret VTOY_RET {
|
||||
echo 'Return ...'
|
||||
menuentry 'Check custom boot plugin configuration' --class=debug_custom_boot {
|
||||
set pager=1
|
||||
vt_check_plugin_json $vt_plugin_path custom_boot $vtoy_iso_part
|
||||
|
||||
echo -e "\npress ENTER to exit ..."
|
||||
read vtInputKey
|
||||
unset pager
|
||||
}
|
||||
|
||||
vt_update_cur_video_mode VT_CUR_MODE
|
||||
set vdid=0
|
||||
while [ $vdid -lt $VTOY_VIDEO_MODE_NUM ]; do
|
||||
vt_get_video_mode $vdid vtCurMode
|
||||
|
||||
unset vtActive
|
||||
if [ "$vtCurMode" = "$VT_CUR_MODE" ]; then
|
||||
set vtActive="[*]"
|
||||
fi
|
||||
|
||||
menuentry "$vtCurMode $vtActive" --class=debug_videomode VTOY_RUN_RET {
|
||||
terminal_output console
|
||||
set gfxmode=$1
|
||||
terminal_output gfxterm
|
||||
}
|
||||
|
||||
vt_incr vdid 1
|
||||
done
|
||||
}
|
||||
|
||||
submenu "Screen Display Mode" --class=debug_screen_mode {
|
||||
menuentry 'Force Text Mode' --class=debug_text_mode {
|
||||
terminal_output console
|
||||
}
|
||||
menuentry 'Force Graphics Mode' --class=debug_gui_mode {
|
||||
terminal_output gfxterm
|
||||
}
|
||||
menuentry 'Return to previous menu [Esc]' --class=vtoyret VTOY_RET {
|
||||
echo 'Return ...'
|
||||
}
|
||||
}
|
||||
|
||||
if [ "$grub_platform" != "pc" ]; then
|
||||
submenu 'Ventoy UEFI Utilities' --class=debug_util {
|
||||
menuentry 'Fixup Windows BlinitializeLibrary Failure' --class=debug_util_blinit {
|
||||
chainloader ${vtoy_path}/vtoyutil_${VTOY_EFI_ARCH}.efi env_param=${env_param} ${vtdebug_flag} feature=fix_windows_mmap
|
||||
boot
|
||||
echo -e "\npress ENTER to exit ..."
|
||||
read vtInputKey
|
||||
}
|
||||
|
||||
menuentry 'Return to previous menu [Esc]' --class=vtoyret VTOY_RET {
|
||||
echo 'Return ...'
|
||||
}
|
||||
}
|
||||
fi
|
||||
|
||||
menuentry 'Return to previous menu [Esc]' --class=vtoyret VTOY_RET {
|
||||
echo 'Return ...'
|
||||
|
@@ -50,6 +50,21 @@ function ventoy_acpi_param {
|
||||
fi
|
||||
}
|
||||
|
||||
function ventoy_vcfg_proc {
|
||||
if vt_check_custom_boot "${1}" vt_vcfg; then
|
||||
set vtoy_chosen_path="${1}"
|
||||
vt_file_basefile "${vtoy_chosen_path}" vtoy_chosen_file
|
||||
|
||||
export vtoy_chosen_path
|
||||
export vtoy_chosen_file
|
||||
ventoy_debug_pause
|
||||
configfile "${vtoy_iso_part}${vt_vcfg}"
|
||||
true
|
||||
else
|
||||
false
|
||||
fi
|
||||
}
|
||||
|
||||
function ventoy_power {
|
||||
configfile $prefix/power.cfg
|
||||
}
|
||||
@@ -294,6 +309,8 @@ function distro_specify_initrd_file_phase2 {
|
||||
fi
|
||||
elif [ -f (loop)/antiX/initrd.gz ]; then
|
||||
vt_linux_specify_initrd_file /antiX/initrd.gz
|
||||
elif [ -f (loop)/360Disk/initrd.gz ]; then
|
||||
vt_linux_specify_initrd_file /360Disk/initrd.gz
|
||||
|
||||
fi
|
||||
}
|
||||
@@ -620,6 +637,12 @@ function uefi_linux_menu_func {
|
||||
|
||||
vt_linux_chain_data "${1}${chosen_path}"
|
||||
|
||||
if [ -n "$LoadIsoEfiDriver" -a $vt_chosen_size -lt 104857600 ]; then
|
||||
if [ -f (loop)/efi/clover/cloverx64.efi ]; then
|
||||
unset LoadIsoEfiDriver
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -n "$vtoy_chain_mem_addr" ]; then
|
||||
ventoy_acpi_param ${vtoy_chain_mem_addr} 2048
|
||||
ventoy_cli_console
|
||||
@@ -645,6 +668,14 @@ function uefi_unix_menu_func {
|
||||
fi
|
||||
}
|
||||
|
||||
function ventoy_reset_nojoliet {
|
||||
if vt_str_begin "$vt_volume_id" "ARCARESCUE"; then
|
||||
vt_iso9660_nojoliet 1
|
||||
else
|
||||
vt_iso9660_nojoliet 0
|
||||
fi
|
||||
}
|
||||
|
||||
function uefi_iso_menu_func {
|
||||
|
||||
if [ -d (loop)/ ]; then
|
||||
@@ -668,7 +699,7 @@ function uefi_iso_menu_func {
|
||||
set ventoy_fs_probe=udf
|
||||
else
|
||||
set ventoy_fs_probe=iso9660
|
||||
vt_iso9660_nojoliet 0
|
||||
ventoy_reset_nojoliet
|
||||
fi
|
||||
|
||||
loopback loop "${1}${chosen_path}"
|
||||
@@ -857,7 +888,7 @@ function legacy_iso_menu_func {
|
||||
set ventoy_fs_probe=udf
|
||||
else
|
||||
set ventoy_fs_probe=iso9660
|
||||
vt_iso9660_nojoliet 0
|
||||
ventoy_reset_nojoliet
|
||||
fi
|
||||
|
||||
loopback loop "${1}${chosen_path}"
|
||||
@@ -944,22 +975,41 @@ function ventoy_iso_busybox_ver {
|
||||
set ventoy_busybox_ver=64
|
||||
elif vt_str_begin "$vt_volume_id" "smgl-test-quinq-x86_64"; then
|
||||
set ventoy_busybox_ver=64
|
||||
|
||||
elif vt_str_begin "$vt_volume_id" "LDiagBootable"; then
|
||||
set ventoy_busybox_ver=64
|
||||
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
function iso_common_menuentry {
|
||||
unset vt_system_id
|
||||
unset vt_volume_id
|
||||
|
||||
vt_chosen_img_path vt_chosen_path vt_chosen_size
|
||||
vt_parse_iso_volume "${vtoy_iso_part}${vt_chosen_path}" vt_system_id vt_volume_id
|
||||
|
||||
vt_parse_iso_volume "${vtoy_iso_part}${vt_chosen_path}" vt_system_id vt_volume_id vt_volume_space
|
||||
if [ $vt_volume_space -ne $vt_chosen_size ]; then
|
||||
vt_mod $vt_chosen_size 2048 vt_chosen_size_mod
|
||||
if [ $vt_volume_space -gt $vt_chosen_size -o $vt_chosen_size_mod -ne 0 ]; then
|
||||
echo -e "\n $vt_volume_space $vt_chosen_size $vt_chosen_size_mod\n"
|
||||
echo -e "\n The size of the iso file \"$vt_chosen_size\" is invalid. File corrupted ?\n"
|
||||
echo -e " 此ISO文件的大小 \"$vt_chosen_size\" 有问题,请确认文件是否损坏。\n"
|
||||
echo -e "\n press ENTER to exit (请按 回车 键返回) ..."
|
||||
read vtInputKey
|
||||
return
|
||||
fi
|
||||
fi
|
||||
|
||||
if vt_check_password "${vt_chosen_path}"; then
|
||||
return
|
||||
fi
|
||||
|
||||
|
||||
if ventoy_vcfg_proc "${vt_chosen_path}"; then
|
||||
return
|
||||
fi
|
||||
|
||||
if vt_str_begin "$vt_volume_id" "Avira"; then
|
||||
vt_skip_svd "${vtoy_iso_part}${vt_chosen_path}"
|
||||
fi
|
||||
@@ -1029,6 +1079,10 @@ function wim_common_menuentry {
|
||||
return
|
||||
fi
|
||||
|
||||
if ventoy_vcfg_proc "${vt_chosen_path}"; then
|
||||
return
|
||||
fi
|
||||
|
||||
if vt_wim_check_bootable "${vtoy_iso_part}${vt_chosen_path}"; then
|
||||
vt_wim_chain_data "${vtoy_iso_part}${vt_chosen_path}"
|
||||
else
|
||||
@@ -1064,6 +1118,10 @@ function efi_common_menuentry {
|
||||
return
|
||||
fi
|
||||
|
||||
if ventoy_vcfg_proc "${vt_chosen_path}"; then
|
||||
return
|
||||
fi
|
||||
|
||||
vt_concat_efi_iso "${vtoy_iso_part}${vt_chosen_path}" vtoy_iso_buf
|
||||
|
||||
ventoy_debug_pause
|
||||
@@ -1105,6 +1163,10 @@ function vhd_common_menuentry {
|
||||
return
|
||||
fi
|
||||
|
||||
if ventoy_vcfg_proc "${vt_chosen_path}"; then
|
||||
return
|
||||
fi
|
||||
|
||||
vt_patch_vhdboot "$vt_chosen_path"
|
||||
|
||||
ventoy_debug_pause
|
||||
@@ -1170,7 +1232,9 @@ function vtoyboot_common_func {
|
||||
linux16 $vtoy_path/ipxe.krn ${vtdebug_flag} bios80 sector512 mem:${vtoy_chain_mem_addr}:size:${vtoy_chain_mem_size}
|
||||
boot
|
||||
else
|
||||
ventoy_acpi_param ${vtoy_chain_mem_addr} 512
|
||||
if vt_check_secureboot_var; then
|
||||
vt_acpi_param ${vtoy_chain_mem_addr} 512
|
||||
fi
|
||||
ventoy_cli_console
|
||||
chainloader ${vtoy_path}/ventoy_${VTOY_EFI_ARCH}.efi sector512 env_param=${ventoy_env_param} ${vtdebug_flag} mem:${vtoy_chain_mem_addr}:size:${vtoy_chain_mem_size}
|
||||
boot
|
||||
@@ -1193,6 +1257,10 @@ function vtoy_common_menuentry {
|
||||
return
|
||||
fi
|
||||
|
||||
if ventoy_vcfg_proc "${vt_chosen_path}"; then
|
||||
return
|
||||
fi
|
||||
|
||||
vtoyboot_common_func "${vtoy_iso_part}${vt_chosen_path}"
|
||||
}
|
||||
|
||||
@@ -1396,6 +1464,10 @@ function img_common_menuentry {
|
||||
return
|
||||
fi
|
||||
|
||||
if ventoy_vcfg_proc "${vt_chosen_path}"; then
|
||||
return
|
||||
fi
|
||||
|
||||
if [ -d (vtimghd)/ ]; then
|
||||
loopback -d vtimghd
|
||||
fi
|
||||
@@ -1474,7 +1546,7 @@ function img_unsupport_menuentry {
|
||||
#############################################################
|
||||
#############################################################
|
||||
|
||||
set VENTOY_VERSION="1.0.32"
|
||||
set VENTOY_VERSION="1.0.36"
|
||||
|
||||
#ACPI not compatible with Window7/8, so disable by default
|
||||
set VTOY_PARAM_NO_ACPI=1
|
||||
@@ -1621,6 +1693,17 @@ if [ -n "$VTOY_PLUGIN_SYNTAX_ERROR" ]; then
|
||||
read vtInputKey
|
||||
fi
|
||||
|
||||
for vtTFile in ventoy.json ventoy_grub.cfg; do
|
||||
if [ -f $vtoy_efi_part/ventoy/$vtTFile ]; then
|
||||
clear
|
||||
echo -e "\n You need to put $vtTFile in the 1st partition which hold the ISO files.\n"
|
||||
echo -e " $vtTFile 放错分区了,请放到镜像分区里的 ventoy 目录下(此目录需要手动创建)!\n"
|
||||
echo -e "\n press ENTER to continue (请按 回车 键继续) ..."
|
||||
read vtInputKey
|
||||
fi
|
||||
done
|
||||
|
||||
|
||||
#export necessary variable
|
||||
export theme
|
||||
export gfxmode
|
||||
|
@@ -43,6 +43,7 @@
|
||||
*save_env: loadenv
|
||||
*search: search
|
||||
*serial: serial
|
||||
*setkey: setkey
|
||||
*setpci: setpci
|
||||
*sha1sum: hashsum
|
||||
*sha256sum: hashsum
|
||||
|
@@ -1,4 +1,5 @@
|
||||
videotest: font video gfxmenu
|
||||
setkey: extcmd
|
||||
odc: archelp
|
||||
loopback: extcmd
|
||||
macho:
|
||||
|
Binary file not shown.
@@ -47,6 +47,7 @@
|
||||
*search: search
|
||||
*sendkey: sendkey
|
||||
*serial: serial
|
||||
*setkey: setkey
|
||||
*setpci: setpci
|
||||
*sha1sum: hashsum
|
||||
*sha256sum: hashsum
|
||||
|
Binary file not shown.
@@ -1,4 +1,5 @@
|
||||
videotest: font video gfxmenu
|
||||
setkey: extcmd
|
||||
odc: archelp
|
||||
loopback: extcmd
|
||||
macho:
|
||||
|
BIN
INSTALL/grub/keyboard.cfg.gz
Normal file
BIN
INSTALL/grub/keyboard.cfg.gz
Normal file
Binary file not shown.
@@ -43,6 +43,7 @@
|
||||
*save_env: loadenv
|
||||
*search: search
|
||||
*serial: serial
|
||||
*setkey: setkey
|
||||
*setpci: setpci
|
||||
*sha1sum: hashsum
|
||||
*sha256sum: hashsum
|
||||
|
@@ -1,4 +1,5 @@
|
||||
videotest: font video gfxmenu
|
||||
setkey: extcmd
|
||||
odc: archelp
|
||||
loopback: extcmd
|
||||
macho:
|
||||
|
Binary file not shown.
@@ -6,9 +6,9 @@ print_usage() {
|
||||
|
||||
echo 'Usage: Ventoy2Disk.sh CMD [ OPTION ] /dev/sdX'
|
||||
echo ' CMD:'
|
||||
echo ' -i install ventoy to sdX (fail if disk already installed with ventoy)'
|
||||
echo ' -I force install ventoy to sdX (no matter installed or not)'
|
||||
echo ' -u update ventoy in sdX'
|
||||
echo ' -i install Ventoy to sdX (fails if disk already installed with Ventoy)'
|
||||
echo ' -I force install Ventoy to sdX (no matter installed or not)'
|
||||
echo ' -u update Ventoy in sdX'
|
||||
echo ' -l list Ventoy information in sdX'
|
||||
echo ''
|
||||
echo ' OPTION: (optional)'
|
||||
@@ -75,8 +75,8 @@ fi
|
||||
if [ -e /sys/class/block/${DISK#/dev/}/start ]; then
|
||||
vterr "$DISK is a partition, please use the whole disk."
|
||||
echo "For example:"
|
||||
vterr " sudo sh Ventoy2Disk.sh -i /dev/sdX1 <=== This is wrong"
|
||||
vtinfo " sudo sh Ventoy2Disk.sh -i /dev/sdX <=== This is right"
|
||||
vterr " sudo sh Ventoy2Disk.sh -i /dev/sdb1 <=== This is wrong"
|
||||
vtinfo " sudo sh Ventoy2Disk.sh -i /dev/sdb <=== This is right"
|
||||
echo ""
|
||||
exit 1
|
||||
fi
|
||||
@@ -90,22 +90,13 @@ if [ -n "$RESERVE_SPACE" -a "$MODE" = "install" ]; then
|
||||
fi
|
||||
fi
|
||||
|
||||
#check access
|
||||
if dd if="$DISK" of=/dev/null bs=1 count=1 >/dev/null 2>&1; then
|
||||
vtdebug "root permission check ok ..."
|
||||
else
|
||||
vterr "Failed to access $DISK, maybe root privilege is needed!"
|
||||
echo ''
|
||||
exit 1
|
||||
fi
|
||||
|
||||
vtdebug "MODE=$MODE FORCE=$FORCE RESERVE_SPACE=$RESERVE_SPACE RESERVE_SIZE_MB=$RESERVE_SIZE_MB"
|
||||
|
||||
#check tools
|
||||
if check_tool_work_ok; then
|
||||
vtdebug "check tool work ok"
|
||||
else
|
||||
vterr "Some tools can not run in current system. Please check log.txt for detail."
|
||||
vterr "Some tools can not run on current system. Please check log.txt for details."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -121,17 +112,11 @@ if [ "$MODE" = "list" ]; then
|
||||
echo "Disk Partition Style : MBR"
|
||||
fi
|
||||
|
||||
vtPART2=$(get_disk_part_name $DISK 2)
|
||||
rm -rf ./tmpmntp2 && mkdir ./tmpmntp2
|
||||
mount $vtPART2 ./tmpmntp2 > /dev/null 2>&1
|
||||
|
||||
if [ -e ./tmpmntp2/EFI/BOOT/MokManager.efi ]; then
|
||||
if check_disk_secure_boot $DISK; then
|
||||
echo "Secure Boot Support : YES"
|
||||
else
|
||||
echo "Secure Boot Support : NO"
|
||||
fi
|
||||
umount ./tmpmntp2 > /dev/null 2>&1
|
||||
rm -rf ./tmpmntp2
|
||||
else
|
||||
echo "Ventoy Version: NA"
|
||||
fi
|
||||
@@ -140,11 +125,7 @@ if [ "$MODE" = "list" ]; then
|
||||
fi
|
||||
|
||||
#check mountpoint
|
||||
grep "^$DISK" /proc/mounts | while read mtline; do
|
||||
mtpnt=$(echo $mtline | awk '{print $2}')
|
||||
vtdebug "Trying to umount $mtpnt ..."
|
||||
umount $mtpnt >/dev/null 2>&1
|
||||
done
|
||||
check_umount_disk "$DISK"
|
||||
|
||||
if grep "$DISK" /proc/mounts; then
|
||||
vterr "$DISK is already mounted, please umount it first!"
|
||||
@@ -159,20 +140,30 @@ if swapon --help 2>&1 | grep -q '^ \-s,'; then
|
||||
fi
|
||||
fi
|
||||
|
||||
#check access
|
||||
if dd if="$DISK" of=/dev/null bs=1 count=1 >/dev/null 2>&1; then
|
||||
vtdebug "root permission check ok ..."
|
||||
else
|
||||
vterr "Failed to access $DISK, maybe root privilege is needed!"
|
||||
echo ''
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
#check tmp_mnt directory
|
||||
if [ -d ./tmp_mnt ]; then
|
||||
vtdebug "There is a tmp_mnt directory, now delete it."
|
||||
umount ./tmp_mnt >/dev/null 2>&1
|
||||
rm -rf ./tmp_mnt
|
||||
if [ -d ./tmp_mnt ]; then
|
||||
vterr "tmp_mnt directory exit, please delete it first."
|
||||
vterr "tmp_mnt directory exits, please delete it first."
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
if [ "$MODE" = "install" ]; then
|
||||
vtdebug "install ventoy ..."
|
||||
vtdebug "install Ventoy ..."
|
||||
|
||||
if [ -n "$VTGPT" ]; then
|
||||
if parted -v > /dev/null 2>&1; then
|
||||
@@ -198,7 +189,7 @@ if [ "$MODE" = "install" ]; then
|
||||
if [ -z "$FORCE" ]; then
|
||||
vtwarn "$DISK already contains a Ventoy with version $version"
|
||||
vtwarn "Use -u option to do a safe upgrade operation."
|
||||
vtwarn "OR if you really want to reinstall ventoy to $DISK, please use -I option."
|
||||
vtwarn "OR if you really want to reinstall Ventoy to $DISK, please use -I option."
|
||||
vtwarn ""
|
||||
exit 1
|
||||
fi
|
||||
@@ -304,6 +295,9 @@ if [ "$MODE" = "install" ]; then
|
||||
xzcat ./boot/core.img.xz | dd status=none conv=fsync of=$DISK bs=512 count=2047 seek=1
|
||||
fi
|
||||
|
||||
# check and umount
|
||||
check_umount_disk "$DISK"
|
||||
|
||||
xzcat ./ventoy/ventoy.disk.img.xz | dd status=none conv=fsync of=$DISK bs=512 count=$VENTOY_SECTOR_NUM seek=$part2_start_sector
|
||||
|
||||
#test UUID
|
||||
@@ -322,25 +316,19 @@ if [ "$MODE" = "install" ]; then
|
||||
vtinfo "esp partition processing ..."
|
||||
|
||||
sleep 1
|
||||
mtpnt=$(grep "^${PART2}" /proc/mounts | awk '{print $2}')
|
||||
if [ -n "$mtpnt" ]; then
|
||||
umount $mtpnt >/dev/null 2>&1
|
||||
fi
|
||||
check_umount_disk "$DISK"
|
||||
|
||||
if [ "$SECUREBOOT" != "YES" ]; then
|
||||
mkdir ./tmp_mnt
|
||||
|
||||
vtdebug "mounting part2 ...."
|
||||
for tt in 1 2 3; do
|
||||
if mount ${PART2} ./tmp_mnt; then
|
||||
for tt in 1 2 3 4 5; do
|
||||
if mount ${PART2} ./tmp_mnt > /dev/null 2>&1; then
|
||||
vtdebug "mounting part2 success"
|
||||
break
|
||||
fi
|
||||
|
||||
mtpnt=$(grep "^${PART2}" /proc/mounts | awk '{print $2}')
|
||||
if [ -n "$mtpnt" ]; then
|
||||
umount $mtpnt >/dev/null 2>&1
|
||||
fi
|
||||
check_umount_disk "$DISK"
|
||||
sleep 2
|
||||
done
|
||||
|
||||
@@ -354,6 +342,8 @@ if [ "$MODE" = "install" ]; then
|
||||
mv ./tmp_mnt/EFI/BOOT/grubx64_real.efi ./tmp_mnt/EFI/BOOT/BOOTX64.EFI
|
||||
mv ./tmp_mnt/EFI/BOOT/grubia32_real.efi ./tmp_mnt/EFI/BOOT/BOOTIA32.EFI
|
||||
|
||||
sync
|
||||
|
||||
for tt in 1 2 3; do
|
||||
if umount ./tmp_mnt; then
|
||||
vtdebug "umount part2 success"
|
||||
@@ -371,11 +361,11 @@ if [ "$MODE" = "install" ]; then
|
||||
echo ""
|
||||
|
||||
else
|
||||
vtdebug "update ventoy ..."
|
||||
vtdebug "update Ventoy ..."
|
||||
|
||||
oldver=$(get_disk_ventoy_version $DISK)
|
||||
if [ $? -ne 0 ]; then
|
||||
vtwarn "$DISK does not contain ventoy or data corupted"
|
||||
vtwarn "$DISK does not contain Ventoy or data corrupted"
|
||||
echo ""
|
||||
vtwarn "Please use -i option if you want to install ventoy to $DISK"
|
||||
echo ""
|
||||
@@ -444,20 +434,26 @@ else
|
||||
dd status=none conv=fsync if=./rsvdata.bin seek=2040 bs=512 count=8 of=${DISK}
|
||||
rm -f ./rsvdata.bin
|
||||
|
||||
check_umount_disk "$DISK"
|
||||
|
||||
xzcat ./ventoy/ventoy.disk.img.xz | dd status=none conv=fsync of=$DISK bs=512 count=$VENTOY_SECTOR_NUM seek=$part2_start
|
||||
|
||||
sync
|
||||
|
||||
|
||||
if [ "$SECUREBOOT" != "YES" ]; then
|
||||
mkdir ./tmp_mnt
|
||||
|
||||
vtdebug "mounting part2 ...."
|
||||
for tt in 1 2 3; do
|
||||
if mount ${PART2} ./tmp_mnt; then
|
||||
vtdebug "mounting part2 ...."
|
||||
for tt in 1 2 3 4 5; do
|
||||
check_umount_disk "$DISK"
|
||||
|
||||
if mount ${PART2} ./tmp_mnt > /dev/null 2>&1; then
|
||||
vtdebug "mounting part2 success"
|
||||
break
|
||||
else
|
||||
vtdebug "mounting part2 failed, now wait and retry..."
|
||||
fi
|
||||
sleep 2
|
||||
sleep 2
|
||||
done
|
||||
|
||||
rm -f ./tmp_mnt/EFI/BOOT/BOOTX64.EFI
|
||||
@@ -470,9 +466,10 @@ else
|
||||
mv ./tmp_mnt/EFI/BOOT/grubx64_real.efi ./tmp_mnt/EFI/BOOT/BOOTX64.EFI
|
||||
mv ./tmp_mnt/EFI/BOOT/grubia32_real.efi ./tmp_mnt/EFI/BOOT/BOOTIA32.EFI
|
||||
|
||||
sync
|
||||
|
||||
for tt in 1 2 3; do
|
||||
if umount ./tmp_mnt; then
|
||||
if umount ./tmp_mnt > /dev/null 2>&1; then
|
||||
vtdebug "umount part2 success"
|
||||
rm -rf ./tmp_mnt
|
||||
break
|
||||
@@ -484,7 +481,7 @@ else
|
||||
fi
|
||||
|
||||
echo ""
|
||||
vtinfo "Update Ventoy to $DISK successfully finished."
|
||||
vtinfo "Update Ventoy on $DISK successfully finished."
|
||||
echo ""
|
||||
|
||||
fi
|
||||
|
@@ -90,11 +90,21 @@ get_disk_part_name() {
|
||||
echo ${DISK}p${2}
|
||||
elif echo $DISK | grep -q "/dev/mmcblk[0-9]"; then
|
||||
echo ${DISK}p${2}
|
||||
elif echo $DISK | grep -q "/dev/nbd[0-9]"; then
|
||||
echo ${DISK}p${2}
|
||||
else
|
||||
echo ${DISK}${2}
|
||||
fi
|
||||
}
|
||||
|
||||
check_umount_disk() {
|
||||
DiskOrPart="$1"
|
||||
grep "^${DiskOrPart}" /proc/mounts | while read mtline; do
|
||||
mtpnt=$(echo $mtline | awk '{print $2}')
|
||||
vtdebug "Trying to umount $mtpnt ..."
|
||||
umount $mtpnt >/dev/null 2>&1
|
||||
done
|
||||
}
|
||||
|
||||
get_ventoy_version_from_cfg() {
|
||||
if grep -q 'set.*VENTOY_VERSION=' $1; then
|
||||
@@ -216,6 +226,14 @@ format_ventoy_disk_mbr() {
|
||||
fi
|
||||
|
||||
part2_start_sector=$(expr $part1_end_sector + 1)
|
||||
|
||||
modsector=$(expr $part2_start_sector % 8)
|
||||
if [ $modsector -gt 0 ]; then
|
||||
vtdebug "modsector:$modsector need to be aligned with 4KB"
|
||||
part1_end_sector=$(expr $part1_end_sector - $modsector)
|
||||
part2_start_sector=$(expr $part1_end_sector + 1)
|
||||
fi
|
||||
|
||||
part2_end_sector=$(expr $part2_start_sector + $VENTOY_SECTOR_NUM - 1)
|
||||
|
||||
export part2_start_sector
|
||||
@@ -300,6 +318,8 @@ EOF
|
||||
|
||||
echo "create efi fat fs $PART2 ..."
|
||||
for i in 0 1 2 3 4 5 6 7 8 9; do
|
||||
check_umount_disk "$PART2"
|
||||
|
||||
if mkfs.vfat -F 16 -n VTOYEFI $PART2; then
|
||||
echo 'success'
|
||||
break
|
||||
@@ -331,6 +351,14 @@ format_ventoy_disk_gpt() {
|
||||
fi
|
||||
|
||||
part2_start_sector=$(expr $part1_end_sector + 1)
|
||||
|
||||
modsector=$(expr $part2_start_sector % 8)
|
||||
if [ $modsector -gt 0 ]; then
|
||||
vtdebug "modsector:$modsector need to be aligned with 4KB"
|
||||
part1_end_sector=$(expr $part1_end_sector - $modsector)
|
||||
part2_start_sector=$(expr $part1_end_sector + 1)
|
||||
fi
|
||||
|
||||
part2_end_sector=$(expr $part2_start_sector + $VENTOY_SECTOR_NUM - 1)
|
||||
|
||||
export part2_start_sector
|
||||
@@ -395,7 +423,10 @@ format_ventoy_disk_gpt() {
|
||||
fi
|
||||
|
||||
echo "create efi fat fs $PART2 ..."
|
||||
|
||||
for i in 0 1 2 3 4 5 6 7 8 9; do
|
||||
check_umount_disk "$PART2"
|
||||
|
||||
if mkfs.vfat -F 16 -n VTOYEFI $PART2; then
|
||||
echo 'success'
|
||||
break
|
||||
|
Binary file not shown.
Binary file not shown.
@@ -1,5 +1,11 @@
|
||||
#!/bin/sh
|
||||
|
||||
if [ "$1" = "CI" ]; then
|
||||
OPT='-dR'
|
||||
else
|
||||
OPT='-a'
|
||||
fi
|
||||
|
||||
dos2unix -q ./tool/ventoy_lib.sh
|
||||
dos2unix -q ./tool/VentoyWorker.sh
|
||||
|
||||
@@ -19,6 +25,11 @@ sh mkcpio.sh
|
||||
sh mkloopex.sh
|
||||
cd -
|
||||
|
||||
cd ../LinuxGUI
|
||||
sh language.sh || exit 1
|
||||
sh build.sh
|
||||
cd -
|
||||
|
||||
|
||||
LOOP=$(losetup -f)
|
||||
|
||||
@@ -49,21 +60,21 @@ mount ${LOOP}p2 $tmpmnt
|
||||
mkdir -p $tmpmnt/grub
|
||||
|
||||
# First copy grub.cfg file, to make it locate at front of the part2
|
||||
cp -a ./grub/grub.cfg $tmpmnt/grub/
|
||||
cp $OPT ./grub/grub.cfg $tmpmnt/grub/
|
||||
|
||||
ls -1 ./grub/ | grep -v 'grub\.cfg' | while read line; do
|
||||
cp -a ./grub/$line $tmpmnt/grub/
|
||||
cp $OPT ./grub/$line $tmpmnt/grub/
|
||||
done
|
||||
|
||||
cp -a ./ventoy $tmpmnt/
|
||||
cp -a ./EFI $tmpmnt/
|
||||
cp -a ./tool/ENROLL_THIS_KEY_IN_MOKMANAGER.cer $tmpmnt/
|
||||
cp $OPT ./ventoy $tmpmnt/
|
||||
cp $OPT ./EFI $tmpmnt/
|
||||
cp $OPT ./tool/ENROLL_THIS_KEY_IN_MOKMANAGER.cer $tmpmnt/
|
||||
|
||||
|
||||
mkdir -p $tmpmnt/tool
|
||||
cp -a ./tool/i386/mount.exfat-fuse $tmpmnt/tool/mount.exfat-fuse_i386
|
||||
cp -a ./tool/x86_64/mount.exfat-fuse $tmpmnt/tool/mount.exfat-fuse_x86_64
|
||||
cp -a ./tool/aarch64/mount.exfat-fuse $tmpmnt/tool/mount.exfat-fuse_aarch64
|
||||
cp $OPT ./tool/i386/mount.exfat-fuse $tmpmnt/tool/mount.exfat-fuse_i386
|
||||
cp $OPT ./tool/x86_64/mount.exfat-fuse $tmpmnt/tool/mount.exfat-fuse_x86_64
|
||||
cp $OPT ./tool/aarch64/mount.exfat-fuse $tmpmnt/tool/mount.exfat-fuse_aarch64
|
||||
|
||||
rm -f $tmpmnt/grub/i386-pc/*.img
|
||||
|
||||
@@ -79,15 +90,20 @@ dd if=$LOOP of=$tmpdir/boot/boot.img bs=1 count=512 status=none
|
||||
dd if=$LOOP of=$tmpdir/boot/core.img bs=512 count=2047 skip=1 status=none
|
||||
xz --check=crc32 $tmpdir/boot/core.img
|
||||
|
||||
cp -a ./tool $tmpdir/
|
||||
cp $OPT ./tool $tmpdir/
|
||||
rm -f $tmpdir/ENROLL_THIS_KEY_IN_MOKMANAGER.cer
|
||||
cp -a Ventoy2Disk.sh $tmpdir/
|
||||
cp -a README $tmpdir/
|
||||
cp -a plugin $tmpdir/
|
||||
cp -a CreatePersistentImg.sh $tmpdir/
|
||||
cp $OPT Ventoy2Disk.sh $tmpdir/
|
||||
cp $OPT VentoyWeb.sh $tmpdir/
|
||||
cp $OPT README $tmpdir/
|
||||
cp $OPT plugin $tmpdir/
|
||||
cp $OPT CreatePersistentImg.sh $tmpdir/
|
||||
dos2unix -q $tmpdir/Ventoy2Disk.sh
|
||||
dos2unix -q $tmpdir/VentoyWeb.sh
|
||||
dos2unix -q $tmpdir/CreatePersistentImg.sh
|
||||
|
||||
cp $OPT ../LinuxGUI/WebUI $tmpdir/
|
||||
sed 's/.*SCRIPT_DEL_THIS \(.*\)/\1/g' -i $tmpdir/WebUI/index.html
|
||||
|
||||
#32MB disk img
|
||||
dd status=none if=$LOOP of=$tmpdir/ventoy/ventoy.disk.img bs=512 count=$VENTOY_SECTOR_NUM skip=$part2_start_sector
|
||||
xz --check=crc32 $tmpdir/ventoy/ventoy.disk.img
|
||||
@@ -113,6 +129,7 @@ done
|
||||
find $tmpdir/ -type d -exec chmod 755 "{}" +
|
||||
find $tmpdir/ -type f -exec chmod 644 "{}" +
|
||||
chmod +x $tmpdir/Ventoy2Disk.sh
|
||||
chmod +x $tmpdir/VentoyWeb.sh
|
||||
chmod +x $tmpdir/CreatePersistentImg.sh
|
||||
|
||||
tar -czvf ventoy-${curver}-linux.tar.gz $tmpdir
|
||||
@@ -120,10 +137,11 @@ tar -czvf ventoy-${curver}-linux.tar.gz $tmpdir
|
||||
|
||||
|
||||
rm -f ventoy-${curver}-windows.zip
|
||||
cp -a Ventoy2Disk*.exe $tmpdir/
|
||||
cp -a $LANG_DIR/languages.ini $tmpdir/ventoy/
|
||||
cp $OPT Ventoy2Disk*.exe $tmpdir/
|
||||
cp $OPT $LANG_DIR/languages.ini $tmpdir/ventoy/
|
||||
rm -rf $tmpdir/tool
|
||||
rm -f $tmpdir/*.sh
|
||||
rm -rf $tmpdir/WebUI
|
||||
rm -f $tmpdir/README
|
||||
|
||||
|
||||
@@ -131,8 +149,9 @@ zip -r ventoy-${curver}-windows.zip $tmpdir/
|
||||
|
||||
rm -rf $tmpdir
|
||||
|
||||
echo "=============== run livecd.sh ==============="
|
||||
cd ../LiveCD
|
||||
sh livecd.sh
|
||||
sh livecd.sh $1
|
||||
cd $CurDir
|
||||
|
||||
mv ../LiveCD/ventoy*.iso ./
|
||||
|
@@ -2,7 +2,7 @@
|
||||
|
||||
rm -rf ipxe-3fe683e
|
||||
|
||||
tar -xvf ipxe_org_code/ipxe-3fe683e.tar.bz2 -C ./
|
||||
tar -xf ipxe_org_code/ipxe-3fe683e.tar.bz2 -C ./
|
||||
|
||||
rm -rf ./ipxe-3fe683e/src/bin
|
||||
rm -rf ./ipxe-3fe683e/src/drivers
|
||||
@@ -11,6 +11,7 @@ rm -rf ./ipxe-3fe683e/src/drivers
|
||||
|
||||
cd ipxe-3fe683e/src
|
||||
|
||||
echo '========= build IPXE =========='
|
||||
sh build.sh
|
||||
|
||||
cd ../../
|
||||
|
65
KBD/cfg/KBD_AZERTY.cfg
Normal file
65
KBD/cfg/KBD_AZERTY.cfg
Normal file
@@ -0,0 +1,65 @@
|
||||
# set AZERTY keyboard generic
|
||||
#clear all settings
|
||||
setkey -r
|
||||
#setkey [new character] [QWERTY-USA character]
|
||||
setkey a q
|
||||
setkey A Q
|
||||
setkey z w
|
||||
setkey Z W
|
||||
setkey q a
|
||||
setkey Q A
|
||||
setkey m semicolon
|
||||
setkey M colon
|
||||
setkey w z
|
||||
setkey W Z
|
||||
setkey comma m
|
||||
setkey question M
|
||||
setkey semicolon comma
|
||||
setkey period less
|
||||
setkey colon period
|
||||
setkey slash greater
|
||||
setkey exclam slash
|
||||
setkey dollar bracketright
|
||||
setkey asterisk backslash
|
||||
setkey percent doublequote
|
||||
setkey ampersand 1
|
||||
setkey 1 exclam
|
||||
setkey tilde 2
|
||||
setkey 2 at
|
||||
setkey doublequote 3
|
||||
setkey 3 numbersign
|
||||
setkey quote 4
|
||||
setkey 4 dollar
|
||||
setkey parenleft 5
|
||||
setkey 5 percent
|
||||
setkey minus 6
|
||||
setkey 6 caret
|
||||
setkey backquote 7
|
||||
setkey 7 ampersand
|
||||
setkey underscore 8
|
||||
setkey 8 asterisk
|
||||
setkey caret 9
|
||||
setkey 9 parenleft
|
||||
setkey at 0
|
||||
setkey 0 parenright
|
||||
setkey parenright minus
|
||||
setkey less backquote
|
||||
setkey greater tilde
|
||||
setkey numbersign braceright
|
||||
setkey backslash question
|
||||
setkey bracketright braceleft
|
||||
setkey braceleft quote
|
||||
setkey braceright underscore
|
||||
|
||||
setkey -e
|
||||
if [ "${quiet}" = "" ]; then
|
||||
echo AZERTY KBD
|
||||
fi
|
||||
|
||||
#key names
|
||||
#escape, exclam (!), at (@), numbersign (#), dollar ($), parenright ()), caret (^), ampersand (&), asterisk (*), plus (+), percent (%)
|
||||
#minus (-), underscore (_), equal (=), parenleft [(], backspace (backspace), tab (Tab), bracketleft ([), braceleft ({), bracketright (])
|
||||
#braceright (}), enter (carriage return), semicolon (;), colon (:), quote (') , doublequote ("), slash (/), backquote (`), tilde (~)
|
||||
#backslash (\), bar (|), comma (,), less (<) period (.) , greater (>), question (?)
|
||||
#space, home, uparrow, pageup, leftarrow, center, rightarrow, end, downarrow, pagedown, insert, delete, F1-F12, shiftF1-shiftF12, ctrlF1-ctrlF12
|
||||
#Use prefix A for Alt+, e.g. Aequal, Aq, Aslash, A0, etc.
|
75
KBD/cfg/KBD_CZECH_QWERTY.cfg
Normal file
75
KBD/cfg/KBD_CZECH_QWERTY.cfg
Normal file
@@ -0,0 +1,75 @@
|
||||
#QWERTY CZECH
|
||||
#clear all settings
|
||||
setkey -r
|
||||
#setkey [new character] [QWERTY-USA character]
|
||||
setkey semicolon backquote
|
||||
setkey plus 1
|
||||
setkey equal minus
|
||||
setkey quote equal
|
||||
setkey parenright bracketright
|
||||
setkey doublequote backslash
|
||||
setkey minus slash
|
||||
#shift
|
||||
setkey 1 exclam
|
||||
setkey 2 at
|
||||
setkey 3 numbersign
|
||||
setkey 4 dollar
|
||||
setkey 5 percent
|
||||
setkey 6 caret
|
||||
setkey 7 ampersand
|
||||
setkey 8 asterisk
|
||||
setkey 9 parenleft
|
||||
setkey 0 parenright
|
||||
setkey percent underscore
|
||||
setkey slash braceleft
|
||||
setkey parenleft braceright
|
||||
setkey doublequote colon
|
||||
setkey exclam doublequote
|
||||
setkey quote bar
|
||||
setkey question less
|
||||
setkey colon greater
|
||||
setkey underscore question
|
||||
#Alt
|
||||
setkey backquote Abackquote
|
||||
setkey exclam A1
|
||||
setkey at A2
|
||||
setkey numbersign A3
|
||||
setkey dollar A4
|
||||
setkey percent A5
|
||||
setkey caret A6
|
||||
setkey ampersand A7
|
||||
setkey asterisk A8
|
||||
setkey parenleft A9
|
||||
setkey parenright A0
|
||||
setkey minus Aminus
|
||||
setkey equal Aequal
|
||||
setkey bracketleft Abracketleft
|
||||
setkey bracketright Abracketright
|
||||
setkey semicolon Asemicolon
|
||||
setkey backslash Abackslash
|
||||
setkey less Acomma
|
||||
setkey greater Aperiod
|
||||
setkey slash Aslash
|
||||
setkey tilde Atilde
|
||||
setkey underscore Aunderscore
|
||||
setkey plus Aplus
|
||||
setkey braceleft Abraceleft
|
||||
setkey braceright Abraceright
|
||||
setkey caret Adoublequote
|
||||
setkey colon Acolon
|
||||
setkey question Aquestion
|
||||
|
||||
setkey bar Abar
|
||||
|
||||
setkey -e
|
||||
if [ "${quiet}" = "" ]; then
|
||||
echo CZECH QWERTY KBD
|
||||
fi
|
||||
|
||||
#key names
|
||||
#escape, exclam (!), at (@), numbersign (#), dollar ($), parenright ()), caret (^), ampersand (&), asterisk (*), plus (+), percent (%)
|
||||
#minus (-), underscore (_), equal (=), parenleft [(], backspace (backspace), tab (Tab), bracketleft ([), braceleft ({), bracketright (])
|
||||
#braceright (}), enter (carriage return), semicolon (;), colon (:), quote (') , doublequote ("), slash (/), backquote (`), tilde (~)
|
||||
#backslash (\), bar (|), comma (,), less (<) period (.) , greater (>), question (?)
|
||||
#space, home, uparrow, pageup, leftarrow, center, rightarrow, end, downarrow, pagedown, insert, delete, F1-F12, shiftF1-shiftF12, ctrlF1-ctrlF12
|
||||
#Use prefix A for Alt+, e.g. Aequal, Aq, Aslash, A0, etc.
|
64
KBD/cfg/KBD_CZECH_QWERTZ.cfg
Normal file
64
KBD/cfg/KBD_CZECH_QWERTZ.cfg
Normal file
@@ -0,0 +1,64 @@
|
||||
#QWERTZ CZECH
|
||||
#clear all settings
|
||||
setkey -r
|
||||
#setkey [new character] [QWERTY-USA character]
|
||||
setkey y z
|
||||
setkey z y
|
||||
setkey Y Z
|
||||
setkey Z Y
|
||||
setkey semicolon backquote
|
||||
setkey plus 1
|
||||
setkey equal minus
|
||||
setkey quote equal
|
||||
setkey parenright bracketright
|
||||
setkey doublequote backslash
|
||||
setkey minus slash
|
||||
#shift
|
||||
setkey 1 exclam
|
||||
setkey 2 at
|
||||
setkey 3 numbersign
|
||||
setkey 4 dollar
|
||||
setkey 5 percent
|
||||
setkey 6 caret
|
||||
setkey 7 ampersand
|
||||
setkey 8 asterisk
|
||||
setkey 9 parenleft
|
||||
setkey 0 parenright
|
||||
setkey percent underscore
|
||||
setkey slash braceleft
|
||||
setkey parenleft braceright
|
||||
setkey doublequote colon
|
||||
setkey exclam doublequote
|
||||
setkey quote bar
|
||||
setkey question less
|
||||
setkey colon greater
|
||||
setkey underscore question
|
||||
#Alt
|
||||
setkey tilde A1
|
||||
setkey caret A3
|
||||
setkey backslash Aq
|
||||
setkey bar Aw
|
||||
setkey bracketleft Af
|
||||
setkey bracketright Ag
|
||||
setkey dollar Asemicolon
|
||||
setkey numbersign Ax
|
||||
setkey ampersand Ac
|
||||
setkey at Av
|
||||
setkey braceleft Ab
|
||||
setkey braceright An
|
||||
setkey less Acomma
|
||||
setkey greater Aperiod
|
||||
setkey asterisk Aslash
|
||||
|
||||
setkey -e
|
||||
if [ "${quiet}" = "" ]; then
|
||||
echo CZECH QWERTZ KBD
|
||||
fi
|
||||
|
||||
#key names
|
||||
#escape, exclam (!), at (@), numbersign (#), dollar ($), parenright ()), caret (^), ampersand (&), asterisk (*), plus (+), percent (%)
|
||||
#minus (-), underscore (_), equal (=), parenleft [(], backspace (backspace), tab (Tab), bracketleft ([), braceleft ({), bracketright (])
|
||||
#braceright (}), enter (carriage return), semicolon (;), colon (:), quote (') , doublequote ("), slash (/), backquote (`), tilde (~)
|
||||
#backslash (\), bar (|), comma (,), less (<) period (.) , greater (>), question (?)
|
||||
#space, home, uparrow, pageup, leftarrow, center, rightarrow, end, downarrow, pagedown, insert, delete, F1-F12, shiftF1-shiftF12, ctrlF1-ctrlF12
|
||||
#Use prefix A for Alt+, e.g. Aequal, Aq, Aslash, A0, etc.
|
56
KBD/cfg/KBD_DANISH.cfg
Normal file
56
KBD/cfg/KBD_DANISH.cfg
Normal file
@@ -0,0 +1,56 @@
|
||||
#DANISH
|
||||
#clear all settings
|
||||
setkey -r
|
||||
#setkey [new character] [QWERTY-USA character]
|
||||
setkey plus minus
|
||||
setkey quote equal
|
||||
setkey doublequote bracketright
|
||||
setkey quote backslash
|
||||
setkey minus slash
|
||||
|
||||
#shifted
|
||||
setkey doublequote at
|
||||
setkey ampersand caret
|
||||
setkey slash ampersand
|
||||
setkey parenleft asterisk
|
||||
setkey parenright parenleft
|
||||
setkey equal parenright
|
||||
setkey question underscore
|
||||
setkey caret braceright
|
||||
setkey asterisk bar
|
||||
setkey backquote plus
|
||||
setkey semicolon less
|
||||
setkey colon greater
|
||||
setkey underscore question
|
||||
|
||||
#use top-left key for oem102 codes
|
||||
setkey bar Atilde
|
||||
setkey backslash Abackquote
|
||||
setkey greater tilde
|
||||
|
||||
#AltGr
|
||||
setkey at A2
|
||||
setkey dollar A4
|
||||
setkey braceleft A7
|
||||
setkey bracketleft A8
|
||||
setkey bracketright A9
|
||||
setkey braceright A0
|
||||
setkey backslash Aminus
|
||||
|
||||
setkey less quote
|
||||
setkey greater doublequote
|
||||
setkey tilde Abracketright
|
||||
|
||||
setkey -e
|
||||
if [ "${quiet}" = "" ]; then
|
||||
echo "DANISH KBD a=< A=>"
|
||||
sleep 2
|
||||
fi
|
||||
|
||||
#key names
|
||||
#escape, exclam (!), at (@), numbersign (#), dollar ($), parenright ()), caret (^), ampersand (&), asterisk (*), plus (+), percent (%)
|
||||
#minus (-), underscore (_), equal (=), parenleft [(], backspace (backspace), tab (Tab), bracketleft ([), braceleft ({), bracketright (])
|
||||
#braceright (}), enter (carriage return), semicolon (;), colon (:), quote (') , doublequote ("), slash (/), backquote (`), tilde (~)
|
||||
#backslash (\), bar (|), comma (,), less (<) period (.) , greater (>), question (?)
|
||||
#space, home, uparrow, pageup, leftarrow, center, rightarrow, end, downarrow, pagedown, insert, delete, F1-F12, shiftF1-shiftF12, ctrlF1-ctrlF12
|
||||
#Use prefix A for Alt+, e.g. Aequal, Aq, Aslash, A0, etc.
|
104
KBD/cfg/KBD_DVORAK_USA.cfg
Normal file
104
KBD/cfg/KBD_DVORAK_USA.cfg
Normal file
@@ -0,0 +1,104 @@
|
||||
# Author: Alex Roper
|
||||
# set DVORAK keyboard
|
||||
#clear all settings
|
||||
setkey -r
|
||||
#setkey [new character] [QWERTY-USA character]
|
||||
setkey [ minus
|
||||
setkey braceleft underscore
|
||||
setkey quote q
|
||||
setkey doublequote Q
|
||||
setkey comma w
|
||||
setkey less W
|
||||
setkey s semicolon
|
||||
setkey S colon
|
||||
setkey semicolon z
|
||||
setkey colon Z
|
||||
setkey w comma
|
||||
setkey W less
|
||||
setkey v period
|
||||
setkey z greater
|
||||
setkey z slash
|
||||
setkey equal bracketright
|
||||
setkey backslash backslash
|
||||
setkey underscore doublequote
|
||||
setkey quote q
|
||||
setkey doublequote Q
|
||||
setkey comma w
|
||||
setkey less W
|
||||
setkey period e
|
||||
setkey greater E
|
||||
setkey p r
|
||||
setkey P R
|
||||
setkey y t
|
||||
setkey Y T
|
||||
setkey f y
|
||||
setkey F Y
|
||||
setkey g u
|
||||
setkey G U
|
||||
setkey c c
|
||||
setkey C I
|
||||
setkey r o
|
||||
setkey R O
|
||||
setkey l p
|
||||
setkey L P
|
||||
setkey bracketright equal
|
||||
setkey braceright plus
|
||||
setkey a a
|
||||
setkey A A
|
||||
setkey o s
|
||||
setkey O S
|
||||
setkey e d
|
||||
setkey E D
|
||||
setkey u f
|
||||
setkey U F
|
||||
setkey i g
|
||||
setkey I G
|
||||
setkey d h
|
||||
setkey D H
|
||||
setkey h j
|
||||
setkey H J
|
||||
setkey t k
|
||||
setkey T K
|
||||
setkey n l
|
||||
setkey N L
|
||||
setkey s semicolon
|
||||
setkey S colon
|
||||
setkey minus quote
|
||||
setkey underscore doublequote
|
||||
setkey semicolon z
|
||||
setkey colon Z
|
||||
setkey q x
|
||||
setkey Q X
|
||||
setkey j c
|
||||
setkey J C
|
||||
setkey k v
|
||||
setkey K V
|
||||
setkey x b
|
||||
setkey X B
|
||||
setkey b n
|
||||
setkey B N
|
||||
#setkey m m
|
||||
#setkey M M
|
||||
setkey w comma
|
||||
setkey W less
|
||||
setkey v period
|
||||
setkey V greater
|
||||
setkey z slash
|
||||
setkey Z question
|
||||
setkey slash bracketleft
|
||||
setkey question braceleft
|
||||
setkey equal bracketright
|
||||
setkey plus braceright
|
||||
|
||||
setkey -e
|
||||
if [ "${quiet}" = "" ]; then
|
||||
echo DVORAK KBD
|
||||
fi
|
||||
|
||||
#key names
|
||||
#escape, exclam (!), at (@), numbersign (#), dollar ($), parenright ()), caret (^), ampersand (&), asterisk (*), plus (+), percent (%)
|
||||
#minus (-), underscore (_), equal (=), parenleft [(], backspace (backspace), tab (Tab), bracketleft ([), braceleft ({), bracketright (])
|
||||
#braceright (}), enter (carriage return), semicolon (;), colon (:), quote (') , doublequote ("), slash (/), backquote (`), tilde (~)
|
||||
#backslash (\), bar (|), comma (,), less (<) period (.) , greater (>), question (?)
|
||||
#space, home, uparrow, pageup, leftarrow, center, rightarrow, end, downarrow, pagedown, insert, delete, F1-F12, shiftF1-shiftF12, ctrlF1-ctrlF12
|
||||
#Use prefix A for Alt+, e.g. Aequal, Aq, Aslash, A0, etc.
|
80
KBD/cfg/KBD_FRENCH.cfg
Normal file
80
KBD/cfg/KBD_FRENCH.cfg
Normal file
@@ -0,0 +1,80 @@
|
||||
#FRENCH AZERTY
|
||||
#clear all settings
|
||||
setkey -r
|
||||
#setkey [new character] [QWERTY-USA character]
|
||||
setkey less backquote
|
||||
setkey greater tilde
|
||||
setkey ampersand 1
|
||||
setkey 1 exclam
|
||||
setkey tilde 2
|
||||
setkey 2 at
|
||||
setkey doublequote 3
|
||||
setkey 3 numbersign
|
||||
setkey quote 4
|
||||
setkey 4 dollar
|
||||
setkey parenleft 5
|
||||
setkey 5 percent
|
||||
setkey minus 6
|
||||
setkey 6 caret
|
||||
setkey backquote 7
|
||||
setkey 7 ampersand
|
||||
setkey underscore 8
|
||||
setkey 8 asterisk
|
||||
setkey backslash 9
|
||||
setkey 9 parenleft
|
||||
setkey at 0
|
||||
setkey 0 parenright
|
||||
setkey parenright minus
|
||||
setkey numbersign underscore
|
||||
# no change for equal
|
||||
# no change for plus
|
||||
setkey a q
|
||||
setkey A Q
|
||||
setkey z w
|
||||
setkey Z W
|
||||
setkey caret bracketleft
|
||||
# no equivalent for diaresis => we keep the US braceleft
|
||||
setkey dollar bracketright
|
||||
# no equivalent for pound => we keep the US braceright
|
||||
setkey q a
|
||||
setkey Q A
|
||||
setkey m semicolon
|
||||
setkey M colon
|
||||
setkey bracketleft quote
|
||||
setkey percent doublequote
|
||||
setkey asterisk backslash
|
||||
setkey bracketright bar
|
||||
setkey w z
|
||||
setkey W Z
|
||||
setkey comma m
|
||||
setkey question M
|
||||
setkey semicolon comma
|
||||
setkey period less
|
||||
setkey colon period
|
||||
setkey slash greater
|
||||
setkey exclam slash
|
||||
setkey bar question
|
||||
|
||||
setkey tilde A2
|
||||
setkey numbersign A3
|
||||
setkey braceleft A4
|
||||
setkey bracketleft A5
|
||||
setkey bar A6
|
||||
setkey quote A7
|
||||
setkey backslash A8
|
||||
setkey caret A9
|
||||
setkey at A0
|
||||
setkey bracketright Aminus
|
||||
setkey braceright Aequal
|
||||
setkey -e
|
||||
if [ "${quiet}" = "" ]; then
|
||||
echo FRENCH KBD
|
||||
fi
|
||||
|
||||
#key names
|
||||
#escape, exclam (!), at (@), numbersign (#), dollar ($), parenright ()), caret (^), ampersand (&), asterisk (*), plus (+), percent (%)
|
||||
#minus (-), underscore (_), equal (=), parenleft [(], backspace (backspace), tab (Tab), bracketleft ([), braceleft ({), bracketright (])
|
||||
#braceright (}), enter (carriage return), semicolon (;), colon (:), quote (') , doublequote ("), slash (/), backquote (`), tilde (~)
|
||||
#backslash (\), bar (|), comma (,), less (<) period (.) , greater (>), question (?)
|
||||
#space, home, uparrow, pageup, leftarrow, center, rightarrow, end, downarrow, pagedown, insert, delete, F1-F12, shiftF1-shiftF12, ctrlF1-ctrlF12
|
||||
#Use prefix A for Alt+, e.g. Aequal, Aq, Aslash, A0, etc.
|
56
KBD/cfg/KBD_GERMAN.cfg
Normal file
56
KBD/cfg/KBD_GERMAN.cfg
Normal file
@@ -0,0 +1,56 @@
|
||||
#GERMAN
|
||||
#clear all settings
|
||||
setkey -r
|
||||
#setkey [new character] [QWERTY-USA character]
|
||||
setkey doublequote at
|
||||
setkey ampersand caret
|
||||
setkey slash ampersand
|
||||
setkey parenleft asterisk
|
||||
setkey parenright parenleft
|
||||
setkey equal parenright
|
||||
setkey question underscore
|
||||
setkey backslash minus
|
||||
setkey z y
|
||||
setkey Z Y
|
||||
setkey y z
|
||||
setkey Y Z
|
||||
setkey plus bracketright
|
||||
setkey asterisk braceright
|
||||
setkey semicolon less
|
||||
setkey colon greater
|
||||
setkey minus slash
|
||||
setkey backslash Aminus
|
||||
setkey underscore question
|
||||
setkey caret backquote
|
||||
setkey quote equal
|
||||
setkey backquote plus
|
||||
setkey braceright doublequote
|
||||
setkey bar bracketleft
|
||||
setkey at braceleft
|
||||
setkey numbersign backslash
|
||||
setkey at Aq
|
||||
setkey less backquote
|
||||
setkey greater tilde
|
||||
setkey braceleft A7
|
||||
setkey bracketleft A8
|
||||
setkey bracketright A9
|
||||
setkey braceright A0
|
||||
setkey tilde Abracketright
|
||||
setkey backslash Aminus
|
||||
setkey quote bar
|
||||
setkey greater semicolon
|
||||
setkey less colon
|
||||
setkey bar quote
|
||||
|
||||
setkey -e
|
||||
if [ "${quiet}" = "" ]; then
|
||||
echo GERMAN KBD
|
||||
fi
|
||||
|
||||
#key names
|
||||
#escape, exclam (!), at (@), numbersign (#), dollar ($), parenright ()), caret (^), ampersand (&), asterisk (*), plus (+), percent (%)
|
||||
#minus (-), underscore (_), equal (=), parenleft [(], backspace (backspace), tab (Tab), bracketleft ([), braceleft ({), bracketright (])
|
||||
#braceright (}), enter (carriage return), semicolon (;), colon (:), quote (') , doublequote ("), slash (/), backquote (`), tilde (~)
|
||||
#backslash (\), bar (|), comma (,), less (<) period (.) , greater (>), question (?)
|
||||
#space, home, uparrow, pageup, leftarrow, center, rightarrow, end, downarrow, pagedown, insert, delete, F1-F12, shiftF1-shiftF12, ctrlF1-ctrlF12
|
||||
#Use prefix A for Alt+, e.g. Aequal, Aq, Aslash, A0, etc.
|
52
KBD/cfg/KBD_ITALIANO.cfg
Normal file
52
KBD/cfg/KBD_ITALIANO.cfg
Normal file
@@ -0,0 +1,52 @@
|
||||
# Italian
|
||||
#clear all settings
|
||||
setkey -r
|
||||
#setkey [new character] [QWERTY-USA character]
|
||||
setkey backslash backquote
|
||||
setkey bar tilde
|
||||
setkey doublequote at
|
||||
setkey tilde numbersign
|
||||
setkey ampersand caret
|
||||
setkey slash ampersand
|
||||
setkey parenleft asterisk
|
||||
setkey parenright parenleft
|
||||
setkey equal parenright
|
||||
setkey quote minus
|
||||
setkey question underscore
|
||||
setkey caret plus
|
||||
setkey bracketleft bracketleft
|
||||
setkey bracketright braceleft
|
||||
setkey plus bracketright
|
||||
setkey asterisk braceright
|
||||
setkey at semicolon
|
||||
setkey braceleft colon
|
||||
setkey numbersign quote
|
||||
setkey braceright doublequote
|
||||
setkey less backslash
|
||||
setkey greater bar
|
||||
setkey minus slash
|
||||
setkey underscore question
|
||||
setkey semicolon less
|
||||
setkey colon greater
|
||||
|
||||
setkey bracketleft Abracketleft
|
||||
setkey bracketright Abracketright
|
||||
setkey at Asemicolon
|
||||
setkey numbersign Aquote
|
||||
setkey braceright Abraceright
|
||||
setkey braceleft Abraceleft
|
||||
|
||||
setkey -e
|
||||
|
||||
if [ "${quiet}" = "" ]; then
|
||||
echo ITALIAN KBD
|
||||
fi
|
||||
|
||||
|
||||
#key names
|
||||
#escape, exclam (!), at (@), numbersign (#), dollar ($), parenright ()), caret (^), ampersand (&), asterisk (*), plus (+), percent (%)
|
||||
#minus (-), underscore (_), equal (=), parenleft [(], backspace (backspace), tab (Tab), bracketleft ([), braceleft ({), bracketright (])
|
||||
#braceright (}), enter (carriage return), semicolon (;), colon (:), quote (') , doublequote ("), slash (/), backquote (`), tilde (~)
|
||||
#backslash (\), bar (|), comma (,), less (<) period (.) , greater (>), question (?)
|
||||
#space, home, uparrow, pageup, leftarrow, center, rightarrow, end, downarrow, pagedown, insert, delete, F1-F12, shiftF1-shiftF12, ctrlF1-ctrlF12
|
||||
#Use prefix A for Alt+, e.g. Aequal, Aq, Aslash, A0, etc.
|
37
KBD/cfg/KBD_JAPAN_106.cfg
Normal file
37
KBD/cfg/KBD_JAPAN_106.cfg
Normal file
@@ -0,0 +1,37 @@
|
||||
#clear all settings
|
||||
setkey -r
|
||||
#setkey [new character] [QWERTY-USA character]
|
||||
# Jp106 keypad
|
||||
setkey at bracketleft
|
||||
setkey doublequote at
|
||||
setkey ampersand caret
|
||||
setkey quote ampersand
|
||||
setkey parenleft asterisk
|
||||
setkey parenright parenleft
|
||||
setkey underscore parenright
|
||||
setkey equal underscore
|
||||
setkey plus colon
|
||||
setkey colon quote
|
||||
setkey asterisk doublequote
|
||||
setkey bracketleft bracketright
|
||||
setkey braceleft braceright
|
||||
setkey bracketright backslash
|
||||
setkey braceright bar
|
||||
setkey backslash backquote
|
||||
setkey tilde plus
|
||||
setkey caret equal
|
||||
setkey backquote braceleft
|
||||
setkey bar tilde
|
||||
|
||||
setkey -e
|
||||
if [ "${quiet}" = "" ]; then
|
||||
echo JAPANESE 106 KBD
|
||||
fi
|
||||
|
||||
#key names
|
||||
#escape, exclam (!), at (@), numbersign (#), dollar ($), parenright ()), caret (^), ampersand (&), asterisk (*), plus (+), percent (%)
|
||||
#minus (-), underscore (_), equal (=), parenleft [(], backspace (backspace), tab (Tab), bracketleft ([), braceleft ({), bracketright (])
|
||||
#braceright (}), enter (carriage return), semicolon (;), colon (:), quote (') , doublequote ("), slash (/), backquote (`), tilde (~)
|
||||
#backslash (\), bar (|), comma (,), less (<) period (.) , greater (>), question (?)
|
||||
#space, home, uparrow, pageup, leftarrow, center, rightarrow, end, downarrow, pagedown, insert, delete, F1-F12, shiftF1-shiftF12, ctrlF1-ctrlF12
|
||||
#Use prefix A for Alt+, e.g. Aequal, Aq, Aslash, A0, etc.
|
53
KBD/cfg/KBD_LATIN_USA.cfg
Normal file
53
KBD/cfg/KBD_LATIN_USA.cfg
Normal file
@@ -0,0 +1,53 @@
|
||||
#LATIN AMERCICAN KBD
|
||||
#clear all settings
|
||||
setkey -r
|
||||
#setkey [new character] [QWERTY-USA character]
|
||||
setkey bar backquote
|
||||
setkey quote minus
|
||||
setkey question underscore
|
||||
setkey backquote bracketleft
|
||||
setkey plus bracketright
|
||||
setkey braceleft quote
|
||||
setkey braceright backslash
|
||||
setkey minus slash
|
||||
setkey ampersand caret
|
||||
setkey doublequote at
|
||||
setkey slash ampersand
|
||||
setkey parenleft asterisk
|
||||
setkey parenright parenleft
|
||||
setkey equal parenright
|
||||
setkey asterisk braceright
|
||||
setkey bracketleft doublequote
|
||||
setkey bracketright bar
|
||||
setkey semicolon less
|
||||
setkey colon greater
|
||||
setkey underscore question
|
||||
|
||||
setkey caret Aquote
|
||||
setkey doublequote braceleft
|
||||
setkey at Aq
|
||||
setkey backquote Abackslash
|
||||
|
||||
setkey backslash Aminus
|
||||
|
||||
setkey greater plus
|
||||
setkey less equal
|
||||
|
||||
setkey backslash Aminus
|
||||
setkey backquote Abackslash
|
||||
setkey tilde Abracketright
|
||||
setkey caret Aquote
|
||||
|
||||
setkey -e
|
||||
if [ "${quiet}" = "" ]; then
|
||||
echo "LATIN AMERICAN KBD shift+top-right '>' top-right '<'"
|
||||
sleep 3
|
||||
fi
|
||||
|
||||
#key names
|
||||
#escape, exclam (!), at (@), numbersign (#), dollar ($), parenright ()), caret (^), ampersand (&), asterisk (*), plus (+), percent (%)
|
||||
#minus (-), underscore (_), equal (=), parenleft [(], backspace (backspace), tab (Tab), bracketleft ([), braceleft ({), bracketright (])
|
||||
#braceright (}), enter (carriage return), semicolon (;), colon (:), quote (') , doublequote ("), slash (/), backquote (`), tilde (~)
|
||||
#backslash (\), bar (|), comma (,), less (<) period (.) , greater (>), question (?)
|
||||
#space, home, uparrow, pageup, leftarrow, center, rightarrow, end, downarrow, pagedown, insert, delete, F1-F12, shiftF1-shiftF12, ctrlF1-ctrlF12
|
||||
#Use prefix A for Alt+, e.g. Aequal, Aq, Aslash, A0, etc.
|
41
KBD/cfg/KBD_PORTU_BRAZIL.cfg
Normal file
41
KBD/cfg/KBD_PORTU_BRAZIL.cfg
Normal file
@@ -0,0 +1,41 @@
|
||||
#PORTUGUESE-BRAZIL
|
||||
#clear all settings
|
||||
setkey -r
|
||||
#setkey [new character] [QWERTY-USA character]
|
||||
setkey quote backquote
|
||||
setkey quote bracketleft
|
||||
setkey bracketleft bracketright
|
||||
setkey tilde quote
|
||||
setkey bracketright backslash
|
||||
setkey semicolon slash
|
||||
setkey bar colon
|
||||
|
||||
#shifted
|
||||
setkey doublequote tilde
|
||||
setkey backquote braceleft
|
||||
setkey braceleft braceright
|
||||
setkey caret doublequote
|
||||
setkey braceright bar
|
||||
setkey colon question
|
||||
setkey backslash semicolon
|
||||
|
||||
|
||||
#AltGr
|
||||
setkey bar Atilde
|
||||
setkey backslash Abackquote
|
||||
setkey slash Aq
|
||||
setkey question Aw
|
||||
|
||||
setkey -e
|
||||
if [ "${quiet}" = "" ]; then
|
||||
echo "PORTUGUESE-BRAZIL KBD c+' -> \"|\" C -> \"\\\""
|
||||
sleep 3
|
||||
fi
|
||||
|
||||
#key names
|
||||
#escape, exclam (!), at (@), numbersign (#), dollar ($), parenright ()), caret (^), ampersand (&), asterisk (*), plus (+), percent (%)
|
||||
#minus (-), underscore (_), equal (=), parenleft [(], backspace (backspace), tab (Tab), bracketleft ([), braceleft ({), bracketright (])
|
||||
#braceright (}), enter (carriage return), semicolon (;), colon (:), quote (') , doublequote ("), slash (/), backquote (`), tilde (~)
|
||||
#backslash (\), bar (|), comma (,), less (<) period (.) , greater (>), question (?)
|
||||
#space, home, uparrow, pageup, leftarrow, center, rightarrow, end, downarrow, pagedown, insert, delete, F1-F12, shiftF1-shiftF12, ctrlF1-ctrlF12
|
||||
#Use prefix A for Alt+, e.g. Aequal, Aq, Aslash, A0, etc.
|
27
KBD/cfg/KBD_QWERTY_UK.cfg
Normal file
27
KBD/cfg/KBD_QWERTY_UK.cfg
Normal file
@@ -0,0 +1,27 @@
|
||||
#QWERTY UK
|
||||
#clear all settings
|
||||
setkey -r
|
||||
#setkey [new character] [QWERTY-USA character]
|
||||
#change key map for UK keyboard
|
||||
setkey at doublequote
|
||||
setkey doublequote at
|
||||
setkey tilde bar
|
||||
setkey numbersign backslash
|
||||
setkey backslash numbersign
|
||||
setkey bar tilde
|
||||
setkey backslash Atilde
|
||||
setkey backslash Abackquote
|
||||
|
||||
setkey -e
|
||||
if [ "${quiet}" = "" ]; then
|
||||
echo "UK KBD use [Shift+3] for \\ and [Shift+top-left] for |"
|
||||
sleep 2
|
||||
fi
|
||||
|
||||
#key names
|
||||
#escape, exclam (!), at (@), numbersign (#), dollar ($), parenright ()), caret (^), ampersand (&), asterisk (*), plus (+), percent (%)
|
||||
#minus (-), underscore (_), equal (=), parenleft [(], backspace (backspace), tab (Tab), bracketleft ([), braceleft ({), bracketright (])
|
||||
#braceright (}), enter (carriage return), semicolon (;), colon (:), quote (') , doublequote ("), slash (/), backquote (`), tilde (~)
|
||||
#backslash (\), bar (|), comma (,), less (<) period (.) , greater (>), question (?)
|
||||
#space, home, uparrow, pageup, leftarrow, center, rightarrow, end, downarrow, pagedown, insert, delete, F1-F12, shiftF1-shiftF12, ctrlF1-ctrlF12
|
||||
#Use prefix A for Alt+, e.g. Aequal, Aq, Aslash, A0, etc.
|
44
KBD/cfg/KBD_QWERTZ.cfg
Normal file
44
KBD/cfg/KBD_QWERTZ.cfg
Normal file
@@ -0,0 +1,44 @@
|
||||
#QWERTZ generic
|
||||
#clear all settings
|
||||
setkey -r
|
||||
#setkey [new character] [QWERTY-USA character]
|
||||
setkey doublequote at
|
||||
setkey ampersand percent
|
||||
setkey slash ampersand
|
||||
|
||||
setkey equal parenright
|
||||
setkey question underscore
|
||||
setkey backslash minus
|
||||
setkey z y
|
||||
setkey Z Y
|
||||
setkey y z
|
||||
setkey Y Z
|
||||
setkey plus bracketright
|
||||
setkey asterisk braceright
|
||||
setkey semicolon less
|
||||
setkey colon greater
|
||||
setkey minus slash
|
||||
|
||||
setkey underscore question
|
||||
setkey caret backquote
|
||||
|
||||
setkey backquote equal
|
||||
setkey numbersign backslash
|
||||
setkey parenright parenleft
|
||||
setkey parenleft asterisk
|
||||
setkey percent caret
|
||||
setkey less numbersign
|
||||
setkey greater bar
|
||||
|
||||
setkey -e
|
||||
if [ "${quiet}" = "" ]; then
|
||||
echo QWERTZ KBD
|
||||
fi
|
||||
|
||||
#key names
|
||||
#escape, exclam (!), at (@), numbersign (#), dollar ($), parenright ()), caret (^), ampersand (&), asterisk (*), plus (+), percent (%)
|
||||
#minus (-), underscore (_), equal (=), parenleft [(], backspace (backspace), tab (Tab), bracketleft ([), braceleft ({), bracketright (])
|
||||
#braceright (}), enter (carriage return), semicolon (;), colon (:), quote (') , doublequote ("), slash (/), backquote (`), tilde (~)
|
||||
#backslash (\), bar (|), comma (,), less (<) period (.) , greater (>), question (?)
|
||||
#space, home, uparrow, pageup, leftarrow, center, rightarrow, end, downarrow, pagedown, insert, delete, F1-F12, shiftF1-shiftF12, ctrlF1-ctrlF12
|
||||
#Use prefix A for Alt+, e.g. Aequal, Aq, Aslash, A0, etc.
|
69
KBD/cfg/KBD_QWERTZ_HUN.cfg
Normal file
69
KBD/cfg/KBD_QWERTZ_HUN.cfg
Normal file
@@ -0,0 +1,69 @@
|
||||
#QWERTZ Hungarian
|
||||
#clear all settings
|
||||
setkey -r
|
||||
#setkey [new character] [QWERTY-USA character]
|
||||
setkey y z
|
||||
setkey z y
|
||||
setkey Y Z
|
||||
setkey Z Y
|
||||
setkey 0 backquote
|
||||
setkey quote exclam
|
||||
setkey doublequote at
|
||||
setkey plus numbersign
|
||||
setkey exclam dollar
|
||||
setkey slash caret
|
||||
setkey equal ampersand
|
||||
setkey parenleft asterisk
|
||||
setkey parenright parenleft
|
||||
setkey backslash Aq
|
||||
setkey bar Aw
|
||||
setkey bracketleft Af
|
||||
setkey bracketright Ag
|
||||
#setkey greater Aoem102 - Aoem102 not supported
|
||||
#this is a y key in hungarian keyboard
|
||||
setkey greater Az
|
||||
setkey numbersign Ax
|
||||
setkey ampersand Ac
|
||||
setkey at Av
|
||||
setkey braceleft Ab
|
||||
setkey braceright An
|
||||
setkey less Am
|
||||
#use É (USA=:) for $
|
||||
setkey dollar colon
|
||||
setkey question less
|
||||
setkey colon greater
|
||||
setkey minus slash
|
||||
setkey underscore question
|
||||
setkey at doublequote
|
||||
setkey tilde A1
|
||||
setkey caret A3
|
||||
setkey backquote A7
|
||||
|
||||
#use Ö for asterisk
|
||||
setkey asterisk 0
|
||||
|
||||
setkey dollar Asemicolon
|
||||
setkey semicolon Acomma
|
||||
setkey greater Aperiod
|
||||
setkey asterisk Aslash
|
||||
#semicolon use é key
|
||||
#Hun AltGR chars: less greater numbersign ampersand at braceleft braceright semicolon asterisk backslash bar tilde caret quote doublequote bracketleft bracketright
|
||||
|
||||
setkey backquote A9
|
||||
setkey doublequote A0
|
||||
|
||||
|
||||
|
||||
setkey -e
|
||||
if [ "${quiet}" = "" ]; then
|
||||
echo "QWERTZ_HUN KBD e ';'"
|
||||
sleep 2
|
||||
fi
|
||||
|
||||
#key names
|
||||
#escape, exclam (!), at (@), numbersign (#), dollar ($), parenright ()), caret (^), ampersand (&), asterisk (*), plus (+), percent (%)
|
||||
#minus (-), underscore (_), equal (=), parenleft [(], backspace (backspace), tab (Tab), bracketleft ([), braceleft ({), bracketright (])
|
||||
#braceright (}), enter (carriage return), semicolon (;), colon (:), quote (') , doublequote ("), slash (/), backquote (`), tilde (~)
|
||||
#backslash (\), bar (|), comma (,), less (<) period (.) , greater (>), question (?)
|
||||
#space, home, uparrow, pageup, leftarrow, center, rightarrow, end, downarrow, pagedown, insert, delete, F1-F12, shiftF1-shiftF12, ctrlF1-ctrlF12
|
||||
#Use prefix A for Alt+, e.g. Aequal, Aq, Aslash, A0, etc.
|
48
KBD/cfg/KBD_QWERTZ_SLOV_CROAT.cfg
Normal file
48
KBD/cfg/KBD_QWERTZ_SLOV_CROAT.cfg
Normal file
@@ -0,0 +1,48 @@
|
||||
#QWERTZ Croatian\Slovenian
|
||||
#clear all settings
|
||||
setkey -r
|
||||
#setkey [new character] [QWERTY-USA character]
|
||||
setkey quote minus
|
||||
setkey plus equal
|
||||
setkey y z
|
||||
setkey minus slash
|
||||
#shifted
|
||||
setkey doublequote tilde
|
||||
setkey doublequote at
|
||||
setkey ampersand caret
|
||||
setkey slash ampersand
|
||||
setkey parenleft asterisk
|
||||
setkey parenright parenleft
|
||||
setkey equal parenright
|
||||
setkey question underscore
|
||||
setkey asterisk plus
|
||||
setkey Y Z
|
||||
setkey semicolon less
|
||||
setkey colon greater
|
||||
setkey underscore question
|
||||
#AltGr
|
||||
setkey tilde A1
|
||||
setkey caret A3
|
||||
setkey backquote A7
|
||||
setkey backslash Aq
|
||||
setkey bar Aw
|
||||
setkey bracketleft Af
|
||||
setkey bracketright Ag
|
||||
setkey at Av
|
||||
setkey braceleft Ab
|
||||
setkey braceright An
|
||||
setkey less Acomma
|
||||
setkey greater Aperiod
|
||||
|
||||
setkey -e
|
||||
if [ "${quiet}" = "" ]; then
|
||||
echo QWERTZ_SLOV_CROAT KBD
|
||||
fi
|
||||
|
||||
#key names
|
||||
#escape, exclam (!), at (@), numbersign (#), dollar ($), parenright ()), caret (^), ampersand (&), asterisk (*), plus (+), percent (%)
|
||||
#minus (-), underscore (_), equal (=), parenleft [(], backspace (backspace), tab (Tab), bracketleft ([), braceleft ({), bracketright (])
|
||||
#braceright (}), enter (carriage return), semicolon (;), colon (:), quote (') , doublequote ("), slash (/), backquote (`), tilde (~)
|
||||
#backslash (\), bar (|), comma (,), less (<) period (.) , greater (>), question (?)
|
||||
#space, home, uparrow, pageup, leftarrow, center, rightarrow, end, downarrow, pagedown, insert, delete, F1-F12, shiftF1-shiftF12, ctrlF1-ctrlF12
|
||||
#Use prefix A for Alt+, e.g. Aequal, Aq, Aslash, A0, etc.
|
54
KBD/cfg/KBD_SPANISH.cfg
Normal file
54
KBD/cfg/KBD_SPANISH.cfg
Normal file
@@ -0,0 +1,54 @@
|
||||
#Espanol - SPANISH CHARACTER - USA KBD CHARACTER
|
||||
#clear all settings
|
||||
setkey -r
|
||||
#setkey [new character] [QWERTY-USA character]
|
||||
setkey slash ampersand
|
||||
setkey ampersand caret
|
||||
setkey caret braceleft
|
||||
setkey asterisk braceright
|
||||
setkey parenleft asterisk
|
||||
setkey parenright parenleft
|
||||
setkey minus slash
|
||||
setkey equal parenright
|
||||
setkey quote minus
|
||||
setkey underscore question
|
||||
setkey question underscore
|
||||
#setkey braceleft quote
|
||||
#setkey braceright backslash
|
||||
setkey colon greater
|
||||
setkey greater bar
|
||||
setkey doublequote at
|
||||
setkey backslash backquote
|
||||
setkey less backslash
|
||||
setkey semicolon less
|
||||
setkey backquote bracketleft
|
||||
setkey plus bracketright
|
||||
setkey plus colon
|
||||
setkey at semicolon
|
||||
|
||||
setkey bar A1
|
||||
setkey at A2
|
||||
setkey numbersign A3
|
||||
setkey tilde A4
|
||||
setkey bracketleft Abracketleft
|
||||
setkey bracketright Abracketright
|
||||
setkey braceleft Aquote
|
||||
setkey braceright Abackslash
|
||||
|
||||
setkey greater bar
|
||||
setkey less backslash
|
||||
setkey backslash Abackquote
|
||||
|
||||
setkey -e
|
||||
if [ "${quiet}" = "" ]; then
|
||||
echo "SPANISH KBD MAP SET c=< C=>"
|
||||
sleep 2
|
||||
fi
|
||||
|
||||
#key names
|
||||
#escape, exclam (!), at (@), numbersign (#), dollar ($), parenright ()), caret (^), ampersand (&), asterisk (*), plus (+), percent (%)
|
||||
#minus (-), underscore (_), equal (=), parenleft [(], backspace (backspace), tab (Tab), bracketleft ([), braceleft ({), bracketright (])
|
||||
#braceright (}), enter (carriage return), semicolon (;), colon (:), quote (') , doublequote ("), slash (/), backquote (`), tilde (~)
|
||||
#backslash (\), bar (|), comma (,), less (<) period (.) , greater (>), question (?)
|
||||
#space, home, uparrow, pageup, leftarrow, center, rightarrow, end, downarrow, pagedown, insert, delete, F1-F12, shiftF1-shiftF12, ctrlF1-ctrlF12
|
||||
#Use prefix A for Alt+, e.g. Aequal, Aq, Aslash, A0, etc.
|
56
KBD/cfg/KBD_SWEDISH.cfg
Normal file
56
KBD/cfg/KBD_SWEDISH.cfg
Normal file
@@ -0,0 +1,56 @@
|
||||
#SWEDISH
|
||||
#clear all settings
|
||||
setkey -r
|
||||
#setkey [new character] [QWERTY-USA character]
|
||||
setkey plus minus
|
||||
setkey quote equal
|
||||
setkey doublequote bracketright
|
||||
setkey quote backslash
|
||||
setkey minus slash
|
||||
|
||||
#shifted
|
||||
setkey doublequote at
|
||||
setkey ampersand caret
|
||||
setkey slash ampersand
|
||||
setkey parenleft asterisk
|
||||
setkey parenright parenleft
|
||||
setkey equal parenright
|
||||
setkey question underscore
|
||||
setkey caret braceright
|
||||
setkey asterisk bar
|
||||
setkey backquote plus
|
||||
setkey semicolon less
|
||||
setkey colon greater
|
||||
setkey underscore question
|
||||
|
||||
#use top-left key for oem102 codes
|
||||
setkey bar Atilde
|
||||
setkey backslash Abackquote
|
||||
setkey greater tilde
|
||||
|
||||
#AltGr
|
||||
setkey at A2
|
||||
setkey dollar A4
|
||||
setkey braceleft A7
|
||||
setkey bracketleft A8
|
||||
setkey bracketright A9
|
||||
setkey braceright A0
|
||||
setkey backslash Aminus
|
||||
|
||||
setkey less quote
|
||||
setkey greater doublequote
|
||||
setkey tilde Abracketright
|
||||
|
||||
setkey -e
|
||||
if [ "${quiet}" = "" ]; then
|
||||
echo "SWEDISH KBD a=< A=>"
|
||||
sleep 2
|
||||
fi
|
||||
|
||||
#key names
|
||||
#escape, exclam (!), at (@), numbersign (#), dollar ($), parenright ()), caret (^), ampersand (&), asterisk (*), plus (+), percent (%)
|
||||
#minus (-), underscore (_), equal (=), parenleft [(], backspace (backspace), tab (Tab), bracketleft ([), braceleft ({), bracketright (])
|
||||
#braceright (}), enter (carriage return), semicolon (;), colon (:), quote (') , doublequote ("), slash (/), backquote (`), tilde (~)
|
||||
#backslash (\), bar (|), comma (,), less (<) period (.) , greater (>), question (?)
|
||||
#space, home, uparrow, pageup, leftarrow, center, rightarrow, end, downarrow, pagedown, insert, delete, F1-F12, shiftF1-shiftF12, ctrlF1-ctrlF12
|
||||
#Use prefix A for Alt+, e.g. Aequal, Aq, Aslash, A0, etc.
|
49
KBD/cfg/KBD_TURKISH_Q.cfg
Normal file
49
KBD/cfg/KBD_TURKISH_Q.cfg
Normal file
@@ -0,0 +1,49 @@
|
||||
#QWERTY TURKISH
|
||||
#clear all settings
|
||||
setkey -r
|
||||
#setkey [new character] [QWERTY-USA character]
|
||||
setkey doublequote backquote
|
||||
setkey asterisk minus
|
||||
setkey minus equal
|
||||
setkey comma backslash
|
||||
setkey period slash
|
||||
#shift
|
||||
setkey quote at
|
||||
setkey caret numbersign
|
||||
setkey plus dollar
|
||||
setkey ampersand caret
|
||||
setkey slash ampersand
|
||||
setkey parenleft asterisk
|
||||
setkey parenright parenleft
|
||||
setkey equal parenright
|
||||
setkey question underscore
|
||||
setkey underscore plus
|
||||
setkey semicolon bar
|
||||
setkey colon question
|
||||
#altgr
|
||||
setkey less Abackquote
|
||||
setkey greater A1
|
||||
setkey numbersign A3
|
||||
setkey dollar A4
|
||||
setkey braceleft A7
|
||||
setkey bracketleft A8
|
||||
setkey bracketright A9
|
||||
setkey braceright A0
|
||||
setkey backslash Aminus
|
||||
setkey bar Aequal
|
||||
setkey at Aq
|
||||
setkey doublequote Abracketleft
|
||||
setkey tilde Abracketright
|
||||
|
||||
setkey -e
|
||||
if [ "${quiet}" = "" ]; then
|
||||
echo TURKISH QWERTY KBD
|
||||
fi
|
||||
|
||||
#key names
|
||||
#escape, exclam (!), at (@), numbersign (#), dollar ($), parenright ()), caret (^), ampersand (&), asterisk (*), plus (+), percent (%)
|
||||
#minus (-), underscore (_), equal (=), parenleft [(], backspace (backspace), tab (Tab), bracketleft ([), braceleft ({), bracketright (])
|
||||
#braceright (}), enter (carriage return), semicolon (;), colon (:), quote (') , doublequote ("), slash (/), backquote (`), tilde (~)
|
||||
#backslash (\), bar (|), comma (,), less (<) period (.) , greater (>), question (?)
|
||||
#space, home, uparrow, pageup, leftarrow, center, rightarrow, end, downarrow, pagedown, insert, delete, F1-F12, shiftF1-shiftF12, ctrlF1-ctrlF12
|
||||
#Use prefix A for Alt+, e.g. Aequal, Aq, Aslash, A0, etc.
|
52
KBD/cfg/KBD_VIETNAMESE.cfg
Normal file
52
KBD/cfg/KBD_VIETNAMESE.cfg
Normal file
@@ -0,0 +1,52 @@
|
||||
#VIETNAMESE
|
||||
#clear all settings
|
||||
setkey -r
|
||||
#setkey [new character] [QWERTY-USA character]
|
||||
setkey exclam A1
|
||||
setkey at A2
|
||||
setkey numbersign A3
|
||||
setkey dollar A4
|
||||
setkey percent A5
|
||||
setkey caret A6
|
||||
setkey ampersand A7
|
||||
setkey asterisk A8
|
||||
setkey parenleft A9
|
||||
setkey parenright A0
|
||||
setkey plus Aplus
|
||||
setkey equal Aequal
|
||||
setkey braceleft Abraceleft
|
||||
setkey braceright Abraceright
|
||||
setkey colon Acolon
|
||||
setkey semicolon Asemicolon
|
||||
setkey quote Aquote
|
||||
setkey backslash Abackslash
|
||||
setkey less Aless
|
||||
setkey greater Agreater
|
||||
setkey comma Acomma
|
||||
setkey period Aperiod
|
||||
setkey question Aquestion
|
||||
setkey slash Aslash
|
||||
setkey tilde Atilde
|
||||
setkey backquote Abackquote
|
||||
setkey bracketright Abracketright
|
||||
setkey bracketleft Abracketleft
|
||||
setkey bar Abar
|
||||
setkey doublequote Adoublequote
|
||||
setkey colon Acolon
|
||||
setkey minus Aminus
|
||||
setkey underscore Aunderscore
|
||||
|
||||
#for top row, use unshifted and shifted keys
|
||||
setkey -e
|
||||
|
||||
if [ "${quiet}" = "" ]; then
|
||||
echo VIETNAMESE KBD
|
||||
fi
|
||||
|
||||
#key names
|
||||
#escape, exclam (!), at (@), numbersign (#), dollar ($), parenright ()), caret (^), ampersand (&), asterisk (*), plus (+), percent (%)
|
||||
#minus (-), underscore (_), equal (=), parenleft [(], backspace (backspace), tab (Tab), bracketleft ([), braceleft ({), bracketright (])
|
||||
#braceright (}), enter (carriage return), semicolon (;), colon (:), quote (') , doublequote ("), slash (/), backquote (`), tilde (~)
|
||||
#backslash (\), bar (|), comma (,), less (<) period (.) , greater (>), question (?)
|
||||
#space, home, uparrow, pageup, leftarrow, center, rightarrow, end, downarrow, pagedown, insert, delete, F1-F12, shiftF1-shiftF12, ctrlF1-ctrlF12
|
||||
#Use prefix A for Alt+, e.g. Aequal, Aq, Aslash, A0, etc.
|
30
KBD/mkconfig.sh
Normal file
30
KBD/mkconfig.sh
Normal file
@@ -0,0 +1,30 @@
|
||||
#!/bin/sh
|
||||
|
||||
#
|
||||
# Configfiles are from grubfilemanager project
|
||||
#
|
||||
|
||||
cfgfile=../INSTALL/grub/keyboard.cfg
|
||||
rm -f ${cfgfile}.gz
|
||||
|
||||
echo "submenu \"Keyboard Layouts\" --class=debug_krdlayout {" >>$cfgfile
|
||||
|
||||
cat >>$cfgfile << EOF
|
||||
menuentry QWERTY_USA --class=debug_kbd {
|
||||
setkey -r
|
||||
setkey -d
|
||||
}
|
||||
EOF
|
||||
|
||||
ls -1 cfg | while read line; do
|
||||
kbd=${line%.cfg}
|
||||
name=${kbd#KBD_}
|
||||
|
||||
echo "menuentry $name --class=debug_kbd {" >> $cfgfile
|
||||
grep '^setkey' cfg/$line >>$cfgfile
|
||||
echo "}" >> $cfgfile
|
||||
done
|
||||
|
||||
echo "}" >>$cfgfile
|
||||
|
||||
gzip $cfgfile
|
Binary file not shown.
1
License/license-AdminLTE.txt
Normal file
1
License/license-AdminLTE.txt
Normal file
@@ -0,0 +1 @@
|
||||
AdminLTE follows the MIT License (see MIT.txt)
|
1
License/license-bootstrap.txt
Normal file
1
License/license-bootstrap.txt
Normal file
@@ -0,0 +1 @@
|
||||
bootstrap follows the MIT License (see MIT.txt)
|
1
License/license-jquery.txt
Normal file
1
License/license-jquery.txt
Normal file
@@ -0,0 +1 @@
|
||||
jquery follows the MIT License (see MIT.txt)
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user