mirror of
https://github.com/ventoy/Ventoy.git
synced 2025-09-20 02:41: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 ]
|
branches: [ master ]
|
||||||
pull_request:
|
pull_request:
|
||||||
branches: [ master ]
|
branches: [ master ]
|
||||||
|
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
@@ -13,12 +15,19 @@ jobs:
|
|||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
- name: Run docker-compose up
|
- name: Run docker-compose up
|
||||||
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
|
- uses: actions/upload-artifact@v2
|
||||||
with:
|
with:
|
||||||
name: ventoy-linux
|
name: ventoy-linux
|
||||||
path: INSTALL/ventoy-*linux*
|
path: INSTALL/ventoy-*linux*
|
||||||
- uses: actions/upload-artifact@v2
|
- uses: actions/upload-artifact@v2
|
||||||
with:
|
with:
|
||||||
name: ventoy-windows
|
name: ventoy-livecd
|
||||||
path: INSTALL/ventoy-*windows*
|
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
|
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.
|
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
|
1.1 Install CentOS 7.8
|
||||||
I use CentOS-7-x86_64-Everything-2003.iso and select Minimal install
|
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 \
|
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-* \
|
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 \
|
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. Download Source Code
|
||||||
==========================================
|
==========================================
|
||||||
2.1 Download Ventoy source code from github and decompress it.
|
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://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
|
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://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
|
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
|
2.3 Prepare third-part tools
|
||||||
cd /home/Ventoy-master/DOC/
|
cd /home/Ventoy-master/DOC/
|
||||||
tar xf musl-1.2.1.tar.gz
|
tar xf musl-1.2.1.tar.gz
|
||||||
@@ -52,20 +63,22 @@
|
|||||||
==========================================
|
==========================================
|
||||||
3. All in one script
|
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.
|
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
|
cd /home/Ventoy-master/INSTALL
|
||||||
sh all_in_one.sh
|
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)
|
It should be noted that:
|
||||||
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.
|
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.
|
||||||
Fortunately these parts are few modified, you only need to build once or you can directly use the binary I have built.
|
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.
|
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
|
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
|
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 \
|
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-* \
|
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 \
|
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
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
|
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
|
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 ./
|
/bin/cp -a ./edk2_mod/edk2-edk2-stable201911 ./
|
||||||
|
|
||||||
cd 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/
|
make -j 4 -C BaseTools/
|
||||||
|
cd ..
|
||||||
|
|
||||||
source ./edksetup.sh
|
echo '======== build EDK2 for i386-efi ==============='
|
||||||
build -p MdeModulePkg/MdeModulePkg.dsc -a X64 -b RELEASE -t GCC48
|
sh ./build.sh ia32 || exit 1
|
||||||
|
|
||||||
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 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]
|
[Components]
|
||||||
MdeModulePkg/Application/Ventoy/Ventoy.inf
|
MdeModulePkg/Application/Ventoy/Ventoy.inf
|
||||||
MdeModulePkg/Application/VtoyUtil/VtoyUtil.inf
|
MdeModulePkg/Application/VtoyUtil/VtoyUtil.inf
|
||||||
|
MdeModulePkg/Application/VDiskChain/VDiskChain.inf
|
||||||
MdeModulePkg/Application/HelloWorld/HelloWorld.inf
|
MdeModulePkg/Application/HelloWorld/HelloWorld.inf
|
||||||
MdeModulePkg/Application/DumpDynPcd/DumpDynPcd.inf
|
MdeModulePkg/Application/DumpDynPcd/DumpDynPcd.inf
|
||||||
MdeModulePkg/Application/MemoryProfileInfo/MemoryProfileInfo.inf
|
MdeModulePkg/Application/MemoryProfileInfo/MemoryProfileInfo.inf
|
||||||
|
@@ -12,13 +12,15 @@ else
|
|||||||
fi
|
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
|
export C_INCLUDE_PATH=$LIBFUSE_DIR/include
|
||||||
|
|
||||||
rm -f $name
|
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
|
if [ -e $name ]; then
|
||||||
echo -e "\n############### SUCCESS $name ##################\n"
|
echo -e "\n############### SUCCESS $name ##################\n"
|
||||||
|
@@ -33,7 +33,7 @@ fi
|
|||||||
|
|
||||||
./makeconf.sh
|
./makeconf.sh
|
||||||
|
|
||||||
./configure --prefix="$LIBFUSE_DIR"
|
./configure --prefix="$LIBFUSE_DIR" CFLAGS='-specs /usr/local/musl/lib/musl-gcc.specs'
|
||||||
make -j 16
|
make -j 16
|
||||||
make install
|
make install
|
||||||
cd ..
|
cd ..
|
||||||
|
Binary file not shown.
Binary file not shown.
@@ -1600,6 +1600,11 @@ module = {
|
|||||||
common = ventoy/miniz.c;
|
common = ventoy/miniz.c;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
module = {
|
||||||
|
name = setkey;
|
||||||
|
common = term/setkey.c;
|
||||||
|
};
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
name = hello;
|
name = hello;
|
||||||
common = hello/hello.c;
|
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)
|
if ((dirent.flags & FLAG_TYPE) == FLAG_TYPE_DIR)
|
||||||
ctx.type = GRUB_FSHELP_DIR;
|
ctx.type = GRUB_FSHELP_DIR;
|
||||||
|
else if ((dirent.flags & FLAG_TYPE) == 3)
|
||||||
|
ctx.type = GRUB_FSHELP_DIR;
|
||||||
else
|
else
|
||||||
ctx.type = GRUB_FSHELP_REG;
|
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/misc.h>
|
||||||
#include <grub/kernel.h>
|
#include <grub/kernel.h>
|
||||||
#ifdef GRUB_MACHINE_EFI
|
#ifdef GRUB_MACHINE_EFI
|
||||||
|
#include <grub/efi/api.h>
|
||||||
#include <grub/efi/efi.h>
|
#include <grub/efi/efi.h>
|
||||||
#endif
|
#endif
|
||||||
#include <grub/time.h>
|
#include <grub/time.h>
|
||||||
@@ -122,6 +123,10 @@ static int g_video_mode_max = 0;
|
|||||||
static int g_video_mode_num = 0;
|
static int g_video_mode_num = 0;
|
||||||
static ventoy_video_mode *g_video_mode_list = NULL;
|
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[] =
|
static const char *g_menu_class[] =
|
||||||
{
|
{
|
||||||
"vtoyiso", "vtoywim", "vtoyefi", "vtoyimg", "vtoyvhd", "vtoyvtoy"
|
"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);
|
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)
|
static grub_err_t ventoy_cmd_file_size(grub_extcmd_context_t ctxt, int argc, char **args)
|
||||||
{
|
{
|
||||||
int rc = 1;
|
int rc = 1;
|
||||||
@@ -1031,7 +1056,7 @@ int ventoy_cmp_img(img_info *img1, img_info *img2)
|
|||||||
int c1 = 0;
|
int c1 = 0;
|
||||||
int c2 = 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);
|
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 c1 = 0;
|
||||||
int c2 = 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);
|
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;
|
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 i = 0;
|
||||||
int type = 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 *new_node;
|
||||||
img_iterator_node *node = (img_iterator_node *)data;
|
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);
|
len = grub_strlen(filename);
|
||||||
|
|
||||||
if (info->dir)
|
if (info->dir)
|
||||||
@@ -1173,7 +1210,7 @@ static int ventoy_colect_img_files(const char *filename, const struct grub_dirho
|
|||||||
return 0;
|
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);
|
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);
|
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;
|
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
|
else
|
||||||
{
|
{
|
||||||
return 0;
|
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);
|
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);
|
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);
|
debug("File %s not found in image_list plugin config...\n", g_img_swap_tmp_buf);
|
||||||
return 0;
|
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));
|
img = grub_zalloc(sizeof(img_info));
|
||||||
@@ -1772,12 +1823,25 @@ int ventoy_check_device(grub_device_t dev)
|
|||||||
|
|
||||||
if (workaround)
|
if (workaround)
|
||||||
{
|
{
|
||||||
ventoy_part_table *PartTbl = g_ventoy_part_info->MBR.PartTbl;
|
if (grub_strncmp(g_ventoy_part_info->Head.Signature, "EFI PART", 8) == 0)
|
||||||
if (PartTbl[1].StartSectorId != PartTbl[0].StartSectorId + PartTbl[0].SectorCount ||
|
|
||||||
PartTbl[1].SectorCount != 65536)
|
|
||||||
{
|
{
|
||||||
grub_file_close(file);
|
ventoy_gpt_part_tbl *PartTbl = g_ventoy_part_info->PartTbl;
|
||||||
return ventoy_check_device_result(6);
|
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
|
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");
|
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");
|
strdata = ventoy_get_env("VTOY_FILT_DOT_UNDERSCORE_FILE");
|
||||||
if (strdata && strdata[0] == '1' && strdata[1] == 0)
|
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)
|
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");
|
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 i;
|
||||||
int x86count = 0;
|
int x86count = 0;
|
||||||
grub_uint8_t buf[512];
|
grub_uint8_t buf[512];
|
||||||
|
grub_uint8_t parttype[] = { 0x04, 0x06, 0x0B, 0x0C };
|
||||||
|
|
||||||
grub_file_seek(file, sector * 2048);
|
grub_file_seek(file, sector * 2048);
|
||||||
grub_file_read(file, buf, sizeof(buf));
|
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);
|
debug("%s does not contain efi eltorito\n", file->name);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -3205,14 +3285,15 @@ static grub_err_t ventoy_cmd_parse_volume(grub_extcmd_context_t ctxt, int argc,
|
|||||||
int len;
|
int len;
|
||||||
grub_file_t file;
|
grub_file_t file;
|
||||||
char buf[64];
|
char buf[64];
|
||||||
|
grub_uint64_t size;
|
||||||
ventoy_iso9660_vd pvd;
|
ventoy_iso9660_vd pvd;
|
||||||
|
|
||||||
(void)ctxt;
|
(void)ctxt;
|
||||||
(void)argc;
|
(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]);
|
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));
|
grub_memcpy(buf, pvd.vol, sizeof(pvd.vol));
|
||||||
ventoy_set_env(args[2], buf);
|
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:
|
end:
|
||||||
grub_file_close(file);
|
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;
|
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)
|
static grub_err_t ventoy_cmd_acpi_param(grub_extcmd_context_t ctxt, int argc, char **args)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
@@ -3580,6 +3696,31 @@ static grub_err_t ventoy_cmd_load_part_table(grub_extcmd_context_t ctxt, int arg
|
|||||||
return 0;
|
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)
|
static grub_err_t ventoy_cmd_part_exist(grub_extcmd_context_t ctxt, int argc, char **args)
|
||||||
{
|
{
|
||||||
int id;
|
int id;
|
||||||
@@ -3772,6 +3913,36 @@ static grub_err_t ventoy_cmd_basename(grub_extcmd_context_t ctxt, int argc, char
|
|||||||
return 0;
|
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)
|
static grub_err_t ventoy_cmd_enum_video_mode(grub_extcmd_context_t ctxt, int argc, char **args)
|
||||||
{
|
{
|
||||||
struct grub_video_mode_info info;
|
struct grub_video_mode_info info;
|
||||||
@@ -4019,6 +4190,7 @@ static int ventoy_env_init(void)
|
|||||||
static cmd_para ventoy_cmds[] =
|
static cmd_para ventoy_cmds[] =
|
||||||
{
|
{
|
||||||
{ "vt_incr", ventoy_cmd_incr, 0, NULL, "{Var} {INT}", "Increase integer variable", NULL },
|
{ "vt_incr", ventoy_cmd_incr, 0, NULL, "{Var} {INT}", "Increase integer variable", NULL },
|
||||||
|
{ "vt_mod", ventoy_cmd_mod, 0, NULL, "{Int} {Int} {Var}", "mod integer variable", NULL },
|
||||||
{ "vt_strstr", ventoy_cmd_strstr, 0, NULL, "", "", NULL },
|
{ "vt_strstr", ventoy_cmd_strstr, 0, NULL, "", "", NULL },
|
||||||
{ "vt_str_begin", ventoy_cmd_strbegin, 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 },
|
{ "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_patch_vhdboot", ventoy_cmd_patch_vhdboot, 0, NULL, "", "", NULL },
|
||||||
{ "vt_raw_chain_data", ventoy_cmd_raw_chain_data, 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_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_skip_svd", ventoy_cmd_skip_svd, 0, NULL, "", "", NULL },
|
||||||
{ "vt_cpio_busybox64", ventoy_cmd_cpio_busybox_64, 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_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_fs_enum_1st_file", ventoy_cmd_fs_enum_1st_file, 0, NULL, "", "", NULL },
|
||||||
{ "vt_file_basename", ventoy_cmd_basename, 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_enum_video_mode", ventoy_cmd_enum_video_mode, 0, NULL, "", "", NULL },
|
||||||
{ "vt_get_video_mode", ventoy_cmd_get_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 },
|
{ "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_hook_root", ventoy_cmd_img_hook_root, 0, NULL, "", "", NULL },
|
||||||
{ "vt_img_unhook_root", ventoy_cmd_img_unhook_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_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;
|
grub_uint8_t res;
|
||||||
char sys[32];
|
char sys[32];
|
||||||
char vol[32];
|
char vol[32];
|
||||||
|
grub_uint8_t res2[8];
|
||||||
|
grub_uint32_t space;
|
||||||
}ventoy_iso9660_vd;
|
}ventoy_iso9660_vd;
|
||||||
|
|
||||||
#pragma pack()
|
#pragma pack()
|
||||||
@@ -799,6 +801,19 @@ typedef struct menu_class
|
|||||||
struct menu_class *next;
|
struct menu_class *next;
|
||||||
}menu_class;
|
}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)
|
#define vtoy_max_replace_file_size (2 * 1024 * 1024)
|
||||||
typedef struct conf_replace
|
typedef struct conf_replace
|
||||||
{
|
{
|
||||||
@@ -867,7 +882,11 @@ extern int g_ventoy_iso_uefi_drv;
|
|||||||
extern int g_ventoy_case_insensitive;
|
extern int g_ventoy_case_insensitive;
|
||||||
extern grub_uint8_t g_ventoy_chain_type;
|
extern grub_uint8_t g_ventoy_chain_type;
|
||||||
extern int g_vhdboot_enable;
|
extern int g_vhdboot_enable;
|
||||||
|
|
||||||
|
#define VENTOY_IMG_WHITE_LIST 1
|
||||||
|
#define VENTOY_IMG_BLACK_LIST 2
|
||||||
extern int g_plugin_image_list;
|
extern int g_plugin_image_list;
|
||||||
|
|
||||||
extern ventoy_gpt_info *g_ventoy_part_info;
|
extern ventoy_gpt_info *g_ventoy_part_info;
|
||||||
extern grub_uint64_t g_conf_replace_offset;
|
extern grub_uint64_t g_conf_replace_offset;
|
||||||
extern grub_uint64_t g_svd_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_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);
|
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);
|
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__ */
|
#endif /* __VENTOY_DEF_H__ */
|
||||||
|
|
||||||
|
@@ -49,6 +49,7 @@ static menu_password *g_pwd_head = NULL;
|
|||||||
static persistence_config *g_persistence_head = NULL;
|
static persistence_config *g_persistence_head = NULL;
|
||||||
static menu_alias *g_menu_alias_head = NULL;
|
static menu_alias *g_menu_alias_head = NULL;
|
||||||
static menu_class *g_menu_class_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 injection_config *g_injection_head = NULL;
|
||||||
static auto_memdisk *g_auto_memdisk_head = NULL;
|
static auto_memdisk *g_auto_memdisk_head = NULL;
|
||||||
static image_list *g_image_list_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;
|
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)
|
static int ventoy_plugin_conf_replace_entry(VTOY_JSON *json, const char *isodisk)
|
||||||
{
|
{
|
||||||
const char *isof = NULL;
|
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_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)
|
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 },
|
{ "injection", ventoy_plugin_injection_entry, ventoy_plugin_injection_check },
|
||||||
{ "auto_memdisk", ventoy_plugin_auto_memdisk_entry, ventoy_plugin_auto_memdisk_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_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 },
|
{ "conf_replace", ventoy_plugin_conf_replace_entry, ventoy_plugin_conf_replace_check },
|
||||||
{ "dud", ventoy_plugin_dud_entry, ventoy_plugin_dud_check },
|
{ "dud", ventoy_plugin_dud_entry, ventoy_plugin_dud_check },
|
||||||
{ "password", ventoy_plugin_pwd_entry, ventoy_plugin_pwd_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)
|
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;
|
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 ventoy_plugin_check_memdisk(const char *isopath)
|
||||||
{
|
{
|
||||||
int len;
|
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/
|
PATH=$PATH:$VT_DIR/GRUB2/INSTALL/bin/:$VT_DIR/GRUB2/INSTALL/sbin/
|
||||||
|
|
||||||
net_modules_legacy="net tftp http"
|
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"
|
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
|
if [ "$1" = "uefi" ]; then
|
||||||
|
@@ -11,25 +11,60 @@ mkdir SRC
|
|||||||
mkdir NBP
|
mkdir NBP
|
||||||
mkdir PXE
|
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/
|
/bin/cp -a ./MOD_SRC/grub-2.04 ./SRC/
|
||||||
|
|
||||||
cd ./SRC/grub-2.04
|
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
|
make distclean
|
||||||
./autogen.sh
|
./autogen.sh
|
||||||
./configure --with-platform=efi --prefix=$VT_GRUB_DIR/INSTALL/
|
./configure --with-platform=efi --prefix=$VT_GRUB_DIR/INSTALL/
|
||||||
make -j 16
|
make -j 16 || exit 1
|
||||||
sh install.sh uefi
|
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 ../../
|
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 $BUSYBOX_PATH/xzminidecaa64 $BUSYBOX_PATH/xzminidec
|
||||||
ln -s $VTOY_PATH/tool/dmsetupaa64 $VTOY_PATH/tool/dmsetup
|
ln -s $VTOY_PATH/tool/dmsetupaa64 $VTOY_PATH/tool/dmsetup
|
||||||
ln -s $VTOY_PATH/tool/lunzipaa64 $VTOY_PATH/tool/lunzip
|
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
|
else
|
||||||
echo "Use x86_64 busybox toolkit ..." >>$VTLOG
|
echo "Use x86_64 busybox toolkit ..." >>$VTLOG
|
||||||
echo x86_64 > $VTOY_PATH/ventoy_arch
|
echo x86_64 > $VTOY_PATH/ventoy_arch
|
||||||
ln -s $BUSYBOX_PATH/xzminidec64 $BUSYBOX_PATH/xzminidec
|
ln -s $BUSYBOX_PATH/xzminidec64 $BUSYBOX_PATH/xzminidec
|
||||||
ln -s $VTOY_PATH/tool/dmsetup64 $VTOY_PATH/tool/dmsetup
|
ln -s $VTOY_PATH/tool/dmsetup64 $VTOY_PATH/tool/dmsetup
|
||||||
ln -s $VTOY_PATH/tool/lunzip64 $VTOY_PATH/tool/lunzip
|
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
|
fi
|
||||||
else
|
else
|
||||||
echo "Use i386 busybox toolkit ..." >>$VTLOG
|
echo "Use i386 busybox toolkit ..." >>$VTLOG
|
||||||
|
@@ -21,8 +21,6 @@
|
|||||||
|
|
||||||
VTPATH_OLD=$PATH; PATH=$BUSYBOX_PATH:$VTOY_PATH/tool:$PATH
|
VTPATH_OLD=$PATH; PATH=$BUSYBOX_PATH:$VTOY_PATH/tool:$PATH
|
||||||
|
|
||||||
wait_for_usb_disk_ready
|
|
||||||
|
|
||||||
vtdiskname=$(get_ventoy_disk_name)
|
vtdiskname=$(get_ventoy_disk_name)
|
||||||
if [ "$vtdiskname" = "unknown" ]; then
|
if [ "$vtdiskname" = "unknown" ]; then
|
||||||
vtlog "ventoy disk not found"
|
vtlog "ventoy disk not found"
|
||||||
@@ -30,6 +28,14 @@ if [ "$vtdiskname" = "unknown" ]; then
|
|||||||
exit 0
|
exit 0
|
||||||
fi
|
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"
|
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/')
|
# 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
|
. $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
|
$SED "s/BOOT_TYPE=livecd/BOOT_TYPE=usb/g" -i /init
|
||||||
|
|
||||||
|
@@ -19,7 +19,7 @@
|
|||||||
|
|
||||||
. /ventoy/hook/ventoy-hook-lib.sh
|
. /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_blk 2>/dev/null
|
||||||
$BUSYBOX_PATH/modprobe virtio_pci 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 '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\ $BUSYBOX_PATH/sh $VTOY_PATH/hook/debian/puppy-disk.sh" -i /init
|
||||||
$SED "/^ *HAVE_PARTS=/a\ HAVE_PARTS='ventoy|iso9660'" -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
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
wait_for_usb_disk_ready
|
|
||||||
|
|
||||||
vtdiskname=$(get_ventoy_disk_name)
|
vtdiskname=$(get_ventoy_disk_name)
|
||||||
if [ "$vtdiskname" = "unknown" ]; then
|
if [ "$vtdiskname" = "unknown" ]; then
|
||||||
vtlog "ventoy disk not found"
|
vtlog "ventoy disk not found"
|
||||||
@@ -69,6 +67,14 @@ if [ "$vtdiskname" = "unknown" ]; then
|
|||||||
exit 0
|
exit 0
|
||||||
fi
|
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_os_install_dmsetup $vtdiskname
|
||||||
|
|
||||||
ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2" "noreplace"
|
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
|
if [ -n "$VT_BUS_USB" ]; then
|
||||||
vtlog "$1 is USB device"
|
vtlog "$1 is USB device"
|
||||||
|
echo /dev/$1 > /ventoy/list-devices-usb-part
|
||||||
else
|
else
|
||||||
vtlog "$1 is NOT USB device (bus $ID_BUS)"
|
vtlog "$1 is NOT USB device (bus $ID_BUS)"
|
||||||
|
|
||||||
|
@@ -74,6 +74,14 @@ ventoy_get_debian_distro() {
|
|||||||
echo 'kylin'; return
|
echo 'kylin'; return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -f /scripts/00-ver ]; then
|
||||||
|
if $GREP -q 'Bliss-OS' /scripts/00-ver; then
|
||||||
|
echo 'bliss'; return
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
echo 'default'
|
echo 'default'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -19,7 +19,7 @@
|
|||||||
|
|
||||||
. /ventoy/hook/ventoy-hook-lib.sh
|
. /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_blk 2>/dev/null
|
||||||
$BUSYBOX_PATH/modprobe virtio_pci 2>/dev/null
|
$BUSYBOX_PATH/modprobe virtio_pci 2>/dev/null
|
||||||
|
|
||||||
|
@@ -19,22 +19,43 @@
|
|||||||
|
|
||||||
. /ventoy/hook/ventoy-hook-lib.sh
|
. /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
|
exit 0
|
||||||
fi
|
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
|
# 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
|
if [ -e /sys/module/aoe ]; then
|
||||||
VBLADE_BIN=$(ventoy_get_vblade_bin)
|
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
|
while ! [ -b /dev/etherd/e9.0 ]; do
|
||||||
vtlog 'Wait for /dev/etherd/e9.0 ....'
|
vtlog 'Wait for /dev/etherd/e9.0 ....'
|
||||||
$SLEEP 0.1
|
sleep 2
|
||||||
done
|
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
|
ventoy_find_bin_run rebuildfstab
|
||||||
else
|
else
|
||||||
@@ -42,4 +63,6 @@ else
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# OK finish
|
# OK finish
|
||||||
|
PATH=$VTPATH_OLD
|
||||||
|
|
||||||
set_ventoy_hook_finish
|
set_ventoy_hook_finish
|
@@ -19,6 +19,5 @@
|
|||||||
|
|
||||||
. $VTOY_PATH/hook/ventoy-os-lib.sh
|
. $VTOY_PATH/hook/ventoy-os-lib.sh
|
||||||
|
|
||||||
ventoy_systemd_udevd_work_around
|
$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
|
||||||
ventoy_add_udev_rule_with_name "$VTOY_PATH/hook/tinycore/udev_disk_hook.sh %k" "90-ventoy.rules"
|
|
||||||
|
@@ -87,7 +87,7 @@ wait_for_usb_disk_ready() {
|
|||||||
usb_disk=$(get_ventoy_disk_name)
|
usb_disk=$(get_ventoy_disk_name)
|
||||||
vtlog "wait_for_usb_disk_ready $usb_disk ..."
|
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
|
vtpart2=${usb_disk}p2
|
||||||
else
|
else
|
||||||
vtpart2=${usb_disk}2
|
vtpart2=${usb_disk}2
|
||||||
@@ -102,6 +102,16 @@ wait_for_usb_disk_ready() {
|
|||||||
done
|
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() {
|
is_ventoy_disk() {
|
||||||
if $VTOY_PATH/tool/vtoydump -f $VTOY_PATH/ventoy_os_param -c "$1"; then
|
if $VTOY_PATH/tool/vtoydump -f $VTOY_PATH/ventoy_os_param -c "$1"; then
|
||||||
$BUSYBOX_PATH/true
|
$BUSYBOX_PATH/true
|
||||||
@@ -111,7 +121,7 @@ is_ventoy_disk() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
not_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}
|
vtDiskName=${1:0:-1}
|
||||||
else
|
else
|
||||||
vtDiskName=$1
|
vtDiskName=$1
|
||||||
@@ -476,7 +486,7 @@ ventoy_create_persistent_link() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ventoy_udev_disk_common_hook() {
|
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}"
|
VTDISK="${1:0:-2}"
|
||||||
else
|
else
|
||||||
VTDISK="${1:0:-1}"
|
VTDISK="${1:0:-1}"
|
||||||
@@ -548,7 +558,7 @@ is_inotify_ventoy_part() {
|
|||||||
if echo $1 | $GREP -q "2$"; then
|
if echo $1 | $GREP -q "2$"; then
|
||||||
if ! [ -e /sys/block/$1 ]; then
|
if ! [ -e /sys/block/$1 ]; then
|
||||||
if [ -e /sys/class/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}
|
vtShortName=${1:0:-2}
|
||||||
else
|
else
|
||||||
vtShortName=${1:0:-1}
|
vtShortName=${1:0:-1}
|
||||||
|
@@ -38,20 +38,9 @@ if $GREP -q aarch64 $VTOY_PATH/ventoy_arch; then
|
|||||||
fi
|
fi
|
||||||
done
|
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/vtoy_fuse_iso_aa64 $VTOY_PATH/tool/vtoy_fuse_iso
|
||||||
$BUSYBOX_PATH/cp -a $VTOY_PATH/tool/unsquashfs_aa64 $VTOY_PATH/tool/vtoy_unsquashfs
|
$BUSYBOX_PATH/cp -a $VTOY_PATH/tool/unsquashfs_aa64 $VTOY_PATH/tool/vtoy_unsquashfs
|
||||||
else
|
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
|
for vtdir in $(ls $VTOY_PATH/tool/vtoytool/); do
|
||||||
echo "try $VTOY_PATH/tool/vtoytool/$vtdir/ ..." >> $VTLOG
|
echo "try $VTOY_PATH/tool/vtoytool/$vtdir/ ..." >> $VTLOG
|
||||||
if $VTOY_PATH/tool/vtoytool/$vtdir/vtoytool_64 --install 2>>$VTLOG; then
|
if $VTOY_PATH/tool/vtoytool/$vtdir/vtoytool_64 --install 2>>$VTLOG; then
|
||||||
|
@@ -313,6 +313,12 @@ ventoy_get_os_type() {
|
|||||||
echo 'austrumi'; return
|
echo 'austrumi'; return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -f /DISTRO_SPECS ]; then
|
||||||
|
if $GREP -q '[Pp]uppy' /DISTRO_SPECS; then
|
||||||
|
echo 'debian'; return
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
echo "default"
|
echo "default"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -3,13 +3,15 @@
|
|||||||
size=1024
|
size=1024
|
||||||
fstype=ext4
|
fstype=ext4
|
||||||
label=casper-rw
|
label=casper-rw
|
||||||
|
config=''
|
||||||
|
|
||||||
print_usage() {
|
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 ' OPTION: (optional)'
|
||||||
echo ' -s size in MB, default is 1024'
|
echo ' -s size in MB, default is 1024'
|
||||||
echo ' -t filesystem type, default is ext4 ext2/ext3/ext4/xfs are supported now'
|
echo ' -t filesystem type, default is ext4 ext2/ext3/ext4/xfs are supported now'
|
||||||
echo ' -l label, default is casper-rw'
|
echo ' -l label, default is casper-rw'
|
||||||
|
echo ' -c configfile name inside the persistence file. File content is "/ union"'
|
||||||
echo ''
|
echo ''
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -23,6 +25,9 @@ while [ -n "$1" ]; do
|
|||||||
elif [ "$1" = "-l" ]; then
|
elif [ "$1" = "-l" ]; then
|
||||||
shift
|
shift
|
||||||
label=$1
|
label=$1
|
||||||
|
elif [ "$1" = "-c" ]; then
|
||||||
|
shift
|
||||||
|
config=$1
|
||||||
elif [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
|
elif [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
|
||||||
print_usage
|
print_usage
|
||||||
exit 0
|
exit 0
|
||||||
@@ -76,5 +81,18 @@ mkfs -t $fstype $fsopt -L $label $freeloop
|
|||||||
|
|
||||||
sync
|
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.
|
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/..
|
VTOY_PATH=$PWD/..
|
||||||
|
|
||||||
|
LOG=$VTOY_PATH/DOC/build.log
|
||||||
|
[ -f $LOG ] && rm -f $LOG
|
||||||
|
|
||||||
cd $VTOY_PATH/DOC
|
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
|
cd $VTOY_PATH/GRUB2
|
||||||
sh buildgrub.sh || exit 1
|
sh buildgrub.sh >> $LOG 2>&1 || exit 1
|
||||||
|
|
||||||
|
echo "build ipxe ..."
|
||||||
cd $VTOY_PATH/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
|
cd $VTOY_PATH/EDK2
|
||||||
sh buildedk.sh || exit 1
|
sh buildedk.sh >> $LOG 2>&1 || 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
|
|
||||||
|
|
||||||
|
|
||||||
cd $VTOY_PATH/FUSEISO
|
|
||||||
sh build_libfuse.sh
|
|
||||||
sh build.sh
|
|
||||||
|
|
||||||
cd $VTOY_PATH/SQUASHFS/SRC
|
#
|
||||||
sh build_lz4.sh
|
# We almost rarely modifiy these code, so no need to build them everytime
|
||||||
sh build_lzma.sh
|
# If you want to rebuild them, just uncomment them.
|
||||||
sh build_lzo.sh
|
#
|
||||||
sh build_zstd.sh
|
|
||||||
|
|
||||||
cd $VTOY_PATH/SQUASHFS/squashfs-tools-4.4/squashfs-tools
|
#cd $VTOY_PATH/VtoyTool
|
||||||
sh build.sh
|
#sh build.sh || exit 1
|
||||||
|
|
||||||
cd $VTOY_PATH/VBLADE/vblade-master
|
#cd $VTOY_PATH/vtoyfat/fat_io_lib
|
||||||
sh build.sh
|
#sh buildlib.sh
|
||||||
|
|
||||||
cd $VTOY_PATH/Ventoy2Disk/Ventoy2Disk/xz-embedded-20130513/userspace
|
#cd $VTOY_PATH/vtoyfat
|
||||||
make -f ventoy_makefile
|
#sh build.sh || exit 1
|
||||||
strip --strip-all xzminidec
|
|
||||||
rm -f $VTOY_PATH/IMG/cpio/ventoy/tool/xzminidec
|
#cd $VTOY_PATH/vtoygpt
|
||||||
cp -a xzminidec $VTOY_PATH/IMG/cpio/ventoy/tool/xzminidec
|
#sh build.sh || exit 1
|
||||||
make clean; rm -f *.o
|
|
||||||
|
#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
|
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'
|
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
|
*save_env: loadenv
|
||||||
*search: search
|
*search: search
|
||||||
*serial: serial
|
*serial: serial
|
||||||
|
*setkey: setkey
|
||||||
*sha1sum: hashsum
|
*sha1sum: hashsum
|
||||||
*sha256sum: hashsum
|
*sha256sum: hashsum
|
||||||
*sha512sum: hashsum
|
*sha512sum: hashsum
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
videotest: font video gfxmenu
|
videotest: font video gfxmenu
|
||||||
|
setkey: extcmd
|
||||||
odc: archelp
|
odc: archelp
|
||||||
loopback: extcmd
|
loopback: extcmd
|
||||||
macho:
|
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 {
|
submenu 'Check plugin json configuration (ventoy.json)' --class=debug_json {
|
||||||
menuentry 'Check global control plugin configuration' --class=debug_control {
|
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
|
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 {
|
menuentry 'Check boot conf replace plugin configuration' --class=debug_bootconf_replace {
|
||||||
set pager=1
|
set pager=1
|
||||||
vt_check_plugin_json $vt_plugin_path conf_replace $vtoy_iso_part
|
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
|
unset pager
|
||||||
}
|
}
|
||||||
|
|
||||||
menuentry 'Return to previous menu [Esc]' --class=vtoyret VTOY_RET {
|
menuentry 'Check custom boot plugin configuration' --class=debug_custom_boot {
|
||||||
echo 'Return ...'
|
set pager=1
|
||||||
}
|
vt_check_plugin_json $vt_plugin_path custom_boot $vtoy_iso_part
|
||||||
}
|
|
||||||
|
echo -e "\npress ENTER to exit ..."
|
||||||
|
read vtInputKey
|
||||||
submenu "Resolution Configuration" --class=debug_resolution {
|
unset pager
|
||||||
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 {
|
menuentry 'Return to previous menu [Esc]' --class=vtoyret VTOY_RET {
|
||||||
echo 'Return ...'
|
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 {
|
menuentry 'Return to previous menu [Esc]' --class=vtoyret VTOY_RET {
|
||||||
echo 'Return ...'
|
echo 'Return ...'
|
||||||
|
@@ -50,6 +50,21 @@ function ventoy_acpi_param {
|
|||||||
fi
|
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 {
|
function ventoy_power {
|
||||||
configfile $prefix/power.cfg
|
configfile $prefix/power.cfg
|
||||||
}
|
}
|
||||||
@@ -294,6 +309,8 @@ function distro_specify_initrd_file_phase2 {
|
|||||||
fi
|
fi
|
||||||
elif [ -f (loop)/antiX/initrd.gz ]; then
|
elif [ -f (loop)/antiX/initrd.gz ]; then
|
||||||
vt_linux_specify_initrd_file /antiX/initrd.gz
|
vt_linux_specify_initrd_file /antiX/initrd.gz
|
||||||
|
elif [ -f (loop)/360Disk/initrd.gz ]; then
|
||||||
|
vt_linux_specify_initrd_file /360Disk/initrd.gz
|
||||||
|
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
@@ -620,6 +637,12 @@ function uefi_linux_menu_func {
|
|||||||
|
|
||||||
vt_linux_chain_data "${1}${chosen_path}"
|
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
|
if [ -n "$vtoy_chain_mem_addr" ]; then
|
||||||
ventoy_acpi_param ${vtoy_chain_mem_addr} 2048
|
ventoy_acpi_param ${vtoy_chain_mem_addr} 2048
|
||||||
ventoy_cli_console
|
ventoy_cli_console
|
||||||
@@ -645,6 +668,14 @@ function uefi_unix_menu_func {
|
|||||||
fi
|
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 {
|
function uefi_iso_menu_func {
|
||||||
|
|
||||||
if [ -d (loop)/ ]; then
|
if [ -d (loop)/ ]; then
|
||||||
@@ -668,7 +699,7 @@ function uefi_iso_menu_func {
|
|||||||
set ventoy_fs_probe=udf
|
set ventoy_fs_probe=udf
|
||||||
else
|
else
|
||||||
set ventoy_fs_probe=iso9660
|
set ventoy_fs_probe=iso9660
|
||||||
vt_iso9660_nojoliet 0
|
ventoy_reset_nojoliet
|
||||||
fi
|
fi
|
||||||
|
|
||||||
loopback loop "${1}${chosen_path}"
|
loopback loop "${1}${chosen_path}"
|
||||||
@@ -857,7 +888,7 @@ function legacy_iso_menu_func {
|
|||||||
set ventoy_fs_probe=udf
|
set ventoy_fs_probe=udf
|
||||||
else
|
else
|
||||||
set ventoy_fs_probe=iso9660
|
set ventoy_fs_probe=iso9660
|
||||||
vt_iso9660_nojoliet 0
|
ventoy_reset_nojoliet
|
||||||
fi
|
fi
|
||||||
|
|
||||||
loopback loop "${1}${chosen_path}"
|
loopback loop "${1}${chosen_path}"
|
||||||
@@ -944,22 +975,41 @@ function ventoy_iso_busybox_ver {
|
|||||||
set ventoy_busybox_ver=64
|
set ventoy_busybox_ver=64
|
||||||
elif vt_str_begin "$vt_volume_id" "smgl-test-quinq-x86_64"; then
|
elif vt_str_begin "$vt_volume_id" "smgl-test-quinq-x86_64"; then
|
||||||
set ventoy_busybox_ver=64
|
set ventoy_busybox_ver=64
|
||||||
|
elif vt_str_begin "$vt_volume_id" "LDiagBootable"; then
|
||||||
|
set ventoy_busybox_ver=64
|
||||||
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function iso_common_menuentry {
|
function iso_common_menuentry {
|
||||||
unset vt_system_id
|
unset vt_system_id
|
||||||
unset vt_volume_id
|
unset vt_volume_id
|
||||||
|
|
||||||
vt_chosen_img_path vt_chosen_path vt_chosen_size
|
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
|
if vt_check_password "${vt_chosen_path}"; then
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if ventoy_vcfg_proc "${vt_chosen_path}"; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
if vt_str_begin "$vt_volume_id" "Avira"; then
|
if vt_str_begin "$vt_volume_id" "Avira"; then
|
||||||
vt_skip_svd "${vtoy_iso_part}${vt_chosen_path}"
|
vt_skip_svd "${vtoy_iso_part}${vt_chosen_path}"
|
||||||
fi
|
fi
|
||||||
@@ -1029,6 +1079,10 @@ function wim_common_menuentry {
|
|||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if ventoy_vcfg_proc "${vt_chosen_path}"; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
if vt_wim_check_bootable "${vtoy_iso_part}${vt_chosen_path}"; then
|
if vt_wim_check_bootable "${vtoy_iso_part}${vt_chosen_path}"; then
|
||||||
vt_wim_chain_data "${vtoy_iso_part}${vt_chosen_path}"
|
vt_wim_chain_data "${vtoy_iso_part}${vt_chosen_path}"
|
||||||
else
|
else
|
||||||
@@ -1064,6 +1118,10 @@ function efi_common_menuentry {
|
|||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if ventoy_vcfg_proc "${vt_chosen_path}"; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
vt_concat_efi_iso "${vtoy_iso_part}${vt_chosen_path}" vtoy_iso_buf
|
vt_concat_efi_iso "${vtoy_iso_part}${vt_chosen_path}" vtoy_iso_buf
|
||||||
|
|
||||||
ventoy_debug_pause
|
ventoy_debug_pause
|
||||||
@@ -1105,6 +1163,10 @@ function vhd_common_menuentry {
|
|||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if ventoy_vcfg_proc "${vt_chosen_path}"; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
vt_patch_vhdboot "$vt_chosen_path"
|
vt_patch_vhdboot "$vt_chosen_path"
|
||||||
|
|
||||||
ventoy_debug_pause
|
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}
|
linux16 $vtoy_path/ipxe.krn ${vtdebug_flag} bios80 sector512 mem:${vtoy_chain_mem_addr}:size:${vtoy_chain_mem_size}
|
||||||
boot
|
boot
|
||||||
else
|
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
|
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}
|
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
|
boot
|
||||||
@@ -1193,6 +1257,10 @@ function vtoy_common_menuentry {
|
|||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if ventoy_vcfg_proc "${vt_chosen_path}"; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
vtoyboot_common_func "${vtoy_iso_part}${vt_chosen_path}"
|
vtoyboot_common_func "${vtoy_iso_part}${vt_chosen_path}"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1396,6 +1464,10 @@ function img_common_menuentry {
|
|||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if ventoy_vcfg_proc "${vt_chosen_path}"; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
if [ -d (vtimghd)/ ]; then
|
if [ -d (vtimghd)/ ]; then
|
||||||
loopback -d vtimghd
|
loopback -d vtimghd
|
||||||
fi
|
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
|
#ACPI not compatible with Window7/8, so disable by default
|
||||||
set VTOY_PARAM_NO_ACPI=1
|
set VTOY_PARAM_NO_ACPI=1
|
||||||
@@ -1621,6 +1693,17 @@ if [ -n "$VTOY_PLUGIN_SYNTAX_ERROR" ]; then
|
|||||||
read vtInputKey
|
read vtInputKey
|
||||||
fi
|
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 necessary variable
|
||||||
export theme
|
export theme
|
||||||
export gfxmode
|
export gfxmode
|
||||||
|
@@ -43,6 +43,7 @@
|
|||||||
*save_env: loadenv
|
*save_env: loadenv
|
||||||
*search: search
|
*search: search
|
||||||
*serial: serial
|
*serial: serial
|
||||||
|
*setkey: setkey
|
||||||
*setpci: setpci
|
*setpci: setpci
|
||||||
*sha1sum: hashsum
|
*sha1sum: hashsum
|
||||||
*sha256sum: hashsum
|
*sha256sum: hashsum
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
videotest: font video gfxmenu
|
videotest: font video gfxmenu
|
||||||
|
setkey: extcmd
|
||||||
odc: archelp
|
odc: archelp
|
||||||
loopback: extcmd
|
loopback: extcmd
|
||||||
macho:
|
macho:
|
||||||
|
Binary file not shown.
@@ -47,6 +47,7 @@
|
|||||||
*search: search
|
*search: search
|
||||||
*sendkey: sendkey
|
*sendkey: sendkey
|
||||||
*serial: serial
|
*serial: serial
|
||||||
|
*setkey: setkey
|
||||||
*setpci: setpci
|
*setpci: setpci
|
||||||
*sha1sum: hashsum
|
*sha1sum: hashsum
|
||||||
*sha256sum: hashsum
|
*sha256sum: hashsum
|
||||||
|
Binary file not shown.
@@ -1,4 +1,5 @@
|
|||||||
videotest: font video gfxmenu
|
videotest: font video gfxmenu
|
||||||
|
setkey: extcmd
|
||||||
odc: archelp
|
odc: archelp
|
||||||
loopback: extcmd
|
loopback: extcmd
|
||||||
macho:
|
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
|
*save_env: loadenv
|
||||||
*search: search
|
*search: search
|
||||||
*serial: serial
|
*serial: serial
|
||||||
|
*setkey: setkey
|
||||||
*setpci: setpci
|
*setpci: setpci
|
||||||
*sha1sum: hashsum
|
*sha1sum: hashsum
|
||||||
*sha256sum: hashsum
|
*sha256sum: hashsum
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
videotest: font video gfxmenu
|
videotest: font video gfxmenu
|
||||||
|
setkey: extcmd
|
||||||
odc: archelp
|
odc: archelp
|
||||||
loopback: extcmd
|
loopback: extcmd
|
||||||
macho:
|
macho:
|
||||||
|
Binary file not shown.
@@ -6,9 +6,9 @@ print_usage() {
|
|||||||
|
|
||||||
echo 'Usage: Ventoy2Disk.sh CMD [ OPTION ] /dev/sdX'
|
echo 'Usage: Ventoy2Disk.sh CMD [ OPTION ] /dev/sdX'
|
||||||
echo ' CMD:'
|
echo ' CMD:'
|
||||||
echo ' -i install ventoy to sdX (fail if disk already installed with ventoy)'
|
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 ' -I force install Ventoy to sdX (no matter installed or not)'
|
||||||
echo ' -u update ventoy in sdX'
|
echo ' -u update Ventoy in sdX'
|
||||||
echo ' -l list Ventoy information in sdX'
|
echo ' -l list Ventoy information in sdX'
|
||||||
echo ''
|
echo ''
|
||||||
echo ' OPTION: (optional)'
|
echo ' OPTION: (optional)'
|
||||||
@@ -75,8 +75,8 @@ fi
|
|||||||
if [ -e /sys/class/block/${DISK#/dev/}/start ]; then
|
if [ -e /sys/class/block/${DISK#/dev/}/start ]; then
|
||||||
vterr "$DISK is a partition, please use the whole disk."
|
vterr "$DISK is a partition, please use the whole disk."
|
||||||
echo "For example:"
|
echo "For example:"
|
||||||
vterr " sudo sh Ventoy2Disk.sh -i /dev/sdX1 <=== This is wrong"
|
vterr " sudo sh Ventoy2Disk.sh -i /dev/sdb1 <=== This is wrong"
|
||||||
vtinfo " sudo sh Ventoy2Disk.sh -i /dev/sdX <=== This is right"
|
vtinfo " sudo sh Ventoy2Disk.sh -i /dev/sdb <=== This is right"
|
||||||
echo ""
|
echo ""
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@@ -90,22 +90,13 @@ if [ -n "$RESERVE_SPACE" -a "$MODE" = "install" ]; then
|
|||||||
fi
|
fi
|
||||||
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"
|
vtdebug "MODE=$MODE FORCE=$FORCE RESERVE_SPACE=$RESERVE_SPACE RESERVE_SIZE_MB=$RESERVE_SIZE_MB"
|
||||||
|
|
||||||
#check tools
|
#check tools
|
||||||
if check_tool_work_ok; then
|
if check_tool_work_ok; then
|
||||||
vtdebug "check tool work ok"
|
vtdebug "check tool work ok"
|
||||||
else
|
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
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -121,17 +112,11 @@ if [ "$MODE" = "list" ]; then
|
|||||||
echo "Disk Partition Style : MBR"
|
echo "Disk Partition Style : MBR"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
vtPART2=$(get_disk_part_name $DISK 2)
|
if check_disk_secure_boot $DISK; then
|
||||||
rm -rf ./tmpmntp2 && mkdir ./tmpmntp2
|
|
||||||
mount $vtPART2 ./tmpmntp2 > /dev/null 2>&1
|
|
||||||
|
|
||||||
if [ -e ./tmpmntp2/EFI/BOOT/MokManager.efi ]; then
|
|
||||||
echo "Secure Boot Support : YES"
|
echo "Secure Boot Support : YES"
|
||||||
else
|
else
|
||||||
echo "Secure Boot Support : NO"
|
echo "Secure Boot Support : NO"
|
||||||
fi
|
fi
|
||||||
umount ./tmpmntp2 > /dev/null 2>&1
|
|
||||||
rm -rf ./tmpmntp2
|
|
||||||
else
|
else
|
||||||
echo "Ventoy Version: NA"
|
echo "Ventoy Version: NA"
|
||||||
fi
|
fi
|
||||||
@@ -140,11 +125,7 @@ if [ "$MODE" = "list" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
#check mountpoint
|
#check mountpoint
|
||||||
grep "^$DISK" /proc/mounts | while read mtline; do
|
check_umount_disk "$DISK"
|
||||||
mtpnt=$(echo $mtline | awk '{print $2}')
|
|
||||||
vtdebug "Trying to umount $mtpnt ..."
|
|
||||||
umount $mtpnt >/dev/null 2>&1
|
|
||||||
done
|
|
||||||
|
|
||||||
if grep "$DISK" /proc/mounts; then
|
if grep "$DISK" /proc/mounts; then
|
||||||
vterr "$DISK is already mounted, please umount it first!"
|
vterr "$DISK is already mounted, please umount it first!"
|
||||||
@@ -159,20 +140,30 @@ if swapon --help 2>&1 | grep -q '^ \-s,'; then
|
|||||||
fi
|
fi
|
||||||
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
|
#check tmp_mnt directory
|
||||||
if [ -d ./tmp_mnt ]; then
|
if [ -d ./tmp_mnt ]; then
|
||||||
vtdebug "There is a tmp_mnt directory, now delete it."
|
vtdebug "There is a tmp_mnt directory, now delete it."
|
||||||
umount ./tmp_mnt >/dev/null 2>&1
|
umount ./tmp_mnt >/dev/null 2>&1
|
||||||
rm -rf ./tmp_mnt
|
rm -rf ./tmp_mnt
|
||||||
if [ -d ./tmp_mnt ]; then
|
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
|
exit 1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
if [ "$MODE" = "install" ]; then
|
if [ "$MODE" = "install" ]; then
|
||||||
vtdebug "install ventoy ..."
|
vtdebug "install Ventoy ..."
|
||||||
|
|
||||||
if [ -n "$VTGPT" ]; then
|
if [ -n "$VTGPT" ]; then
|
||||||
if parted -v > /dev/null 2>&1; then
|
if parted -v > /dev/null 2>&1; then
|
||||||
@@ -198,7 +189,7 @@ if [ "$MODE" = "install" ]; then
|
|||||||
if [ -z "$FORCE" ]; then
|
if [ -z "$FORCE" ]; then
|
||||||
vtwarn "$DISK already contains a Ventoy with version $version"
|
vtwarn "$DISK already contains a Ventoy with version $version"
|
||||||
vtwarn "Use -u option to do a safe upgrade operation."
|
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 ""
|
vtwarn ""
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
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
|
xzcat ./boot/core.img.xz | dd status=none conv=fsync of=$DISK bs=512 count=2047 seek=1
|
||||||
fi
|
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
|
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
|
#test UUID
|
||||||
@@ -322,25 +316,19 @@ if [ "$MODE" = "install" ]; then
|
|||||||
vtinfo "esp partition processing ..."
|
vtinfo "esp partition processing ..."
|
||||||
|
|
||||||
sleep 1
|
sleep 1
|
||||||
mtpnt=$(grep "^${PART2}" /proc/mounts | awk '{print $2}')
|
check_umount_disk "$DISK"
|
||||||
if [ -n "$mtpnt" ]; then
|
|
||||||
umount $mtpnt >/dev/null 2>&1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$SECUREBOOT" != "YES" ]; then
|
if [ "$SECUREBOOT" != "YES" ]; then
|
||||||
mkdir ./tmp_mnt
|
mkdir ./tmp_mnt
|
||||||
|
|
||||||
vtdebug "mounting part2 ...."
|
vtdebug "mounting part2 ...."
|
||||||
for tt in 1 2 3; do
|
for tt in 1 2 3 4 5; do
|
||||||
if mount ${PART2} ./tmp_mnt; then
|
if mount ${PART2} ./tmp_mnt > /dev/null 2>&1; then
|
||||||
vtdebug "mounting part2 success"
|
vtdebug "mounting part2 success"
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
|
|
||||||
mtpnt=$(grep "^${PART2}" /proc/mounts | awk '{print $2}')
|
check_umount_disk "$DISK"
|
||||||
if [ -n "$mtpnt" ]; then
|
|
||||||
umount $mtpnt >/dev/null 2>&1
|
|
||||||
fi
|
|
||||||
sleep 2
|
sleep 2
|
||||||
done
|
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/grubx64_real.efi ./tmp_mnt/EFI/BOOT/BOOTX64.EFI
|
||||||
mv ./tmp_mnt/EFI/BOOT/grubia32_real.efi ./tmp_mnt/EFI/BOOT/BOOTIA32.EFI
|
mv ./tmp_mnt/EFI/BOOT/grubia32_real.efi ./tmp_mnt/EFI/BOOT/BOOTIA32.EFI
|
||||||
|
|
||||||
|
sync
|
||||||
|
|
||||||
for tt in 1 2 3; do
|
for tt in 1 2 3; do
|
||||||
if umount ./tmp_mnt; then
|
if umount ./tmp_mnt; then
|
||||||
vtdebug "umount part2 success"
|
vtdebug "umount part2 success"
|
||||||
@@ -371,11 +361,11 @@ if [ "$MODE" = "install" ]; then
|
|||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
else
|
else
|
||||||
vtdebug "update ventoy ..."
|
vtdebug "update Ventoy ..."
|
||||||
|
|
||||||
oldver=$(get_disk_ventoy_version $DISK)
|
oldver=$(get_disk_ventoy_version $DISK)
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
vtwarn "$DISK does not contain ventoy or data corupted"
|
vtwarn "$DISK does not contain Ventoy or data corrupted"
|
||||||
echo ""
|
echo ""
|
||||||
vtwarn "Please use -i option if you want to install ventoy to $DISK"
|
vtwarn "Please use -i option if you want to install ventoy to $DISK"
|
||||||
echo ""
|
echo ""
|
||||||
@@ -444,20 +434,26 @@ else
|
|||||||
dd status=none conv=fsync if=./rsvdata.bin seek=2040 bs=512 count=8 of=${DISK}
|
dd status=none conv=fsync if=./rsvdata.bin seek=2040 bs=512 count=8 of=${DISK}
|
||||||
rm -f ./rsvdata.bin
|
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
|
xzcat ./ventoy/ventoy.disk.img.xz | dd status=none conv=fsync of=$DISK bs=512 count=$VENTOY_SECTOR_NUM seek=$part2_start
|
||||||
|
|
||||||
sync
|
sync
|
||||||
|
|
||||||
if [ "$SECUREBOOT" != "YES" ]; then
|
if [ "$SECUREBOOT" != "YES" ]; then
|
||||||
mkdir ./tmp_mnt
|
mkdir ./tmp_mnt
|
||||||
|
|
||||||
vtdebug "mounting part2 ...."
|
vtdebug "mounting part2 ...."
|
||||||
for tt in 1 2 3; do
|
for tt in 1 2 3 4 5; do
|
||||||
if mount ${PART2} ./tmp_mnt; then
|
check_umount_disk "$DISK"
|
||||||
|
|
||||||
|
if mount ${PART2} ./tmp_mnt > /dev/null 2>&1; then
|
||||||
vtdebug "mounting part2 success"
|
vtdebug "mounting part2 success"
|
||||||
break
|
break
|
||||||
|
else
|
||||||
|
vtdebug "mounting part2 failed, now wait and retry..."
|
||||||
fi
|
fi
|
||||||
sleep 2
|
sleep 2
|
||||||
done
|
done
|
||||||
|
|
||||||
rm -f ./tmp_mnt/EFI/BOOT/BOOTX64.EFI
|
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/grubx64_real.efi ./tmp_mnt/EFI/BOOT/BOOTX64.EFI
|
||||||
mv ./tmp_mnt/EFI/BOOT/grubia32_real.efi ./tmp_mnt/EFI/BOOT/BOOTIA32.EFI
|
mv ./tmp_mnt/EFI/BOOT/grubia32_real.efi ./tmp_mnt/EFI/BOOT/BOOTIA32.EFI
|
||||||
|
|
||||||
|
sync
|
||||||
|
|
||||||
for tt in 1 2 3; do
|
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"
|
vtdebug "umount part2 success"
|
||||||
rm -rf ./tmp_mnt
|
rm -rf ./tmp_mnt
|
||||||
break
|
break
|
||||||
@@ -484,7 +481,7 @@ else
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
vtinfo "Update Ventoy to $DISK successfully finished."
|
vtinfo "Update Ventoy on $DISK successfully finished."
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
@@ -90,11 +90,21 @@ get_disk_part_name() {
|
|||||||
echo ${DISK}p${2}
|
echo ${DISK}p${2}
|
||||||
elif echo $DISK | grep -q "/dev/mmcblk[0-9]"; then
|
elif echo $DISK | grep -q "/dev/mmcblk[0-9]"; then
|
||||||
echo ${DISK}p${2}
|
echo ${DISK}p${2}
|
||||||
|
elif echo $DISK | grep -q "/dev/nbd[0-9]"; then
|
||||||
|
echo ${DISK}p${2}
|
||||||
else
|
else
|
||||||
echo ${DISK}${2}
|
echo ${DISK}${2}
|
||||||
fi
|
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() {
|
get_ventoy_version_from_cfg() {
|
||||||
if grep -q 'set.*VENTOY_VERSION=' $1; then
|
if grep -q 'set.*VENTOY_VERSION=' $1; then
|
||||||
@@ -216,6 +226,14 @@ format_ventoy_disk_mbr() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
part2_start_sector=$(expr $part1_end_sector + 1)
|
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)
|
part2_end_sector=$(expr $part2_start_sector + $VENTOY_SECTOR_NUM - 1)
|
||||||
|
|
||||||
export part2_start_sector
|
export part2_start_sector
|
||||||
@@ -300,6 +318,8 @@ EOF
|
|||||||
|
|
||||||
echo "create efi fat fs $PART2 ..."
|
echo "create efi fat fs $PART2 ..."
|
||||||
for i in 0 1 2 3 4 5 6 7 8 9; do
|
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
|
if mkfs.vfat -F 16 -n VTOYEFI $PART2; then
|
||||||
echo 'success'
|
echo 'success'
|
||||||
break
|
break
|
||||||
@@ -331,6 +351,14 @@ format_ventoy_disk_gpt() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
part2_start_sector=$(expr $part1_end_sector + 1)
|
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)
|
part2_end_sector=$(expr $part2_start_sector + $VENTOY_SECTOR_NUM - 1)
|
||||||
|
|
||||||
export part2_start_sector
|
export part2_start_sector
|
||||||
@@ -395,7 +423,10 @@ format_ventoy_disk_gpt() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
echo "create efi fat fs $PART2 ..."
|
echo "create efi fat fs $PART2 ..."
|
||||||
|
|
||||||
for i in 0 1 2 3 4 5 6 7 8 9; do
|
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
|
if mkfs.vfat -F 16 -n VTOYEFI $PART2; then
|
||||||
echo 'success'
|
echo 'success'
|
||||||
break
|
break
|
||||||
|
Binary file not shown.
Binary file not shown.
@@ -1,5 +1,11 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
if [ "$1" = "CI" ]; then
|
||||||
|
OPT='-dR'
|
||||||
|
else
|
||||||
|
OPT='-a'
|
||||||
|
fi
|
||||||
|
|
||||||
dos2unix -q ./tool/ventoy_lib.sh
|
dos2unix -q ./tool/ventoy_lib.sh
|
||||||
dos2unix -q ./tool/VentoyWorker.sh
|
dos2unix -q ./tool/VentoyWorker.sh
|
||||||
|
|
||||||
@@ -19,6 +25,11 @@ sh mkcpio.sh
|
|||||||
sh mkloopex.sh
|
sh mkloopex.sh
|
||||||
cd -
|
cd -
|
||||||
|
|
||||||
|
cd ../LinuxGUI
|
||||||
|
sh language.sh || exit 1
|
||||||
|
sh build.sh
|
||||||
|
cd -
|
||||||
|
|
||||||
|
|
||||||
LOOP=$(losetup -f)
|
LOOP=$(losetup -f)
|
||||||
|
|
||||||
@@ -49,21 +60,21 @@ mount ${LOOP}p2 $tmpmnt
|
|||||||
mkdir -p $tmpmnt/grub
|
mkdir -p $tmpmnt/grub
|
||||||
|
|
||||||
# First copy grub.cfg file, to make it locate at front of the part2
|
# 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
|
ls -1 ./grub/ | grep -v 'grub\.cfg' | while read line; do
|
||||||
cp -a ./grub/$line $tmpmnt/grub/
|
cp $OPT ./grub/$line $tmpmnt/grub/
|
||||||
done
|
done
|
||||||
|
|
||||||
cp -a ./ventoy $tmpmnt/
|
cp $OPT ./ventoy $tmpmnt/
|
||||||
cp -a ./EFI $tmpmnt/
|
cp $OPT ./EFI $tmpmnt/
|
||||||
cp -a ./tool/ENROLL_THIS_KEY_IN_MOKMANAGER.cer $tmpmnt/
|
cp $OPT ./tool/ENROLL_THIS_KEY_IN_MOKMANAGER.cer $tmpmnt/
|
||||||
|
|
||||||
|
|
||||||
mkdir -p $tmpmnt/tool
|
mkdir -p $tmpmnt/tool
|
||||||
cp -a ./tool/i386/mount.exfat-fuse $tmpmnt/tool/mount.exfat-fuse_i386
|
cp $OPT ./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 $OPT ./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/aarch64/mount.exfat-fuse $tmpmnt/tool/mount.exfat-fuse_aarch64
|
||||||
|
|
||||||
rm -f $tmpmnt/grub/i386-pc/*.img
|
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
|
dd if=$LOOP of=$tmpdir/boot/core.img bs=512 count=2047 skip=1 status=none
|
||||||
xz --check=crc32 $tmpdir/boot/core.img
|
xz --check=crc32 $tmpdir/boot/core.img
|
||||||
|
|
||||||
cp -a ./tool $tmpdir/
|
cp $OPT ./tool $tmpdir/
|
||||||
rm -f $tmpdir/ENROLL_THIS_KEY_IN_MOKMANAGER.cer
|
rm -f $tmpdir/ENROLL_THIS_KEY_IN_MOKMANAGER.cer
|
||||||
cp -a Ventoy2Disk.sh $tmpdir/
|
cp $OPT Ventoy2Disk.sh $tmpdir/
|
||||||
cp -a README $tmpdir/
|
cp $OPT VentoyWeb.sh $tmpdir/
|
||||||
cp -a plugin $tmpdir/
|
cp $OPT README $tmpdir/
|
||||||
cp -a CreatePersistentImg.sh $tmpdir/
|
cp $OPT plugin $tmpdir/
|
||||||
|
cp $OPT CreatePersistentImg.sh $tmpdir/
|
||||||
dos2unix -q $tmpdir/Ventoy2Disk.sh
|
dos2unix -q $tmpdir/Ventoy2Disk.sh
|
||||||
|
dos2unix -q $tmpdir/VentoyWeb.sh
|
||||||
dos2unix -q $tmpdir/CreatePersistentImg.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
|
#32MB disk img
|
||||||
dd status=none if=$LOOP of=$tmpdir/ventoy/ventoy.disk.img bs=512 count=$VENTOY_SECTOR_NUM skip=$part2_start_sector
|
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
|
xz --check=crc32 $tmpdir/ventoy/ventoy.disk.img
|
||||||
@@ -113,6 +129,7 @@ done
|
|||||||
find $tmpdir/ -type d -exec chmod 755 "{}" +
|
find $tmpdir/ -type d -exec chmod 755 "{}" +
|
||||||
find $tmpdir/ -type f -exec chmod 644 "{}" +
|
find $tmpdir/ -type f -exec chmod 644 "{}" +
|
||||||
chmod +x $tmpdir/Ventoy2Disk.sh
|
chmod +x $tmpdir/Ventoy2Disk.sh
|
||||||
|
chmod +x $tmpdir/VentoyWeb.sh
|
||||||
chmod +x $tmpdir/CreatePersistentImg.sh
|
chmod +x $tmpdir/CreatePersistentImg.sh
|
||||||
|
|
||||||
tar -czvf ventoy-${curver}-linux.tar.gz $tmpdir
|
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
|
rm -f ventoy-${curver}-windows.zip
|
||||||
cp -a Ventoy2Disk*.exe $tmpdir/
|
cp $OPT Ventoy2Disk*.exe $tmpdir/
|
||||||
cp -a $LANG_DIR/languages.ini $tmpdir/ventoy/
|
cp $OPT $LANG_DIR/languages.ini $tmpdir/ventoy/
|
||||||
rm -rf $tmpdir/tool
|
rm -rf $tmpdir/tool
|
||||||
rm -f $tmpdir/*.sh
|
rm -f $tmpdir/*.sh
|
||||||
|
rm -rf $tmpdir/WebUI
|
||||||
rm -f $tmpdir/README
|
rm -f $tmpdir/README
|
||||||
|
|
||||||
|
|
||||||
@@ -131,8 +149,9 @@ zip -r ventoy-${curver}-windows.zip $tmpdir/
|
|||||||
|
|
||||||
rm -rf $tmpdir
|
rm -rf $tmpdir
|
||||||
|
|
||||||
|
echo "=============== run livecd.sh ==============="
|
||||||
cd ../LiveCD
|
cd ../LiveCD
|
||||||
sh livecd.sh
|
sh livecd.sh $1
|
||||||
cd $CurDir
|
cd $CurDir
|
||||||
|
|
||||||
mv ../LiveCD/ventoy*.iso ./
|
mv ../LiveCD/ventoy*.iso ./
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
rm -rf ipxe-3fe683e
|
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/bin
|
||||||
rm -rf ./ipxe-3fe683e/src/drivers
|
rm -rf ./ipxe-3fe683e/src/drivers
|
||||||
@@ -11,6 +11,7 @@ rm -rf ./ipxe-3fe683e/src/drivers
|
|||||||
|
|
||||||
cd ipxe-3fe683e/src
|
cd ipxe-3fe683e/src
|
||||||
|
|
||||||
|
echo '========= build IPXE =========='
|
||||||
sh build.sh
|
sh build.sh
|
||||||
|
|
||||||
cd ../../
|
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