mirror of
https://github.com/ventoy/Ventoy.git
synced 2025-09-18 09:51:15 +00:00
Compare commits
31 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
a129996756 | ||
|
8632e56561 | ||
|
8f711c9db9 | ||
|
b0cacd6686 | ||
|
13b2192a59 | ||
|
807d313cd5 | ||
|
2f45cea46e | ||
|
7cdc7386a8 | ||
|
44bb72ca0a | ||
|
5e6b0800bd | ||
|
01c902e026 | ||
|
a68629a931 | ||
|
c84855bbee | ||
|
f2ed81b004 | ||
|
6434e453b2 | ||
|
041ccb7435 | ||
|
bfe194c190 | ||
|
fb7008f49a | ||
|
463d0b2004 | ||
|
4707b76bb2 | ||
|
ff0ad76d8d | ||
|
c8b2cca7c2 | ||
|
afbeba7cf5 | ||
|
bb3789f6fc | ||
|
ea8a9e83ab | ||
|
8b9901a6a5 | ||
|
0ac83bffda | ||
|
40c0504dfb | ||
|
ebaa4d954a | ||
|
2936666a78 | ||
|
784e3ae879 |
1166
BUSYBOX/aarch64_hexdump.config
Normal file
1166
BUSYBOX/aarch64_hexdump.config
Normal file
File diff suppressed because it is too large
Load Diff
1166
BUSYBOX/aarch64_xzcat.config
Normal file
1166
BUSYBOX/aarch64_xzcat.config
Normal file
File diff suppressed because it is too large
Load Diff
36
BUSYBOX/build.txt
Normal file
36
BUSYBOX/build.txt
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
======== How to build ash/hexdump/xzcat for aarch64 ========
|
||||||
|
#How to get ash.config/hexdump.cofig/xzcat.config
|
||||||
|
#ARCH=arm64 CROSS_COMPILE=aarch64-linux- make allnoconfig
|
||||||
|
#ARCH=arm64 CROSS_COMPILE=aarch64-linux- make menuconfig
|
||||||
|
#----> enable static build
|
||||||
|
#----> enable xzcat
|
||||||
|
#get aarch64_xzcat.config
|
||||||
|
|
||||||
|
tar xf busybox-1.32.0.tar.bz2
|
||||||
|
cd busybox-1.32.0
|
||||||
|
copy aarch64_xzcat.config as .config
|
||||||
|
ARCH=arm64 CROSS_COMPILE=aarch64-linux- make
|
||||||
|
rename ./busybox to xzcat
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
======== How to build ash/hexdump/xzcat for x86_64 ==========
|
||||||
|
#How to get ash.config/hexdump.cofig/xzcat.config
|
||||||
|
#make allnoconfig
|
||||||
|
#make menuconfig
|
||||||
|
#----> enable static build
|
||||||
|
#----> enable xzcat
|
||||||
|
#get x86_64_xzcat.config
|
||||||
|
|
||||||
|
|
||||||
|
tar xf busybox-1.32.0.tar.bz2
|
||||||
|
cd busybox-1.32.0
|
||||||
|
copy x86_64_xzcat.config as .config
|
||||||
|
modify Makefile
|
||||||
|
CC = gcc -specs "/usr/local/musl/lib/musl-gcc.specs"
|
||||||
|
MODFLAGS = -DMODULE -specs "/usr/local/musl/lib/musl-gcc.specs"
|
||||||
|
make
|
||||||
|
rename ./busybox to xzcat
|
||||||
|
|
||||||
|
|
||||||
|
|
@@ -2,17 +2,24 @@
|
|||||||
|
|
||||||
DSTDIR=../../IMG/cpio/ventoy/busybox
|
DSTDIR=../../IMG/cpio/ventoy/busybox
|
||||||
|
|
||||||
rm -f vtchmod32 vtchmod64
|
rm -f vtchmod32 vtchmod64 vtchmod64_musl vtchmodaa64
|
||||||
rm -f $DSTDIR/vtchmod32 $DSTDIR/vtchmod64
|
rm -f $DSTDIR/vtchmod32 $DSTDIR/vtchmod64 $DSTDIR/vtchmodaa64
|
||||||
|
|
||||||
/opt/diet32/bin/diet gcc -Os -m32 vtchmod.c -o vtchmod32
|
/opt/diet32/bin/diet gcc -Os -m32 vtchmod.c -o vtchmod32
|
||||||
/opt/diet64/bin/diet gcc -Os vtchmod.c -o vtchmod64
|
/opt/diet64/bin/diet gcc -Os vtchmod.c -o vtchmod64
|
||||||
|
aarch64-linux-gcc -Os -static vtchmod.c -o vtchmodaa64
|
||||||
|
aarch64-linux-strip --strip-all vtchmodaa64
|
||||||
|
|
||||||
|
gcc -specs "/usr/local/musl/lib/musl-gcc.specs" -Os -static vtchmod.c -o vtchmod64_musl
|
||||||
|
strip --strip-all vtchmod64_musl
|
||||||
|
|
||||||
chmod 777 vtchmod32
|
chmod 777 vtchmod32
|
||||||
chmod 777 vtchmod64
|
chmod 777 vtchmod64
|
||||||
|
chmod 777 vtchmodaa64
|
||||||
|
chmod 777 vtchmod64_musl
|
||||||
|
|
||||||
cp -a vtchmod32 $DSTDIR/
|
cp -a vtchmod32 $DSTDIR/
|
||||||
cp -a vtchmod64 $DSTDIR/
|
cp -a vtchmod64 $DSTDIR/
|
||||||
|
cp -a vtchmodaa64 $DSTDIR/
|
||||||
|
cp -a vtchmod64_musl $DSTDIR/
|
||||||
|
|
||||||
|
BIN
BUSYBOX/chmod/vtchmod64_musl
Normal file
BIN
BUSYBOX/chmod/vtchmod64_musl
Normal file
Binary file not shown.
BIN
BUSYBOX/chmod/vtchmodaa64
Normal file
BIN
BUSYBOX/chmod/vtchmodaa64
Normal file
Binary file not shown.
1181
BUSYBOX/config
Normal file
1181
BUSYBOX/config
Normal file
File diff suppressed because it is too large
Load Diff
1166
BUSYBOX/x86_64_ash.config
Normal file
1166
BUSYBOX/x86_64_ash.config
Normal file
File diff suppressed because it is too large
Load Diff
1166
BUSYBOX/x86_64_hexdump.config
Normal file
1166
BUSYBOX/x86_64_hexdump.config
Normal file
File diff suppressed because it is too large
Load Diff
1166
BUSYBOX/x86_64_xzcat.config
Normal file
1166
BUSYBOX/x86_64_xzcat.config
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,49 +1,60 @@
|
|||||||
Build a static linked, small dmsetup tool
|
Build a static linked, small dmsetup tool
|
||||||
|
|
||||||
======== Source Code ========
|
======== Source Code ========
|
||||||
use an old version of dmsetup
|
use an old version of dmsetup
|
||||||
http://vault.centos.org/5.3/os/SRPMS/device-mapper-1.02.28-2.el5.src.rpm
|
http://vault.centos.org/5.3/os/SRPMS/device-mapper-1.02.28-2.el5.src.rpm
|
||||||
https://www.fefe.de/dietlibc/dietlibc-0.34.tar.xz
|
https://www.fefe.de/dietlibc/dietlibc-0.34.tar.xz
|
||||||
|
|
||||||
======== Build Envrioment ========
|
======== Build Envrioment ========
|
||||||
build for 32bit, static linked with dietlibc
|
build for 32bit, static linked with dietlibc
|
||||||
1. install centos 6.10 i386 with CentOS-6.10-i386-bin-DVD1.iso
|
1. install centos 6.10 i386 with CentOS-6.10-i386-bin-DVD1.iso
|
||||||
2. yum install gcc kernel-devel package
|
2. yum install gcc kernel-devel package
|
||||||
3. install dietc libc (just make && make install)
|
3. install dietc libc (just make && make install)
|
||||||
4. export PATH=$PATH:/opt/diet/bin
|
4. export PATH=$PATH:/opt/diet/bin
|
||||||
|
|
||||||
======== Build Step ========
|
======== Build Step ========
|
||||||
1. extract device mapper source code
|
1. extract device mapper source code
|
||||||
2. CC="diet gcc" ./configure --disable-nls --disable-selinux --disable-shared
|
2. CC="diet gcc" ./configure --disable-nls --disable-selinux --disable-shared
|
||||||
3. modify include/configure.h file
|
3. modify include/configure.h file
|
||||||
--- delete the line with "#define malloc rpl_malloc"
|
--- delete the line with "#define malloc rpl_malloc"
|
||||||
--- add 2 defines as follow:
|
--- add 2 defines as follow:
|
||||||
#ifndef UINT32_MAX
|
#ifndef UINT32_MAX
|
||||||
#define UINT32_MAX (4294967295U)
|
#define UINT32_MAX (4294967295U)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef UINT64_C
|
#ifndef UINT64_C
|
||||||
#define UINT64_C(c) c ## ULL
|
#define UINT64_C(c) c ## ULL
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
4. make
|
4. make
|
||||||
5. strip dmsetup/dmsetup
|
5. strip dmsetup/dmsetup
|
||||||
6. get dmsetup/dmsetup as the dmsetup32 binary file
|
6. get dmsetup/dmsetup as the dmsetup32 binary file
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
======================== Build for 64bit dmsetup =========================
|
======================== Build for 64bit dmsetup =========================
|
||||||
https://www.uclibc.org/downloads/binaries/0.9.30.1/mini-native-x86_64.tar.bz2
|
1. extract device mapper source code
|
||||||
1. extract device mapper source code
|
2. ./configure --disable-nls --disable-selinux --disable-shared --enable-static_link CC='gcc -specs /usr/local/musl/lib/musl-gcc.specs'
|
||||||
2. extract mini-native-x86_64.tar.bz2
|
3. touch include/linux/limits.h include/linux/types.h
|
||||||
3. chroot to mini-native-x86_64
|
echo '#include <sys/mount.h>' > include/linux/fs.h
|
||||||
3. ./configure --disable-nls --disable-selinux --disable-shared --enable-static_link
|
4. make
|
||||||
4. make
|
5. strip --strip-all dmsetup/dmsetup.static
|
||||||
5. strip dmsetup/dmsetup.static
|
6. get dmsetup/dmsetup.static as the dmsetup64 binary file
|
||||||
6. get dmsetup/dmsetup.static as the dmsetup64 binary file
|
|
||||||
|
|
||||||
|
======================== Build for arm64 dmsetup =========================
|
||||||
|
1. extract device mapper source code
|
||||||
|
2. ./configure CC=aarch64-linux-gcc --target=arm --host=x86_64-linux-gnu --disable-nls --disable-selinux --disable-shared --enable-static_link
|
||||||
|
3. modify include/configure.h file
|
||||||
|
--- delete the line with "#define malloc rpl_malloc"
|
||||||
|
4. make
|
||||||
|
5. aarch64-linux-strip dmsetup/dmsetup.static
|
||||||
|
6. get dmsetup/dmsetup.static as the dmsetupaa64 binary file
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Binary file not shown.
BIN
DMSETUP/dmsetupaa64
Normal file
BIN
DMSETUP/dmsetupaa64
Normal file
Binary file not shown.
@@ -1,228 +1,248 @@
|
|||||||
|
|
||||||
==========================================
|
==========================================
|
||||||
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 first.
|
||||||
|
|
||||||
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
|
||||||
|
|
||||||
1.2 Install Packages
|
1.2 Install Packages
|
||||||
yum install \
|
yum 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 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
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
==========================================
|
==========================================
|
||||||
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 level).
|
||||||
|
|
||||||
2.2 Download third-part source code
|
2.2 Download third-part source code
|
||||||
|
|
||||||
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://ftp.gnu.org/gnu/grub/grub-2.04.tar.xz ===> /home/Ventoy-master/GRUB2/grub-2.04.tar.xz
|
https://musl.libc.org/releases/musl-1.2.1.tar.gz ===> /home/Ventoy-master/DOC/musl-1.2.1.tar.gz
|
||||||
https://codeload.github.com/tianocore/edk2/zip/edk2-stable201911 ===> /home/Ventoy-master/EDK2/edk2-edk2-stable201911.zip
|
https://ftp.gnu.org/gnu/grub/grub-2.04.tar.xz ===> /home/Ventoy-master/GRUB2/grub-2.04.tar.xz
|
||||||
https://codeload.github.com/relan/exfat/zip/v1.3.0 ===> /home/Ventoy-master/ExFAT/exfat-1.3.0.zip
|
https://codeload.github.com/tianocore/edk2/zip/edk2-stable201911 ===> /home/Ventoy-master/EDK2/edk2-edk2-stable201911.zip
|
||||||
https://codeload.github.com/libfuse/libfuse/zip/fuse-2.9.9 ===> /home/Ventoy-master/ExFAT/libfuse-fuse-2.9.9.zip
|
https://codeload.github.com/relan/exfat/zip/v1.3.0 ===> /home/Ventoy-master/ExFAT/exfat-1.3.0.zip
|
||||||
|
https://codeload.github.com/libfuse/libfuse/zip/fuse-2.9.9 ===> /home/Ventoy-master/ExFAT/libfuse-fuse-2.9.9.zip
|
||||||
|
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
|
||||||
==========================================
|
|
||||||
3. All in one script
|
2.3 Prepare third-part tools
|
||||||
==========================================
|
cd /home/Ventoy-master/DOC/
|
||||||
I have made the whole build process in all_in_one.sh, you can run this script to build and pack ventoy.
|
tar xf musl-1.2.1.tar.gz
|
||||||
If you want to compile a certain part separately, you can continue to refer to the later chapters of this text.
|
cd musl-1.2.1
|
||||||
|
./configure && make install
|
||||||
cd /home/Ventoy-master/INSTALL
|
|
||||||
sh all_in_one.sh
|
tar xf /opt/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu.tar.xz -C /opt
|
||||||
|
tar xf /opt/aarch64--uclibc--stable-2020.08-1.tar.bz2 -C /opt
|
||||||
It should be noted that, some part of Ventoy has 32bit&64bit version (like 4.9 4.10 4.11 follows)
|
|
||||||
all_in_one.sh only build 64bit version of them, if you want to rebuild the 32bit verison. You should create a 32bit CentOS environment and build them.
|
2.4 Set PATH envrioment
|
||||||
Fortunately these parts are few modified, you only need to build once or you can directly use the binary I have built.
|
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
|
||||||
|
better to add this line to /root/.bashrc and relogin as root
|
||||||
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.
|
|
||||||
|
|
||||||
|
==========================================
|
||||||
|
3. All in one script
|
||||||
==========================================
|
==========================================
|
||||||
4. Build every part of Ventoy
|
I have made the whole build process in 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.
|
||||||
4.1 == Build grub2 ==
|
|
||||||
cd /home/Ventoy-master/GRUB2
|
cd /home/Ventoy-master/INSTALL
|
||||||
sh buildgrub.sh
|
sh all_in_one.sh
|
||||||
|
|
||||||
4.2 == Build ipxe.krn ==
|
It should be noted that, some part of Ventoy has 32bit&64bit version (like 4.9 4.10 4.11 follows)
|
||||||
cd /home/Ventoy-master/IPXE
|
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.
|
||||||
sh buildipxe.sh
|
Fortunately these parts are few modified, you only need to build once or you can directly use the binary I have built.
|
||||||
|
|
||||||
4.3 == Build Ventoy2Disk.exe ==
|
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.
|
||||||
Ventoy2Disk.exe is the installer in Windows platform. And it must be built in Windows with Microsoft Visual Studio (2013+).
|
|
||||||
Open /home/Ventoy-master/Ventoy2Disk/Ventoy2Disk.sln with Visual Studio and build it.
|
|
||||||
|
|
||||||
4.4 == Build vtoyjump64.exe/vtoyjump32.exe ==
|
==========================================
|
||||||
vtoyjump64.exe/vtoyjump32.exe is used to mount iso file in windows PE. You should install Microsoft Visual Studio (2013+) to build it.
|
4. Build every part of Ventoy
|
||||||
Open /home/Ventoy-master/vtoyjump/vtoyjump.sln with Visual Studio and build it (64&32).
|
==========================================
|
||||||
|
4.1 == Build grub2 ==
|
||||||
4.5 == Build dmsetup ==
|
cd /home/Ventoy-master/GRUB2
|
||||||
Please refer to DMSETUP/build.txt
|
sh buildgrub.sh
|
||||||
|
|
||||||
4.6 == Build ventoy_x64.efi ==
|
4.2 == Build ipxe.krn ==
|
||||||
cd /home/Ventoy-master/EDK2
|
cd /home/Ventoy-master/IPXE
|
||||||
sh buildedk.sh
|
sh buildipxe.sh
|
||||||
|
|
||||||
4.7 == Build VtoyTool ==
|
4.3 == Build Ventoy2Disk.exe ==
|
||||||
cd /home/Ventoy-master/VtoyTool
|
Ventoy2Disk.exe is the installer in Windows platform. And it must be built in Windows with Microsoft Visual Studio (2013+).
|
||||||
sh build.sh
|
Open /home/Ventoy-master/Ventoy2Disk/Ventoy2Disk.sln with Visual Studio and build it.
|
||||||
|
|
||||||
4.8 == Build vtoyfat ==
|
4.4 == Build vtoyjump64.exe/vtoyjump32.exe ==
|
||||||
cd /home/Ventoy-master/vtoyfat/fat_io_lib
|
vtoyjump64.exe/vtoyjump32.exe is used to mount iso file in windows PE. You should install Microsoft Visual Studio (2013+) to build it.
|
||||||
sh buildlib.sh
|
Open /home/Ventoy-master/vtoyjump/vtoyjump.sln with Visual Studio and build it (64&32).
|
||||||
cd /home/Ventoy-master/vtoyfat
|
|
||||||
sh build.sh
|
4.5 == Build dmsetup ==
|
||||||
|
Please refer to DMSETUP/build.txt
|
||||||
4.9 == Build exfat-util ==
|
|
||||||
cd /home/Ventoy-master/ExFAT
|
4.6 == Build ventoy_x64.efi ==
|
||||||
sh buidlibfuse.sh
|
cd /home/Ventoy-master/EDK2
|
||||||
sh buidexfat.sh
|
sh buildedk.sh
|
||||||
|
|
||||||
After that, copy EXFAT/shared/mkexfatfs ===> /home/Ventoy-master/INSTALL/tool/mkexfatfs_64
|
4.7 == Build VtoyTool ==
|
||||||
After that, copy EXFAT/shared/mount.exfat-fuse ===> /home/Ventoy-master/INSTALL/tool/mount.exfat-fuse_64
|
cd /home/Ventoy-master/VtoyTool
|
||||||
|
sh build.sh
|
||||||
Use the same build step to build exfat-util 32bit in a 32bit CentOS system and get mkexfatfs_32 and mount.exfat-fuse_32
|
|
||||||
|
4.8 == Build vtoyfat ==
|
||||||
4.10 == Build vtoy_fuse_iso_64/vtoy_fuse_iso_32 ==
|
cd /home/Ventoy-master/vtoyfat/fat_io_lib
|
||||||
cd /home/Ventoy-master/FUSEISO
|
sh buildlib.sh
|
||||||
sh build_libfuse.sh
|
cd /home/Ventoy-master/vtoyfat
|
||||||
sh build.sh
|
sh build.sh
|
||||||
|
|
||||||
Use the same build step to build in a 32bit CentOS system and get vtoy_fuse_iso_32
|
4.9 == Build exfat-util ==
|
||||||
|
cd /home/Ventoy-master/ExFAT
|
||||||
4.11 == Build unsquashfs_64/unsquashfs_32 ==
|
sh buidlibfuse.sh
|
||||||
cd /home/Ventoy-master/SQUASHFS/SRC
|
sh buidexfat.sh
|
||||||
sh build_lz4.sh
|
|
||||||
sh build_lzma.sh
|
After that, copy EXFAT/shared/mkexfatfs ===> /home/Ventoy-master/INSTALL/tool/mkexfatfs_64
|
||||||
sh build_lzo.sh
|
After that, copy EXFAT/shared/mount.exfat-fuse ===> /home/Ventoy-master/INSTALL/tool/mount.exfat-fuse_64
|
||||||
sh build_zstd.sh
|
|
||||||
|
Use the same build step to build exfat-util 32bit in a 32bit CentOS system and get mkexfatfs_32 and mount.exfat-fuse_32
|
||||||
cd /home/Ventoy-master/SQUASHFS/squashfs-tools-4.4/squashfs-tools
|
|
||||||
sh build.sh
|
4.10 == Build vtoy_fuse_iso_64/vtoy_fuse_iso_32 ==
|
||||||
|
cd /home/Ventoy-master/FUSEISO
|
||||||
Use the same build step to build in a 32bit CentOS system and get unsquashfs_32
|
sh build_libfuse.sh
|
||||||
|
sh build.sh
|
||||||
4.12 == Build vblade_64/vblade_32 ==
|
|
||||||
cd /home/Ventoy-master/VBLADE/vblade-master
|
Use the same build step to build in a 32bit CentOS system and get vtoy_fuse_iso_32
|
||||||
sh build.sh
|
|
||||||
|
4.11 == Build unsquashfs_64/unsquashfs_32 ==
|
||||||
4.13 == Build zstdcat ==
|
cd /home/Ventoy-master/SQUASHFS/SRC
|
||||||
Please refer to ZSTD/build.txt
|
sh build_lz4.sh
|
||||||
|
sh build_lzma.sh
|
||||||
4.14 == Build vtoy_gen_uuid ==
|
sh build_lzo.sh
|
||||||
cd /home/Ventoy-master/GenUUID
|
sh build_zstd.sh
|
||||||
sh build.sh
|
|
||||||
|
cd /home/Ventoy-master/SQUASHFS/squashfs-tools-4.4/squashfs-tools
|
||||||
4.15 == Build xzminidec32 ==
|
sh build.sh
|
||||||
cd /home/Ventoy-master/Ventoy2Disk/Ventoy2Disk/xz-embedded-20130513/userspace
|
|
||||||
make -f ventoy_makefile
|
Use the same build step to build in a 32bit CentOS system and get unsquashfs_32
|
||||||
strip --strip-all xzminidec
|
|
||||||
|
4.12 == Build vblade_64/vblade_32 ==
|
||||||
4.16 == Build xzminidec64 ==
|
cd /home/Ventoy-master/VBLADE/vblade-master
|
||||||
cd /home/Ventoy-master/Ventoy2Disk/Ventoy2Disk/xz-embedded-20130513/userspace
|
sh build.sh
|
||||||
make -f ventoy_makefile64
|
|
||||||
strip --strip-all xzminidec
|
4.13 == Build zstdcat ==
|
||||||
|
Please refer to ZSTD/build.txt
|
||||||
4.17 == Build iso9660_x64.efi ==
|
|
||||||
This efi driver is from https://github.com/pbatard/efifs
|
4.14 == Build vtoy_gen_uuid ==
|
||||||
Follow all the build instructions in this project. I modified 3 files (the original and modified source are at /home/Ventoy-master/EDK2/efiffs)
|
cd /home/Ventoy-master/GenUUID
|
||||||
|
sh build.sh
|
||||||
4.18 IMG/cpio/ventoy/busybox/64h
|
|
||||||
https://www.uclibc.org/downloads/binaries/0.9.30.1/mini-native-x86_64.tar.bz2
|
4.15 == Build xzminidec32 ==
|
||||||
https://busybox.net/downloads/busybox-1.32.0.tar.bz2
|
cd /home/Ventoy-master/Ventoy2Disk/Ventoy2Disk/xz-embedded-20130513/userspace
|
||||||
use BUSYBOX/64h.config and uclibc to build busybox-1.32
|
make -f ventoy_makefile
|
||||||
|
strip --strip-all xzminidec
|
||||||
4.19 == Build lunzip32/lunzip64 ==
|
|
||||||
http://mirror.yongbok.net/nongnu/lzip/lunzip/lunzip-1.11.tar.gz
|
4.16 == Build xzminidec64 ==
|
||||||
PATH=$PATH:/opt/diet/bin
|
cd /home/Ventoy-master/Ventoy2Disk/Ventoy2Disk/xz-embedded-20130513/userspace
|
||||||
./configure --disable-nls CC='diet gcc -nostdinc'
|
make -f ventoy_makefile64
|
||||||
make
|
strip --strip-all xzminidec
|
||||||
strip --strip-all lunzip
|
|
||||||
|
4.17 == Build iso9660_x64.efi ==
|
||||||
|
This efi driver is from https://github.com/pbatard/efifs
|
||||||
|
Follow all the build instructions in this project. I modified 3 files (the original and modified source are at /home/Ventoy-master/EDK2/efiffs)
|
||||||
==========================================
|
|
||||||
5. Binaries
|
4.18 IMG/cpio/ventoy/busybox/64h
|
||||||
==========================================
|
https://www.uclibc.org/downloads/binaries/0.9.30.1/mini-native-x86_64.tar.bz2
|
||||||
There some binaries in Ventoy install package. These files are downloaded from other open source project's website, such as busybox.
|
https://busybox.net/downloads/busybox-1.32.0.tar.bz2
|
||||||
Here is the list of the binaries, their SHA-256 and the download urls:
|
use BUSYBOX/x86_64_ash.config and uclibc to build busybox-1.32
|
||||||
|
|
||||||
5.1 IMG/cpio/ventoy/tool/lz4cat
|
4.19 == Build lunzip32/lunzip64 ==
|
||||||
https://create.stephan-brumme.com/smallz4 smallz4cat-x32-v1.4
|
http://mirror.yongbok.net/nongnu/lzip/lunzip/lunzip-1.11.tar.gz
|
||||||
SHA-256: 13d293ddeedb469f51da41167f79b2cbdb904e681716f6e6191b233dbb162438
|
PATH=$PATH:/opt/diet/bin
|
||||||
|
./configure --disable-nls CC='diet gcc -nostdinc'
|
||||||
5.2 IMG/cpio/ventoy/tool/ar
|
make
|
||||||
https://busybox.net/downloads/binaries/1.30.0-i686 busybox_AR
|
strip --strip-all lunzip
|
||||||
SHA-256: f29b7d81a983c0c85d22496f4a833c18f2528a1b666eb7d47c93084c1ed66ae0
|
|
||||||
|
#aarch64
|
||||||
5.3 IMG/cpio/ventoy/tool/inotifyd
|
./configure --disable-nls CC='aarch64-buildroot-linux-uclibc-gcc -static'
|
||||||
https://busybox.net/downloads/binaries/1.30.0-i686 busybox_INOTIFYD
|
make
|
||||||
SHA-256: 3532162a8695e91a1ed9ddea28b2cb22259a90e93d5d9c4a517b6c36842c686f
|
aarch64-buildroot-linux-uclibc-strip --strip-all lunzip
|
||||||
|
|
||||||
5.4 IMG/cpio/ventoy/busybox/ash
|
|
||||||
https://busybox.net/downloads/binaries/1.27.1-i686 busybox_ASH
|
|
||||||
SHA-256: 44a6274bca580c2758ffc173fc76d18bb855b1fe8dcf70efd9ee75cbd57dee97
|
==========================================
|
||||||
|
5. Binaries
|
||||||
5.5 IMG/cpio/ventoy/busybox/tmpxz
|
==========================================
|
||||||
https://busybox.net/downloads/binaries/1.27.1-i686 busybox_XZ
|
There some binaries in Ventoy install package. These files are downloaded from other open source project's website, such as busybox.
|
||||||
SHA-256: f6cdb6293680424c29b89bde0685ca27f455166c9b302cd6082ef90681456291
|
Here is the list of the binaries, their SHA-256 and the download urls:
|
||||||
|
|
||||||
5.6 INSTALL/tool/xzcat
|
5.1 IMG/cpio/ventoy/tool/lz4cat
|
||||||
https://busybox.net/downloads/binaries/1.30.0-i686/ busybox_XZCAT
|
https://create.stephan-brumme.com/smallz4 smallz4cat-x32-v1.4
|
||||||
SHA-256: 7399db642c2beaf52a16ab5264ffc55cfd1ff5699a524f63e5d48edf84e20f44
|
SHA-256: 13d293ddeedb469f51da41167f79b2cbdb904e681716f6e6191b233dbb162438
|
||||||
|
|
||||||
5.7 INSTALL/tool/hexdump
|
5.2 IMG/cpio/ventoy/tool/ar
|
||||||
https://busybox.net/downloads/binaries/1.30.0-i686/ busybox_HEXDUMP
|
https://busybox.net/downloads/binaries/1.30.0-i686 busybox_AR
|
||||||
SHA-256: cde08b6a2cf5ad914f05203e18e3f7c2ed6060a63604e3d75536f19b55e8e0af
|
SHA-256: f29b7d81a983c0c85d22496f4a833c18f2528a1b666eb7d47c93084c1ed66ae0
|
||||||
|
|
||||||
5.8 imdisk
|
5.3 IMG/cpio/ventoy/tool/inotifyd
|
||||||
download http://www.ltr-data.se/files/imdiskinst.exe and extract it by 7zip.
|
https://busybox.net/downloads/binaries/1.30.0-i686 busybox_INOTIFYD
|
||||||
|
SHA-256: 3532162a8695e91a1ed9ddea28b2cb22259a90e93d5d9c4a517b6c36842c686f
|
||||||
INSTALL/ventoy/imdisk/64/imdisk.sys --> sys/amd64/imdisk.sys SHA-256: 6702202220268787e361f5a82dae53362c8e6c6dcd240bb01b44dd77ae0788da
|
|
||||||
INSTALL/ventoy/imdisk/64/imdisk.exe --> cli/amd64/imdisk.exe SHA-256: 9759175380af836869443e5f21ce2e33022125d154bc6b3d1c04dc36b190de04
|
5.4 IMG/cpio/ventoy/busybox/ash
|
||||||
INSTALL/ventoy/imdisk/64/imdisk.cpl --> cpl/amd64/imdisk.cpl SHA-256: aea2ebbea2b073c947263744962af8a3eab025ff4c9d825c543e380e738a4c99
|
https://busybox.net/downloads/binaries/1.27.1-i686 busybox_ASH
|
||||||
|
SHA-256: 44a6274bca580c2758ffc173fc76d18bb855b1fe8dcf70efd9ee75cbd57dee97
|
||||||
INSTALL/ventoy/imdisk/32/imdisk.sys --> sys/i386/imdisk.sys SHA-256: a94caec2f71a924d6a914c093ad4b905d7cfdea3f515ed48aaa8c3950b2dc191
|
|
||||||
INSTALL/ventoy/imdisk/32/imdisk.exe --> cli/i386/imdisk.exe SHA-256: 33b53858e2139704cf603b115a3e5e1dfd4daeaaed4d3e03c633f2df3b55dbaa
|
5.5 IMG/cpio/ventoy/busybox/tmpxz
|
||||||
INSTALL/ventoy/imdisk/32/imdisk.cpl --> cpl/i386/imdisk.cpl SHA-256: b781d3e2d286ac8bf548f44e50cbbb3fe78203296e41e4d2e73b407668f88f2d
|
https://busybox.net/downloads/binaries/1.27.1-i686 busybox_XZ
|
||||||
|
SHA-256: f6cdb6293680424c29b89bde0685ca27f455166c9b302cd6082ef90681456291
|
||||||
5.9 INSTALL/ventoy/memdisk
|
|
||||||
https://mirrors.edge.kernel.org/pub/linux/utils/boot/syslinux/syslinux-6.03.tar.gz
|
5.6 INSTALL/tool/i386/xzcat
|
||||||
decompress it and memdisk is at syslinux-6.03/bios/memdisk/memdisk
|
https://busybox.net/downloads/binaries/1.30.0-i686/ busybox_XZCAT
|
||||||
SHA-256: 3f6cd656b8a14109cd3f906fee2dd2e75418f983a5e1bfdb64f44f7765588cbb
|
SHA-256: 7399db642c2beaf52a16ab5264ffc55cfd1ff5699a524f63e5d48edf84e20f44
|
||||||
|
|
||||||
|
5.7 INSTALL/tool/i386/hexdump
|
||||||
5.10 UEFIinSecureBoot
|
https://busybox.net/downloads/binaries/1.30.0-i686/ busybox_HEXDUMP
|
||||||
https://github.com/ValdikSS/Super-UEFIinSecureBoot-Disk/releases Super-UEFIinSecureBoot-Disk_minimal_v3.zip
|
SHA-256: cde08b6a2cf5ad914f05203e18e3f7c2ed6060a63604e3d75536f19b55e8e0af
|
||||||
unzip it and get Super-UEFIinSecureBoot-Disk_minimal.img, extract the img by 7zip.
|
|
||||||
|
5.8 imdisk
|
||||||
INSTALL/EFI/BOOT/BOOTX64.EFI --> EFI/BOOT/BOOTX64.EFI SHA-256: 475552c7476ad45e42344eee8b30d44c264d200ac2468428aa86fc8795fb6e34
|
download http://www.ltr-data.se/files/imdiskinst.exe and extract it by 7zip.
|
||||||
INSTALL/EFI/BOOT/grubx64.efi --> EFI/BOOT/grubx64.efi SHA-256: 25d858157349dc52fa70f3cdf5c62fe1e0bae37ddfc3a6b6528af9a3c745775f
|
|
||||||
INSTALL/EFI/BOOT/MokManager.efi --> EFI/BOOT/MokManager.efi SHA-256: 3bf1f46cee0832355c7dd1dba880dea9bcaa78cc44375a1559d43bc9db18933b
|
INSTALL/ventoy/imdisk/64/imdisk.sys --> sys/amd64/imdisk.sys SHA-256: 6702202220268787e361f5a82dae53362c8e6c6dcd240bb01b44dd77ae0788da
|
||||||
|
INSTALL/ventoy/imdisk/64/imdisk.exe --> cli/amd64/imdisk.exe SHA-256: 9759175380af836869443e5f21ce2e33022125d154bc6b3d1c04dc36b190de04
|
||||||
|
INSTALL/ventoy/imdisk/64/imdisk.cpl --> cpl/amd64/imdisk.cpl SHA-256: aea2ebbea2b073c947263744962af8a3eab025ff4c9d825c543e380e738a4c99
|
||||||
5.11 INSTALL/tool/ash
|
|
||||||
https://busybox.net/downloads/binaries/1.31.0-i686-uclibc/ busybox_ASH
|
INSTALL/ventoy/imdisk/32/imdisk.sys --> sys/i386/imdisk.sys SHA-256: a94caec2f71a924d6a914c093ad4b905d7cfdea3f515ed48aaa8c3950b2dc191
|
||||||
SHA-256: 2943f02f85fee0c9551aec47110a558a73f919c032b3c51e56d6f197b5ec4d7b
|
INSTALL/ventoy/imdisk/32/imdisk.exe --> cli/i386/imdisk.exe SHA-256: 33b53858e2139704cf603b115a3e5e1dfd4daeaaed4d3e03c633f2df3b55dbaa
|
||||||
|
INSTALL/ventoy/imdisk/32/imdisk.cpl --> cpl/i386/imdisk.cpl SHA-256: b781d3e2d286ac8bf548f44e50cbbb3fe78203296e41e4d2e73b407668f88f2d
|
||||||
5.12 7za.exe
|
|
||||||
download from https://www.7-zip.org/a/7z1900-extra.7z
|
5.9 INSTALL/ventoy/memdisk
|
||||||
ISNTALL/ventoy/7z/64/7za.exe SHA-256: 8117e40ee7f824f63373a4f5625bb62749f69159d0c449b3ce2f35aad3b83549
|
https://mirrors.edge.kernel.org/pub/linux/utils/boot/syslinux/syslinux-6.03.tar.gz
|
||||||
ISNTALL/ventoy/7z/32/7za.exe SHA-256: ea308c76a2f927b160a143d94072b0dce232e04b751f0c6432a94e05164e716d
|
decompress it and memdisk is at syslinux-6.03/bios/memdisk/memdisk
|
||||||
|
SHA-256: 3f6cd656b8a14109cd3f906fee2dd2e75418f983a5e1bfdb64f44f7765588cbb
|
||||||
|
|
||||||
|
|
||||||
|
5.10 UEFIinSecureBoot
|
||||||
|
https://github.com/ValdikSS/Super-UEFIinSecureBoot-Disk/releases Super-UEFIinSecureBoot-Disk_minimal_v3.zip
|
||||||
|
unzip it and get Super-UEFIinSecureBoot-Disk_minimal.img, extract the img by 7zip.
|
||||||
|
|
||||||
|
INSTALL/EFI/BOOT/BOOTX64.EFI --> EFI/BOOT/BOOTX64.EFI SHA-256: 475552c7476ad45e42344eee8b30d44c264d200ac2468428aa86fc8795fb6e34
|
||||||
|
INSTALL/EFI/BOOT/grubx64.efi --> EFI/BOOT/grubx64.efi SHA-256: 25d858157349dc52fa70f3cdf5c62fe1e0bae37ddfc3a6b6528af9a3c745775f
|
||||||
|
INSTALL/EFI/BOOT/MokManager.efi --> EFI/BOOT/MokManager.efi SHA-256: 3bf1f46cee0832355c7dd1dba880dea9bcaa78cc44375a1559d43bc9db18933b
|
||||||
|
|
||||||
|
|
||||||
|
5.11 INSTALL/tool/ash
|
||||||
|
https://busybox.net/downloads/binaries/1.31.0-i686-uclibc/ busybox_ASH
|
||||||
|
SHA-256: 2943f02f85fee0c9551aec47110a558a73f919c032b3c51e56d6f197b5ec4d7b
|
||||||
|
|
||||||
|
5.12 7za.exe
|
||||||
|
download from https://www.7-zip.org/a/7z1900-extra.7z
|
||||||
|
ISNTALL/ventoy/7z/64/7za.exe SHA-256: 8117e40ee7f824f63373a4f5625bb62749f69159d0c449b3ce2f35aad3b83549
|
||||||
|
ISNTALL/ventoy/7z/32/7za.exe SHA-256: ea308c76a2f927b160a143d94072b0dce232e04b751f0c6432a94e05164e716d
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
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
|
||||||
|
rm -f $DST_PATH3
|
||||||
|
|
||||||
|
source ./edksetup.sh
|
||||||
|
|
||||||
|
if [ "$EDKARCH" = "AARCH64" ]; then
|
||||||
|
PATH=$PATH:/opt/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/bin \
|
||||||
|
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
|
||||||
|
cp -a $VTEFI_PATH3 $DST_PATH3
|
||||||
|
cd ..
|
||||||
|
else
|
||||||
|
echo -e '\n\n====================== FAILED ========================\n\n'
|
||||||
|
cd ..
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
@@ -11,17 +11,24 @@ cd edk2-edk2-stable201911
|
|||||||
VTEFI_PATH=Build/MdeModule/RELEASE_GCC48/X64/MdeModulePkg/Application/Ventoy/Ventoy/OUTPUT/Ventoy.efi
|
VTEFI_PATH=Build/MdeModule/RELEASE_GCC48/X64/MdeModulePkg/Application/Ventoy/Ventoy/OUTPUT/Ventoy.efi
|
||||||
DST_PATH=../../INSTALL/ventoy/ventoy_x64.efi
|
DST_PATH=../../INSTALL/ventoy/ventoy_x64.efi
|
||||||
|
|
||||||
|
VTEFI_PATH2=Build/MdeModule/RELEASE_GCC48/IA32/MdeModulePkg/Application/Ventoy/Ventoy/OUTPUT/Ventoy.efi
|
||||||
|
DST_PATH2=../../INSTALL/ventoy/ventoy_ia32.efi
|
||||||
|
|
||||||
rm -f $VTEFI_PATH
|
rm -f $VTEFI_PATH
|
||||||
rm -f $DST_PATH
|
rm -f $DST_PATH
|
||||||
|
rm -f $VTEFI_PATH2
|
||||||
|
rm -f $DST_PATH2
|
||||||
|
|
||||||
make -j 4 -C BaseTools/
|
make -j 4 -C BaseTools/
|
||||||
|
|
||||||
source ./edksetup.sh
|
source ./edksetup.sh
|
||||||
build -p MdeModulePkg/MdeModulePkg.dsc -a X64 -b RELEASE -t GCC48
|
build -p MdeModulePkg/MdeModulePkg.dsc -a X64 -b RELEASE -t GCC48
|
||||||
|
build -p MdeModulePkg/MdeModulePkg.dsc -a IA32 -b RELEASE -t GCC48
|
||||||
|
|
||||||
if [ -e $VTEFI_PATH ]; then
|
if [ -e $VTEFI_PATH ] && [ -e $VTEFI_PATH2 ]; then
|
||||||
echo -e '\n\n====================== SUCCESS ========================\n\n'
|
echo -e '\n\n====================== SUCCESS ========================\n\n'
|
||||||
cp -a $VTEFI_PATH $DST_PATH
|
cp -a $VTEFI_PATH $DST_PATH
|
||||||
|
cp -a $VTEFI_PATH2 $DST_PATH2
|
||||||
cd ..
|
cd ..
|
||||||
else
|
else
|
||||||
echo -e '\n\n====================== FAILED ========================\n\n'
|
echo -e '\n\n====================== FAILED ========================\n\n'
|
||||||
|
@@ -0,0 +1,410 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
* 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;
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
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);
|
||||||
|
|
||||||
|
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 @@
|
|||||||
|
123
|
@@ -39,6 +39,7 @@
|
|||||||
BOOLEAN gDebugPrint = FALSE;
|
BOOLEAN gDebugPrint = FALSE;
|
||||||
BOOLEAN gDotEfiBoot = FALSE;
|
BOOLEAN gDotEfiBoot = FALSE;
|
||||||
BOOLEAN gLoadIsoEfi = FALSE;
|
BOOLEAN gLoadIsoEfi = FALSE;
|
||||||
|
BOOLEAN gIsoUdf = FALSE;
|
||||||
ventoy_ram_disk g_ramdisk_param;
|
ventoy_ram_disk g_ramdisk_param;
|
||||||
ventoy_chain_head *g_chain;
|
ventoy_chain_head *g_chain;
|
||||||
ventoy_img_chunk *g_chunk;
|
ventoy_img_chunk *g_chunk;
|
||||||
@@ -56,6 +57,7 @@ ventoy_grub_param_file_replace *g_file_replace_list = NULL;
|
|||||||
ventoy_efi_file_replace g_efi_file_replace;
|
ventoy_efi_file_replace g_efi_file_replace;
|
||||||
|
|
||||||
CONST CHAR16 gIso9660EfiDriverPath[] = ISO9660_EFI_DRIVER_PATH;
|
CONST CHAR16 gIso9660EfiDriverPath[] = ISO9660_EFI_DRIVER_PATH;
|
||||||
|
CONST CHAR16 gUdfEfiDriverPath[] = UDF_EFI_DRIVER_PATH;
|
||||||
|
|
||||||
BOOLEAN g_fix_windows_1st_cdrom_issue = FALSE;
|
BOOLEAN g_fix_windows_1st_cdrom_issue = FALSE;
|
||||||
|
|
||||||
@@ -69,10 +71,28 @@ CONST CHAR16 *gEfiBootFileName[] =
|
|||||||
{
|
{
|
||||||
L"@",
|
L"@",
|
||||||
EFI_REMOVABLE_MEDIA_FILE_NAME,
|
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\\GRUBX64.EFI",
|
||||||
L"\\EFI\\BOOT\\BOOTx64.EFI",
|
L"\\EFI\\BOOT\\BOOTx64.EFI",
|
||||||
L"\\EFI\\BOOT\\bootx64.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
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
VOID EFIAPI VtoyDebug(IN CONST CHAR8 *Format, ...)
|
VOID EFIAPI VtoyDebug(IN CONST CHAR8 *Format, ...)
|
||||||
@@ -608,12 +628,23 @@ STATIC EFI_STATUS EFIAPI ventoy_load_isoefi_driver(IN EFI_HANDLE ImageHandle)
|
|||||||
EFI_HANDLE Image = NULL;
|
EFI_HANDLE Image = NULL;
|
||||||
EFI_STATUS Status = EFI_SUCCESS;
|
EFI_STATUS Status = EFI_SUCCESS;
|
||||||
CHAR16 LogVar[4] = L"5";
|
CHAR16 LogVar[4] = L"5";
|
||||||
|
|
||||||
Status = ventoy_load_image(ImageHandle, gBlockData.pDiskFsDevPath,
|
if (gIsoUdf)
|
||||||
gIso9660EfiDriverPath,
|
{
|
||||||
sizeof(gIso9660EfiDriverPath),
|
Status = ventoy_load_image(ImageHandle, gBlockData.pDiskFsDevPath,
|
||||||
&Image);
|
gUdfEfiDriverPath,
|
||||||
debug("load iso efi driver status:%r", Status);
|
sizeof(gUdfEfiDriverPath),
|
||||||
|
&Image);
|
||||||
|
debug("load iso UDF efi driver status:%r", Status);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Status = ventoy_load_image(ImageHandle, gBlockData.pDiskFsDevPath,
|
||||||
|
gIso9660EfiDriverPath,
|
||||||
|
sizeof(gIso9660EfiDriverPath),
|
||||||
|
&Image);
|
||||||
|
debug("load iso 9660 efi driver status:%r", Status);
|
||||||
|
}
|
||||||
|
|
||||||
if (gDebugPrint)
|
if (gDebugPrint)
|
||||||
{
|
{
|
||||||
@@ -672,6 +703,11 @@ STATIC EFI_STATUS EFIAPI ventoy_parse_cmdline(IN EFI_HANDLE ImageHandle)
|
|||||||
{
|
{
|
||||||
gLoadIsoEfi = TRUE;
|
gLoadIsoEfi = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (StrStr(pCmdLine, L"iso_udf"))
|
||||||
|
{
|
||||||
|
gIsoUdf = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
pPos = StrStr(pCmdLine, L"FirstTry=@");
|
pPos = StrStr(pCmdLine, L"FirstTry=@");
|
||||||
if (pPos)
|
if (pPos)
|
||||||
|
@@ -168,19 +168,26 @@ typedef struct ventoy_virt_chunk
|
|||||||
#define VTOY_BLOCK_DEVICE_PATH_GUID \
|
#define VTOY_BLOCK_DEVICE_PATH_GUID \
|
||||||
{ 0x37b87ac6, 0xc180, 0x4583, { 0xa7, 0x05, 0x41, 0x4d, 0xa8, 0xf7, 0x7e, 0xd2 }}
|
{ 0x37b87ac6, 0xc180, 0x4583, { 0xa7, 0x05, 0x41, 0x4d, 0xa8, 0xf7, 0x7e, 0xd2 }}
|
||||||
|
|
||||||
#define ISO9660_EFI_DRIVER_PATH L"\\ventoy\\iso9660_x64.efi"
|
|
||||||
|
|
||||||
#define VTOY_BLOCK_DEVICE_PATH_NAME L"ventoy"
|
#define VTOY_BLOCK_DEVICE_PATH_NAME L"ventoy"
|
||||||
|
|
||||||
#if defined (MDE_CPU_IA32)
|
#if defined (MDE_CPU_IA32)
|
||||||
#define VENTOY_UEFI_DESC L"IA32 UEFI"
|
#define VENTOY_UEFI_DESC L"IA32 UEFI"
|
||||||
|
#define ISO9660_EFI_DRIVER_PATH L"\\ventoy\\iso9660_ia32.efi"
|
||||||
|
#define UDF_EFI_DRIVER_PATH L"\\ventoy\\udf_ia32.efi"
|
||||||
#elif defined (MDE_CPU_X64)
|
#elif defined (MDE_CPU_X64)
|
||||||
#define VENTOY_UEFI_DESC L"X64 UEFI"
|
#define VENTOY_UEFI_DESC L"X64 UEFI"
|
||||||
|
#define ISO9660_EFI_DRIVER_PATH L"\\ventoy\\iso9660_x64.efi"
|
||||||
|
#define UDF_EFI_DRIVER_PATH L"\\ventoy\\udf_x64.efi"
|
||||||
#elif defined (MDE_CPU_EBC)
|
#elif defined (MDE_CPU_EBC)
|
||||||
#elif defined (MDE_CPU_ARM)
|
#elif defined (MDE_CPU_ARM)
|
||||||
#define VENTOY_UEFI_DESC L"ARM UEFI"
|
#define VENTOY_UEFI_DESC L"ARM UEFI"
|
||||||
|
#define ISO9660_EFI_DRIVER_PATH L"\\ventoy\\iso9660_arm.efi"
|
||||||
|
#define UDF_EFI_DRIVER_PATH L"\\ventoy\\udf_arm.efi"
|
||||||
#elif defined (MDE_CPU_AARCH64)
|
#elif defined (MDE_CPU_AARCH64)
|
||||||
#define VENTOY_UEFI_DESC L"ARM64 UEFI"
|
#define VENTOY_UEFI_DESC L"ARM64 UEFI"
|
||||||
|
#define ISO9660_EFI_DRIVER_PATH L"\\ventoy\\iso9660_aa64.efi"
|
||||||
|
#define UDF_EFI_DRIVER_PATH L"\\ventoy\\udf_aa64.efi"
|
||||||
#else
|
#else
|
||||||
#error Unknown Processor Type
|
#error Unknown Processor Type
|
||||||
#endif
|
#endif
|
||||||
|
@@ -1,81 +1,81 @@
|
|||||||
#************************************************************************************
|
#************************************************************************************
|
||||||
# Copyright (c) 2020, longpanda <admin@ventoy.net>
|
# Copyright (c) 2020, longpanda <admin@ventoy.net>
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License as
|
# modify it under the terms of the GNU General Public License as
|
||||||
# published by the Free Software Foundation; either version 3 of the
|
# published by the Free Software Foundation; either version 3 of the
|
||||||
# License, or (at your option) any later version.
|
# License, or (at your option) any later version.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
# General Public License for more details.
|
# General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program; if not, see <http://www.gnu.org/licenses/>.
|
# along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||||
#
|
#
|
||||||
#************************************************************************************
|
#************************************************************************************
|
||||||
|
|
||||||
[Defines]
|
[Defines]
|
||||||
INF_VERSION = 0x00010005
|
INF_VERSION = 0x00010005
|
||||||
BASE_NAME = Ventoy
|
BASE_NAME = Ventoy
|
||||||
FILE_GUID = 1c3a0915-09dc-49c2-873d-0aaaa7733299
|
FILE_GUID = 1c3a0915-09dc-49c2-873d-0aaaa7733299
|
||||||
MODULE_TYPE = UEFI_APPLICATION
|
MODULE_TYPE = UEFI_APPLICATION
|
||||||
VERSION_STRING = 1.0
|
VERSION_STRING = 1.0
|
||||||
ENTRY_POINT = VentoyEfiMain
|
ENTRY_POINT = VentoyEfiMain
|
||||||
|
|
||||||
|
|
||||||
[Sources]
|
[Sources]
|
||||||
Ventoy.h
|
Ventoy.h
|
||||||
Ventoy.c
|
Ventoy.c
|
||||||
VentoyDebug.c
|
VentoyDebug.c
|
||||||
VentoyProtocol.c
|
VentoyProtocol.c
|
||||||
|
|
||||||
[Packages]
|
[Packages]
|
||||||
MdePkg/MdePkg.dec
|
MdePkg/MdePkg.dec
|
||||||
MdeModulePkg/MdeModulePkg.dec
|
MdeModulePkg/MdeModulePkg.dec
|
||||||
ShellPkg/ShellPkg.dec
|
ShellPkg/ShellPkg.dec
|
||||||
|
|
||||||
[LibraryClasses]
|
[LibraryClasses]
|
||||||
UefiApplicationEntryPoint
|
UefiApplicationEntryPoint
|
||||||
UefiLib
|
UefiLib
|
||||||
DebugLib
|
DebugLib
|
||||||
|
|
||||||
[Guids]
|
[Guids]
|
||||||
gShellVariableGuid
|
gShellVariableGuid
|
||||||
gEfiVirtualCdGuid
|
gEfiVirtualCdGuid
|
||||||
gEfiFileInfoGuid
|
gEfiFileInfoGuid
|
||||||
|
|
||||||
[Protocols]
|
[Protocols]
|
||||||
gEfiLoadedImageProtocolGuid
|
gEfiLoadedImageProtocolGuid
|
||||||
gEfiBlockIoProtocolGuid
|
gEfiBlockIoProtocolGuid
|
||||||
gEfiDevicePathProtocolGuid
|
gEfiDevicePathProtocolGuid
|
||||||
gEfiSimpleFileSystemProtocolGuid
|
gEfiSimpleFileSystemProtocolGuid
|
||||||
gEfiRamDiskProtocolGuid
|
gEfiRamDiskProtocolGuid
|
||||||
gEfiAbsolutePointerProtocolGuid
|
gEfiAbsolutePointerProtocolGuid
|
||||||
gEfiAcpiTableProtocolGuid
|
gEfiAcpiTableProtocolGuid
|
||||||
gEfiBlockIo2ProtocolGuid
|
gEfiBlockIo2ProtocolGuid
|
||||||
gEfiBusSpecificDriverOverrideProtocolGuid
|
gEfiBusSpecificDriverOverrideProtocolGuid
|
||||||
gEfiComponentNameProtocolGuid
|
gEfiComponentNameProtocolGuid
|
||||||
gEfiComponentName2ProtocolGuid
|
gEfiComponentName2ProtocolGuid
|
||||||
gEfiDriverBindingProtocolGuid
|
gEfiDriverBindingProtocolGuid
|
||||||
gEfiDiskIoProtocolGuid
|
gEfiDiskIoProtocolGuid
|
||||||
gEfiDiskIo2ProtocolGuid
|
gEfiDiskIo2ProtocolGuid
|
||||||
gEfiGraphicsOutputProtocolGuid
|
gEfiGraphicsOutputProtocolGuid
|
||||||
gEfiHiiConfigAccessProtocolGuid
|
gEfiHiiConfigAccessProtocolGuid
|
||||||
gEfiHiiFontProtocolGuid
|
gEfiHiiFontProtocolGuid
|
||||||
gEfiLoadFileProtocolGuid
|
gEfiLoadFileProtocolGuid
|
||||||
gEfiLoadFile2ProtocolGuid
|
gEfiLoadFile2ProtocolGuid
|
||||||
gEfiLoadedImageProtocolGuid
|
gEfiLoadedImageProtocolGuid
|
||||||
gEfiLoadedImageDevicePathProtocolGuid
|
gEfiLoadedImageDevicePathProtocolGuid
|
||||||
gEfiPciIoProtocolGuid
|
gEfiPciIoProtocolGuid
|
||||||
gEfiSerialIoProtocolGuid
|
gEfiSerialIoProtocolGuid
|
||||||
gEfiSimpleTextInProtocolGuid
|
gEfiSimpleTextInProtocolGuid
|
||||||
gEfiSimpleTextInputExProtocolGuid
|
gEfiSimpleTextInputExProtocolGuid
|
||||||
gEfiSimpleTextOutProtocolGuid
|
gEfiSimpleTextOutProtocolGuid
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@@ -161,10 +161,19 @@ STATIC EFI_STATUS EFIAPI ventoy_read_iso_sector
|
|||||||
{
|
{
|
||||||
MapLba = (Sector - pchunk->img_start_sector) * 4 + pchunk->disk_start_sector;
|
MapLba = (Sector - pchunk->img_start_sector) * 4 + pchunk->disk_start_sector;
|
||||||
}
|
}
|
||||||
else
|
else if (g_chain->disk_sector_size == 1024)
|
||||||
{
|
{
|
||||||
MapLba = (Sector - pchunk->img_start_sector) * 2048 / g_chain->disk_sector_size + pchunk->disk_start_sector;
|
MapLba = (Sector - pchunk->img_start_sector) * 2 + pchunk->disk_start_sector;
|
||||||
}
|
}
|
||||||
|
else if (g_chain->disk_sector_size == 2048)
|
||||||
|
{
|
||||||
|
MapLba = (Sector - pchunk->img_start_sector) + pchunk->disk_start_sector;
|
||||||
|
}
|
||||||
|
else if (g_chain->disk_sector_size == 4096)
|
||||||
|
{
|
||||||
|
MapLba = ((Sector - pchunk->img_start_sector) >> 1) + pchunk->disk_start_sector;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
secLeft = pchunk->img_end_sector + 1 - Sector;
|
secLeft = pchunk->img_end_sector + 1 - Sector;
|
||||||
secRead = (Count < secLeft) ? Count : secLeft;
|
secRead = (Count < secLeft) ? Count : secLeft;
|
||||||
@@ -277,10 +286,19 @@ STATIC EFI_STATUS EFIAPI ventoy_write_iso_sector
|
|||||||
{
|
{
|
||||||
MapLba = (Sector - pchunk->img_start_sector) * 4 + pchunk->disk_start_sector;
|
MapLba = (Sector - pchunk->img_start_sector) * 4 + pchunk->disk_start_sector;
|
||||||
}
|
}
|
||||||
else
|
else if (g_chain->disk_sector_size == 1024)
|
||||||
{
|
{
|
||||||
MapLba = (Sector - pchunk->img_start_sector) * 2048 / g_chain->disk_sector_size + pchunk->disk_start_sector;
|
MapLba = (Sector - pchunk->img_start_sector) * 2 + pchunk->disk_start_sector;
|
||||||
}
|
}
|
||||||
|
else if (g_chain->disk_sector_size == 2048)
|
||||||
|
{
|
||||||
|
MapLba = (Sector - pchunk->img_start_sector) + pchunk->disk_start_sector;
|
||||||
|
}
|
||||||
|
else if (g_chain->disk_sector_size == 4096)
|
||||||
|
{
|
||||||
|
MapLba = ((Sector - pchunk->img_start_sector) >> 1) + pchunk->disk_start_sector;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
secLeft = pchunk->img_end_sector + 1 - Sector;
|
secLeft = pchunk->img_end_sector + 1 - Sector;
|
||||||
secRead = (Count < secLeft) ? Count : secLeft;
|
secRead = (Count < secLeft) ? Count : secLeft;
|
||||||
|
@@ -79,6 +79,14 @@ STATIC EFI_STATUS ParseCmdline(IN EFI_HANDLE ImageHandle)
|
|||||||
SetMem(pCmdLine, pImageInfo->LoadOptionsSize + 4, 0);
|
SetMem(pCmdLine, pImageInfo->LoadOptionsSize + 4, 0);
|
||||||
CopyMem(pCmdLine, pImageInfo->LoadOptions, pImageInfo->LoadOptionsSize);
|
CopyMem(pCmdLine, pImageInfo->LoadOptions, pImageInfo->LoadOptionsSize);
|
||||||
|
|
||||||
|
if (StrStr(pCmdLine, L"vtoyefitest"))
|
||||||
|
{
|
||||||
|
gST->ConOut->OutputString(gST->ConOut, L"\r\n##########################");
|
||||||
|
gST->ConOut->OutputString(gST->ConOut, L"\r\n######### VTOY #########");
|
||||||
|
gST->ConOut->OutputString(gST->ConOut, L"\r\n##########################");
|
||||||
|
return EFI_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
if (StrStr(pCmdLine, L"debug"))
|
if (StrStr(pCmdLine, L"debug"))
|
||||||
{
|
{
|
||||||
gVtoyDebugPrint = TRUE;
|
gVtoyDebugPrint = TRUE;
|
||||||
@@ -100,8 +108,9 @@ STATIC EFI_STATUS ParseCmdline(IN EFI_HANDLE ImageHandle)
|
|||||||
}
|
}
|
||||||
|
|
||||||
gCurFeature = pPos + StrLen(L"feature=");
|
gCurFeature = pPos + StrLen(L"feature=");
|
||||||
|
|
||||||
gCmdLine = pCmdLine;
|
gCmdLine = pCmdLine;
|
||||||
|
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -116,7 +125,7 @@ EFI_STATUS EFIAPI VtoyUtilEfiMain
|
|||||||
|
|
||||||
ParseCmdline(ImageHandle);
|
ParseCmdline(ImageHandle);
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(gFeatureList); i++)
|
for (i = 0; gCurFeature && i < ARRAY_SIZE(gFeatureList); i++)
|
||||||
{
|
{
|
||||||
Len = StrLen(gFeatureList[i].Cmd);
|
Len = StrLen(gFeatureList[i].Cmd);
|
||||||
if (StrnCmp(gFeatureList[i].Cmd, gCurFeature, Len) == 0)
|
if (StrnCmp(gFeatureList[i].Cmd, gCurFeature, Len) == 0)
|
||||||
@@ -127,8 +136,11 @@ EFI_STATUS EFIAPI VtoyUtilEfiMain
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FreePool(gCmdLine);
|
if (gCmdLine)
|
||||||
gCmdLine = NULL;
|
{
|
||||||
|
FreePool(gCmdLine);
|
||||||
|
gCmdLine = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@@ -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
|
||||||
|
@@ -743,8 +743,8 @@ grub_iso9660_iterate_dir (grub_fshelp_node_t dir,
|
|||||||
if (!ctx.filename && dirent.namelen == 1 && name[0] == 1)
|
if (!ctx.filename && dirent.namelen == 1 && name[0] == 1)
|
||||||
ctx.filename = (char *) "..";
|
ctx.filename = (char *) "..";
|
||||||
|
|
||||||
if (g_fs_name_nocase)
|
if (g_fs_name_nocase)
|
||||||
ctx.type |= GRUB_FSHELP_CASE_INSENSITIVE;
|
ctx.type |= GRUB_FSHELP_CASE_INSENSITIVE;
|
||||||
|
|
||||||
/* The filename was not stored in a rock ridge entry. Read it
|
/* The filename was not stored in a rock ridge entry. Read it
|
||||||
from the iso9660 filesystem. */
|
from the iso9660 filesystem. */
|
||||||
|
@@ -70,10 +70,10 @@ SetLogging(VOID)
|
|||||||
CHAR16 LogVar[4];
|
CHAR16 LogVar[4];
|
||||||
UINTN i, LogVarSize = sizeof(LogVar);
|
UINTN i, LogVarSize = sizeof(LogVar);
|
||||||
|
|
||||||
i = LogVarSize;
|
i = LogVarSize;
|
||||||
Status = RT->GetVariable(L"FS_NAME_NOCASE", &ShellVariable, NULL, &i, LogVar);
|
Status = RT->GetVariable(L"FS_NAME_NOCASE", &ShellVariable, NULL, &i, LogVar);
|
||||||
if (Status == EFI_SUCCESS)
|
if (Status == EFI_SUCCESS)
|
||||||
g_fs_name_nocase = 1;
|
g_fs_name_nocase = 1;
|
||||||
|
|
||||||
Status = RT->GetVariable(L"FS_LOGGING", &ShellVariable, NULL, &LogVarSize, LogVar);
|
Status = RT->GetVariable(L"FS_LOGGING", &ShellVariable, NULL, &LogVarSize, LogVar);
|
||||||
if (Status == EFI_SUCCESS)
|
if (Status == EFI_SUCCESS)
|
||||||
|
32
ExFAT/buidexfat_aarch64.sh
Normal file
32
ExFAT/buidexfat_aarch64.sh
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
CUR="$PWD"
|
||||||
|
|
||||||
|
if ! [ -e LIBFUSE ]; then
|
||||||
|
./buidlibfuse.sh
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm -f EXFAT/shared/*
|
||||||
|
|
||||||
|
|
||||||
|
rm -rf exfat-1.3.0
|
||||||
|
unzip exfat-1.3.0.zip
|
||||||
|
sed "/printf.*VERSION/a\ if (access(\"/etc/initrd-release\", F_OK) >= 0) argv[0][0] = '@';" -i exfat-1.3.0/fuse/main.c
|
||||||
|
|
||||||
|
cd exfat-1.3.0
|
||||||
|
autoreconf --install
|
||||||
|
./configure --prefix="$CUR" CFLAGS='-O2 -D_FILE_OFFSET_BITS=64' FUSE_CFLAGS="-I$CUR/LIBFUSE/include/" FUSE_LIBS="$CUR/LIBFUSE/lib/libfuse.a -lpthread -ldl"
|
||||||
|
make
|
||||||
|
|
||||||
|
strip --strip-all fuse/mount.exfat-fuse
|
||||||
|
strip --strip-all mkfs/mkexfatfs
|
||||||
|
|
||||||
|
cp fuse/mount.exfat-fuse ../EXFAT/shared/mount.exfat-fuse
|
||||||
|
cp mkfs/mkexfatfs ../EXFAT/shared/mkexfatfs
|
||||||
|
|
||||||
|
cd ..
|
||||||
|
rm -rf exfat-1.3.0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
29
ExFAT/buidlibfuse_aarch64.sh
Normal file
29
ExFAT/buidlibfuse_aarch64.sh
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
CUR="$PWD"
|
||||||
|
|
||||||
|
rm -rf libfuse
|
||||||
|
rm -rf LIBFUSE
|
||||||
|
|
||||||
|
if [ -e mirrors-libfuse-fuse-2.9.9.zip ]; then
|
||||||
|
unzip mirrors-libfuse-fuse-2.9.9.zip
|
||||||
|
cd libfuse
|
||||||
|
else
|
||||||
|
unzip libfuse-fuse-2.9.9.zip
|
||||||
|
cd libfuse-fuse-2.9.9
|
||||||
|
fi
|
||||||
|
|
||||||
|
./makeconf.sh
|
||||||
|
|
||||||
|
./configure --prefix="$CUR/LIBFUSE"
|
||||||
|
|
||||||
|
sed '/#define *__u64/d' -i include/fuse_kernel.h
|
||||||
|
sed '/#define *__s64/d' -i include/fuse_kernel.h
|
||||||
|
|
||||||
|
sed 's/__u64/uint64_t/g' -i include/fuse_kernel.h
|
||||||
|
sed 's/__s64/int64_t/g' -i include/fuse_kernel.h
|
||||||
|
|
||||||
|
make -j 16
|
||||||
|
make install
|
||||||
|
cd ..
|
||||||
|
rm -rf libfuse
|
@@ -11,10 +11,16 @@ else
|
|||||||
opt=-lrt
|
opt=-lrt
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
#
|
||||||
|
# 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"
|
||||||
|
21
FUSEISO/build_aarch64.sh
Normal file
21
FUSEISO/build_aarch64.sh
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
CUR="$PWD"
|
||||||
|
|
||||||
|
LIBFUSE_DIR=$CUR/LIBFUSE
|
||||||
|
|
||||||
|
name=vtoy_fuse_iso_aa64
|
||||||
|
|
||||||
|
export C_INCLUDE_PATH=$LIBFUSE_DIR/include
|
||||||
|
|
||||||
|
rm -f $name
|
||||||
|
aarch64-buildroot-linux-uclibc-gcc -static -O2 -D_FILE_OFFSET_BITS=64 vtoy_fuse_iso.c -o $name $LIBFUSE_DIR/lib/libfuse.a
|
||||||
|
|
||||||
|
if [ -e $name ]; then
|
||||||
|
echo -e "\n############### SUCCESS $name ##################\n"
|
||||||
|
else
|
||||||
|
echo -e "\n############### FAILED $name ##################\n"
|
||||||
|
fi
|
||||||
|
|
||||||
|
aarch64-buildroot-linux-uclibc-strip --strip-all $name
|
||||||
|
|
@@ -7,6 +7,8 @@
|
|||||||
#
|
#
|
||||||
#
|
#
|
||||||
|
|
||||||
|
# use mini-native-x86_64 UCLIBC to build for x86_64
|
||||||
|
|
||||||
|
|
||||||
CUR="$PWD"
|
CUR="$PWD"
|
||||||
LIBFUSE_DIR=$CUR/LIBFUSE
|
LIBFUSE_DIR=$CUR/LIBFUSE
|
||||||
@@ -31,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 ..
|
||||||
|
46
FUSEISO/build_libfuse_aarch64.sh
Normal file
46
FUSEISO/build_libfuse_aarch64.sh
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Package Dependency:
|
||||||
|
# gcc automake autoconf gettext gettext-devel libtool unzip
|
||||||
|
#
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
|
CUR="$PWD"
|
||||||
|
LIBFUSE_DIR=$CUR/LIBFUSE
|
||||||
|
|
||||||
|
rm -rf libfuse
|
||||||
|
rm -rf $LIBFUSE_DIR
|
||||||
|
|
||||||
|
# please download https://codeload.github.com/libfuse/libfuse/zip/fuse-2.9.9
|
||||||
|
if [ -e ../ExFAT/mirrors-libfuse-fuse-2.9.9.zip ]; then
|
||||||
|
rm -rf libfuse
|
||||||
|
unzip ../ExFAT/mirrors-libfuse-fuse-2.9.9.zip
|
||||||
|
cd libfuse
|
||||||
|
elif [ -e ../ExFAT/libfuse-fuse-2.9.9.zip ]; then
|
||||||
|
rm -rf libfuse-fuse-2.9.9
|
||||||
|
unzip ../ExFAT/libfuse-fuse-2.9.9.zip
|
||||||
|
cd libfuse-fuse-2.9.9
|
||||||
|
else
|
||||||
|
echo "Please download mirrors-libfuse-fuse-2.9.9.zip first"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
./makeconf.sh
|
||||||
|
|
||||||
|
sed '/#define *__u64/d' -i include/fuse_kernel.h
|
||||||
|
sed '/#define *__s64/d' -i include/fuse_kernel.h
|
||||||
|
|
||||||
|
sed 's/__u64/uint64_t/g' -i include/fuse_kernel.h
|
||||||
|
sed 's/__s64/int64_t/g' -i include/fuse_kernel.h
|
||||||
|
|
||||||
|
./configure --prefix="$LIBFUSE_DIR" --host=aarch64 CC=aarch64-buildroot-linux-uclibc-gcc
|
||||||
|
|
||||||
|
|
||||||
|
make -j 16
|
||||||
|
make install
|
||||||
|
cd ..
|
||||||
|
rm -rf libfuse
|
Binary file not shown.
Binary file not shown.
BIN
FUSEISO/vtoy_fuse_iso_aa64
Normal file
BIN
FUSEISO/vtoy_fuse_iso_aa64
Normal file
Binary file not shown.
@@ -1597,6 +1597,12 @@ module = {
|
|||||||
common = ventoy/lzx.c;
|
common = ventoy/lzx.c;
|
||||||
common = ventoy/xpress.c;
|
common = ventoy/xpress.c;
|
||||||
common = ventoy/huffman.c;
|
common = ventoy/huffman.c;
|
||||||
|
common = ventoy/miniz.c;
|
||||||
|
};
|
||||||
|
|
||||||
|
module = {
|
||||||
|
name = setkey;
|
||||||
|
common = term/setkey.c;
|
||||||
};
|
};
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
|
@@ -479,7 +479,7 @@ LOCAL(stop):
|
|||||||
jmp LOCAL(stop)
|
jmp LOCAL(stop)
|
||||||
|
|
||||||
ventoy_uuid: .ascii "XXXXXXXXXXXXXXXX"
|
ventoy_uuid: .ascii "XXXXXXXXXXXXXXXX"
|
||||||
notification_string: .asciz "GR"
|
notification_string: .asciz "VT"
|
||||||
geometry_error_string: .asciz "Ge"
|
geometry_error_string: .asciz "Ge"
|
||||||
hd_probe_error_string: .asciz "HD"
|
hd_probe_error_string: .asciz "HD"
|
||||||
read_error_string: .asciz "Rd"
|
read_error_string: .asciz "Rd"
|
||||||
|
@@ -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"
|
@@ -41,10 +41,12 @@
|
|||||||
#include <grub/time.h>
|
#include <grub/time.h>
|
||||||
#include <grub/video.h>
|
#include <grub/video.h>
|
||||||
#include <grub/acpi.h>
|
#include <grub/acpi.h>
|
||||||
#include <grub/relocator.h>
|
|
||||||
#include <grub/charset.h>
|
#include <grub/charset.h>
|
||||||
|
#include <grub/crypto.h>
|
||||||
|
#include <grub/lib/crc.h>
|
||||||
#include <grub/ventoy.h>
|
#include <grub/ventoy.h>
|
||||||
#include "ventoy_def.h"
|
#include "ventoy_def.h"
|
||||||
|
#include "miniz.h"
|
||||||
|
|
||||||
GRUB_MOD_LICENSE ("GPLv3+");
|
GRUB_MOD_LICENSE ("GPLv3+");
|
||||||
|
|
||||||
@@ -60,6 +62,7 @@ int g_sort_case_sensitive = 0;
|
|||||||
int g_tree_view_menu_style = 0;
|
int g_tree_view_menu_style = 0;
|
||||||
static grub_file_t g_old_file;
|
static grub_file_t g_old_file;
|
||||||
static int g_ventoy_last_entry_back;
|
static int g_ventoy_last_entry_back;
|
||||||
|
static grub_uint32_t g_ventoy_plat_data;
|
||||||
|
|
||||||
char g_iso_path[256];
|
char g_iso_path[256];
|
||||||
char g_img_swap_tmp_buf[1024];
|
char g_img_swap_tmp_buf[1024];
|
||||||
@@ -97,12 +100,14 @@ char *g_wimiso_path = NULL;
|
|||||||
int g_vhdboot_enable = 0;
|
int g_vhdboot_enable = 0;
|
||||||
|
|
||||||
grub_uint64_t g_conf_replace_offset = 0;
|
grub_uint64_t g_conf_replace_offset = 0;
|
||||||
|
grub_uint64_t g_svd_replace_offset = 0;
|
||||||
conf_replace *g_conf_replace_node = NULL;
|
conf_replace *g_conf_replace_node = NULL;
|
||||||
grub_uint8_t *g_conf_replace_new_buf = NULL;
|
grub_uint8_t *g_conf_replace_new_buf = NULL;
|
||||||
int g_conf_replace_new_len = 0;
|
int g_conf_replace_new_len = 0;
|
||||||
int g_conf_replace_new_len_align = 0;
|
int g_conf_replace_new_len_align = 0;
|
||||||
|
|
||||||
ventoy_gpt_info *g_ventoy_part_info = NULL;
|
ventoy_gpt_info *g_ventoy_part_info = NULL;
|
||||||
|
grub_uint64_t g_ventoy_disk_size = 0;
|
||||||
|
|
||||||
static char *g_tree_script_buf = NULL;
|
static char *g_tree_script_buf = NULL;
|
||||||
static int g_tree_script_pos = 0;
|
static int g_tree_script_pos = 0;
|
||||||
@@ -446,8 +451,8 @@ static grub_err_t ventoy_cmd_break(grub_extcmd_context_t ctxt, int argc, char **
|
|||||||
grub_printf(" 03/13: hook / (+cat log)\r\n");
|
grub_printf(" 03/13: hook / (+cat log)\r\n");
|
||||||
grub_printf("\r\n");
|
grub_printf("\r\n");
|
||||||
grub_printf(" debug:\r\n");
|
grub_printf(" debug:\r\n");
|
||||||
grub_printf(" 0: debug is on\r\n");
|
grub_printf(" 0: debug is off\r\n");
|
||||||
grub_printf(" 1: debug is off\r\n");
|
grub_printf(" 1: debug is on\r\n");
|
||||||
grub_printf("\r\n");
|
grub_printf("\r\n");
|
||||||
VENTOY_CMD_RETURN(GRUB_ERR_NONE);
|
VENTOY_CMD_RETURN(GRUB_ERR_NONE);
|
||||||
}
|
}
|
||||||
@@ -973,7 +978,7 @@ static grub_err_t ventoy_cmd_check_compatible(grub_extcmd_context_t ctxt, int ar
|
|||||||
|
|
||||||
for (i = 0; i < (int)ARRAY_SIZE(files); i++)
|
for (i = 0; i < (int)ARRAY_SIZE(files); i++)
|
||||||
{
|
{
|
||||||
grub_snprintf(buf, sizeof(buf) - 1, "[ -e %s/%s ]", args[0], files[i]);
|
grub_snprintf(buf, sizeof(buf) - 1, "[ -e \"%s/%s\" ]", args[0], files[i]);
|
||||||
if (0 == grub_script_execute_sourcecode(buf))
|
if (0 == grub_script_execute_sourcecode(buf))
|
||||||
{
|
{
|
||||||
debug("file %s exist, ventoy_compatible YES\n", buf);
|
debug("file %s exist, ventoy_compatible YES\n", buf);
|
||||||
@@ -1351,6 +1356,32 @@ static int ventoy_colect_img_files(const char *filename, const struct grub_dirho
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int ventoy_arch_mode_init(void)
|
||||||
|
{
|
||||||
|
#ifdef GRUB_MACHINE_EFI
|
||||||
|
if (grub_strcmp(GRUB_TARGET_CPU, "i386") == 0)
|
||||||
|
{
|
||||||
|
g_ventoy_plat_data = VTOY_PLAT_I386_UEFI;
|
||||||
|
grub_snprintf(g_arch_mode_suffix, sizeof(g_arch_mode_suffix), "%s", "ia32");
|
||||||
|
}
|
||||||
|
else if (grub_strcmp(GRUB_TARGET_CPU, "arm64") == 0)
|
||||||
|
{
|
||||||
|
g_ventoy_plat_data = VTOY_PLAT_ARM64_UEFI;
|
||||||
|
grub_snprintf(g_arch_mode_suffix, sizeof(g_arch_mode_suffix), "%s", "aa64");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
g_ventoy_plat_data = VTOY_PLAT_X86_64_UEFI;
|
||||||
|
grub_snprintf(g_arch_mode_suffix, sizeof(g_arch_mode_suffix), "%s", "uefi");
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
g_ventoy_plat_data = VTOY_PLAT_X86_LEGACY;
|
||||||
|
grub_snprintf(g_arch_mode_suffix, sizeof(g_arch_mode_suffix), "%s", "legacy");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int ventoy_fill_data(grub_uint32_t buflen, char *buffer)
|
int ventoy_fill_data(grub_uint32_t buflen, char *buffer)
|
||||||
{
|
{
|
||||||
int len = GRUB_UINT_MAX;
|
int len = GRUB_UINT_MAX;
|
||||||
@@ -1402,11 +1433,7 @@ int ventoy_fill_data(grub_uint32_t buflen, char *buffer)
|
|||||||
|
|
||||||
grub_memcpy(guidstr, &guid, sizeof(guid));
|
grub_memcpy(guidstr, &guid, sizeof(guid));
|
||||||
|
|
||||||
#if defined (GRUB_MACHINE_EFI)
|
puint2[0] = grub_swap_bytes32(g_ventoy_plat_data);
|
||||||
puint2[0] = grub_swap_bytes32(0x55454649);
|
|
||||||
#else
|
|
||||||
puint2[0] = grub_swap_bytes32(0x42494f53);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Easter egg :) It will be appreciated if you reserve it, but NOT mandatory. */
|
/* Easter egg :) It will be appreciated if you reserve it, but NOT mandatory. */
|
||||||
#pragma GCC diagnostic push
|
#pragma GCC diagnostic push
|
||||||
@@ -1427,6 +1454,55 @@ int ventoy_fill_data(grub_uint32_t buflen, char *buffer)
|
|||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int ventoy_check_password(const vtoy_password *pwd, int retry)
|
||||||
|
{
|
||||||
|
int offset;
|
||||||
|
char input[256];
|
||||||
|
grub_uint8_t md5[16];
|
||||||
|
|
||||||
|
while (retry--)
|
||||||
|
{
|
||||||
|
grub_memset(input, 0, sizeof(input));
|
||||||
|
|
||||||
|
grub_printf("Enter password: ");
|
||||||
|
grub_refresh();
|
||||||
|
|
||||||
|
if (pwd->type == VTOY_PASSWORD_TXT)
|
||||||
|
{
|
||||||
|
grub_password_get(input, 128);
|
||||||
|
if (grub_strcmp(pwd->text, input) == 0)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (pwd->type == VTOY_PASSWORD_MD5)
|
||||||
|
{
|
||||||
|
grub_password_get(input, 128);
|
||||||
|
grub_crypto_hash(GRUB_MD_MD5, md5, input, grub_strlen(input));
|
||||||
|
if (grub_memcmp(pwd->md5, md5, 16) == 0)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (pwd->type == VTOY_PASSWORD_SALT_MD5)
|
||||||
|
{
|
||||||
|
offset = (int)grub_snprintf(input, 128, "%s", pwd->salt);
|
||||||
|
grub_password_get(input + offset, 128);
|
||||||
|
|
||||||
|
grub_crypto_hash(GRUB_MD_MD5, md5, input, grub_strlen(input));
|
||||||
|
if (grub_memcmp(pwd->md5, md5, 16) == 0)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
grub_printf("Invalid password!\n\n");
|
||||||
|
grub_refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
static img_info * ventoy_get_min_iso(img_iterator_node *node)
|
static img_info * ventoy_get_min_iso(img_iterator_node *node)
|
||||||
{
|
{
|
||||||
img_info *minimg = NULL;
|
img_info *minimg = NULL;
|
||||||
@@ -1636,6 +1712,7 @@ int ventoy_check_device_result(int ret)
|
|||||||
|
|
||||||
int ventoy_check_device(grub_device_t dev)
|
int ventoy_check_device(grub_device_t dev)
|
||||||
{
|
{
|
||||||
|
int workaround = 0;
|
||||||
grub_file_t file;
|
grub_file_t file;
|
||||||
grub_uint64_t offset;
|
grub_uint64_t offset;
|
||||||
char devname[64];
|
char devname[64];
|
||||||
@@ -1651,13 +1728,31 @@ int ventoy_check_device(grub_device_t dev)
|
|||||||
|
|
||||||
if (0 == ventoy_check_file_exist("(%s,2)/ventoy/ventoy.cpio", dev->disk->name) ||
|
if (0 == ventoy_check_file_exist("(%s,2)/ventoy/ventoy.cpio", dev->disk->name) ||
|
||||||
0 == ventoy_check_file_exist("(%s,2)/grub/localboot.cfg", dev->disk->name) ||
|
0 == ventoy_check_file_exist("(%s,2)/grub/localboot.cfg", dev->disk->name) ||
|
||||||
0 == ventoy_check_file_exist("(%s,2)/tool/mount.exfat-fuse_64", dev->disk->name))
|
0 == ventoy_check_file_exist("(%s,2)/tool/mount.exfat-fuse_aarch64", dev->disk->name))
|
||||||
{
|
{
|
||||||
return ventoy_check_device_result(2 | 0x1000);
|
#ifndef GRUB_MACHINE_EFI
|
||||||
|
if (0 == ventoy_check_file_exist("(ventoydisk)/ventoy/ventoy.cpio", dev->disk->name) ||
|
||||||
|
0 == ventoy_check_file_exist("(ventoydisk)/grub/localboot.cfg", dev->disk->name) ||
|
||||||
|
0 == ventoy_check_file_exist("(ventoydisk)/tool/mount.exfat-fuse_aarch64", dev->disk->name))
|
||||||
|
{
|
||||||
|
return ventoy_check_device_result(2 | 0x1000);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
workaround = 1;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/* We must have partition 2 */
|
/* We must have partition 2 */
|
||||||
file = ventoy_grub_file_open(VENTOY_FILE_TYPE, "(%s,2)/ventoy/ventoy.cpio", dev->disk->name);
|
if (workaround)
|
||||||
|
{
|
||||||
|
file = ventoy_grub_file_open(VENTOY_FILE_TYPE, "%s", "(ventoydisk)/ventoy/ventoy.cpio");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
file = ventoy_grub_file_open(VENTOY_FILE_TYPE, "(%s,2)/ventoy/ventoy.cpio", dev->disk->name);
|
||||||
|
}
|
||||||
if (!file)
|
if (!file)
|
||||||
{
|
{
|
||||||
return ventoy_check_device_result(3 | 0x1000);
|
return ventoy_check_device_result(3 | 0x1000);
|
||||||
@@ -1675,37 +1770,68 @@ int ventoy_check_device(grub_device_t dev)
|
|||||||
return ventoy_check_device_result(5);
|
return ventoy_check_device_result(5);
|
||||||
}
|
}
|
||||||
|
|
||||||
offset = partition->start + partition->len;
|
if (workaround)
|
||||||
partition = file->device->disk->partition;
|
|
||||||
if ((partition->number != 1) || (partition->len != 65536) || (offset != partition->start))
|
|
||||||
{
|
{
|
||||||
grub_file_close(file);
|
if (grub_strncmp(g_ventoy_part_info->Head.Signature, "EFI PART", 8) == 0)
|
||||||
return ventoy_check_device_result(6);
|
{
|
||||||
|
ventoy_gpt_part_tbl *PartTbl = g_ventoy_part_info->PartTbl;
|
||||||
|
if (PartTbl[1].StartLBA != PartTbl[0].LastLBA + 1 ||
|
||||||
|
(PartTbl[1].LastLBA + 1 - PartTbl[1].StartLBA) != 65536)
|
||||||
|
{
|
||||||
|
grub_file_close(file);
|
||||||
|
return ventoy_check_device_result(6);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ventoy_part_table *PartTbl = g_ventoy_part_info->MBR.PartTbl;
|
||||||
|
if (PartTbl[1].StartSectorId != PartTbl[0].StartSectorId + PartTbl[0].SectorCount ||
|
||||||
|
PartTbl[1].SectorCount != 65536)
|
||||||
|
{
|
||||||
|
grub_file_close(file);
|
||||||
|
return ventoy_check_device_result(6);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
offset = partition->start + partition->len;
|
||||||
|
partition = file->device->disk->partition;
|
||||||
|
if ((partition->number != 1) || (partition->len != 65536) || (offset != partition->start))
|
||||||
|
{
|
||||||
|
grub_file_close(file);
|
||||||
|
return ventoy_check_device_result(7);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
grub_file_close(file);
|
grub_file_close(file);
|
||||||
|
|
||||||
grub_snprintf(devname, sizeof(devname), "%s,2", dev->disk->name);
|
if (workaround == 0)
|
||||||
dev2 = grub_device_open(devname);
|
|
||||||
if (!dev2)
|
|
||||||
{
|
{
|
||||||
return ventoy_check_device_result(7);
|
grub_snprintf(devname, sizeof(devname), "%s,2", dev->disk->name);
|
||||||
}
|
dev2 = grub_device_open(devname);
|
||||||
|
if (!dev2)
|
||||||
|
{
|
||||||
|
return ventoy_check_device_result(8);
|
||||||
|
}
|
||||||
|
|
||||||
fs = grub_fs_probe(dev2);
|
fs = grub_fs_probe(dev2);
|
||||||
if (!fs)
|
if (!fs)
|
||||||
{
|
{
|
||||||
grub_device_close(dev2);
|
grub_device_close(dev2);
|
||||||
return ventoy_check_device_result(8);
|
return ventoy_check_device_result(9);
|
||||||
}
|
}
|
||||||
|
|
||||||
fs->fs_label(dev2, &label);
|
fs->fs_label(dev2, &label);
|
||||||
if ((!label) || grub_strncmp("VTOYEFI", label, 7))
|
if ((!label) || grub_strncmp("VTOYEFI", label, 7))
|
||||||
{
|
{
|
||||||
grub_device_close(dev2);
|
grub_device_close(dev2);
|
||||||
return ventoy_check_device_result(9);
|
return ventoy_check_device_result(10);
|
||||||
}
|
}
|
||||||
|
|
||||||
grub_device_close(dev2);
|
grub_device_close(dev2);
|
||||||
|
}
|
||||||
|
|
||||||
return ventoy_check_device_result(0);
|
return ventoy_check_device_result(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2057,6 +2183,8 @@ static grub_err_t ventoy_cmd_chosen_img_path(grub_extcmd_context_t ctxt, int arg
|
|||||||
grub_env_set(args[1], value);
|
grub_env_set(args[1], value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
g_svd_replace_offset = 0;
|
||||||
|
|
||||||
VENTOY_CMD_RETURN(GRUB_ERR_NONE);
|
VENTOY_CMD_RETURN(GRUB_ERR_NONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2607,67 +2735,6 @@ static grub_err_t ventoy_cmd_dump_img_sector(grub_extcmd_context_t ctxt, int arg
|
|||||||
VENTOY_CMD_RETURN(GRUB_ERR_NONE);
|
VENTOY_CMD_RETURN(GRUB_ERR_NONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef GRUB_MACHINE_EFI
|
|
||||||
static grub_err_t ventoy_cmd_relocator_chaindata(grub_extcmd_context_t ctxt, int argc, char **args)
|
|
||||||
{
|
|
||||||
(void)ctxt;
|
|
||||||
(void)argc;
|
|
||||||
(void)args;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
static grub_err_t ventoy_cmd_relocator_chaindata(grub_extcmd_context_t ctxt, int argc, char **args)
|
|
||||||
{
|
|
||||||
int rc = 0;
|
|
||||||
ulong chain_len = 0;
|
|
||||||
char *chain_data = NULL;
|
|
||||||
char *relocator_addr = NULL;
|
|
||||||
grub_relocator_chunk_t ch;
|
|
||||||
struct grub_relocator *relocator = NULL;
|
|
||||||
char envbuf[64] = { 0 };
|
|
||||||
|
|
||||||
(void)ctxt;
|
|
||||||
(void)argc;
|
|
||||||
(void)args;
|
|
||||||
|
|
||||||
if (argc != 2)
|
|
||||||
{
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
chain_data = (char *)grub_strtoul(args[0], NULL, 16);
|
|
||||||
chain_len = grub_strtoul(args[1], NULL, 10);
|
|
||||||
|
|
||||||
relocator = grub_relocator_new ();
|
|
||||||
if (!relocator)
|
|
||||||
{
|
|
||||||
debug("grub_relocator_new failed %p %lu\n", chain_data, chain_len);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
rc = grub_relocator_alloc_chunk_addr (relocator, &ch,
|
|
||||||
0x100000, // GRUB_LINUX_BZIMAGE_ADDR,
|
|
||||||
chain_len);
|
|
||||||
if (rc)
|
|
||||||
{
|
|
||||||
debug("grub_relocator_alloc_chunk_addr failed %d %p %lu\n", rc, chain_data, chain_len);
|
|
||||||
grub_relocator_unload (relocator);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
relocator_addr = get_virtual_current_address(ch);
|
|
||||||
|
|
||||||
grub_memcpy(relocator_addr, chain_data, chain_len);
|
|
||||||
|
|
||||||
grub_relocator_unload (relocator);
|
|
||||||
|
|
||||||
grub_snprintf(envbuf, sizeof(envbuf), "0x%lx", (unsigned long)relocator_addr);
|
|
||||||
grub_env_set("vtoy_chain_relocator_addr", envbuf);
|
|
||||||
|
|
||||||
VENTOY_CMD_RETURN(GRUB_ERR_NONE);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static grub_err_t ventoy_cmd_test_block_list(grub_extcmd_context_t ctxt, int argc, char **args)
|
static grub_err_t ventoy_cmd_test_block_list(grub_extcmd_context_t ctxt, int argc, char **args)
|
||||||
{
|
{
|
||||||
grub_uint32_t i;
|
grub_uint32_t i;
|
||||||
@@ -3386,6 +3453,22 @@ static grub_err_t ventoy_cmd_pop_last_entry(grub_extcmd_context_t ctxt, int argc
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
grub_uint64_t ventoy_get_part1_size(ventoy_gpt_info *gpt)
|
||||||
|
{
|
||||||
|
grub_uint64_t sectors;
|
||||||
|
|
||||||
|
if (grub_strncmp(gpt->Head.Signature, "EFI PART", 8) == 0)
|
||||||
|
{
|
||||||
|
sectors = gpt->PartTbl[0].LastLBA + 1 - gpt->PartTbl[0].StartLBA;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sectors = gpt->MBR.PartTbl[0].SectorCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
return sectors * 512;
|
||||||
|
}
|
||||||
|
|
||||||
static int ventoy_lib_module_callback(const char *filename, const struct grub_dirhook_info *info, void *data)
|
static int ventoy_lib_module_callback(const char *filename, const struct grub_dirhook_info *info, void *data)
|
||||||
{
|
{
|
||||||
const char *pos = filename + 1;
|
const char *pos = filename + 1;
|
||||||
@@ -3488,6 +3571,8 @@ static grub_err_t ventoy_cmd_load_part_table(grub_extcmd_context_t ctxt, int arg
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
g_ventoy_disk_size = disk->total_sectors * (1U << disk->log_sector_size);
|
||||||
|
|
||||||
grub_disk_read(disk, 0, 0, sizeof(ventoy_gpt_info), g_ventoy_part_info);
|
grub_disk_read(disk, 0, 0, sizeof(ventoy_gpt_info), g_ventoy_part_info);
|
||||||
grub_disk_close(disk);
|
grub_disk_close(disk);
|
||||||
|
|
||||||
@@ -3830,14 +3915,14 @@ int ventoy_is_file_exist(const char *fmt, ...)
|
|||||||
char *pos = NULL;
|
char *pos = NULL;
|
||||||
char buf[256] = {0};
|
char buf[256] = {0};
|
||||||
|
|
||||||
grub_snprintf(buf, sizeof(buf), "%s", "[ -f ");
|
grub_snprintf(buf, sizeof(buf), "%s", "[ -f \"");
|
||||||
pos = buf + 5;
|
pos = buf + 6;
|
||||||
|
|
||||||
va_start (ap, fmt);
|
va_start (ap, fmt);
|
||||||
len = grub_vsnprintf(pos, 255, fmt, ap);
|
len = grub_vsnprintf(pos, 255, fmt, ap);
|
||||||
va_end (ap);
|
va_end (ap);
|
||||||
|
|
||||||
grub_strncpy(pos + len, " ]", 2);
|
grub_strncpy(pos + len, "\" ]", 3);
|
||||||
|
|
||||||
debug("script exec %s\n", buf);
|
debug("script exec %s\n", buf);
|
||||||
|
|
||||||
@@ -3856,14 +3941,14 @@ int ventoy_is_dir_exist(const char *fmt, ...)
|
|||||||
char *pos = NULL;
|
char *pos = NULL;
|
||||||
char buf[256] = {0};
|
char buf[256] = {0};
|
||||||
|
|
||||||
grub_snprintf(buf, sizeof(buf), "%s", "[ -d ");
|
grub_snprintf(buf, sizeof(buf), "%s", "[ -d \"");
|
||||||
pos = buf + 5;
|
pos = buf + 6;
|
||||||
|
|
||||||
va_start (ap, fmt);
|
va_start (ap, fmt);
|
||||||
len = grub_vsnprintf(pos, 255, fmt, ap);
|
len = grub_vsnprintf(pos, 255, fmt, ap);
|
||||||
va_end (ap);
|
va_end (ap);
|
||||||
|
|
||||||
grub_strncpy(pos + len, " ]", 2);
|
grub_strncpy(pos + len, "\" ]", 3);
|
||||||
|
|
||||||
debug("script exec %s\n", buf);
|
debug("script exec %s\n", buf);
|
||||||
|
|
||||||
@@ -3875,6 +3960,47 @@ int ventoy_is_dir_exist(const char *fmt, ...)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int ventoy_gzip_compress(void *mem_in, int mem_in_len, void *mem_out, int mem_out_len)
|
||||||
|
{
|
||||||
|
mz_stream s;
|
||||||
|
grub_uint8_t *outbuf;
|
||||||
|
grub_uint8_t gzHdr[10] =
|
||||||
|
{
|
||||||
|
0x1F, 0x8B, /* magic */
|
||||||
|
8, /* z method */
|
||||||
|
0, /* flags */
|
||||||
|
0,0,0,0, /* mtime */
|
||||||
|
4, /* xfl */
|
||||||
|
3, /* OS */
|
||||||
|
};
|
||||||
|
|
||||||
|
grub_memset(&s, 0, sizeof(mz_stream));
|
||||||
|
|
||||||
|
mz_deflateInit2(&s, 1, MZ_DEFLATED, -MZ_DEFAULT_WINDOW_BITS, 6, MZ_DEFAULT_STRATEGY);
|
||||||
|
|
||||||
|
outbuf = (grub_uint8_t *)mem_out;
|
||||||
|
|
||||||
|
mem_out_len -= sizeof(gzHdr) + 8;
|
||||||
|
grub_memcpy(outbuf, gzHdr, sizeof(gzHdr));
|
||||||
|
outbuf += sizeof(gzHdr);
|
||||||
|
|
||||||
|
s.avail_in = mem_in_len;
|
||||||
|
s.next_in = mem_in;
|
||||||
|
|
||||||
|
s.avail_out = mem_out_len;
|
||||||
|
s.next_out = outbuf;
|
||||||
|
|
||||||
|
mz_deflate(&s, MZ_FINISH);
|
||||||
|
|
||||||
|
mz_deflateEnd(&s);
|
||||||
|
|
||||||
|
outbuf += s.total_out;
|
||||||
|
*(grub_uint32_t *)outbuf = grub_getcrc32c(0, outbuf, s.total_out);
|
||||||
|
*(grub_uint32_t *)(outbuf + 4) = (grub_uint32_t)(s.total_out);
|
||||||
|
|
||||||
|
return s.total_out + sizeof(gzHdr) + 8;
|
||||||
|
}
|
||||||
|
|
||||||
static int ventoy_env_init(void)
|
static int ventoy_env_init(void)
|
||||||
{
|
{
|
||||||
char buf[64];
|
char buf[64];
|
||||||
@@ -3926,6 +4052,7 @@ static cmd_para ventoy_cmds[] =
|
|||||||
{ "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_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 },
|
||||||
{ "vt_load_cpio", ventoy_cmd_load_cpio, 0, NULL, "", "", NULL },
|
{ "vt_load_cpio", ventoy_cmd_load_cpio, 0, NULL, "", "", NULL },
|
||||||
{ "vt_trailer_cpio", ventoy_cmd_trailer_cpio, 0, NULL, "", "", NULL },
|
{ "vt_trailer_cpio", ventoy_cmd_trailer_cpio, 0, NULL, "", "", NULL },
|
||||||
@@ -3983,13 +4110,13 @@ static cmd_para ventoy_cmds[] =
|
|||||||
{ "vt_wim_chain_data", ventoy_cmd_wim_chain_data, 0, NULL, "", "", NULL },
|
{ "vt_wim_chain_data", ventoy_cmd_wim_chain_data, 0, NULL, "", "", NULL },
|
||||||
|
|
||||||
{ "vt_add_replace_file", ventoy_cmd_add_replace_file, 0, NULL, "", "", NULL },
|
{ "vt_add_replace_file", ventoy_cmd_add_replace_file, 0, NULL, "", "", NULL },
|
||||||
{ "vt_relocator_chaindata", ventoy_cmd_relocator_chaindata, 0, NULL, "", "", NULL },
|
|
||||||
{ "vt_test_block_list", ventoy_cmd_test_block_list, 0, NULL, "", "", NULL },
|
{ "vt_test_block_list", ventoy_cmd_test_block_list, 0, NULL, "", "", NULL },
|
||||||
{ "vt_file_exist_nocase", ventoy_cmd_file_exist_nocase, 0, NULL, "", "", NULL },
|
{ "vt_file_exist_nocase", ventoy_cmd_file_exist_nocase, 0, NULL, "", "", NULL },
|
||||||
|
|
||||||
|
|
||||||
{ "vt_load_plugin", ventoy_cmd_load_plugin, 0, NULL, "", "", NULL },
|
{ "vt_load_plugin", ventoy_cmd_load_plugin, 0, NULL, "", "", NULL },
|
||||||
{ "vt_check_plugin_json", ventoy_cmd_plugin_check_json, 0, NULL, "", "", NULL },
|
{ "vt_check_plugin_json", ventoy_cmd_plugin_check_json, 0, NULL, "", "", NULL },
|
||||||
|
{ "vt_check_password", ventoy_cmd_check_password, 0, NULL, "", "", NULL },
|
||||||
|
|
||||||
{ "vt_1st_line", ventoy_cmd_read_1st_line, 0, NULL, "", "", NULL },
|
{ "vt_1st_line", ventoy_cmd_read_1st_line, 0, NULL, "", "", NULL },
|
||||||
{ "vt_file_strstr", ventoy_cmd_file_strstr, 0, NULL, "", "", NULL },
|
{ "vt_file_strstr", ventoy_cmd_file_strstr, 0, NULL, "", "", NULL },
|
||||||
@@ -4003,6 +4130,8 @@ static cmd_para ventoy_cmds[] =
|
|||||||
{ "vt_unix_reset", ventoy_cmd_unix_reset, 0, NULL, "", "", NULL },
|
{ "vt_unix_reset", ventoy_cmd_unix_reset, 0, NULL, "", "", NULL },
|
||||||
{ "vt_unix_replace_conf", ventoy_cmd_unix_replace_conf, 0, NULL, "", "", NULL },
|
{ "vt_unix_replace_conf", ventoy_cmd_unix_replace_conf, 0, NULL, "", "", NULL },
|
||||||
{ "vt_unix_replace_ko", ventoy_cmd_unix_replace_ko, 0, NULL, "", "", NULL },
|
{ "vt_unix_replace_ko", ventoy_cmd_unix_replace_ko, 0, NULL, "", "", NULL },
|
||||||
|
{ "vt_unix_fill_image_desc", ventoy_cmd_unix_fill_image_desc, 0, NULL, "", "", NULL },
|
||||||
|
{ "vt_unix_gzip_new_ko", ventoy_cmd_unix_gzip_newko, 0, NULL, "", "", NULL },
|
||||||
{ "vt_unix_chain_data", ventoy_cmd_unix_chain_data, 0, NULL, "", "", NULL },
|
{ "vt_unix_chain_data", ventoy_cmd_unix_chain_data, 0, NULL, "", "", NULL },
|
||||||
|
|
||||||
{ "vt_img_hook_root", ventoy_cmd_img_hook_root, 0, NULL, "", "", NULL },
|
{ "vt_img_hook_root", ventoy_cmd_img_hook_root, 0, NULL, "", "", NULL },
|
||||||
@@ -4020,6 +4149,8 @@ GRUB_MOD_INIT(ventoy)
|
|||||||
|
|
||||||
ventoy_env_init();
|
ventoy_env_init();
|
||||||
|
|
||||||
|
ventoy_arch_mode_init();
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(ventoy_cmds); i++)
|
for (i = 0; i < ARRAY_SIZE(ventoy_cmds); i++)
|
||||||
{
|
{
|
||||||
cur = ventoy_cmds + i;
|
cur = ventoy_cmds + i;
|
||||||
|
@@ -52,11 +52,19 @@
|
|||||||
|
|
||||||
#define VTOY_WARNING "!!!!!!!!!!!!! WARNING !!!!!!!!!!!!!"
|
#define VTOY_WARNING "!!!!!!!!!!!!! WARNING !!!!!!!!!!!!!"
|
||||||
|
|
||||||
#ifdef GRUB_MACHINE_EFI
|
#define VTOY_PLAT_I386_UEFI 0x49413332
|
||||||
#define VTOY_DUAL_MODE_SUFFIX "uefi"
|
#define VTOY_PLAT_ARM64_UEFI 0x41413634
|
||||||
#else
|
#define VTOY_PLAT_X86_64_UEFI 0x55454649
|
||||||
#define VTOY_DUAL_MODE_SUFFIX "legacy"
|
#define VTOY_PLAT_X86_LEGACY 0x42494f53
|
||||||
#endif
|
|
||||||
|
#define VTOY_PWD_CORRUPTED(err) \
|
||||||
|
{\
|
||||||
|
grub_printf("\n\n Password corrupted, will reboot after 5 seconds.\n\n"); \
|
||||||
|
grub_refresh(); \
|
||||||
|
grub_sleep(5); \
|
||||||
|
grub_exit(); \
|
||||||
|
return (err);\
|
||||||
|
}
|
||||||
|
|
||||||
typedef struct ventoy_initrd_ctx
|
typedef struct ventoy_initrd_ctx
|
||||||
{
|
{
|
||||||
@@ -245,6 +253,7 @@ extern ventoy_guid g_ventoy_guid;
|
|||||||
extern ventoy_img_chunk_list g_img_chunk_list;
|
extern ventoy_img_chunk_list g_img_chunk_list;
|
||||||
extern ventoy_img_chunk_list g_wimiso_chunk_list;
|
extern ventoy_img_chunk_list g_wimiso_chunk_list;
|
||||||
extern char *g_wimiso_path;
|
extern char *g_wimiso_path;
|
||||||
|
extern char g_arch_mode_suffix[64];
|
||||||
|
|
||||||
extern int g_ventoy_debug;
|
extern int g_ventoy_debug;
|
||||||
void ventoy_debug(const char *fmt, ...);
|
void ventoy_debug(const char *fmt, ...);
|
||||||
@@ -496,6 +505,7 @@ grub_err_t ventoy_cmd_linux_locate_initrd(grub_extcmd_context_t ctxt, int argc,
|
|||||||
grub_err_t ventoy_cmd_initrd_count(grub_extcmd_context_t ctxt, int argc, char **args);
|
grub_err_t ventoy_cmd_initrd_count(grub_extcmd_context_t ctxt, int argc, char **args);
|
||||||
grub_err_t ventoy_cmd_valid_initrd_count(grub_extcmd_context_t ctxt, int argc, char **args);
|
grub_err_t ventoy_cmd_valid_initrd_count(grub_extcmd_context_t ctxt, int argc, char **args);
|
||||||
grub_err_t ventoy_cmd_load_cpio(grub_extcmd_context_t ctxt, int argc, char **args);
|
grub_err_t ventoy_cmd_load_cpio(grub_extcmd_context_t ctxt, int argc, char **args);
|
||||||
|
grub_err_t ventoy_cmd_skip_svd(grub_extcmd_context_t ctxt, int argc, char **args);
|
||||||
grub_err_t ventoy_cmd_cpio_busybox_64(grub_extcmd_context_t ctxt, int argc, char **args);
|
grub_err_t ventoy_cmd_cpio_busybox_64(grub_extcmd_context_t ctxt, int argc, char **args);
|
||||||
grub_err_t ventoy_cmd_trailer_cpio(grub_extcmd_context_t ctxt, int argc, char **args);
|
grub_err_t ventoy_cmd_trailer_cpio(grub_extcmd_context_t ctxt, int argc, char **args);
|
||||||
int ventoy_cpio_newc_fill_head(void *buf, int filesize, const void *filedata, const char *name);
|
int ventoy_cpio_newc_fill_head(void *buf, int filesize, const void *filedata, const char *name);
|
||||||
@@ -825,6 +835,29 @@ typedef struct image_list
|
|||||||
struct image_list *next;
|
struct image_list *next;
|
||||||
}image_list;
|
}image_list;
|
||||||
|
|
||||||
|
#define VTOY_PASSWORD_NONE 0
|
||||||
|
#define VTOY_PASSWORD_TXT 1
|
||||||
|
#define VTOY_PASSWORD_MD5 2
|
||||||
|
#define VTOY_PASSWORD_SALT_MD5 3
|
||||||
|
|
||||||
|
typedef struct vtoy_password
|
||||||
|
{
|
||||||
|
int type;
|
||||||
|
char text[128];
|
||||||
|
char salt[64];
|
||||||
|
grub_uint8_t md5[16];
|
||||||
|
}vtoy_password;
|
||||||
|
|
||||||
|
typedef struct menu_password
|
||||||
|
{
|
||||||
|
int pathlen;
|
||||||
|
char isopath[256];
|
||||||
|
|
||||||
|
vtoy_password password;
|
||||||
|
|
||||||
|
struct menu_password *next;
|
||||||
|
}menu_password;
|
||||||
|
|
||||||
extern int g_ventoy_menu_esc;
|
extern int g_ventoy_menu_esc;
|
||||||
extern int g_ventoy_suppress_esc;
|
extern int g_ventoy_suppress_esc;
|
||||||
extern int g_ventoy_last_entry;
|
extern int g_ventoy_last_entry;
|
||||||
@@ -837,10 +870,12 @@ extern int g_vhdboot_enable;
|
|||||||
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 conf_replace *g_conf_replace_node;
|
extern conf_replace *g_conf_replace_node;
|
||||||
extern grub_uint8_t *g_conf_replace_new_buf;
|
extern grub_uint8_t *g_conf_replace_new_buf;
|
||||||
extern int g_conf_replace_new_len;
|
extern int g_conf_replace_new_len;
|
||||||
extern int g_conf_replace_new_len_align;
|
extern int g_conf_replace_new_len_align;
|
||||||
|
extern grub_uint64_t g_ventoy_disk_size;
|
||||||
|
|
||||||
#define ventoy_unix_fill_virt(new_data, new_len) \
|
#define ventoy_unix_fill_virt(new_data, new_len) \
|
||||||
{ \
|
{ \
|
||||||
@@ -880,6 +915,7 @@ int ventoy_get_block_list(grub_file_t file, ventoy_img_chunk_list *chunklist, gr
|
|||||||
int ventoy_check_block_list(grub_file_t file, ventoy_img_chunk_list *chunklist, grub_disk_addr_t start);
|
int ventoy_check_block_list(grub_file_t file, ventoy_img_chunk_list *chunklist, grub_disk_addr_t start);
|
||||||
void ventoy_plugin_dump_persistence(void);
|
void ventoy_plugin_dump_persistence(void);
|
||||||
grub_err_t ventoy_cmd_plugin_check_json(grub_extcmd_context_t ctxt, int argc, char **args);
|
grub_err_t ventoy_cmd_plugin_check_json(grub_extcmd_context_t ctxt, int argc, char **args);
|
||||||
|
grub_err_t ventoy_cmd_check_password(grub_extcmd_context_t ctxt, int argc, char **args);
|
||||||
grub_err_t ventoy_cmd_linux_get_main_initrd_index(grub_extcmd_context_t ctxt, int argc, char **args);
|
grub_err_t ventoy_cmd_linux_get_main_initrd_index(grub_extcmd_context_t ctxt, int argc, char **args);
|
||||||
grub_err_t ventoy_cmd_collect_wim_patch(grub_extcmd_context_t ctxt, int argc, char **args);
|
grub_err_t ventoy_cmd_collect_wim_patch(grub_extcmd_context_t ctxt, int argc, char **args);
|
||||||
grub_err_t ventoy_cmd_wim_patch_count(grub_extcmd_context_t ctxt, int argc, char **args);
|
grub_err_t ventoy_cmd_wim_patch_count(grub_extcmd_context_t ctxt, int argc, char **args);
|
||||||
@@ -889,6 +925,8 @@ int ventoy_get_disk_guid(const char *filename, grub_uint8_t *guid, grub_uint8_t
|
|||||||
grub_err_t ventoy_cmd_unix_reset(grub_extcmd_context_t ctxt, int argc, char **args);
|
grub_err_t ventoy_cmd_unix_reset(grub_extcmd_context_t ctxt, int argc, char **args);
|
||||||
grub_err_t ventoy_cmd_unix_replace_conf(grub_extcmd_context_t ctxt, int argc, char **args);
|
grub_err_t ventoy_cmd_unix_replace_conf(grub_extcmd_context_t ctxt, int argc, char **args);
|
||||||
grub_err_t ventoy_cmd_unix_replace_ko(grub_extcmd_context_t ctxt, int argc, char **args);
|
grub_err_t ventoy_cmd_unix_replace_ko(grub_extcmd_context_t ctxt, int argc, char **args);
|
||||||
|
grub_err_t ventoy_cmd_unix_fill_image_desc(grub_extcmd_context_t ctxt, int argc, char **args);
|
||||||
|
grub_err_t ventoy_cmd_unix_gzip_newko(grub_extcmd_context_t ctxt, int argc, char **args);
|
||||||
grub_err_t ventoy_cmd_unix_freebsd_ver(grub_extcmd_context_t ctxt, int argc, char **args);
|
grub_err_t ventoy_cmd_unix_freebsd_ver(grub_extcmd_context_t ctxt, int argc, char **args);
|
||||||
grub_err_t ventoy_cmd_parse_freenas_ver(grub_extcmd_context_t ctxt, int argc, char **args);
|
grub_err_t ventoy_cmd_parse_freenas_ver(grub_extcmd_context_t ctxt, int argc, char **args);
|
||||||
int ventoy_check_device_result(int ret);
|
int ventoy_check_device_result(int ret);
|
||||||
@@ -898,6 +936,9 @@ grub_err_t ventoy_cmd_load_vhdboot(grub_extcmd_context_t ctxt, int argc, char **
|
|||||||
grub_err_t ventoy_cmd_patch_vhdboot(grub_extcmd_context_t ctxt, int argc, char **args);
|
grub_err_t ventoy_cmd_patch_vhdboot(grub_extcmd_context_t ctxt, int argc, char **args);
|
||||||
grub_err_t ventoy_cmd_raw_chain_data(grub_extcmd_context_t ctxt, int argc, char **args);
|
grub_err_t ventoy_cmd_raw_chain_data(grub_extcmd_context_t ctxt, int argc, char **args);
|
||||||
grub_err_t ventoy_cmd_get_vtoy_type(grub_extcmd_context_t ctxt, int argc, char **args);
|
grub_err_t ventoy_cmd_get_vtoy_type(grub_extcmd_context_t ctxt, int argc, char **args);
|
||||||
|
int ventoy_check_password(const vtoy_password *pwd, int retry);
|
||||||
|
int ventoy_gzip_compress(void *mem_in, int mem_in_len, void *mem_out, int mem_out_len);
|
||||||
|
grub_uint64_t ventoy_get_part1_size(ventoy_gpt_info *gpt);
|
||||||
|
|
||||||
#endif /* __VENTOY_DEF_H__ */
|
#endif /* __VENTOY_DEF_H__ */
|
||||||
|
|
||||||
|
@@ -740,6 +740,11 @@ static grub_uint32_t ventoy_linux_get_override_chunk_count(void)
|
|||||||
{
|
{
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (g_svd_replace_offset > 0)
|
||||||
|
{
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
@@ -753,6 +758,11 @@ static grub_uint32_t ventoy_linux_get_override_chunk_size(void)
|
|||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (g_svd_replace_offset > 0)
|
||||||
|
{
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
|
||||||
return sizeof(ventoy_override_chunk) * count;
|
return sizeof(ventoy_override_chunk) * count;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -829,6 +839,14 @@ static void ventoy_linux_fill_override_data( grub_uint64_t isosize, void *ove
|
|||||||
cur++;
|
cur++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (g_svd_replace_offset > 0)
|
||||||
|
{
|
||||||
|
cur->img_offset = g_svd_replace_offset;
|
||||||
|
cur->override_size = 1;
|
||||||
|
cur->override_data[0] = 0xFF;
|
||||||
|
cur++;
|
||||||
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -995,12 +1013,15 @@ grub_err_t ventoy_cmd_linux_locate_initrd(grub_extcmd_context_t ctxt, int argc,
|
|||||||
VENTOY_CMD_RETURN(GRUB_ERR_NONE);
|
VENTOY_CMD_RETURN(GRUB_ERR_NONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ventoy_cpio_busybox64(cpio_newc_header *head)
|
static int ventoy_cpio_busybox64(cpio_newc_header *head, const char *file)
|
||||||
{
|
{
|
||||||
char *name;
|
char *name;
|
||||||
int namelen;
|
int namelen;
|
||||||
int offset;
|
int offset;
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
char filepath[128];
|
||||||
|
|
||||||
|
grub_snprintf(filepath, sizeof(filepath), "ventoy/busybox/%s", file);
|
||||||
|
|
||||||
name = (char *)(head + 1);
|
name = (char *)(head + 1);
|
||||||
while (name[0] && count < 2)
|
while (name[0] && count < 2)
|
||||||
@@ -1010,7 +1031,7 @@ static int ventoy_cpio_busybox64(cpio_newc_header *head)
|
|||||||
grub_memcpy(name, "ventoy/busybox/32h", 18);
|
grub_memcpy(name, "ventoy/busybox/32h", 18);
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
else if (grub_strcmp(name, "ventoy/busybox/64h") == 0)
|
else if (grub_strcmp(name, filepath) == 0)
|
||||||
{
|
{
|
||||||
grub_memcpy(name, "ventoy/busybox/ash", 18);
|
grub_memcpy(name, "ventoy/busybox/ash", 18);
|
||||||
count++;
|
count++;
|
||||||
@@ -1037,10 +1058,48 @@ grub_err_t ventoy_cmd_cpio_busybox_64(grub_extcmd_context_t ctxt, int argc, char
|
|||||||
(void)args;
|
(void)args;
|
||||||
|
|
||||||
debug("ventoy_cmd_busybox_64 %d\n", argc);
|
debug("ventoy_cmd_busybox_64 %d\n", argc);
|
||||||
ventoy_cpio_busybox64((cpio_newc_header *)g_ventoy_cpio_buf);
|
ventoy_cpio_busybox64((cpio_newc_header *)g_ventoy_cpio_buf, args[0]);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
grub_err_t ventoy_cmd_skip_svd(grub_extcmd_context_t ctxt, int argc, char **args)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
grub_file_t file;
|
||||||
|
char buf[16];
|
||||||
|
|
||||||
|
(void)ctxt;
|
||||||
|
(void)argc;
|
||||||
|
|
||||||
|
file = ventoy_grub_file_open(VENTOY_FILE_TYPE, "%s", args[0]);
|
||||||
|
if (!file)
|
||||||
|
{
|
||||||
|
return grub_error(GRUB_ERR_BAD_ARGUMENT, "Can't open file %s\n", args[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < 10; i++)
|
||||||
|
{
|
||||||
|
buf[0] = 0;
|
||||||
|
grub_file_seek(file, (17 + i) * 2048);
|
||||||
|
grub_file_read(file, buf, 16);
|
||||||
|
|
||||||
|
if (buf[0] == 2 && grub_strncmp(buf + 1, "CD001", 5) == 0)
|
||||||
|
{
|
||||||
|
debug("Find SVD at VD %d\n", i);
|
||||||
|
g_svd_replace_offset = (17 + i) * 2048;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i >= 10)
|
||||||
|
{
|
||||||
|
debug("SVD not found %d\n", (int)g_svd_replace_offset);
|
||||||
|
}
|
||||||
|
|
||||||
|
grub_file_close(file);
|
||||||
|
|
||||||
|
VENTOY_CMD_RETURN(GRUB_ERR_NONE);
|
||||||
|
}
|
||||||
|
|
||||||
grub_err_t ventoy_cmd_load_cpio(grub_extcmd_context_t ctxt, int argc, char **args)
|
grub_err_t ventoy_cmd_load_cpio(grub_extcmd_context_t ctxt, int argc, char **args)
|
||||||
{
|
{
|
||||||
@@ -1258,7 +1317,12 @@ grub_err_t ventoy_cmd_load_cpio(grub_extcmd_context_t ctxt, int argc, char **arg
|
|||||||
if (grub_strcmp(args[3], "busybox=64") == 0)
|
if (grub_strcmp(args[3], "busybox=64") == 0)
|
||||||
{
|
{
|
||||||
debug("cpio busybox proc %s\n", args[3]);
|
debug("cpio busybox proc %s\n", args[3]);
|
||||||
ventoy_cpio_busybox64((cpio_newc_header *)g_ventoy_cpio_buf);
|
ventoy_cpio_busybox64((cpio_newc_header *)g_ventoy_cpio_buf, "64h");
|
||||||
|
}
|
||||||
|
else if (grub_strcmp(args[3], "busybox=a64") == 0)
|
||||||
|
{
|
||||||
|
debug("cpio busybox proc %s\n", args[3]);
|
||||||
|
ventoy_cpio_busybox64((cpio_newc_header *)g_ventoy_cpio_buf, "a64");
|
||||||
}
|
}
|
||||||
|
|
||||||
VENTOY_CMD_RETURN(GRUB_ERR_NONE);
|
VENTOY_CMD_RETURN(GRUB_ERR_NONE);
|
||||||
|
@@ -32,6 +32,7 @@
|
|||||||
#include <grub/datetime.h>
|
#include <grub/datetime.h>
|
||||||
#include <grub/i18n.h>
|
#include <grub/i18n.h>
|
||||||
#include <grub/net.h>
|
#include <grub/net.h>
|
||||||
|
#include <grub/crypto.h>
|
||||||
#include <grub/time.h>
|
#include <grub/time.h>
|
||||||
#include <grub/font.h>
|
#include <grub/font.h>
|
||||||
#include <grub/ventoy.h>
|
#include <grub/ventoy.h>
|
||||||
@@ -39,9 +40,12 @@
|
|||||||
|
|
||||||
GRUB_MOD_LICENSE ("GPLv3+");
|
GRUB_MOD_LICENSE ("GPLv3+");
|
||||||
|
|
||||||
|
char g_arch_mode_suffix[64];
|
||||||
static char g_iso_disk_name[128];
|
static char g_iso_disk_name[128];
|
||||||
|
static vtoy_password g_boot_pwd;
|
||||||
static install_template *g_install_template_head = NULL;
|
static install_template *g_install_template_head = NULL;
|
||||||
static dud *g_dud_head = NULL;
|
static dud *g_dud_head = NULL;
|
||||||
|
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;
|
||||||
@@ -695,6 +699,258 @@ static int ventoy_plugin_dud_entry(VTOY_JSON *json, const char *isodisk)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int ventoy_plugin_parse_pwdstr(char *pwdstr, vtoy_password *pwd)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
int len;
|
||||||
|
char ch;
|
||||||
|
char *pos;
|
||||||
|
char bytes[3];
|
||||||
|
vtoy_password tmpPwd;
|
||||||
|
|
||||||
|
len = (int)grub_strlen(pwdstr);
|
||||||
|
if (len > 64)
|
||||||
|
{
|
||||||
|
if (NULL == pwd) grub_printf("Password too long %d\n", len);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
grub_memset(&tmpPwd, 0, sizeof(tmpPwd));
|
||||||
|
|
||||||
|
if (grub_strncmp(pwdstr, "txt#", 4) == 0)
|
||||||
|
{
|
||||||
|
tmpPwd.type = VTOY_PASSWORD_TXT;
|
||||||
|
grub_snprintf(tmpPwd.text, sizeof(tmpPwd.text), "%s", pwdstr + 4);
|
||||||
|
}
|
||||||
|
else if (grub_strncmp(pwdstr, "md5#", 4) == 0)
|
||||||
|
{
|
||||||
|
if ((len - 4) == 32)
|
||||||
|
{
|
||||||
|
for (i = 0; i < 16; i++)
|
||||||
|
{
|
||||||
|
bytes[0] = pwdstr[4 + i * 2];
|
||||||
|
bytes[1] = pwdstr[4 + i * 2 + 1];
|
||||||
|
bytes[2] = 0;
|
||||||
|
|
||||||
|
if (grub_isxdigit(bytes[0]) && grub_isxdigit(bytes[1]))
|
||||||
|
{
|
||||||
|
tmpPwd.md5[i] = (grub_uint8_t)grub_strtoul(bytes, NULL, 16);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (NULL == pwd) grub_printf("Invalid md5 hex format %s %d\n", pwdstr, i);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
tmpPwd.type = VTOY_PASSWORD_MD5;
|
||||||
|
}
|
||||||
|
else if ((len - 4) > 32)
|
||||||
|
{
|
||||||
|
pos = grub_strchr(pwdstr + 4, '#');
|
||||||
|
if (!pos)
|
||||||
|
{
|
||||||
|
if (NULL == pwd) grub_printf("Invalid md5 password format %s\n", pwdstr);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (len - 1 - (int)(long)(pos - pwdstr) != 32)
|
||||||
|
{
|
||||||
|
if (NULL == pwd) grub_printf("Invalid md5 salt password format %s\n", pwdstr);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
ch = *pos;
|
||||||
|
*pos = 0;
|
||||||
|
grub_snprintf(tmpPwd.salt, sizeof(tmpPwd.salt), "%s", pwdstr + 4);
|
||||||
|
*pos = ch;
|
||||||
|
|
||||||
|
pos++;
|
||||||
|
for (i = 0; i < 16; i++)
|
||||||
|
{
|
||||||
|
bytes[0] = pos[i * 2];
|
||||||
|
bytes[1] = pos[i * 2 + 1];
|
||||||
|
bytes[2] = 0;
|
||||||
|
|
||||||
|
if (grub_isxdigit(bytes[0]) && grub_isxdigit(bytes[1]))
|
||||||
|
{
|
||||||
|
tmpPwd.md5[i] = (grub_uint8_t)grub_strtoul(bytes, NULL, 16);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (NULL == pwd) grub_printf("Invalid md5 hex format %s %d\n", pwdstr, i);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tmpPwd.type = VTOY_PASSWORD_SALT_MD5;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (NULL == pwd) grub_printf("Invalid md5 password format %s\n", pwdstr);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (NULL == pwd) grub_printf("Invalid password format %s\n", pwdstr);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pwd)
|
||||||
|
{
|
||||||
|
grub_memcpy(pwd, &tmpPwd, sizeof(tmpPwd));
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int ventoy_plugin_pwd_entry(VTOY_JSON *json, const char *isodisk)
|
||||||
|
{
|
||||||
|
const char *iso = NULL;
|
||||||
|
const char *pwd = NULL;
|
||||||
|
VTOY_JSON *pNode = NULL;
|
||||||
|
VTOY_JSON *pCNode = NULL;
|
||||||
|
menu_password *node = NULL;
|
||||||
|
menu_password *tail = NULL;
|
||||||
|
menu_password *next = NULL;
|
||||||
|
|
||||||
|
(void)isodisk;
|
||||||
|
|
||||||
|
if (json->enDataType != JSON_TYPE_OBJECT)
|
||||||
|
{
|
||||||
|
debug("Not object %d\n", json->enDataType);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (g_pwd_head)
|
||||||
|
{
|
||||||
|
for (node = g_pwd_head; node; node = next)
|
||||||
|
{
|
||||||
|
next = node->next;
|
||||||
|
grub_free(node);
|
||||||
|
}
|
||||||
|
|
||||||
|
g_pwd_head = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (pNode = json->pstChild; pNode; pNode = pNode->pstNext)
|
||||||
|
{
|
||||||
|
if (pNode->pcName && grub_strcmp("bootpwd", pNode->pcName) == 0)
|
||||||
|
{
|
||||||
|
ventoy_plugin_parse_pwdstr(pNode->unData.pcStrVal, &g_boot_pwd);
|
||||||
|
}
|
||||||
|
else if (pNode->pcName && grub_strcmp("menupwd", pNode->pcName) == 0)
|
||||||
|
{
|
||||||
|
for (pCNode = pNode->pstChild; pCNode; pCNode = pCNode->pstNext)
|
||||||
|
{
|
||||||
|
if (pCNode->enDataType != JSON_TYPE_OBJECT)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
iso = vtoy_json_get_string_ex(pCNode->pstChild, "file");
|
||||||
|
pwd = vtoy_json_get_string_ex(pCNode->pstChild, "pwd");
|
||||||
|
if (iso && pwd && iso[0] == '/')
|
||||||
|
{
|
||||||
|
node = grub_zalloc(sizeof(menu_password));
|
||||||
|
if (node)
|
||||||
|
{
|
||||||
|
node->pathlen = grub_snprintf(node->isopath, sizeof(node->isopath), "%s", iso);
|
||||||
|
|
||||||
|
if (ventoy_plugin_parse_pwdstr((char *)pwd, &(node->password)))
|
||||||
|
{
|
||||||
|
grub_free(node);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (g_pwd_head)
|
||||||
|
{
|
||||||
|
tail->next = node;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
g_pwd_head = node;
|
||||||
|
}
|
||||||
|
tail = node;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int ventoy_plugin_pwd_check(VTOY_JSON *json, const char *isodisk)
|
||||||
|
{
|
||||||
|
const char *iso = NULL;
|
||||||
|
const char *pwd = NULL;
|
||||||
|
VTOY_JSON *pNode = NULL;
|
||||||
|
VTOY_JSON *pCNode = NULL;
|
||||||
|
|
||||||
|
if (json->enDataType != JSON_TYPE_OBJECT)
|
||||||
|
{
|
||||||
|
grub_printf("Not object %d\n", json->enDataType);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (pNode = json->pstChild; pNode; pNode = pNode->pstNext)
|
||||||
|
{
|
||||||
|
if (pNode->pcName && grub_strcmp("bootpwd", pNode->pcName) == 0)
|
||||||
|
{
|
||||||
|
if (0 == ventoy_plugin_parse_pwdstr(pNode->unData.pcStrVal, NULL))
|
||||||
|
{
|
||||||
|
grub_printf("bootpwd:<%s>\n", pNode->unData.pcStrVal);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
grub_printf("Invalid bootpwd.\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (pNode->pcName && grub_strcmp("menupwd", pNode->pcName) == 0)
|
||||||
|
{
|
||||||
|
grub_printf("\n");
|
||||||
|
for (pCNode = pNode->pstChild; pCNode; pCNode = pCNode->pstNext)
|
||||||
|
{
|
||||||
|
if (pCNode->enDataType != JSON_TYPE_OBJECT)
|
||||||
|
{
|
||||||
|
grub_printf("Not object %d\n", pCNode->enDataType);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
iso = vtoy_json_get_string_ex(pCNode->pstChild, "file");
|
||||||
|
if (iso)
|
||||||
|
{
|
||||||
|
if (0 == ventoy_plugin_check_path(isodisk, iso))
|
||||||
|
{
|
||||||
|
pwd = vtoy_json_get_string_ex(pCNode->pstChild, "pwd");
|
||||||
|
|
||||||
|
if (0 == ventoy_plugin_parse_pwdstr((char *)pwd, NULL))
|
||||||
|
{
|
||||||
|
grub_printf("file:<%s> [OK]\n", iso);
|
||||||
|
grub_printf("pwd:<%s>\n\n", pwd);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
grub_printf("Invalid password for <%s>\n", iso);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
grub_printf("<%s%s> not found\n", isodisk, iso);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
grub_printf("No file item found in json.\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int ventoy_plugin_persistence_check(VTOY_JSON *json, const char *isodisk)
|
static int ventoy_plugin_persistence_check(VTOY_JSON *json, const char *isodisk)
|
||||||
{
|
{
|
||||||
int autosel = 0;
|
int autosel = 0;
|
||||||
@@ -1213,7 +1469,7 @@ static int ventoy_plugin_conf_replace_check(VTOY_JSON *json, const char *isodisk
|
|||||||
{
|
{
|
||||||
grub_printf("iso:<%s> [OK]\n", isof);
|
grub_printf("iso:<%s> [OK]\n", isof);
|
||||||
|
|
||||||
grub_snprintf(cmd, sizeof(cmd), "loopback vtisocheck %s%s", isodisk, isof);
|
grub_snprintf(cmd, sizeof(cmd), "loopback vtisocheck \"%s%s\"", isodisk, isof);
|
||||||
grub_script_execute_sourcecode(cmd);
|
grub_script_execute_sourcecode(cmd);
|
||||||
|
|
||||||
file = ventoy_grub_file_open(VENTOY_FILE_TYPE, "(vtisocheck)/%s", orgf);
|
file = ventoy_grub_file_open(VENTOY_FILE_TYPE, "(vtisocheck)/%s", orgf);
|
||||||
@@ -1439,6 +1695,7 @@ static plugin_entry g_plugin_entries[] =
|
|||||||
{ "image_list", ventoy_plugin_image_list_entry, ventoy_plugin_image_list_check },
|
{ "image_list", 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 },
|
||||||
};
|
};
|
||||||
|
|
||||||
static int ventoy_parse_plugin_config(VTOY_JSON *json, const char *isodisk)
|
static int ventoy_parse_plugin_config(VTOY_JSON *json, const char *isodisk)
|
||||||
@@ -1453,7 +1710,7 @@ static int ventoy_parse_plugin_config(VTOY_JSON *json, const char *isodisk)
|
|||||||
{
|
{
|
||||||
for (i = 0; i < (int)ARRAY_SIZE(g_plugin_entries); i++)
|
for (i = 0; i < (int)ARRAY_SIZE(g_plugin_entries); i++)
|
||||||
{
|
{
|
||||||
grub_snprintf(key, sizeof(key), "%s_%s", g_plugin_entries[i].key, VTOY_DUAL_MODE_SUFFIX);
|
grub_snprintf(key, sizeof(key), "%s_%s", g_plugin_entries[i].key, g_arch_mode_suffix);
|
||||||
if (grub_strcmp(g_plugin_entries[i].key, cur->pcName) == 0 || grub_strcmp(key, cur->pcName) == 0)
|
if (grub_strcmp(g_plugin_entries[i].key, cur->pcName) == 0 || grub_strcmp(key, cur->pcName) == 0)
|
||||||
{
|
{
|
||||||
debug("Plugin entry for %s\n", g_plugin_entries[i].key);
|
debug("Plugin entry for %s\n", g_plugin_entries[i].key);
|
||||||
@@ -1478,7 +1735,7 @@ grub_err_t ventoy_cmd_load_plugin(grub_extcmd_context_t ctxt, int argc, char **a
|
|||||||
(void)ctxt;
|
(void)ctxt;
|
||||||
(void)argc;
|
(void)argc;
|
||||||
|
|
||||||
file = ventoy_grub_file_open(VENTOY_FILE_TYPE, "%s/ventoy/ventoy.json", args[0]);
|
file = ventoy_grub_file_open(GRUB_FILE_TYPE_LINUX_INITRD, "%s/ventoy/ventoy.json", args[0]);
|
||||||
if (!file)
|
if (!file)
|
||||||
{
|
{
|
||||||
return GRUB_ERR_NONE;
|
return GRUB_ERR_NONE;
|
||||||
@@ -1522,6 +1779,18 @@ grub_err_t ventoy_cmd_load_plugin(grub_extcmd_context_t ctxt, int argc, char **a
|
|||||||
|
|
||||||
grub_free(buf);
|
grub_free(buf);
|
||||||
|
|
||||||
|
if (g_boot_pwd.type)
|
||||||
|
{
|
||||||
|
grub_printf("\n\n======= %s ======\n\n", grub_env_get("VTOY_TEXT_MENU_VER"));
|
||||||
|
if (ventoy_check_password(&g_boot_pwd, 3))
|
||||||
|
{
|
||||||
|
grub_printf("\n!!! Password check failed, will exit after 5 seconds. !!!\n");
|
||||||
|
grub_refresh();
|
||||||
|
grub_sleep(5);
|
||||||
|
grub_exit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
VENTOY_CMD_RETURN(GRUB_ERR_NONE);
|
VENTOY_CMD_RETURN(GRUB_ERR_NONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1920,6 +2189,57 @@ int ventoy_plugin_load_dud(dud *node, const char *isopart)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const vtoy_password * ventoy_plugin_get_password(const char *isopath)
|
||||||
|
{
|
||||||
|
int len;
|
||||||
|
menu_password *node = NULL;
|
||||||
|
|
||||||
|
if ((!g_pwd_head) || (!isopath))
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
len = (int)grub_strlen(isopath);
|
||||||
|
for (node = g_pwd_head; node; node = node->next)
|
||||||
|
{
|
||||||
|
if (node->pathlen == len && grub_strncmp(isopath, node->isopath, len) == 0)
|
||||||
|
{
|
||||||
|
return &(node->password);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
grub_err_t ventoy_cmd_check_password(grub_extcmd_context_t ctxt, int argc, char **args)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
const vtoy_password *pwd = NULL;
|
||||||
|
|
||||||
|
(void)ctxt;
|
||||||
|
(void)argc;
|
||||||
|
|
||||||
|
pwd = ventoy_plugin_get_password(args[0]);
|
||||||
|
if (pwd)
|
||||||
|
{
|
||||||
|
if (0 == ventoy_check_password(pwd, 1))
|
||||||
|
{
|
||||||
|
ret = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ret = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ret = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
grub_errno = 0;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
grub_err_t ventoy_cmd_plugin_check_json(grub_extcmd_context_t ctxt, int argc, char **args)
|
grub_err_t ventoy_cmd_plugin_check_json(grub_extcmd_context_t ctxt, int argc, char **args)
|
||||||
{
|
{
|
||||||
int i = 0;
|
int i = 0;
|
||||||
@@ -1937,7 +2257,7 @@ grub_err_t ventoy_cmd_plugin_check_json(grub_extcmd_context_t ctxt, int argc, ch
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
file = ventoy_grub_file_open(VENTOY_FILE_TYPE, "%s/ventoy/ventoy.json", args[0]);
|
file = ventoy_grub_file_open(GRUB_FILE_TYPE_LINUX_INITRD, "%s/ventoy/ventoy.json", args[0]);
|
||||||
if (!file)
|
if (!file)
|
||||||
{
|
{
|
||||||
grub_printf("Plugin json file /ventoy/ventoy.json does NOT exist.\n");
|
grub_printf("Plugin json file /ventoy/ventoy.json does NOT exist.\n");
|
||||||
@@ -1969,7 +2289,7 @@ grub_err_t ventoy_cmd_plugin_check_json(grub_extcmd_context_t ctxt, int argc, ch
|
|||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
grub_snprintf(key, sizeof(key), "%s_%s", args[1], VTOY_DUAL_MODE_SUFFIX);
|
grub_snprintf(key, sizeof(key), "%s_%s", args[1], g_arch_mode_suffix);
|
||||||
for (node = json->pstChild; node; node = node->pstNext)
|
for (node = json->pstChild; node; node = node->pstNext)
|
||||||
{
|
{
|
||||||
if (grub_strcmp(node->pcName, args[1]) == 0 || grub_strcmp(node->pcName, key) == 0)
|
if (grub_strcmp(node->pcName, args[1]) == 0 || grub_strcmp(node->pcName, key) == 0)
|
||||||
|
@@ -235,6 +235,21 @@ static int ventoy_freebsd_append_conf(char *buf, const char *isopath)
|
|||||||
return pos;
|
return pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int ventoy_dragonfly_append_conf(char *buf, const char *isopath)
|
||||||
|
{
|
||||||
|
int pos = 0;
|
||||||
|
|
||||||
|
debug("ventoy_dragonfly_append_conf %s\n", isopath);
|
||||||
|
|
||||||
|
vtoy_ssprintf(buf, pos, "tmpfs_load=\"%s\"\n", "YES");
|
||||||
|
vtoy_ssprintf(buf, pos, "dm_target_linear_load=\"%s\"\n", "YES");
|
||||||
|
vtoy_ssprintf(buf, pos, "initrd.img_load=\"%s\"\n", "YES");
|
||||||
|
vtoy_ssprintf(buf, pos, "initrd.img_type=\"%s\"\n", "md_image");
|
||||||
|
vtoy_ssprintf(buf, pos, "vfs.root.mountfrom=\"%s\"\n", "ufs:md0s0");
|
||||||
|
|
||||||
|
return pos;
|
||||||
|
}
|
||||||
|
|
||||||
grub_err_t ventoy_cmd_unix_reset(grub_extcmd_context_t ctxt, int argc, char **args)
|
grub_err_t ventoy_cmd_unix_reset(grub_extcmd_context_t ctxt, int argc, char **args)
|
||||||
{
|
{
|
||||||
(void)ctxt;
|
(void)ctxt;
|
||||||
@@ -431,6 +446,10 @@ grub_err_t ventoy_cmd_unix_replace_conf(grub_extcmd_context_t ctxt, int argc, ch
|
|||||||
{
|
{
|
||||||
g_conf_new_len += ventoy_freebsd_append_conf(data + file->size, args[1]);
|
g_conf_new_len += ventoy_freebsd_append_conf(data + file->size, args[1]);
|
||||||
}
|
}
|
||||||
|
else if (grub_strcmp(args[0], "DragonFly") == 0)
|
||||||
|
{
|
||||||
|
g_conf_new_len += ventoy_dragonfly_append_conf(data + file->size, args[1]);
|
||||||
|
}
|
||||||
|
|
||||||
VENTOY_CMD_RETURN(GRUB_ERR_NONE);
|
VENTOY_CMD_RETURN(GRUB_ERR_NONE);
|
||||||
}
|
}
|
||||||
@@ -474,6 +493,7 @@ grub_err_t ventoy_cmd_unix_replace_ko(grub_extcmd_context_t ctxt, int argc, char
|
|||||||
data = grub_malloc(file->size);
|
data = grub_malloc(file->size);
|
||||||
if (!data)
|
if (!data)
|
||||||
{
|
{
|
||||||
|
debug("Failed to alloc memory for new ko %d\n", (int)file->size);
|
||||||
grub_file_close(file);
|
grub_file_close(file);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@@ -487,6 +507,105 @@ grub_err_t ventoy_cmd_unix_replace_ko(grub_extcmd_context_t ctxt, int argc, char
|
|||||||
VENTOY_CMD_RETURN(GRUB_ERR_NONE);
|
VENTOY_CMD_RETURN(GRUB_ERR_NONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
grub_err_t ventoy_cmd_unix_fill_image_desc(grub_extcmd_context_t ctxt, int argc, char **args)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
grub_uint8_t *byte;
|
||||||
|
grub_uint32_t memsize;
|
||||||
|
ventoy_image_desc *desc;
|
||||||
|
grub_uint8_t flag[32] = {
|
||||||
|
0xFF, 0xEE, 0xDD, 0xCC, 0xBB, 0xAA, 0x99, 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x00,
|
||||||
|
0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF
|
||||||
|
};
|
||||||
|
|
||||||
|
(void)ctxt;
|
||||||
|
(void)argc;
|
||||||
|
(void)args;
|
||||||
|
|
||||||
|
debug("ventoy_cmd_unix_fill_image_desc %p\n", g_mod_new_data);
|
||||||
|
|
||||||
|
if (!g_mod_new_data)
|
||||||
|
{
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
|
byte = (grub_uint8_t *)g_mod_new_data;
|
||||||
|
for (i = 0; i < g_mod_new_len - 32; i += 16)
|
||||||
|
{
|
||||||
|
if (byte[i] == 0xFF && byte[i + 1] == 0xEE)
|
||||||
|
{
|
||||||
|
if (grub_memcmp(flag, byte + i, 32) == 0)
|
||||||
|
{
|
||||||
|
debug("Find position flag at %d(0x%x)\n", i, i);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i >= g_mod_new_len - 32)
|
||||||
|
{
|
||||||
|
debug("Failed to find position flag %d\n", i);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
|
desc = (ventoy_image_desc *)(byte + i);
|
||||||
|
desc->disk_size = g_ventoy_disk_size;
|
||||||
|
desc->part1_size = ventoy_get_part1_size(g_ventoy_part_info);
|
||||||
|
grub_memcpy(desc->disk_uuid, g_ventoy_part_info->MBR.BootCode + 0x180, 16);
|
||||||
|
grub_memcpy(desc->disk_signature, g_ventoy_part_info->MBR.BootCode + 0x1B8, 4);
|
||||||
|
|
||||||
|
desc->img_chunk_count = g_img_chunk_list.cur_chunk;
|
||||||
|
memsize = g_img_chunk_list.cur_chunk * sizeof(ventoy_img_chunk);
|
||||||
|
|
||||||
|
debug("image chunk count:%u memsize:%u\n", desc->img_chunk_count, memsize);
|
||||||
|
|
||||||
|
if (memsize >= VTOY_SIZE_1MB * 8)
|
||||||
|
{
|
||||||
|
grub_printf("image chunk count:%u memsize:%u too big\n", desc->img_chunk_count, memsize);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
|
grub_memcpy(desc + 1, g_img_chunk_list.chunk, memsize);
|
||||||
|
|
||||||
|
end:
|
||||||
|
VENTOY_CMD_RETURN(GRUB_ERR_NONE);
|
||||||
|
}
|
||||||
|
|
||||||
|
grub_err_t ventoy_cmd_unix_gzip_newko(grub_extcmd_context_t ctxt, int argc, char **args)
|
||||||
|
{
|
||||||
|
int newlen;
|
||||||
|
grub_uint8_t *buf;
|
||||||
|
|
||||||
|
(void)ctxt;
|
||||||
|
(void)argc;
|
||||||
|
(void)args;
|
||||||
|
|
||||||
|
debug("ventoy_cmd_unix_gzip_newko %p\n", g_mod_new_data);
|
||||||
|
|
||||||
|
if (!g_mod_new_data)
|
||||||
|
{
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
|
buf = grub_malloc(g_mod_new_len);
|
||||||
|
if (!buf)
|
||||||
|
{
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
|
newlen = ventoy_gzip_compress(g_mod_new_data, g_mod_new_len, buf, g_mod_new_len);
|
||||||
|
|
||||||
|
grub_free(g_mod_new_data);
|
||||||
|
|
||||||
|
debug("gzip org len:%d newlen:%d\n", g_mod_new_len, newlen);
|
||||||
|
|
||||||
|
g_mod_new_data = (char *)buf;
|
||||||
|
g_mod_new_len = newlen;
|
||||||
|
|
||||||
|
end:
|
||||||
|
VENTOY_CMD_RETURN(GRUB_ERR_NONE);
|
||||||
|
}
|
||||||
|
|
||||||
grub_err_t ventoy_cmd_unix_chain_data(grub_extcmd_context_t ctxt, int argc, char **args)
|
grub_err_t ventoy_cmd_unix_chain_data(grub_extcmd_context_t ctxt, int argc, char **args)
|
||||||
{
|
{
|
||||||
int ventoy_compatible = 0;
|
int ventoy_compatible = 0;
|
||||||
|
@@ -342,8 +342,10 @@ static int ventoy_raw_trim_head(grub_uint64_t offset)
|
|||||||
grub_err_t ventoy_cmd_get_vtoy_type(grub_extcmd_context_t ctxt, int argc, char **args)
|
grub_err_t ventoy_cmd_get_vtoy_type(grub_extcmd_context_t ctxt, int argc, char **args)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
int altboot = 0;
|
||||||
int offset = -1;
|
int offset = -1;
|
||||||
grub_file_t file;
|
grub_file_t file;
|
||||||
|
grub_uint8_t data = 0;
|
||||||
vhd_footer_t vhdfoot;
|
vhd_footer_t vhdfoot;
|
||||||
VDIPREHEADER vdihdr;
|
VDIPREHEADER vdihdr;
|
||||||
char type[16] = {0};
|
char type[16] = {0};
|
||||||
@@ -427,6 +429,7 @@ grub_err_t ventoy_cmd_get_vtoy_type(grub_extcmd_context_t ctxt, int argc, char *
|
|||||||
if (grub_memcmp(gpt->PartTbl[i].PartType, "Hah!IdontNeedEFI", 16) == 0)
|
if (grub_memcmp(gpt->PartTbl[i].PartType, "Hah!IdontNeedEFI", 16) == 0)
|
||||||
{
|
{
|
||||||
debug("part %d is grub_bios part\n", i);
|
debug("part %d is grub_bios part\n", i);
|
||||||
|
altboot = 1;
|
||||||
grub_env_set(args[3], "1");
|
grub_env_set(args[3], "1");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -436,6 +439,20 @@ grub_err_t ventoy_cmd_get_vtoy_type(grub_extcmd_context_t ctxt, int argc, char *
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!altboot)
|
||||||
|
{
|
||||||
|
if (gpt->MBR.BootCode[92] == 0x22)
|
||||||
|
{
|
||||||
|
grub_file_seek(file, offset + 17908);
|
||||||
|
grub_file_read(file, &data, 1);
|
||||||
|
if (data == 0x23)
|
||||||
|
{
|
||||||
|
altboot = 1;
|
||||||
|
grub_env_set(args[3], "1");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -447,6 +464,7 @@ grub_err_t ventoy_cmd_get_vtoy_type(grub_extcmd_context_t ctxt, int argc, char *
|
|||||||
if (gpt->MBR.PartTbl[i].FsFlag == 0xEF)
|
if (gpt->MBR.PartTbl[i].FsFlag == 0xEF)
|
||||||
{
|
{
|
||||||
debug("part %d is esp part in MBR mode\n", i);
|
debug("part %d is esp part in MBR mode\n", i);
|
||||||
|
altboot = 1;
|
||||||
grub_env_set(args[3], "1");
|
grub_env_set(args[3], "1");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@@ -1492,7 +1492,7 @@ static grub_uint32_t ventoy_get_wim_iso_offset(const char *filepath)
|
|||||||
grub_file_t file;
|
grub_file_t file;
|
||||||
char cmdbuf[128];
|
char cmdbuf[128];
|
||||||
|
|
||||||
grub_snprintf(cmdbuf, sizeof(cmdbuf), "loopback wimiso %s", filepath);
|
grub_snprintf(cmdbuf, sizeof(cmdbuf), "loopback wimiso \"%s\"", filepath);
|
||||||
grub_script_execute_sourcecode(cmdbuf);
|
grub_script_execute_sourcecode(cmdbuf);
|
||||||
|
|
||||||
file = ventoy_grub_file_open(VENTOY_FILE_TYPE, "%s", "(wimiso)/boot/boot.wim");
|
file = ventoy_grub_file_open(VENTOY_FILE_TYPE, "%s", "(wimiso)/boot/boot.wim");
|
||||||
|
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 */
|
@@ -21,7 +21,7 @@
|
|||||||
#ifndef __VENTOY_H__
|
#ifndef __VENTOY_H__
|
||||||
#define __VENTOY_H__
|
#define __VENTOY_H__
|
||||||
|
|
||||||
#define COMPILE_ASSERT(expr) extern char __compile_assert[(expr) ? 1 : -1]
|
#define COMPILE_ASSERT(a, expr) extern char __compile_assert##a[(expr) ? 1 : -1]
|
||||||
|
|
||||||
#define VENTOY_COMPATIBLE_STR "VENTOY COMPATIBLE"
|
#define VENTOY_COMPATIBLE_STR "VENTOY COMPATIBLE"
|
||||||
#define VENTOY_COMPATIBLE_STR_LEN 17
|
#define VENTOY_COMPATIBLE_STR_LEN 17
|
||||||
@@ -139,11 +139,21 @@ typedef struct ventoy_windows_data
|
|||||||
}ventoy_windows_data;
|
}ventoy_windows_data;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct ventoy_secure_data
|
||||||
|
{
|
||||||
|
grub_uint8_t magic1[16]; /* VENTOY_GUID */
|
||||||
|
grub_uint8_t diskuuid[16];
|
||||||
|
grub_uint8_t Checksum[16];
|
||||||
|
grub_uint8_t adminSHA256[32];
|
||||||
|
grub_uint8_t reserved[4000];
|
||||||
|
grub_uint8_t magic2[16]; /* VENTOY_GUID */
|
||||||
|
}ventoy_secure_data;
|
||||||
|
|
||||||
#pragma pack()
|
#pragma pack()
|
||||||
|
|
||||||
// compile assert check : sizeof(ventoy_os_param) must be 512
|
// compile assert check : sizeof(ventoy_os_param) must be 512
|
||||||
COMPILE_ASSERT(sizeof(ventoy_os_param) == 512);
|
COMPILE_ASSERT(1,sizeof(ventoy_os_param) == 512);
|
||||||
|
COMPILE_ASSERT(2,sizeof(ventoy_secure_data) == 4096);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -176,6 +186,18 @@ typedef struct ventoy_chain_head
|
|||||||
grub_uint32_t virt_chunk_num;
|
grub_uint32_t virt_chunk_num;
|
||||||
}ventoy_chain_head;
|
}ventoy_chain_head;
|
||||||
|
|
||||||
|
typedef struct ventoy_image_desc
|
||||||
|
{
|
||||||
|
grub_uint64_t disk_size;
|
||||||
|
grub_uint64_t part1_size;
|
||||||
|
grub_uint8_t disk_uuid[16];
|
||||||
|
grub_uint8_t disk_signature[4];
|
||||||
|
grub_uint32_t img_chunk_count;
|
||||||
|
/* ventoy_img_chunk list */
|
||||||
|
}ventoy_image_desc;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct ventoy_img_chunk
|
typedef struct ventoy_img_chunk
|
||||||
{
|
{
|
||||||
grub_uint32_t img_start_sector; // sector size: 2KB
|
grub_uint32_t img_start_sector; // sector size: 2KB
|
||||||
@@ -242,7 +264,6 @@ typedef struct ventoy_grub_param
|
|||||||
|
|
||||||
#pragma pack()
|
#pragma pack()
|
||||||
|
|
||||||
|
|
||||||
int grub_ext_get_file_chunk(grub_uint64_t part_start, grub_file_t file, ventoy_img_chunk_list *chunk_list);
|
int grub_ext_get_file_chunk(grub_uint64_t part_start, grub_file_t file, ventoy_img_chunk_list *chunk_list);
|
||||||
int grub_fat_get_file_chunk(grub_uint64_t part_start, grub_file_t file, ventoy_img_chunk_list *chunk_list);
|
int grub_fat_get_file_chunk(grub_uint64_t part_start, grub_file_t file, ventoy_img_chunk_list *chunk_list);
|
||||||
void grub_iso9660_set_nojoliet(int nojoliet);
|
void grub_iso9660_set_nojoliet(int nojoliet);
|
||||||
|
@@ -12,16 +12,28 @@ 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 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="setkey 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"
|
||||||
|
|
||||||
|
|
||||||
if [ "$1" = "uefi" ]; then
|
if [ "$1" = "uefi" ]; then
|
||||||
all_modules="$net_modules_uefi $all_modules_uefi "
|
all_modules="$net_modules_uefi $all_modules_uefi "
|
||||||
grub-mkimage -v --directory "$VT_DIR/GRUB2/INSTALL/lib/grub/x86_64-efi" --prefix '(,2)/grub' --output "$VT_DIR/INSTALL/EFI/BOOT/grubx64_real.efi" --format 'x86_64-efi' --compression 'auto' $all_modules_uefi 'fat' 'part_msdos'
|
|
||||||
|
grub-mkimage -v --directory "$VT_DIR/GRUB2/INSTALL/lib/grub/x86_64-efi" --prefix '(,2)/grub' --output "$VT_DIR/INSTALL/EFI/BOOT/grubx64_real.efi" --format 'x86_64-efi' --compression 'auto' $all_modules_uefi
|
||||||
|
|
||||||
#grub-mkimage -v --directory "$VT_DIR/GRUB2/INSTALL/lib/grub/x86_64-efi" -c "$VT_DIR/LiveCD/GRUB/embed.cfg" --prefix '/EFI/boot' --output "$VT_DIR/LiveCD/GRUB/bootx64.efi" --format 'x86_64-efi' --compression 'auto' $all_modules_uefi 'fat' 'part_msdos'
|
#grub-mkimage -v --directory "$VT_DIR/GRUB2/INSTALL/lib/grub/x86_64-efi" -c "$VT_DIR/LiveCD/GRUB/embed.cfg" --prefix '/EFI/boot' --output "$VT_DIR/LiveCD/GRUB/bootx64.efi" --format 'x86_64-efi' --compression 'auto' $all_modules_uefi 'fat' 'part_msdos'
|
||||||
|
elif [ "$1" = "i386efi" ]; then
|
||||||
|
all_modules="$net_modules_uefi $all_modules_uefi "
|
||||||
|
|
||||||
|
grub-mkimage -v --directory "$VT_DIR/GRUB2/INSTALL/lib/grub/i386-efi" --prefix '(,2)/grub' --output "$VT_DIR/INSTALL/EFI/BOOT/grubia32_real.efi" --format 'i386-efi' --compression 'auto' $all_modules_uefi
|
||||||
|
elif [ "$1" = "arm64" ]; then
|
||||||
|
all_modules="$net_modules_uefi $all_modules_arm64_uefi "
|
||||||
|
|
||||||
|
grub-mkimage -v --directory "$VT_DIR/GRUB2/INSTALL/lib/grub/arm64-efi" --prefix '(,2)/grub' --output "$VT_DIR/INSTALL/EFI/BOOT/BOOTAA64.EFI" --format 'arm64-efi' --compression 'auto' $all_modules_arm64_uefi
|
||||||
else
|
else
|
||||||
all_modules="$net_modules_legacy $all_modules_legacy "
|
all_modules="$net_modules_legacy $all_modules_legacy "
|
||||||
grub-mkimage -v --directory "$VT_DIR/GRUB2/INSTALL/lib/grub/i386-pc" --prefix '(,2)/grub' --output "$VT_DIR/INSTALL/grub/i386-pc/core.img" --format 'i386-pc' --compression 'auto' $all_modules_legacy 'fat' 'part_msdos' 'biosdisk'
|
grub-mkimage -v --directory "$VT_DIR/GRUB2/INSTALL/lib/grub/i386-pc" --prefix '(,2)/grub' --output "$VT_DIR/INSTALL/grub/i386-pc/core.img" --format 'i386-pc' --compression 'auto' $all_modules_legacy 'fat' 'part_msdos' 'biosdisk'
|
||||||
@@ -37,17 +49,50 @@ if [ "$1" = "uefi" ]; then
|
|||||||
rm -f $VT_DIR/GRUB2/NBP/core.efi
|
rm -f $VT_DIR/GRUB2/NBP/core.efi
|
||||||
cp -a $VT_DIR/GRUB2/PXE/grub2/x86_64-efi/core.efi $VT_DIR/GRUB2/NBP/core.efi || exit 1
|
cp -a $VT_DIR/GRUB2/PXE/grub2/x86_64-efi/core.efi $VT_DIR/GRUB2/NBP/core.efi || exit 1
|
||||||
|
|
||||||
rm -f $VT_DIR/INSTALL/grub/x86_64-efi/normal.mod
|
rm -rf $VT_DIR/INSTALL/grub/x86_64-efi
|
||||||
|
mkdir -p $VT_DIR/INSTALL/grub/x86_64-efi
|
||||||
|
|
||||||
cp -a $VT_DIR/GRUB2/PXE/grub2/x86_64-efi/normal.mod $VT_DIR/INSTALL/grub/x86_64-efi/normal.mod || exit 1
|
cp -a $VT_DIR/GRUB2/PXE/grub2/x86_64-efi/normal.mod $VT_DIR/INSTALL/grub/x86_64-efi/normal.mod || exit 1
|
||||||
|
|
||||||
#copy other modules
|
#copy other modules
|
||||||
ls -1 $VT_DIR/GRUB2/INSTALL/lib/grub/x86_64-efi/ | egrep '\.(lst|mod)$' | while read line; do
|
ls -1 $VT_DIR/GRUB2/INSTALL/lib/grub/x86_64-efi/ | egrep '\.(lst|mod)$' | while read line; do
|
||||||
if ! echo $all_modules | grep -q " ${line%.mod} "; then
|
if ! echo $all_modules | grep -q " ${line%.mod} "; then
|
||||||
echo "Copy $line ..."
|
echo "Copy $line ..."
|
||||||
rm -f $VT_DIR/INSTALL/grub/x86_64-efi/$line
|
|
||||||
cp -a $VT_DIR/GRUB2/INSTALL/lib/grub/x86_64-efi/$line $VT_DIR/INSTALL/grub/x86_64-efi/
|
cp -a $VT_DIR/GRUB2/INSTALL/lib/grub/x86_64-efi/$line $VT_DIR/INSTALL/grub/x86_64-efi/
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
elif [ "$1" = "i386efi" ]; then
|
||||||
|
rm -f $VT_DIR/GRUB2/NBP/core.efi
|
||||||
|
cp -a $VT_DIR/GRUB2/PXE/grub2/i386-efi/core.efi $VT_DIR/GRUB2/NBP/core.efi || exit 1
|
||||||
|
|
||||||
|
rm -rf $VT_DIR/INSTALL/grub/i386-efi
|
||||||
|
mkdir -p $VT_DIR/INSTALL/grub/i386-efi
|
||||||
|
|
||||||
|
cp -a $VT_DIR/GRUB2/PXE/grub2/i386-efi/normal.mod $VT_DIR/INSTALL/grub/i386-efi/normal.mod || exit 1
|
||||||
|
|
||||||
|
#copy other modules
|
||||||
|
ls -1 $VT_DIR/GRUB2/INSTALL/lib/grub/i386-efi/ | egrep '\.(lst|mod)$' | while read line; do
|
||||||
|
if ! echo $all_modules | grep -q " ${line%.mod} "; then
|
||||||
|
echo "Copy $line ..."
|
||||||
|
cp -a $VT_DIR/GRUB2/INSTALL/lib/grub/i386-efi/$line $VT_DIR/INSTALL/grub/i386-efi/
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
elif [ "$1" = "arm64" ]; then
|
||||||
|
rm -f $VT_DIR/GRUB2/NBP/core.efi
|
||||||
|
cp -a $VT_DIR/GRUB2/PXE/grub2/arm64-efi/core.efi $VT_DIR/GRUB2/NBP/core.efi || exit 1
|
||||||
|
|
||||||
|
rm -rf $VT_DIR/INSTALL/grub/arm64-efi
|
||||||
|
mkdir -p $VT_DIR/INSTALL/grub/arm64-efi
|
||||||
|
|
||||||
|
cp -a $VT_DIR/GRUB2/PXE/grub2/arm64-efi/normal.mod $VT_DIR/INSTALL/grub/arm64-efi/normal.mod || exit 1
|
||||||
|
|
||||||
|
#copy other modules
|
||||||
|
ls -1 $VT_DIR/GRUB2/INSTALL/lib/grub/arm64-efi/ | egrep '\.(lst|mod)$' | while read line; do
|
||||||
|
if ! echo $all_modules | grep -q " ${line%.mod} "; then
|
||||||
|
echo "Copy $line ..."
|
||||||
|
cp -a $VT_DIR/GRUB2/INSTALL/lib/grub/arm64-efi/$line $VT_DIR/INSTALL/grub/arm64-efi/
|
||||||
|
fi
|
||||||
|
done
|
||||||
else
|
else
|
||||||
rm -f $VT_DIR/GRUB2/NBP/core.0
|
rm -f $VT_DIR/GRUB2/NBP/core.0
|
||||||
cp -a $VT_DIR/GRUB2/PXE/grub2/i386-pc/core.0 $VT_DIR/GRUB2/NBP/core.0 || exit 1
|
cp -a $VT_DIR/GRUB2/PXE/grub2/i386-pc/core.0 $VT_DIR/GRUB2/NBP/core.0 || exit 1
|
||||||
|
@@ -31,5 +31,13 @@ make -j 16
|
|||||||
sh install.sh uefi
|
sh install.sh uefi
|
||||||
|
|
||||||
|
|
||||||
|
#build for IA32 EFI
|
||||||
|
make distclean
|
||||||
|
./autogen.sh
|
||||||
|
./configure --target=i386 --with-platform=efi --prefix=$VT_GRUB_DIR/INSTALL/
|
||||||
|
make -j 16
|
||||||
|
sh install.sh i386efi
|
||||||
|
|
||||||
|
|
||||||
cd ../../
|
cd ../../
|
||||||
|
|
||||||
|
@@ -1,14 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
/opt/diet32/bin/diet gcc -Os -m32 vtoy_gen_uuid.c -o vtoy_gen_uuid
|
|
||||||
|
|
||||||
if [ -e vtoy_gen_uuid ]; then
|
|
||||||
echo -e '\n############### SUCCESS ###############\n'
|
|
||||||
|
|
||||||
rm -f ../INSTALL/tool/vtoy_gen_uuid
|
|
||||||
cp -a vtoy_gen_uuid ../INSTALL/tool/vtoy_gen_uuid
|
|
||||||
else
|
|
||||||
echo -e '\n############### FAILED ################\n'
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
@@ -1,50 +0,0 @@
|
|||||||
/******************************************************************************
|
|
||||||
* vtoy_gen_uuid.c
|
|
||||||
*
|
|
||||||
* 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/>.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
|
|
||||||
int main()
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
int fd;
|
|
||||||
unsigned char uuid[16];
|
|
||||||
|
|
||||||
fd = open("/dev/random", O_RDONLY);
|
|
||||||
if (fd < 0)
|
|
||||||
{
|
|
||||||
srand(time(NULL));
|
|
||||||
for (i = 0; i < 16; i++)
|
|
||||||
{
|
|
||||||
uuid[i] = (unsigned char)(rand());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
read(fd, uuid, 16);
|
|
||||||
}
|
|
||||||
|
|
||||||
fwrite(uuid, 1, 16, stdout);
|
|
||||||
return 0;
|
|
||||||
}
|
|
@@ -36,17 +36,24 @@ export SED=$BUSYBOX_PATH/sed
|
|||||||
export SLEEP=$BUSYBOX_PATH/sleep
|
export SLEEP=$BUSYBOX_PATH/sleep
|
||||||
export HEAD=$BUSYBOX_PATH/head
|
export HEAD=$BUSYBOX_PATH/head
|
||||||
|
|
||||||
if [ -e $BUSYBOX_PATH/64h ]; then
|
if [ -e $BUSYBOX_PATH/32h ]; then
|
||||||
|
if [ -e $BUSYBOX_PATH/64h ]; then
|
||||||
|
#this is arm64
|
||||||
|
$BUSYBOX_PATH/xzminidecaa64 < $BUSYBOX_PATH/busyboxaa64.xz > $BUSYBOX_PATH/busybox
|
||||||
|
$BUSYBOX_PATH/vtchmodaa64 $BUSYBOX_PATH/busybox
|
||||||
|
else
|
||||||
|
#this is x86_64
|
||||||
|
$BUSYBOX_PATH/xzminidec64 < $BUSYBOX_PATH/busybox64.xz > $BUSYBOX_PATH/busybox
|
||||||
|
if [ -s $BUSYBOX_PATH/busybox ]; then
|
||||||
|
$BUSYBOX_PATH/vtchmod64 $BUSYBOX_PATH/busybox
|
||||||
|
else
|
||||||
|
$BUSYBOX_PATH/xzminidec64_musl < $BUSYBOX_PATH/busybox64.xz > $BUSYBOX_PATH/busybox
|
||||||
|
$BUSYBOX_PATH/vtchmod64_musl $BUSYBOX_PATH/busybox
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
else
|
||||||
$BUSYBOX_PATH/xzminidec32 < $BUSYBOX_PATH/busybox32.xz > $BUSYBOX_PATH/busybox
|
$BUSYBOX_PATH/xzminidec32 < $BUSYBOX_PATH/busybox32.xz > $BUSYBOX_PATH/busybox
|
||||||
$BUSYBOX_PATH/vtchmod32 $BUSYBOX_PATH/busybox
|
$BUSYBOX_PATH/vtchmod32 $BUSYBOX_PATH/busybox
|
||||||
else
|
|
||||||
$BUSYBOX_PATH/xzminidec64 < $BUSYBOX_PATH/busybox64.xz > $BUSYBOX_PATH/busybox
|
|
||||||
if [ -s $BUSYBOX_PATH/busybox ]; then
|
|
||||||
$BUSYBOX_PATH/vtchmod64 $BUSYBOX_PATH/busybox
|
|
||||||
else
|
|
||||||
$BUSYBOX_PATH/xzminidec64_uclibc < $BUSYBOX_PATH/busybox64.xz > $BUSYBOX_PATH/busybox
|
|
||||||
$BUSYBOX_PATH/vtchmod64_uclibc $BUSYBOX_PATH/busybox
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -e $BUSYBOX_PATH/busybox ]; then
|
if [ -e $BUSYBOX_PATH/busybox ]; then
|
||||||
@@ -84,16 +91,35 @@ else
|
|||||||
xz -d -c loop.cpio.xz | cpio -idm 2>>$VTLOG
|
xz -d -c loop.cpio.xz | cpio -idm 2>>$VTLOG
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -e $BUSYBOX_PATH/64h ]; then
|
if [ -e $BUSYBOX_PATH/32h ]; then
|
||||||
echo "Use busybox32 toolkit ..." >>$VTLOG
|
if [ -e $BUSYBOX_PATH/64h ]; then
|
||||||
|
echo "Use ARM64 busybox toolkit ..." >>$VTLOG
|
||||||
|
echo aarch64 > $VTOY_PATH/ventoy_arch
|
||||||
|
ln -s $BUSYBOX_PATH/xzminidecaa64 $BUSYBOX_PATH/xzminidec
|
||||||
|
ln -s $VTOY_PATH/tool/dmsetupaa64 $VTOY_PATH/tool/dmsetup
|
||||||
|
ln -s $VTOY_PATH/tool/lunzipaa64 $VTOY_PATH/tool/lunzip
|
||||||
|
|
||||||
|
rm -f $VTOY_PATH/tool/lz4cat $VTOY_PATH/tool/zstdcat
|
||||||
|
ln -s $VTOY_PATH/tool/lz4cataa64 $VTOY_PATH/tool/lz4cat
|
||||||
|
ln -s $VTOY_PATH/tool/zstdcataa64 $VTOY_PATH/tool/zstdcat
|
||||||
|
|
||||||
|
else
|
||||||
|
echo "Use x86_64 busybox toolkit ..." >>$VTLOG
|
||||||
|
echo x86_64 > $VTOY_PATH/ventoy_arch
|
||||||
|
ln -s $BUSYBOX_PATH/xzminidec64 $BUSYBOX_PATH/xzminidec
|
||||||
|
ln -s $VTOY_PATH/tool/dmsetup64 $VTOY_PATH/tool/dmsetup
|
||||||
|
ln -s $VTOY_PATH/tool/lunzip64 $VTOY_PATH/tool/lunzip
|
||||||
|
|
||||||
|
rm -f $VTOY_PATH/tool/lz4cat $VTOY_PATH/tool/zstdcat
|
||||||
|
ln -s $VTOY_PATH/tool/lz4cat64 $VTOY_PATH/tool/lz4cat
|
||||||
|
ln -s $VTOY_PATH/tool/zstdcat64 $VTOY_PATH/tool/zstdcat
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "Use i386 busybox toolkit ..." >>$VTLOG
|
||||||
|
echo i386 > $VTOY_PATH/ventoy_arch
|
||||||
ln -s $BUSYBOX_PATH/xzminidec32 $BUSYBOX_PATH/xzminidec
|
ln -s $BUSYBOX_PATH/xzminidec32 $BUSYBOX_PATH/xzminidec
|
||||||
ln -s $VTOY_PATH/tool/dmsetup32 $VTOY_PATH/tool/dmsetup
|
ln -s $VTOY_PATH/tool/dmsetup32 $VTOY_PATH/tool/dmsetup
|
||||||
ln -s $VTOY_PATH/tool/lunzip32 $VTOY_PATH/tool/lunzip
|
ln -s $VTOY_PATH/tool/lunzip32 $VTOY_PATH/tool/lunzip
|
||||||
else
|
|
||||||
echo "Use busybox64 toolkit ..." >>$VTLOG
|
|
||||||
ln -s $BUSYBOX_PATH/xzminidec64 $BUSYBOX_PATH/xzminidec
|
|
||||||
ln -s $VTOY_PATH/tool/dmsetup64 $VTOY_PATH/tool/dmsetup
|
|
||||||
ln -s $VTOY_PATH/tool/lunzip64 $VTOY_PATH/tool/lunzip
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
rm -f *.xz
|
rm -f *.xz
|
||||||
|
Binary file not shown.
BIN
IMG/cpio/ventoy/busybox/a64
Normal file
BIN
IMG/cpio/ventoy/busybox/a64
Normal file
Binary file not shown.
BIN
IMG/cpio/ventoy/busybox/busyboxaa64.xz
Normal file
BIN
IMG/cpio/ventoy/busybox/busyboxaa64.xz
Normal file
Binary file not shown.
BIN
IMG/cpio/ventoy/busybox/vtchmod64_musl
Normal file
BIN
IMG/cpio/ventoy/busybox/vtchmod64_musl
Normal file
Binary file not shown.
Binary file not shown.
BIN
IMG/cpio/ventoy/busybox/vtchmodaa64
Normal file
BIN
IMG/cpio/ventoy/busybox/vtchmodaa64
Normal file
Binary file not shown.
BIN
IMG/cpio/ventoy/busybox/xzminidec64_musl
Normal file
BIN
IMG/cpio/ventoy/busybox/xzminidec64_musl
Normal file
Binary file not shown.
Binary file not shown.
BIN
IMG/cpio/ventoy/busybox/xzminidecaa64
Normal file
BIN
IMG/cpio/ventoy/busybox/xzminidecaa64
Normal file
Binary file not shown.
54
IMG/cpio/ventoy/hook/austrumi/disk_hook.sh
Normal file
54
IMG/cpio/ventoy/hook/austrumi/disk_hook.sh
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
#!/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
|
||||||
|
|
||||||
|
VTPATH_OLD=$PATH; PATH=$BUSYBOX_PATH:$VTOY_PATH/tool:$PATH
|
||||||
|
|
||||||
|
vtdiskname=$(get_ventoy_disk_name)
|
||||||
|
if [ "$vtdiskname" = "unknown" ]; then
|
||||||
|
vtlog "ventoy disk not found"
|
||||||
|
PATH=$VTPATH_OLD
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if check_usb_disk_ready "$vtdiskname"; then
|
||||||
|
vtlog "check_usb_disk_ready ok"
|
||||||
|
else
|
||||||
|
vtlog "check_usb_disk_ready error"
|
||||||
|
PATH=$VTPATH_OLD
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2"
|
||||||
|
|
||||||
|
# blkdev_num=$($VTOY_PATH/tool/dmsetup ls | grep ventoy | sed 's/.*(\([0-9][0-9]*\),.*\([0-9][0-9]*\).*/\1:\2/')
|
||||||
|
# blkdev_num_mknod=$($VTOY_PATH/tool/dmsetup ls | grep ventoy | sed 's/.*(\([0-9][0-9]*\),.*\([0-9][0-9]*\).*/\1 \2/')
|
||||||
|
# vtDM=$(ventoy_find_dm_id ${blkdev_num})
|
||||||
|
|
||||||
|
# vtlog "blkdev_num=$blkdev_num blkdev_num_mknod=$blkdev_num_mknod vtDM=$vtDM"
|
||||||
|
|
||||||
|
# if [ -b /dev/$vtDM ]; then
|
||||||
|
# vtlog "dev already exist ..."
|
||||||
|
# else
|
||||||
|
# vtlog "mknode dev ..."
|
||||||
|
# mknod -m 660 /dev/$vtDM b $blkdev_num_mknod
|
||||||
|
# fi
|
||||||
|
|
||||||
|
PATH=$VTPATH_OLD
|
24
IMG/cpio/ventoy/hook/austrumi/ventoy-hook.sh
Normal file
24
IMG/cpio/ventoy/hook/austrumi/ventoy-hook.sh
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
#!/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/>.
|
||||||
|
#
|
||||||
|
#************************************************************************************
|
||||||
|
|
||||||
|
. $VTOY_PATH/hook/ventoy-os-lib.sh
|
||||||
|
|
||||||
|
$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
|
||||||
|
|
@@ -43,6 +43,7 @@ ventoy_os_install_dmsetup_by_unsquashfs() {
|
|||||||
vtoy_unsquashfs -d $VTOY_PATH/sqfs -n -q -e $VTOY_PATH/fsextract $VTOY_PATH/fsdisk
|
vtoy_unsquashfs -d $VTOY_PATH/sqfs -n -q -e $VTOY_PATH/fsextract $VTOY_PATH/fsdisk
|
||||||
|
|
||||||
if ! [ -e $VTOY_PATH/sqfs${dmModPath} ]; then
|
if ! [ -e $VTOY_PATH/sqfs${dmModPath} ]; then
|
||||||
|
rm -rf $VTOY_PATH/sqfs
|
||||||
dmModPath="/lib/modules/$vtKerVer/kernel/drivers/md/dm-mod.$vtKoPo"
|
dmModPath="/lib/modules/$vtKerVer/kernel/drivers/md/dm-mod.$vtKoPo"
|
||||||
echo $dmModPath > $VTOY_PATH/fsextract
|
echo $dmModPath > $VTOY_PATH/fsextract
|
||||||
vtoy_unsquashfs -d $VTOY_PATH/sqfs -n -q -e $VTOY_PATH/fsextract $VTOY_PATH/fsdisk
|
vtoy_unsquashfs -d $VTOY_PATH/sqfs -n -q -e $VTOY_PATH/fsextract $VTOY_PATH/fsdisk
|
||||||
|
@@ -23,7 +23,12 @@ elif $GREP -q '\[ "$FILTERED_LIST" \]' /init; then
|
|||||||
$SED '/\[ "$FILTERED_LIST" \]/i\ FILTERED_LIST="/dev/mapper/ventoy $FILTERED_LIST"' -i /init
|
$SED '/\[ "$FILTERED_LIST" \]/i\ FILTERED_LIST="/dev/mapper/ventoy $FILTERED_LIST"' -i /init
|
||||||
fi
|
fi
|
||||||
|
|
||||||
$SED -i "/_search_for_boot_device_/a\ $BUSYBOX_PATH/sh $VTOY_PATH/hook/debian/antix-disk.sh" /init
|
if $GREP -q '_search_for_boot_device_' /init; then
|
||||||
|
$SED -i "/_search_for_boot_device_/a\ $BUSYBOX_PATH/sh $VTOY_PATH/hook/debian/antix-disk.sh" /init
|
||||||
|
elif $GREP -q 'FILTERED_LIST=.*ventoy' /init; then
|
||||||
|
$SED -i "/FILTERED_LIST=.*ventoy/i\ $BUSYBOX_PATH/sh $VTOY_PATH/hook/debian/antix-disk.sh" /init
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
if [ -f $VTOY_PATH/ventoy_persistent_map ]; then
|
if [ -f $VTOY_PATH/ventoy_persistent_map ]; then
|
||||||
$SED 's#for param in $cmdline#for param in persist_all $cmdline#g' -i /init
|
$SED 's#for param in $cmdline#for param in persist_all $cmdline#g' -i /init
|
||||||
|
68
IMG/cpio/ventoy/hook/debian/kylin-disk.sh
Normal file
68
IMG/cpio/ventoy/hook/debian/kylin-disk.sh
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
#!/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
|
||||||
|
|
||||||
|
VTPATH_OLD=$PATH; PATH=$BUSYBOX_PATH:$VTOY_PATH/tool:$PATH
|
||||||
|
|
||||||
|
|
||||||
|
ventoy_os_install_dmsetup_by_fuse() {
|
||||||
|
vtlog "ventoy_os_install_dmsetup_by_fuse $*"
|
||||||
|
|
||||||
|
mkdir -p $VTOY_PATH/mnt/fuse $VTOY_PATH/mnt/iso $VTOY_PATH/mnt/squashfs
|
||||||
|
|
||||||
|
vtoydm -p -f $VTOY_PATH/ventoy_image_map -d $1 > $VTOY_PATH/ventoy_dm_table
|
||||||
|
vtoy_fuse_iso -f $VTOY_PATH/ventoy_dm_table -m $VTOY_PATH/mnt/fuse
|
||||||
|
|
||||||
|
mount -t iso9660 $VTOY_PATH/mnt/fuse/ventoy.iso $VTOY_PATH/mnt/iso
|
||||||
|
|
||||||
|
sfsfile=$VTOY_PATH/mnt/iso/casper/filesystem.squashfs
|
||||||
|
|
||||||
|
mount -t squashfs $sfsfile $VTOY_PATH/mnt/squashfs
|
||||||
|
|
||||||
|
kVer=$(uname -r)
|
||||||
|
KoName=$(ls $VTOY_PATH/mnt/squashfs/lib/modules/$kVer/kernel/drivers/md/dm-mod.ko*)
|
||||||
|
vtlog "insmod $KoName"
|
||||||
|
insmod $KoName
|
||||||
|
|
||||||
|
umount $VTOY_PATH/mnt/squashfs
|
||||||
|
umount $VTOY_PATH/mnt/iso
|
||||||
|
umount $VTOY_PATH/mnt/fuse
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
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 ! grep -q 'device-mapper' /proc/devices; then
|
||||||
|
ventoy_os_install_dmsetup_by_fuse $vtdiskname
|
||||||
|
fi
|
||||||
|
|
||||||
|
ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2" "noreplace"
|
||||||
|
|
||||||
|
PATH=$VTPATH_OLD
|
||||||
|
|
||||||
|
# OK finish
|
||||||
|
set_ventoy_hook_finish
|
26
IMG/cpio/ventoy/hook/debian/kylin-hook.sh
Normal file
26
IMG/cpio/ventoy/hook/debian/kylin-hook.sh
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
#!/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/>.
|
||||||
|
#
|
||||||
|
#************************************************************************************
|
||||||
|
|
||||||
|
if [ -e /init ] && $GREP -q '^mountroot$' /init; then
|
||||||
|
echo "Here before mountroot ..." >> $VTLOG
|
||||||
|
|
||||||
|
$SED "/^mountroot$/i\\$BUSYBOX_PATH/sh $VTOY_PATH/hook/debian/kylin-disk.sh" -i /init
|
||||||
|
$SED "/^mountroot$/i\\export LIVEMEDIA=/dev/mapper/ventoy" -i /init
|
||||||
|
$SED "/^mountroot$/i\\export LIVE_MEDIA=/dev/mapper/ventoy" -i /init
|
||||||
|
fi
|
@@ -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
|
||||||
|
@@ -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)"
|
||||||
|
|
||||||
|
@@ -70,6 +70,10 @@ ventoy_get_debian_distro() {
|
|||||||
echo 'vyos'; return
|
echo 'vyos'; return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if $GREP -q 'kylin' /proc/version; then
|
||||||
|
echo 'kylin'; return
|
||||||
|
fi
|
||||||
|
|
||||||
echo 'default'
|
echo 'default'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
38
IMG/cpio/ventoy/hook/primeos/ventoy-disk.sh
Normal file
38
IMG/cpio/ventoy/hook/primeos/ventoy-disk.sh
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
#!/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
|
||||||
|
|
||||||
|
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" "noreplace"
|
||||||
|
|
||||||
|
blkdev_num=$($VTOY_PATH/tool/dmsetup ls | grep ventoy | sed 's/.*(\([0-9][0-9]*\),.*\([0-9][0-9]*\).*/\1:\2/')
|
||||||
|
vtDM=$(ventoy_find_dm_id ${blkdev_num})
|
||||||
|
echo -n "/dev/$vtDM" > /ventoy/rootdev
|
||||||
|
|
||||||
|
PATH=$VTPATH_OLD
|
25
IMG/cpio/ventoy/hook/primeos/ventoy-hook.sh
Normal file
25
IMG/cpio/ventoy/hook/primeos/ventoy-hook.sh
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
#!/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/>.
|
||||||
|
#
|
||||||
|
#************************************************************************************
|
||||||
|
|
||||||
|
. $VTOY_PATH/hook/ventoy-os-lib.sh
|
||||||
|
|
||||||
|
$BUSYBOX_PATH/mkdir /dev
|
||||||
|
|
||||||
|
$SED '/Detecting *PrimeOS/a\ ROOT=$(cat /ventoy/rootdev)' -i /init
|
||||||
|
$SED "/Detecting *PrimeOS/a\ $BUSYBOX_PATH/sh $VTOY_PATH/hook/primeos/ventoy-disk.sh" -i /init
|
@@ -39,7 +39,17 @@ if is_inotify_ventoy_part $3; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
vtlog "find ventoy partition ..."
|
vtlog "find ventoy partition ..."
|
||||||
$BUSYBOX_PATH/sh $VTOY_PATH/hook/default/udev_disk_hook.sh $3 noreplace
|
|
||||||
|
vtReplaceOpt=noreplace
|
||||||
|
|
||||||
|
if $GREP -q el8 /proc/version && [ -f /etc/system-release ]; then
|
||||||
|
vtRhel8Ver=$($SED "s#.*8\.\([0-9]*\).*#\1#" /etc/system-release)
|
||||||
|
if [ $vtRhel8Ver -ge 3 ]; then
|
||||||
|
vtReplaceOpt=""
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
$BUSYBOX_PATH/sh $VTOY_PATH/hook/default/udev_disk_hook.sh $3 $vtReplaceOpt
|
||||||
|
|
||||||
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/')
|
||||||
vtDM=$(ventoy_find_dm_id ${blkdev_num})
|
vtDM=$(ventoy_find_dm_id ${blkdev_num})
|
||||||
|
@@ -102,6 +102,16 @@ wait_for_usb_disk_ready() {
|
|||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
check_usb_disk_ready() {
|
||||||
|
if echo $1 | $EGREP -q "nvme|mmc"; 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
|
||||||
|
@@ -19,7 +19,13 @@
|
|||||||
|
|
||||||
. $VTOY_PATH/hook/ventoy-os-lib.sh
|
. $VTOY_PATH/hook/ventoy-os-lib.sh
|
||||||
|
|
||||||
$SED "/mount.*devtmpfs/a $BUSYBOX_PATH/sh $VTOY_PATH/hook/wifislax/disk_hook.sh" -i /linuxrc
|
if [ -e /linuxrc ]; then
|
||||||
|
INITFILE=/linuxrc
|
||||||
|
elif [ -e /init ]; then
|
||||||
|
INITFILE=/init
|
||||||
|
fi
|
||||||
|
|
||||||
|
$SED "/mount.*devtmpfs/a $BUSYBOX_PATH/sh $VTOY_PATH/hook/wifislax/disk_hook.sh" -i $INITFILE
|
||||||
|
|
||||||
#replace original blkid
|
#replace original blkid
|
||||||
$BUSYBOX_PATH/rm -f /usr/bin/blkid
|
$BUSYBOX_PATH/rm -f /usr/bin/blkid
|
||||||
|
@@ -43,7 +43,7 @@ echo "kenel cmdline=$vtcmdline" >>$VTLOG
|
|||||||
|
|
||||||
#break here for debug
|
#break here for debug
|
||||||
if [ "$VTOY_BREAK_LEVEL" = "01" ] || [ "$VTOY_BREAK_LEVEL" = "11" ]; then
|
if [ "$VTOY_BREAK_LEVEL" = "01" ] || [ "$VTOY_BREAK_LEVEL" = "11" ]; then
|
||||||
sleep 5
|
sleep 5
|
||||||
echo -e "\n\n\033[32m ################################################# \033[0m"
|
echo -e "\n\n\033[32m ################################################# \033[0m"
|
||||||
echo -e "\033[32m ################ VENTOY DEBUG ################### \033[0m"
|
echo -e "\033[32m ################ VENTOY DEBUG ################### \033[0m"
|
||||||
echo -e "\033[32m ################################################# \033[0m \n"
|
echo -e "\033[32m ################################################# \033[0m \n"
|
||||||
|
@@ -145,7 +145,7 @@ done
|
|||||||
|
|
||||||
#break here for debug
|
#break here for debug
|
||||||
if [ "$VTOY_BREAK_LEVEL" = "02" ] || [ "$VTOY_BREAK_LEVEL" = "12" ]; then
|
if [ "$VTOY_BREAK_LEVEL" = "02" ] || [ "$VTOY_BREAK_LEVEL" = "12" ]; then
|
||||||
sleep 5
|
sleep 5
|
||||||
echo -e "\n\n\033[32m ################################################# \033[0m"
|
echo -e "\n\n\033[32m ################################################# \033[0m"
|
||||||
echo -e "\033[32m ################ VENTOY DEBUG ################### \033[0m"
|
echo -e "\033[32m ################ VENTOY DEBUG ################### \033[0m"
|
||||||
echo -e "\033[32m ################################################# \033[0m \n"
|
echo -e "\033[32m ################################################# \033[0m \n"
|
||||||
|
BIN
IMG/cpio/ventoy/tool/lz4cat64
Normal file
BIN
IMG/cpio/ventoy/tool/lz4cat64
Normal file
Binary file not shown.
BIN
IMG/cpio/ventoy/tool/lz4cataa64
Normal file
BIN
IMG/cpio/ventoy/tool/lz4cataa64
Normal file
Binary file not shown.
@@ -19,46 +19,56 @@
|
|||||||
|
|
||||||
echo "#### install vtoytool #####" >> $VTLOG
|
echo "#### install vtoytool #####" >> $VTLOG
|
||||||
|
|
||||||
if ! [ -e $BUSYBOX_PATH/ar ]; then
|
for app in ar inotifyd; do
|
||||||
$BUSYBOX_PATH/ln -s $VTOY_PATH/tool/ar $BUSYBOX_PATH/ar
|
if [ -e $BUSYBOX_PATH/$app ]; then
|
||||||
fi
|
$BUSYBOX_PATH/rm -f $VTOY_PATH/tool/$app
|
||||||
|
$BUSYBOX_PATH/ln -s $BUSYBOX_PATH/$app $VTOY_PATH/tool/$app
|
||||||
for vtdir in $(ls $VTOY_PATH/tool/vtoytool/); do
|
else
|
||||||
echo "try $VTOY_PATH/tool/vtoytool/$vtdir/ ..." >> $VTLOG
|
$BUSYBOX_PATH/ln -s $VTOY_PATH/tool/$app $BUSYBOX_PATH/$app
|
||||||
if $VTOY_PATH/tool/vtoytool/$vtdir/vtoytool_64 --install 2>>$VTLOG; then
|
|
||||||
echo "vtoytool_64 OK" >> $VTLOG
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
|
|
||||||
if $VTOY_PATH/tool/vtoytool/$vtdir/vtoytool_32 --install 2>>$VTLOG; then
|
|
||||||
echo "vtoytool_32 OK" >> $VTLOG
|
|
||||||
break
|
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
if $VTOY_PATH/tool/vtoy_fuse_iso_64 -t 2>>$VTLOG; then
|
|
||||||
echo "use vtoy_fuse_iso_64" >>$VTLOG
|
if $GREP -q aarch64 $VTOY_PATH/ventoy_arch; then
|
||||||
$BUSYBOX_PATH/cp -a $VTOY_PATH/tool/vtoy_fuse_iso_64 $VTOY_PATH/tool/vtoy_fuse_iso
|
for vtdir in $(ls $VTOY_PATH/tool/vtoytool/); do
|
||||||
|
echo "try $VTOY_PATH/tool/vtoytool/$vtdir/ ..." >> $VTLOG
|
||||||
|
if $VTOY_PATH/tool/vtoytool/$vtdir/vtoytool_aa64 --install 2>>$VTLOG; then
|
||||||
|
echo "vtoytool_aa64 OK" >> $VTLOG
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
$BUSYBOX_PATH/cp -a $VTOY_PATH/tool/vtoy_fuse_iso_aa64 $VTOY_PATH/tool/vtoy_fuse_iso
|
||||||
|
$BUSYBOX_PATH/cp -a $VTOY_PATH/tool/unsquashfs_aa64 $VTOY_PATH/tool/vtoy_unsquashfs
|
||||||
else
|
else
|
||||||
echo "use vtoy_fuse_iso_32" >>$VTLOG
|
for vtdir in $(ls $VTOY_PATH/tool/vtoytool/); do
|
||||||
$BUSYBOX_PATH/cp -a $VTOY_PATH/tool/vtoy_fuse_iso_32 $VTOY_PATH/tool/vtoy_fuse_iso
|
echo "try $VTOY_PATH/tool/vtoytool/$vtdir/ ..." >> $VTLOG
|
||||||
fi
|
if $VTOY_PATH/tool/vtoytool/$vtdir/vtoytool_64 --install 2>>$VTLOG; then
|
||||||
|
echo "vtoytool_64 OK" >> $VTLOG
|
||||||
if $VTOY_PATH/tool/unsquashfs_64 -t 2>>$VTLOG; then
|
break
|
||||||
echo "use unsquashfs_64" >>$VTLOG
|
fi
|
||||||
$BUSYBOX_PATH/cp -a $VTOY_PATH/tool/unsquashfs_64 $VTOY_PATH/tool/vtoy_unsquashfs
|
|
||||||
else
|
if $VTOY_PATH/tool/vtoytool/$vtdir/vtoytool_32 --install 2>>$VTLOG; then
|
||||||
echo "use unsquashfs_32" >>$VTLOG
|
echo "vtoytool_32 OK" >> $VTLOG
|
||||||
$BUSYBOX_PATH/cp -a $VTOY_PATH/tool/unsquashfs_32 $VTOY_PATH/tool/vtoy_unsquashfs
|
break
|
||||||
fi
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if $VTOY_PATH/tool/vtoy_fuse_iso_64 -t 2>>$VTLOG; then
|
||||||
if $VTOY_PATH/tool/unsquashfs_64 -t 2>>$VTLOG; then
|
echo "use vtoy_fuse_iso_64" >>$VTLOG
|
||||||
echo "use unsquashfs_64" >>$VTLOG
|
$BUSYBOX_PATH/cp -a $VTOY_PATH/tool/vtoy_fuse_iso_64 $VTOY_PATH/tool/vtoy_fuse_iso
|
||||||
$BUSYBOX_PATH/cp -a $VTOY_PATH/tool/unsquashfs_64 $VTOY_PATH/tool/vtoy_unsquashfs
|
else
|
||||||
else
|
echo "use vtoy_fuse_iso_32" >>$VTLOG
|
||||||
echo "use unsquashfs_32" >>$VTLOG
|
$BUSYBOX_PATH/cp -a $VTOY_PATH/tool/vtoy_fuse_iso_32 $VTOY_PATH/tool/vtoy_fuse_iso
|
||||||
$BUSYBOX_PATH/cp -a $VTOY_PATH/tool/unsquashfs_32 $VTOY_PATH/tool/vtoy_unsquashfs
|
fi
|
||||||
|
|
||||||
|
if $VTOY_PATH/tool/unsquashfs_64 -t 2>>$VTLOG; then
|
||||||
|
echo "use unsquashfs_64" >>$VTLOG
|
||||||
|
$BUSYBOX_PATH/cp -a $VTOY_PATH/tool/unsquashfs_64 $VTOY_PATH/tool/vtoy_unsquashfs
|
||||||
|
else
|
||||||
|
echo "use unsquashfs_32" >>$VTLOG
|
||||||
|
$BUSYBOX_PATH/cp -a $VTOY_PATH/tool/unsquashfs_32 $VTOY_PATH/tool/vtoy_unsquashfs
|
||||||
|
fi
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
BIN
IMG/cpio/ventoy/tool/zstdcat64
Normal file
BIN
IMG/cpio/ventoy/tool/zstdcat64
Normal file
Binary file not shown.
BIN
IMG/cpio/ventoy/tool/zstdcataa64
Normal file
BIN
IMG/cpio/ventoy/tool/zstdcataa64
Normal file
Binary file not shown.
@@ -305,6 +305,20 @@ ventoy_get_os_type() {
|
|||||||
echo 'blackPanther'; return
|
echo 'blackPanther'; return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if $GREP -q 'primeos' /proc/version; then
|
||||||
|
echo 'primeos'; return
|
||||||
|
fi
|
||||||
|
|
||||||
|
if $GREP -q 'austrumi' /proc/version; then
|
||||||
|
echo 'austrumi'; return
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f /DISTRO_SPECS ]; then
|
||||||
|
if $GREP -q '[Pp]uppy' /DISTRO_SPECS; then
|
||||||
|
echo 'debian'; return
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
echo "default"
|
echo "default"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -21,8 +21,10 @@ cp -a $VENTOY_PATH/SQUASHFS/unsquashfs_* tool/
|
|||||||
cp -a $VENTOY_PATH/FUSEISO/vtoy_fuse_iso_* tool/
|
cp -a $VENTOY_PATH/FUSEISO/vtoy_fuse_iso_* tool/
|
||||||
cp -a $VENTOY_PATH/VtoyTool/vtoytool tool/
|
cp -a $VENTOY_PATH/VtoyTool/vtoytool tool/
|
||||||
cp -a $VENTOY_PATH/VBLADE/vblade-master/vblade_* tool/
|
cp -a $VENTOY_PATH/VBLADE/vblade-master/vblade_* tool/
|
||||||
|
|
||||||
cp -a $VENTOY_PATH/LZIP/lunzip32 tool/
|
cp -a $VENTOY_PATH/LZIP/lunzip32 tool/
|
||||||
cp -a $VENTOY_PATH/LZIP/lunzip64 tool/
|
cp -a $VENTOY_PATH/LZIP/lunzip64 tool/
|
||||||
|
cp -a $VENTOY_PATH/LZIP/lunzipaa64 tool/
|
||||||
|
|
||||||
|
|
||||||
chmod -R 777 ./tool
|
chmod -R 777 ./tool
|
||||||
|
@@ -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
|
||||||
|
BIN
INSTALL/EFI/BOOT/BOOTAA64.EFI
Normal file
BIN
INSTALL/EFI/BOOT/BOOTAA64.EFI
Normal file
Binary file not shown.
BIN
INSTALL/EFI/BOOT/BOOTIA32.EFI
Normal file
BIN
INSTALL/EFI/BOOT/BOOTIA32.EFI
Normal file
Binary file not shown.
BIN
INSTALL/EFI/BOOT/grubia32.efi
Normal file
BIN
INSTALL/EFI/BOOT/grubia32.efi
Normal file
Binary file not shown.
BIN
INSTALL/EFI/BOOT/grubia32_real.efi
Normal file
BIN
INSTALL/EFI/BOOT/grubia32_real.efi
Normal file
Binary file not shown.
Binary file not shown.
BIN
INSTALL/EFI/BOOT/mmia32.efi
Normal file
BIN
INSTALL/EFI/BOOT/mmia32.efi
Normal file
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user