mirror of
https://github.com/ventoy/Ventoy.git
synced 2025-09-18 18:01:14 +00:00
Compare commits
75 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
67d7091255 | ||
|
2ab1474694 | ||
|
aa7a77df5a | ||
|
4790dedbb1 | ||
|
de085ba086 | ||
|
bb94ec6d6f | ||
|
b9892660b5 | ||
|
0e9d34422a | ||
|
c7c9c62ec7 | ||
|
9e13955af1 | ||
|
2dafe75509 | ||
|
6fbc08cfcb | ||
|
6034b25cba | ||
|
c5fd64d21c | ||
|
32fac72b5b | ||
|
022322c8fa | ||
|
96f11252d9 | ||
|
004ad27e0d | ||
|
9a8dc42d93 | ||
|
6166a813ea | ||
|
786a9ec678 | ||
|
0600576c78 | ||
|
72b722c86c | ||
|
bea5607ea5 | ||
|
b3c2bcf58f | ||
|
4e8d8b2e19 | ||
|
60d88cb7b1 | ||
|
f7e6bbc70c | ||
|
ee994a0569 | ||
|
966ed21de7 | ||
|
ff7ee9c10e | ||
|
f43461a16c | ||
|
377e3fb7bc | ||
|
f62bd1be14 | ||
|
b11c38779d | ||
|
f202542c62 | ||
|
279491a36a | ||
|
cb209f9b9e | ||
|
b7b2f6a5c1 | ||
|
3967fb5fb5 | ||
|
a2ad95792d | ||
|
791308d2ce | ||
|
0ffb1b15ef | ||
|
d6e1730ca0 | ||
|
4d55f505f9 | ||
|
30a61ac5c4 | ||
|
9b79831516 | ||
|
af2d6bc247 | ||
|
d8ae740427 | ||
|
b685157ae3 | ||
|
3f6ddb6fb6 | ||
|
b8838b305d | ||
|
00de8b932d | ||
|
1e49dbe957 | ||
|
580416facc | ||
|
75cf728fa9 | ||
|
8723aeb4cc | ||
|
dc9a99bb20 | ||
|
a40456d9d2 | ||
|
bdab55e8aa | ||
|
1b2483ec14 | ||
|
c16e76130b | ||
|
d672af4819 | ||
|
712f10e86a | ||
|
2be340d2e8 | ||
|
b77ef718b4 | ||
|
72f5710b88 | ||
|
ee7da60d88 | ||
|
44fb9f4564 | ||
|
3f65f0ef03 | ||
|
4faa5e4344 | ||
|
c7693d4ecd | ||
|
4527e1db79 | ||
|
757cacf274 | ||
|
39703cabb7 |
14
.github/workflows/ci.yml
vendored
14
.github/workflows/ci.yml
vendored
@@ -13,25 +13,25 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
- name: Run docker-compose up
|
- name: Run docker compose up
|
||||||
run: docker-compose up
|
run: docker compose up
|
||||||
- uses: actions/upload-artifact@v3
|
- uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: ventoy-windows
|
name: ventoy-windows
|
||||||
path: INSTALL/ventoy-*windows*
|
path: INSTALL/ventoy-*windows*
|
||||||
- uses: actions/upload-artifact@v3
|
- uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: ventoy-linux
|
name: ventoy-linux
|
||||||
path: INSTALL/ventoy-*linux*
|
path: INSTALL/ventoy-*linux*
|
||||||
- uses: actions/upload-artifact@v3
|
- uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: ventoy-livecd
|
name: ventoy-livecd
|
||||||
path: INSTALL/ventoy-*livecd*
|
path: INSTALL/ventoy-*livecd*
|
||||||
- uses: actions/upload-artifact@v3
|
- uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: SHA256SUM
|
name: SHA256SUM
|
||||||
path: INSTALL/sha256.txt
|
path: INSTALL/sha256.txt
|
||||||
- uses: actions/upload-artifact@v3
|
- uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: xxx-build-log
|
name: xxx-build-log
|
||||||
path: DOC/build.log
|
path: DOC/build.log
|
||||||
|
193
BLOB_List.md
Normal file
193
BLOB_List.md
Normal file
@@ -0,0 +1,193 @@
|
|||||||
|
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>BLOB</th>
|
||||||
|
<th>File Source</th>
|
||||||
|
<th>Desc</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr> <td>./BUSYBOX/chmod/vtchmod32</td> <td rowspan=5>build</td> <td rowspan=5>Build Instructions:<br/> ./BUSYBOX/chmod/build.sh</td> </tr>
|
||||||
|
<tr> <td>./BUSYBOX/chmod/vtchmod64</td> </tr>
|
||||||
|
<tr> <td>./BUSYBOX/chmod/vtchmod64_musl</td> </tr>
|
||||||
|
<tr> <td>./BUSYBOX/chmod/vtchmodaa64</td> </tr>
|
||||||
|
<tr> <td>./BUSYBOX/chmod/vtchmodm64e</td> </tr>
|
||||||
|
<tr> <td>./cryptsetup/veritysetup32</td> <td rowspan=2>build</td> <td rowspan=2>Build Instructions:<br/> ./cryptsetup/cryptsetup-build.txt</td> </tr>
|
||||||
|
<tr> <td>./cryptsetup/veritysetup64</td> </tr>
|
||||||
|
<tr> <td>./DMSETUP/dmsetup32</td> <td rowspan=4>build</td> <td rowspan=4>Build Instructions:<br/> ./DMSETUP/build.txt</td> </tr>
|
||||||
|
<tr> <td>./DMSETUP/dmsetup64</td> </tr>
|
||||||
|
<tr> <td>./DMSETUP/dmsetupaa64</td> </tr>
|
||||||
|
<tr> <td>./DMSETUP/dmsetupm64e</td> </tr>
|
||||||
|
<tr> <td>./FUSEISO/vtoy_fuse_iso_32</td> <td rowspan=3>build</td> <td rowspan=3>Build Instructions:<br/> ./FUSEISO/build.sh<br/>./FUSEISO/build_aarch64.sh<br/>./FUSEISO/build_libfuse.sh<br/>./FUSEISO/build_libfuse_aarch64.sh </td> </tr>
|
||||||
|
<tr> <td>./FUSEISO/vtoy_fuse_iso_64</td> </tr>
|
||||||
|
<tr> <td>./FUSEISO/vtoy_fuse_iso_aa64</td> </tr>
|
||||||
|
<tr> <td>./IMG/cpio_arm64/ventoy/busybox/a64</td> <td>build</td> <td>Build Instructions:<br/>./BUSYBOX/build.txt ash</td> </tr>
|
||||||
|
<tr> <td>./IMG/cpio_arm64/ventoy/busybox/vtchmodaa64</td> <td>build</td> <td>Same with ./BUSYBOX/chmod/vtchmodaa64<br/>Check the file hash to confirm</td> </tr>
|
||||||
|
<tr> <td>./IMG/cpio_arm64/ventoy/busybox/xzminidecaa64</td> <td>build</td> <td>Build Instructions:<br/>./DOC/BuildVentoyFromSource.txt 4.17</td> </tr>
|
||||||
|
<tr> <td>./IMG/cpio_arm64/ventoy/tool/lz4cataa64</td> <td>build</td> <td>Same with ./LZIP/lz4cataa64<br/>Check the file hash to confirm</td> </tr>
|
||||||
|
<tr> <td>./IMG/cpio_arm64/ventoy/tool/zstdcataa64</td> <td>build</td> <td>Same with ./ZSTD/zstdcataa64<br/>Check the file hash to confirm</td> </tr>
|
||||||
|
<tr> <td>./IMG/cpio_mips64/ventoy/busybox/m64</td> <td>build</td> <td>Build Instructions:<br/>./BUSYBOX/build.txt ash</td> </tr>
|
||||||
|
<tr> <td>./IMG/cpio_mips64/ventoy/busybox/vtchmodm64e</td> <td>build</td> <td>Same with ./BUSYBOX/chmod/vtchmodm64e<br/>Check the file hash to confirm</td> </tr>
|
||||||
|
<tr> <td>./IMG/cpio_mips64/ventoy/busybox/xzminidecm64e</td> <td>build</td> <td>Build Instructions:<br/>./DOC/BuildVentoyFromSource.txt 4.18</td> </tr>
|
||||||
|
<tr> <td>./IMG/cpio_mips64/ventoy/tool/lz4catm64e</td> <td>build</td> <td>Same with ./LZIP/lz4catm64e<br/>Check the file hash to confirm</td> </tr>
|
||||||
|
<tr> <td>./IMG/cpio_x86/ventoy/busybox/64h</td> <td>build</td> <td>Build Instructions:<br/>./BUSYBOX/build.txt ash</td> </tr>
|
||||||
|
<tr> <td>./IMG/cpio_x86/ventoy/busybox/ash</td> <td>upstream</td> <td>Download from BusyBox website.<br/>URL & File Hash documented in<br/> ./DOC/BuildVentoyFromSource.txt 5.4</td> </tr>
|
||||||
|
<tr> <td>./IMG/cpio_x86/ventoy/busybox/vtchmod32</td> <td>build</td> <td>Same with ./BUSYBOX/chmod/vtchmod32<br/>Check the file hash to confirm</td> </tr>
|
||||||
|
<tr> <td>./IMG/cpio_x86/ventoy/busybox/vtchmod64</td> <td>build</td> <td>Same with ./BUSYBOX/chmod/vtchmod64<br/>Check the file hash to confirm</td> </tr>
|
||||||
|
<tr> <td>./IMG/cpio_x86/ventoy/busybox/vtchmod64_musl</td> <td>build</td> <td>Same with ./BUSYBOX/chmod/vtchmod64_musl<br/>Check the file hash to confirm</td> </tr>
|
||||||
|
<tr> <td>./IMG/cpio_x86/ventoy/busybox/xzminidec32</td> <td>build</td> <td>Build Instructions:<br/>./DOC/BuildVentoyFromSource.txt 4.15</td> </tr>
|
||||||
|
<tr> <td>./IMG/cpio_x86/ventoy/busybox/xzminidec64</td> <td>build</td> <td>Build Instructions:<br/>./DOC/BuildVentoyFromSource.txt 4.16</td> </tr>
|
||||||
|
<tr> <td>./IMG/cpio_x86/ventoy/busybox/xzminidec64_musl</td> <td>build</td> <td>Build Instructions:<br/>./DOC/BuildVentoyFromSource.txt 4.16</td> </tr>
|
||||||
|
<tr> <td>./IMG/cpio_x86/ventoy/tool/ar</td> <td>upstream</td> <td>Download from BusyBox website.<br/>URL & File Hash documented in<br/> ./DOC/BuildVentoyFromSource.txt 5.2</td> </tr>
|
||||||
|
<tr> <td>./IMG/cpio_x86/ventoy/tool/inotifyd</td> <td>upstream</td> <td>Download from BusyBox website.<br/>URL & File Hash documented in<br/> ./DOC/BuildVentoyFromSource.txt 5.3</td> </tr>
|
||||||
|
<tr> <td>./IMG/cpio_x86/ventoy/tool/lz4cat</td> <td>upstream</td> <td>URL & File Hash documented in<br/> ./DOC/BuildVentoyFromSource.txt 5.1</td> </tr>
|
||||||
|
<tr> <td>./IMG/cpio_x86/ventoy/tool/lz4cat64</td> <td>build</td> <td>Build Instructions:<br/>./LZIP/buildlz4.txt</td> </tr>
|
||||||
|
<tr> <td>./IMG/cpio_x86/ventoy/tool/zstdcat</td> <td>build</td> <td>Same with ./ZSTD/zstdcat<br/>Check the file hash to confirm</td> </tr>
|
||||||
|
<tr> <td>./IMG/cpio_x86/ventoy/tool/zstdcat64</td> <td>build</td> <td>Same with ./ZSTD/zstdcat64<br/>Check the file hash to confirm</td> </tr>
|
||||||
|
<tr> <td>./INSTALL/EFI/BOOT/BOOTAA64.EFI</td> <td rowspan=4>build</td> <td rowspan=4>Build Instructions:<br/> ./DOC/BuildVentoyFromSource.txt 4.1-Build grub2</td> </tr>
|
||||||
|
<tr> <td>./INSTALL/EFI/BOOT/BOOTMIPS.EFI</td>
|
||||||
|
<tr> <td>./INSTALL/EFI/BOOT/grubia32_real.efi</td>
|
||||||
|
<tr> <td>./INSTALL/EFI/BOOT/grubx64_real.efi</td>
|
||||||
|
<tr> <td>./INSTALL/EFI/BOOT/grub.efi</td> <td rowspan=6>upstream</td> <td rowspan=6>https://github.com/ValdikSS/Super-UEFIinSecureBoot-Disk </td> </tr>
|
||||||
|
<tr> <td>./INSTALL/EFI/BOOT/BOOTIA32.EFI</td>
|
||||||
|
<tr> <td>./INSTALL/EFI/BOOT/BOOTX64.EFI</td>
|
||||||
|
<tr> <td>./INSTALL/EFI/BOOT/grubia32.efi</td>
|
||||||
|
<tr> <td>./INSTALL/EFI/BOOT/mmia32.efi</td>
|
||||||
|
<tr> <td>./INSTALL/EFI/BOOT/MokManager.efi</td>
|
||||||
|
<tr> <td>./INSTALL/tool/aarch64/ash</td> <td rowspan=12>build</td> <td rowspan=12>Build Instructions:<br/>./DOC/BUSYBOX/build.txt</td> </tr>
|
||||||
|
<tr> <td>./INSTALL/tool/aarch64/hexdump</td>
|
||||||
|
<tr> <td>./INSTALL/tool/aarch64/xzcat</td>
|
||||||
|
<tr> <td>./INSTALL/tool/i386/ash</td>
|
||||||
|
<tr> <td>./INSTALL/tool/i386/hexdump</td>
|
||||||
|
<tr> <td>./INSTALL/tool/i386/xzcat</td>
|
||||||
|
<tr> <td>./INSTALL/tool/mips64el/ash</td>
|
||||||
|
<tr> <td>./INSTALL/tool/mips64el/hexdump</td>
|
||||||
|
<tr> <td>./INSTALL/tool/mips64el/xzcat</td>
|
||||||
|
<tr> <td>./INSTALL/tool/x86_64/ash</td>
|
||||||
|
<tr> <td>./INSTALL/tool/x86_64/hexdump</td>
|
||||||
|
<tr> <td>./INSTALL/tool/x86_64/xzcat</td>
|
||||||
|
<tr> <td>./INSTALL/tool/aarch64/Ventoy2Disk.gtk3</td> <td rowspan=6>build</td> <td rowspan=6>Build Instructions:<br/>./LinuxGUI/build_gtk.sh</td> </tr>
|
||||||
|
<tr> <td>./INSTALL/tool/i386/Ventoy2Disk.gtk3</td>
|
||||||
|
<tr> <td>./INSTALL/tool/i386/Ventoy2Disk.gtk2</td>
|
||||||
|
<tr> <td>./INSTALL/tool/mips64el/Ventoy2Disk.gtk3</td>
|
||||||
|
<tr> <td>./INSTALL/tool/x86_64/Ventoy2Disk.gtk3</td>
|
||||||
|
<tr> <td>./INSTALL/tool/x86_64/Ventoy2Disk.gtk2</td>
|
||||||
|
<tr> <td>./INSTALL/tool/aarch64/Ventoy2Disk.qt5</td> <td rowspan=4>build</td> <td rowspan=4>Build Instructions:<br/>./LinuxGUI/build_qt.sh</td> </tr>
|
||||||
|
<tr> <td>./INSTALL/tool/i386/Ventoy2Disk.qt5</td>
|
||||||
|
<tr> <td>./INSTALL/tool/mips64el/Ventoy2Disk.qt5</td>
|
||||||
|
<tr> <td>./INSTALL/tool/x86_64/Ventoy2Disk.qt5</td>
|
||||||
|
<tr> <td>./INSTALL/tool/aarch64/Plugson</td> <td rowspan=4>build</td> <td rowspan=4>Build Instructions:<br/>./Plugson/build.sh</td> </tr>
|
||||||
|
<tr> <td>./INSTALL/tool/i386/Plugson</td>
|
||||||
|
<tr> <td>./INSTALL/tool/mips64el/Plugson</td>
|
||||||
|
<tr> <td>./INSTALL/tool/x86_64/Plugson</td>
|
||||||
|
<tr> <td>./INSTALL/tool/aarch64/V2DServer</td> <td rowspan=4>build</td> <td rowspan=4>Build Instructions:<br/>./LinuxGUI/build.sh</td> </tr>
|
||||||
|
<tr> <td>./INSTALL/tool/i386/V2DServer</td>
|
||||||
|
<tr> <td>./INSTALL/tool/mips64el/V2DServer</td>
|
||||||
|
<tr> <td>./INSTALL/tool/x86_64/V2DServer</td>
|
||||||
|
<tr> <td>./INSTALL/tool/aarch64/mkexfatfs</td> <td rowspan=8>build</td> <td rowspan=8>Build Instructions:<br/>./DOC/BuildVentoyFromSource.txt 4.9<br/>./ExFAT/buidexfat.sh<br/>./ExFAT/buidexfat_aarch64.sh<br/>./ExFAT/buidlibfuse.sh<br/>./ExFAT/buidlibfuse_aarch64.sh<br/></td> </tr>
|
||||||
|
<tr> <td>./INSTALL/tool/aarch64/mount.exfat-fuse</td>
|
||||||
|
<tr> <td>./INSTALL/tool/i386/mkexfatfs</td>
|
||||||
|
<tr> <td>./INSTALL/tool/i386/mount.exfat-fuse</td>
|
||||||
|
<tr> <td>./INSTALL/tool/mips64el/mkexfatfs</td>
|
||||||
|
<tr> <td>./INSTALL/tool/mips64el/mount.exfat-fuse</td>
|
||||||
|
<tr> <td>./INSTALL/tool/x86_64/mkexfatfs</td>
|
||||||
|
<tr> <td>./INSTALL/tool/x86_64/mount.exfat-fuse</td>
|
||||||
|
<tr> <td>./INSTALL/tool/aarch64/vlnk</td> <td rowspan=4>build</td> <td rowspan=4>Build Instructions:<br/>./Vlnk/build.sh</td> </tr>
|
||||||
|
<tr> <td>./INSTALL/tool/i386/vlnk</td>
|
||||||
|
<tr> <td>./INSTALL/tool/mips64el/vlnk</td>
|
||||||
|
<tr> <td>./INSTALL/tool/x86_64/vlnk</td>
|
||||||
|
<tr> <td>./INSTALL/tool/aarch64/vtoycli</td> <td rowspan=4>build</td> <td rowspan=4>Build Instructions:<br/>./vtoycli/build.sh</td> </tr>
|
||||||
|
<tr> <td>./INSTALL/tool/i386/vtoycli</td>
|
||||||
|
<tr> <td>./INSTALL/tool/mips64el/vtoycli</td>
|
||||||
|
<tr> <td>./INSTALL/tool/x86_64/vtoycli</td>
|
||||||
|
<tr> <td>./INSTALL/ventoy/imdisk/32/imdisk.cpl</td> <td rowspan=6>upstream</td> <td rowspan=6>Download from imdisk project.<br/>URL & File Hash documented in<br/> ./DOC/BuildVentoyFromSource.txt 5.8</td> </tr>
|
||||||
|
<tr> <td>./INSTALL/ventoy/imdisk/32/imdisk.exe</td>
|
||||||
|
<tr> <td>./INSTALL/ventoy/imdisk/32/imdisk.sys</td>
|
||||||
|
<tr> <td>./INSTALL/ventoy/imdisk/64/imdisk.cpl</td>
|
||||||
|
<tr> <td>./INSTALL/ventoy/imdisk/64/imdisk.exe</td>
|
||||||
|
<tr> <td>./INSTALL/ventoy/imdisk/64/imdisk.sys</td>
|
||||||
|
<tr> <td>./INSTALL/ventoy/iso9660_aa64.efi</td> <td rowspan=6>build</td> <td rowspan=6>Build Instructions:<br/>./DOC/BuildVentoyFromSource.txt 4.17</td> </tr>
|
||||||
|
<tr> <td>./INSTALL/ventoy/udf_aa64.efi</td>
|
||||||
|
<tr> <td>./INSTALL/ventoy/iso9660_ia32.efi</td>
|
||||||
|
<tr> <td>./INSTALL/ventoy/udf_ia32.efi</td>
|
||||||
|
<tr> <td>./INSTALL/ventoy/iso9660_x64.efi</td>
|
||||||
|
<tr> <td>./INSTALL/ventoy/udf_x64.efi</td>
|
||||||
|
<tr> <td>./INSTALL/VentoyGUI.aarch64</td> <td rowspan=4>build</td> <td rowspan=4>Build Instructions:<br/>./LinuxGUI/build_gtk.sh</td> </tr>
|
||||||
|
<tr> <td>./INSTALL/VentoyGUI.i386</td>
|
||||||
|
<tr> <td>./INSTALL/VentoyGUI.mips64el</td>
|
||||||
|
<tr> <td>./INSTALL/VentoyGUI.x86_64</td>
|
||||||
|
<tr> <td>./INSTALL/Ventoy2Disk.exe</td> <td rowspan=4>build</td> <td rowspan=4>Build Instructions:<br/>./Ventoy2Disk/Ventoy2Disk.sln</td> </tr>
|
||||||
|
<tr> <td>./INSTALL/Ventoy2Disk_ARM.exe</td>
|
||||||
|
<tr> <td>./INSTALL/Ventoy2Disk_ARM64.exe</td>
|
||||||
|
<tr> <td>./INSTALL/Ventoy2Disk_X64.exe</td>
|
||||||
|
<tr> <td>./INSTALL/ventoy/vtoyjump32.exe</td> <td rowspan=2>build</td> <td rowspan=2>Build Instructions:<br/>./vtoyjump/vtoyjump.sln</td> </tr>
|
||||||
|
<tr> <td>./INSTALL/ventoy/vtoyjump64.exe</td>
|
||||||
|
<tr> <td>./INSTALL/ventoy/ventoy_aa64.efi</td> <td rowspan=6>build</td> <td rowspan=6>Build Instructions:<br/>./EDK2/buildedk.sh</td> </tr>
|
||||||
|
<tr> <td>./INSTALL/ventoy/ventoy_ia32.efi</td>
|
||||||
|
<tr> <td>./INSTALL/ventoy/ventoy_x64.efi</td>
|
||||||
|
<tr> <td>./INSTALL/ventoy/vtoyutil_aa64.efi</td>
|
||||||
|
<tr> <td>./INSTALL/ventoy/vtoyutil_ia32.efi</td>
|
||||||
|
<tr> <td>./INSTALL/ventoy/vtoyutil_x64.efi</td>
|
||||||
|
<tr> <td>./INSTALL/ventoy/ipxe.krn</td> <td>build</td> <td>Build Instructions:<br/>./IPXE/buildipxe.sh</td> </tr>
|
||||||
|
<tr> <td>./INSTALL/ventoy/memdisk</td> <td>upstream</td> <td>Download from syslinux project.<br/>URL & File Hash documented in<br/> ./DOC/BuildVentoyFromSource.txt 5.9</td> </tr>
|
||||||
|
<tr> <td>./LiveCD/ISO/EFI/boot/vmlinuz64</td> <td>upstream</td> <td>Download from TinyLinux website.<br/>URL & File Hash documented in<br/> ./DOC/BuildVentoyFromSource.txt 5.14</td> </tr>
|
||||||
|
<tr> <td>./LiveCDGUI/EXT/busybox-x86_64</td> <td>build</td> <td>Same with ./IMG/cpio_x86/ventoy/busybox/busybox64<br/>Check the file hash to confirm</td> </tr>
|
||||||
|
<tr> <td>./LiveCDGUI/GRUB/bootx64.efi</td> <td rowspan=2>build</td> <td rowspan=2>./DOC/BuildVentoyFromSource.txt 4.1-Build grub2</td> </tr>
|
||||||
|
<tr> <td>./LiveCD/GRUB/bootx64.efi</td>
|
||||||
|
<tr> <td>./LZIP/lunzip32</td> <td rowspan=3>build</td> <td rowspan=3>Build Instructions:<br/>./DOC/BuildVentoyFromSource.txt 4.19</td> </tr>
|
||||||
|
<tr> <td>./LZIP/lunzip64</td>
|
||||||
|
<tr> <td>./LZIP/lunzipaa64</td>
|
||||||
|
<tr> <td>./LZIP/lz4cat64</td> <td rowspan=3>build</td> <td rowspan=3>Build Instructions:<br/>./LZIP/buildlz4.txt</td> </tr>
|
||||||
|
<tr> <td>./LZIP/lz4cataa64</td>
|
||||||
|
<tr> <td>./LZIP/lz4catm64e</td>
|
||||||
|
<tr> <td>./Plugson/vs/VentoyPlugson/Release/VentoyPlugson.exe</td> <td rowspan=2>build</td> <td rowspan=2>Build Instructions:<br/>./Plugson/vs/VentoyPlugson/VentoyPlugson.sln</td> </tr>
|
||||||
|
<tr> <td>./Plugson/vs/VentoyPlugson/x64/Release/VentoyPlugson_X64.exe</td>
|
||||||
|
<tr> <td>./SQUASHFS/unsquashfs_32</td> <td rowspan=3>build</td> <td rowspan=3>Build Instructions:<br/>./SQUASHFS/build.sh</td> </tr>
|
||||||
|
<tr> <td>./SQUASHFS/unsquashfs_64</td>
|
||||||
|
<tr> <td>./SQUASHFS/unsquashfs_aa64</td>
|
||||||
|
<tr> <td>./Unix/ventoy_unix/DragonFly/sbin/dmsetup</td> <td>upstream</td> <td>Get from DragonFly ISO.<br/>URL & File Hash documented in<br/> ./DOC/BuildVentoyFromSource.txt 5.13</td> </tr>
|
||||||
|
<tr> <td>./Unix/ventoy_unix/DragonFly/sbin/init</td> <td>build</td> <td>Build Instructions:<br/>./Unix/ventoy_unix_src/DragonFly/build.sh</td> </tr>
|
||||||
|
<tr> <td>./VBLADE/vblade-master/vblade_32</td> <td rowspan=3>build</td> <td rowspan=3>Build Instructions:<br/>./VBLADE/vblade-master/build.sh</td> </tr>
|
||||||
|
<tr> <td>./VBLADE/vblade-master/vblade_64</td>
|
||||||
|
<tr> <td>./VBLADE/vblade-master/vblade_aa64</td>
|
||||||
|
<tr> <td>./Vlnk/vs/VentoyVlnk/Release/VentoyVlnk.exe</td> <td>build</td> <td>Build Instructions:<br/>./Vlnk/vs/VentoyVlnk/VentoyVlnk.sln</td> </tr>
|
||||||
|
<tr> <td>./VtoyTool/vtoytool/00/vtoytool_32</td> <td rowspan=6>build</td> <td rowspan=6>Build Instructions:<br/>./VtoyTool/build.sh</td> </tr>
|
||||||
|
<tr> <td>./VtoyTool/vtoytool/00/vtoytool_64</td>
|
||||||
|
<tr> <td>./VtoyTool/vtoytool/00/vtoytool_aa64</td>
|
||||||
|
<tr> <td>./VtoyTool/vtoytool/00/vtoytool_m64e</td>
|
||||||
|
<tr> <td>./VtoyTool/vtoytool/01/vtoytool_64</td>
|
||||||
|
<tr> <td>./VtoyTool/vtoytool/02/vtoytool_64</td>
|
||||||
|
<tr> <td>./ZSTD/zstdcat</td> <td rowspan=3>build</td> <td rowspan=3>Build Instructions:<br/>./ZSTD/build.txt</td> </tr>
|
||||||
|
<tr> <td>./ZSTD/zstdcat64</td>
|
||||||
|
<tr> <td>./ZSTD/zstdcataa64</td>
|
||||||
|
<tr> <td>./IMG/cpio_x86/ventoy/busybox/busybox32</td> <td rowspan=6>build</td> <td rowspan=6>Build Instructions:<br/>./BUSYBOX/build.txt full busybox</td> </tr>
|
||||||
|
<tr> <td>./IMG/cpio_x86/ventoy/busybox/busybox64</td>
|
||||||
|
<tr> <td>./IMG/cpio_x86/ventoy/busybox/xzcat32_musl</td>
|
||||||
|
<tr> <td>./IMG/cpio_x86/ventoy/busybox/xzcat64_musl</td>
|
||||||
|
<tr> <td>./IMG/cpio_arm64/ventoy/busybox/busyboxaa64</td>
|
||||||
|
<tr> <td>./IMG/cpio_mips64/ventoy/busybox/busyboxm64e</td>
|
||||||
|
<tr> <td>ISNTALL/ventoy/7z/64/7za.exe</td> <td rowspan=2>upstream</td> <td>Download from 7z project.<br/>URL & File Hash documented in<br/> ./DOC/BuildVentoyFromSource.txt 5.12</td> </tr>
|
||||||
|
<tr> <td>ISNTALL/ventoy/7z/32/7za.exe</td>
|
||||||
|
<tr> <td>./INSTALL/ventoy/wimboot.i386.efi</td> <td rowspan=2>build</td> <td rowspan=2>Build Instructions:<br/>./wimboot/build.sh</td> </tr>
|
||||||
|
<tr> <td>./INSTALL/ventoy/wimboot.x86_64</td>
|
||||||
|
<tr> <td> ./Unix/ventoy_unix/ClonOS/geom_ventoy_ko/13.x/64/geom_ventoy.ko</td> <td rowspan=18>build</td> <td rowspan=18>Build Instructions:<br/>./Unix/BuildUnixKmod.txt</td> </tr>
|
||||||
|
<tr> <td> ./Unix/ventoy_unix/FreeBSD/geom_ventoy_ko/10.x/32/geom_ventoy.ko</td></tr>
|
||||||
|
<tr> <td> ./Unix/ventoy_unix/FreeBSD/geom_ventoy_ko/10.x/64/geom_ventoy.ko</td></tr>
|
||||||
|
<tr> <td> ./Unix/ventoy_unix/FreeBSD/geom_ventoy_ko/11.x/32/geom_ventoy.ko</td></tr>
|
||||||
|
<tr> <td> ./Unix/ventoy_unix/FreeBSD/geom_ventoy_ko/11.x/64/geom_ventoy.ko</td></tr>
|
||||||
|
<tr> <td> ./Unix/ventoy_unix/FreeBSD/geom_ventoy_ko/12.x/32/geom_ventoy.ko</td></tr>
|
||||||
|
<tr> <td> ./Unix/ventoy_unix/FreeBSD/geom_ventoy_ko/12.x/64/geom_ventoy.ko</td></tr>
|
||||||
|
<tr> <td> ./Unix/ventoy_unix/FreeBSD/geom_ventoy_ko/13.x/32/geom_ventoy.ko</td></tr>
|
||||||
|
<tr> <td> ./Unix/ventoy_unix/FreeBSD/geom_ventoy_ko/13.x/64/geom_ventoy.ko</td></tr>
|
||||||
|
<tr> <td> ./Unix/ventoy_unix/FreeBSD/geom_ventoy_ko/14.x/32/geom_ventoy.ko</td></tr>
|
||||||
|
<tr> <td> ./Unix/ventoy_unix/FreeBSD/geom_ventoy_ko/14.x/64/geom_ventoy.ko</td></tr>
|
||||||
|
<tr> <td> ./Unix/ventoy_unix/FreeBSD/geom_ventoy_ko/9.x/32/geom_ventoy.ko</td></tr>
|
||||||
|
<tr> <td> ./Unix/ventoy_unix/FreeBSD/geom_ventoy_ko/9.x/64/geom_ventoy.ko</td></tr>
|
||||||
|
<tr> <td> ./Unix/ventoy_unix/MidnightBSD/geom_ventoy_ko/11.x/32/geom_ventoy.ko</td></tr>
|
||||||
|
<tr> <td> ./Unix/ventoy_unix/MidnightBSD/geom_ventoy_ko/11.x/64/geom_ventoy.ko</td></tr>
|
||||||
|
<tr> <td> ./Unix/ventoy_unix/MidnightBSD/geom_ventoy_ko/2.x/32/geom_ventoy.ko</td></tr>
|
||||||
|
<tr> <td> ./Unix/ventoy_unix/MidnightBSD/geom_ventoy_ko/2.x/64/geom_ventoy.ko</td></tr>
|
||||||
|
<tr> <td> ./Unix/ventoy_unix/pfSense/geom_ventoy_ko/14.x/64/geom_ventoy.ko</td></tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
@@ -53,6 +53,12 @@ typedef struct ko_param
|
|||||||
unsigned long sym_put_size;
|
unsigned long sym_put_size;
|
||||||
unsigned long kv_major;
|
unsigned long kv_major;
|
||||||
unsigned long ibt;
|
unsigned long ibt;
|
||||||
|
unsigned long kv_minor;
|
||||||
|
unsigned long blkdev_get_addr;
|
||||||
|
unsigned long blkdev_put_addr;
|
||||||
|
unsigned long bdev_open_addr;
|
||||||
|
unsigned long kv_subminor;
|
||||||
|
unsigned long bdev_file_open_addr;
|
||||||
unsigned long padding[1];
|
unsigned long padding[1];
|
||||||
}ko_param;
|
}ko_param;
|
||||||
|
|
||||||
@@ -150,10 +156,31 @@ static volatile ko_param g_ko_param =
|
|||||||
|
|
||||||
#define vdebug(fmt, args...) if(kprintf) kprintf(KERN_ERR fmt, ##args)
|
#define vdebug(fmt, args...) if(kprintf) kprintf(KERN_ERR fmt, ##args)
|
||||||
|
|
||||||
|
static unsigned int g_claim_ptr = 0;
|
||||||
static unsigned char *g_get_patch[MAX_PATCH] = { NULL };
|
static unsigned char *g_get_patch[MAX_PATCH] = { NULL };
|
||||||
static unsigned char *g_put_patch[MAX_PATCH] = { NULL };
|
static unsigned char *g_put_patch[MAX_PATCH] = { NULL };
|
||||||
|
|
||||||
static void notrace dmpatch_restore_code(unsigned char *opCode)
|
static int notrace dmpatch_kv_above(unsigned long Major, unsigned long Minor, unsigned long SubMinor)
|
||||||
|
{
|
||||||
|
if (g_ko_param.kv_major != Major)
|
||||||
|
{
|
||||||
|
return (g_ko_param.kv_major > Major) ? 1 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (g_ko_param.kv_minor != Minor)
|
||||||
|
{
|
||||||
|
return (g_ko_param.kv_minor > Minor) ? 1 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (g_ko_param.kv_subminor != SubMinor)
|
||||||
|
{
|
||||||
|
return (g_ko_param.kv_subminor > SubMinor) ? 1 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void notrace dmpatch_restore_code(int bytes, unsigned char *opCode, unsigned int code)
|
||||||
{
|
{
|
||||||
unsigned long align;
|
unsigned long align;
|
||||||
|
|
||||||
@@ -161,7 +188,14 @@ static void notrace dmpatch_restore_code(unsigned char *opCode)
|
|||||||
{
|
{
|
||||||
align = (unsigned long)opCode / g_ko_param.pgsize * g_ko_param.pgsize;
|
align = (unsigned long)opCode / g_ko_param.pgsize * g_ko_param.pgsize;
|
||||||
set_mem_rw(align, 1);
|
set_mem_rw(align, 1);
|
||||||
*opCode = 0x80;
|
if (bytes == 1)
|
||||||
|
{
|
||||||
|
*opCode = (unsigned char)code;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*(unsigned int *)opCode = code;
|
||||||
|
}
|
||||||
set_mem_ro(align, 1);
|
set_mem_ro(align, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -235,6 +269,148 @@ static int notrace dmpatch_replace_code
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static unsigned long notrace dmpatch_find_call_offset(unsigned long addr, unsigned long size, unsigned long func)
|
||||||
|
{
|
||||||
|
unsigned long i = 0;
|
||||||
|
unsigned long dest;
|
||||||
|
unsigned char *opCode = NULL;
|
||||||
|
unsigned char aucOffset[8] = { 0, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF };
|
||||||
|
|
||||||
|
opCode = (unsigned char *)addr;
|
||||||
|
|
||||||
|
for (i = 0; i + 4 < size; i++)
|
||||||
|
{
|
||||||
|
if (opCode[i] == 0xE8)
|
||||||
|
{
|
||||||
|
aucOffset[0] = opCode[i + 1];
|
||||||
|
aucOffset[1] = opCode[i + 2];
|
||||||
|
aucOffset[2] = opCode[i + 3];
|
||||||
|
aucOffset[3] = opCode[i + 4];
|
||||||
|
|
||||||
|
dest = addr + i + 5 + *(unsigned long *)aucOffset;
|
||||||
|
if (dest == func)
|
||||||
|
{
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static unsigned int notrace dmpatch_patch_claim_ptr(void)
|
||||||
|
{
|
||||||
|
unsigned long i = 0;
|
||||||
|
unsigned long t = 0;
|
||||||
|
unsigned long offset1 = 0;
|
||||||
|
unsigned long offset2 = 0;
|
||||||
|
unsigned long align = 0;
|
||||||
|
unsigned char *opCode = NULL;
|
||||||
|
|
||||||
|
opCode = (unsigned char *)g_ko_param.sym_get_addr;
|
||||||
|
for (i = 0; i < 4; i++)
|
||||||
|
{
|
||||||
|
vdebug("%02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X\n",
|
||||||
|
opCode[i + 0], opCode[i + 1], opCode[i + 2], opCode[i + 3],
|
||||||
|
opCode[i + 4], opCode[i + 5], opCode[i + 6], opCode[i + 7],
|
||||||
|
opCode[i + 8], opCode[i + 9], opCode[i + 10], opCode[i + 11],
|
||||||
|
opCode[i + 12], opCode[i + 13], opCode[i + 14], opCode[i + 15]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dmpatch_kv_above(6, 7, 0)) /* >= 6.7 kernel */
|
||||||
|
{
|
||||||
|
vdebug("Get addr: 0x%lx %lu open 0x%lx\n", g_ko_param.sym_get_addr, g_ko_param.sym_get_size, g_ko_param.bdev_open_addr);
|
||||||
|
offset1 = dmpatch_find_call_offset(g_ko_param.sym_get_addr, g_ko_param.sym_get_size, g_ko_param.bdev_open_addr);
|
||||||
|
if (offset1 == 0)
|
||||||
|
{
|
||||||
|
vdebug("call bdev_open_addr Not found\n");
|
||||||
|
|
||||||
|
vdebug("Get addr: 0x%lx %lu file_open 0x%lx\n", g_ko_param.sym_get_addr, g_ko_param.sym_get_size, g_ko_param.bdev_file_open_addr);
|
||||||
|
offset1 = dmpatch_find_call_offset(g_ko_param.sym_get_addr, g_ko_param.sym_get_size, g_ko_param.bdev_file_open_addr);
|
||||||
|
if (offset1 == 0)
|
||||||
|
{
|
||||||
|
vdebug("call bdev_file_open_addr Not found\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
vdebug("Get addr: 0x%lx %lu 0x%lx\n", g_ko_param.sym_get_addr, g_ko_param.sym_get_size, g_ko_param.blkdev_get_addr);
|
||||||
|
vdebug("Put addr: 0x%lx %lu 0x%lx\n", g_ko_param.sym_put_addr, g_ko_param.sym_put_size, g_ko_param.blkdev_put_addr);
|
||||||
|
|
||||||
|
offset1 = dmpatch_find_call_offset(g_ko_param.sym_get_addr, g_ko_param.sym_get_size, g_ko_param.blkdev_get_addr);
|
||||||
|
offset2 = dmpatch_find_call_offset(g_ko_param.sym_put_addr, g_ko_param.sym_put_size, g_ko_param.blkdev_put_addr);
|
||||||
|
if (offset1 == 0 || offset2 == 0)
|
||||||
|
{
|
||||||
|
vdebug("call blkdev_get or blkdev_put Not found, %lu %lu\n", offset1, offset2);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
vdebug("call addr1:0x%lx call addr2:0x%lx\n",
|
||||||
|
g_ko_param.sym_get_addr + offset1,
|
||||||
|
g_ko_param.sym_put_addr + offset2);
|
||||||
|
|
||||||
|
opCode = (unsigned char *)g_ko_param.sym_get_addr;
|
||||||
|
for (i = offset1 - 1, t = 0; (i > 0) && (t < 24); i--, t++)
|
||||||
|
{
|
||||||
|
/* rdx */
|
||||||
|
if (opCode[i] == 0x48 && opCode[i + 1] == 0xc7 && opCode[i + 2] == 0xc2)
|
||||||
|
{
|
||||||
|
g_claim_ptr = *(unsigned int *)(opCode + i + 3);
|
||||||
|
g_get_patch[0] = opCode + i + 3;
|
||||||
|
vdebug("claim_ptr(%08X) found at get addr 0x%lx\n", g_claim_ptr, g_ko_param.sym_get_addr + i + 3);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (g_claim_ptr == 0)
|
||||||
|
{
|
||||||
|
vdebug("Claim_ptr not found in get\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
align = (unsigned long)g_get_patch[0] / g_ko_param.pgsize * g_ko_param.pgsize;
|
||||||
|
set_mem_rw(align, 1);
|
||||||
|
*(unsigned int *)(g_get_patch[0]) = 0;
|
||||||
|
set_mem_ro(align, 1);
|
||||||
|
|
||||||
|
|
||||||
|
if (offset2 > 0)
|
||||||
|
{
|
||||||
|
opCode = (unsigned char *)g_ko_param.sym_put_addr;
|
||||||
|
for (i = offset2 - 1, t = 0; (i > 0) && (t < 24); i--, t++)
|
||||||
|
{
|
||||||
|
/* rsi */
|
||||||
|
if (opCode[i] == 0x48 && opCode[i + 1] == 0xc7 && opCode[i + 2] == 0xc6)
|
||||||
|
{
|
||||||
|
if (*(unsigned int *)(opCode + i + 3) == g_claim_ptr)
|
||||||
|
{
|
||||||
|
vdebug("claim_ptr found at put addr 0x%lx\n", g_ko_param.sym_put_addr + i + 3);
|
||||||
|
g_put_patch[0] = opCode + i + 3;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (g_put_patch[0] == 0)
|
||||||
|
{
|
||||||
|
vdebug("Claim_ptr not found in put\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
align = (unsigned long)g_put_patch[0] / g_ko_param.pgsize * g_ko_param.pgsize;
|
||||||
|
set_mem_rw(align, 1);
|
||||||
|
*(unsigned int *)(g_put_patch[0]) = 0;
|
||||||
|
set_mem_ro(align, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef VTOY_IBT
|
#ifdef VTOY_IBT
|
||||||
static __always_inline unsigned long long dmpatch_rdmsr(unsigned int msr)
|
static __always_inline unsigned long long dmpatch_rdmsr(unsigned int msr)
|
||||||
{
|
{
|
||||||
@@ -256,7 +432,7 @@ static __always_inline void dmpatch_wrmsr(unsigned int msr, u32 low, u32 high)
|
|||||||
: : "c" (msr), "a"(low), "d" (high) : "memory");
|
: : "c" (msr), "a"(low), "d" (high) : "memory");
|
||||||
}
|
}
|
||||||
|
|
||||||
static u64 dmpatch_ibt_save(void)
|
static u64 notrace dmpatch_ibt_save(void)
|
||||||
{
|
{
|
||||||
u64 msr = 0;
|
u64 msr = 0;
|
||||||
u64 val = 0;
|
u64 val = 0;
|
||||||
@@ -268,7 +444,7 @@ static u64 dmpatch_ibt_save(void)
|
|||||||
return msr;
|
return msr;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void dmpatch_ibt_restore(u64 save)
|
static void notrace dmpatch_ibt_restore(u64 save)
|
||||||
{
|
{
|
||||||
u64 msr;
|
u64 msr;
|
||||||
|
|
||||||
@@ -280,13 +456,86 @@ static void dmpatch_ibt_restore(u64 save)
|
|||||||
dmpatch_wrmsr(MSR_IA32_S_CET, (u32)(msr & 0xffffffffULL), (u32)(msr >> 32));
|
dmpatch_wrmsr(MSR_IA32_S_CET, (u32)(msr & 0xffffffffULL), (u32)(msr >> 32));
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
static u64 dmpatch_ibt_save(void) { return 0; }
|
static u64 notrace dmpatch_ibt_save(void) { return 0; }
|
||||||
static void dmpatch_ibt_restore(u64 save) { (void)save; }
|
static void notrace dmpatch_ibt_restore(u64 save) { (void)save; }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static int notrace dmpatch_process(unsigned long a, unsigned long b, unsigned long c)
|
||||||
|
{
|
||||||
|
int r = 0;
|
||||||
|
int rc = 0;
|
||||||
|
unsigned long kv_major = 0;
|
||||||
|
unsigned long kv_minor = 0;
|
||||||
|
unsigned long kv_subminor = 0;
|
||||||
|
|
||||||
|
vdebug("dmpatch_process as KV %d.%d.%d ...\n", (int)a, (int)b, (int)c);
|
||||||
|
|
||||||
|
kv_major = g_ko_param.kv_major;
|
||||||
|
kv_minor = g_ko_param.kv_minor;
|
||||||
|
kv_subminor = g_ko_param.kv_subminor;
|
||||||
|
|
||||||
|
g_ko_param.kv_major = a;
|
||||||
|
g_ko_param.kv_minor = b;
|
||||||
|
g_ko_param.kv_subminor = c;
|
||||||
|
|
||||||
|
if (dmpatch_kv_above(6, 5, 0)) /* >= kernel 6.5 */
|
||||||
|
{
|
||||||
|
vdebug("new interface patch dm_get_table_device...\n");
|
||||||
|
r = dmpatch_patch_claim_ptr();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
r = dmpatch_replace_code(1, g_ko_param.sym_get_addr, g_ko_param.sym_get_size, 2, "dm_get_table_device", g_get_patch);
|
||||||
|
if (r && g_ko_param.kv_major >= 5)
|
||||||
|
{
|
||||||
|
vdebug("new2 patch dm_get_table_device...\n");
|
||||||
|
r = dmpatch_replace_code(2, g_ko_param.sym_get_addr, g_ko_param.sym_get_size, 1, "dm_get_table_device", g_get_patch);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (r && g_ko_param.kv_major >= 5)
|
||||||
|
{
|
||||||
|
vdebug("new3 patch dm_get_table_device...\n");
|
||||||
|
r = dmpatch_replace_code(3, g_ko_param.sym_get_addr, g_ko_param.sym_get_size, 1, "dm_get_table_device", g_get_patch);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (r)
|
||||||
|
{
|
||||||
|
rc = -EFAULT;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
vdebug("patch dm_get_table_device success\n");
|
||||||
|
|
||||||
|
if (dmpatch_kv_above(6, 5, 0))
|
||||||
|
{
|
||||||
|
r = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
r = dmpatch_replace_code(1, g_ko_param.sym_put_addr, g_ko_param.sym_put_size, 1, "dm_put_table_device", g_put_patch);
|
||||||
|
if (r)
|
||||||
|
{
|
||||||
|
rc = -EFAULT;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
vdebug("patch dm_put_table_device success\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
vdebug("#####################################\n");
|
||||||
|
vdebug("######## dm patch success ###########\n");
|
||||||
|
vdebug("#####################################\n");
|
||||||
|
|
||||||
|
out:
|
||||||
|
|
||||||
|
g_ko_param.kv_major = kv_major;
|
||||||
|
g_ko_param.kv_minor = kv_minor;
|
||||||
|
g_ko_param.kv_subminor = kv_subminor;
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
static int notrace dmpatch_init(void)
|
static int notrace dmpatch_init(void)
|
||||||
{
|
{
|
||||||
int r = 0;
|
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
u64 msr = 0;
|
u64 msr = 0;
|
||||||
|
|
||||||
@@ -297,7 +546,8 @@ static int notrace dmpatch_init(void)
|
|||||||
|
|
||||||
kprintf = (printk_pf)(g_ko_param.printk_addr);
|
kprintf = (printk_pf)(g_ko_param.printk_addr);
|
||||||
|
|
||||||
vdebug("dmpatch_init start pagesize=%lu ...\n", g_ko_param.pgsize);
|
vdebug("dmpatch_init start pagesize=%lu kernel=%lu.%lu.%lu ...\n",
|
||||||
|
g_ko_param.pgsize, g_ko_param.kv_major, g_ko_param.kv_minor, g_ko_param.kv_subminor);
|
||||||
|
|
||||||
if (g_ko_param.struct_size != sizeof(ko_param))
|
if (g_ko_param.struct_size != sizeof(ko_param))
|
||||||
{
|
{
|
||||||
@@ -316,47 +566,25 @@ static int notrace dmpatch_init(void)
|
|||||||
reg_kprobe = (kprobe_reg_pf)g_ko_param.reg_kprobe_addr;
|
reg_kprobe = (kprobe_reg_pf)g_ko_param.reg_kprobe_addr;
|
||||||
unreg_kprobe = (kprobe_unreg_pf)g_ko_param.unreg_kprobe_addr;
|
unreg_kprobe = (kprobe_unreg_pf)g_ko_param.unreg_kprobe_addr;
|
||||||
|
|
||||||
r = dmpatch_replace_code(1, g_ko_param.sym_get_addr, g_ko_param.sym_get_size, 2, "dm_get_table_device", g_get_patch);
|
rc = dmpatch_process(g_ko_param.kv_major, g_ko_param.kv_minor, g_ko_param.kv_subminor);
|
||||||
if (r && g_ko_param.kv_major >= 5)
|
if (rc)
|
||||||
{
|
{
|
||||||
vdebug("new2 patch dm_get_table_device...\n");
|
if (g_ko_param.kv_major >= 5)
|
||||||
r = dmpatch_replace_code(2, g_ko_param.sym_get_addr, g_ko_param.sym_get_size, 1, "dm_get_table_device", g_get_patch);
|
{
|
||||||
|
rc = dmpatch_process(6, 5, 0);
|
||||||
|
if (rc)
|
||||||
|
{
|
||||||
|
rc = dmpatch_process(6, 7, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (r && g_ko_param.kv_major >= 5)
|
|
||||||
{
|
|
||||||
vdebug("new3 patch dm_get_table_device...\n");
|
|
||||||
r = dmpatch_replace_code(3, g_ko_param.sym_get_addr, g_ko_param.sym_get_size, 1, "dm_get_table_device", g_get_patch);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (r)
|
|
||||||
{
|
|
||||||
rc = -EINVAL;
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
vdebug("patch dm_get_table_device success\n");
|
|
||||||
|
|
||||||
r = dmpatch_replace_code(1, g_ko_param.sym_put_addr, g_ko_param.sym_put_size, 1, "dm_put_table_device", g_put_patch);
|
|
||||||
if (r)
|
|
||||||
{
|
|
||||||
rc = -EINVAL;
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
vdebug("patch dm_put_table_device success\n");
|
|
||||||
|
|
||||||
vdebug("#####################################\n");
|
|
||||||
vdebug("######## dm patch success ###########\n");
|
|
||||||
vdebug("#####################################\n");
|
|
||||||
|
|
||||||
if (g_ko_param.ibt == 0x8888)
|
if (g_ko_param.ibt == 0x8888)
|
||||||
{
|
{
|
||||||
dmpatch_ibt_restore(msr);
|
dmpatch_ibt_restore(msr);
|
||||||
}
|
}
|
||||||
|
|
||||||
out:
|
return rc;
|
||||||
|
|
||||||
return rc;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void notrace dmpatch_exit(void)
|
static void notrace dmpatch_exit(void)
|
||||||
@@ -369,10 +597,21 @@ static void notrace dmpatch_exit(void)
|
|||||||
msr = dmpatch_ibt_save();
|
msr = dmpatch_ibt_save();
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < MAX_PATCH; i++)
|
if (g_claim_ptr)
|
||||||
{
|
{
|
||||||
dmpatch_restore_code(g_get_patch[i]);
|
dmpatch_restore_code(4, g_get_patch[0], g_claim_ptr);
|
||||||
dmpatch_restore_code(g_put_patch[i]);
|
if (g_put_patch[0])
|
||||||
|
{
|
||||||
|
dmpatch_restore_code(4, g_put_patch[0], g_claim_ptr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (i = 0; i < MAX_PATCH; i++)
|
||||||
|
{
|
||||||
|
dmpatch_restore_code(1, g_get_patch[i], 0x80);
|
||||||
|
dmpatch_restore_code(1, g_put_patch[i], 0x80);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
vdebug("dmpatch_exit success\n");
|
vdebug("dmpatch_exit success\n");
|
||||||
|
@@ -3,7 +3,7 @@
|
|||||||
1. Compile Environment
|
1. Compile Environment
|
||||||
==========================================
|
==========================================
|
||||||
My build environment is CentOS 7.8 x86_64. So here I first explain how to create the build environment from scratch.
|
My build environment 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 firstly.
|
Ventoy is based on many open source projects, so the build environment is important. I suggest you first test it on a virtual machine.
|
||||||
|
|
||||||
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
|
||||||
@@ -21,10 +21,10 @@
|
|||||||
==========================================
|
==========================================
|
||||||
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 layout).
|
Next I assume that you have unzipped the code into the /home directory (check /home/Ventoy-master/README.md file for the directory layout).
|
||||||
|
|
||||||
2.2 Download third-part source code and tool
|
2.2 Download third-party source code and tool
|
||||||
|
|
||||||
https://www.fefe.de/dietlibc/dietlibc-0.34.tar.xz ===> /home/Ventoy-master/DOC/dietlibc-0.34.tar.xz
|
https://www.fefe.de/dietlibc/dietlibc-0.34.tar.xz ===> /home/Ventoy-master/DOC/dietlibc-0.34.tar.xz
|
||||||
https://musl.libc.org/releases/musl-1.2.1.tar.gz ===> /home/Ventoy-master/DOC/musl-1.2.1.tar.gz
|
https://musl.libc.org/releases/musl-1.2.1.tar.gz ===> /home/Ventoy-master/DOC/musl-1.2.1.tar.gz
|
||||||
@@ -34,7 +34,7 @@
|
|||||||
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/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://releases.linaro.org/components/toolchain/binaries/7.4-2019.02/aarch64-linux-gnu/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu.tar.xz ===> /opt/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu.tar.xz
|
||||||
https://toolchains.bootlin.com/downloads/releases/toolchains/aarch64/tarballs/aarch64--uclibc--stable-2020.08-1.tar.bz2 ===> /opt/aarch64--uclibc--stable-2020.08-1.tar.bz2
|
https://toolchains.bootlin.com/downloads/releases/toolchains/aarch64/tarballs/aarch64--uclibc--stable-2020.08-1.tar.bz2 ===> /opt/aarch64--uclibc--stable-2020.08-1.tar.bz2
|
||||||
http://ftp.loongnix.cn/toolchain/gcc/release/mips/gcc7/mips-loongson-gcc7.3-2019.06-29-linux-gnu.tar.gz ===> /opt/mips-loongson-gcc7.3-2019.06-29-linux-gnu.tar.gz
|
https://github.com/ventoy/vtoytoolchain/releases/download/1.0/mips-loongson-gcc7.3-2019.06-29-linux-gnu.tar.gz ===> /opt/mips-loongson-gcc7.3-2019.06-29-linux-gnu.tar.gz
|
||||||
https://github.com/ventoy/musl-cross-make/releases/download/latest/output.tar.bz2 ===> /opt/output.tar.bz2
|
https://github.com/ventoy/musl-cross-make/releases/download/latest/output.tar.bz2 ===> /opt/output.tar.bz2
|
||||||
|
|
||||||
|
|
||||||
@@ -42,7 +42,7 @@
|
|||||||
http://www.tinycorelinux.net/11.x/x86_64/release/distribution_files/corepure64.gz ===> /home/Ventoy-master/LiveCD/ISO/EFI/boot/corepure64.gz
|
http://www.tinycorelinux.net/11.x/x86_64/release/distribution_files/corepure64.gz ===> /home/Ventoy-master/LiveCD/ISO/EFI/boot/corepure64.gz
|
||||||
http://www.tinycorelinux.net/11.x/x86_64/release/distribution_files/modules64.gz ===> /home/Ventoy-master/LiveCD/ISO/EFI/boot/modules64.gz
|
http://www.tinycorelinux.net/11.x/x86_64/release/distribution_files/modules64.gz ===> /home/Ventoy-master/LiveCD/ISO/EFI/boot/modules64.gz
|
||||||
|
|
||||||
2.3 Prepare third-part tools
|
2.3 Prepare third-party tools
|
||||||
cd /home/Ventoy-master/DOC/
|
cd /home/Ventoy-master/DOC/
|
||||||
tar xf musl-1.2.1.tar.gz
|
tar xf musl-1.2.1.tar.gz
|
||||||
cd musl-1.2.1
|
cd musl-1.2.1
|
||||||
@@ -62,21 +62,21 @@
|
|||||||
==========================================
|
==========================================
|
||||||
3. All in one script
|
3. All in one script
|
||||||
==========================================
|
==========================================
|
||||||
I have made a all_in_one.sh, you can run this script to build and pack ventoy.
|
I have made an all-in-one script `all_in_one.sh`. You can run this script to build and pack ventoy.
|
||||||
If you want to compile a certain part separately, you can continue to refer to the later chapters of this text.
|
If you want to compile a certain part separately, you can continue to refer to the later chapters of this text.
|
||||||
|
|
||||||
cd /home/Ventoy-master/INSTALL
|
cd /home/Ventoy-master/INSTALL
|
||||||
sh all_in_one.sh
|
sh all_in_one.sh
|
||||||
|
|
||||||
It should be noted that:
|
It should be noted that:
|
||||||
1. Only grub2/EDK2/IPXE will be recompiled in all_in_one.sh. Other part contains the binaries and are few modified, so will no be recompiled everytime.
|
1. Only grub2/EDK2/IPXE will be recompiled in all_in_one.sh. Other parts contain binaries and are rarely modified, so will not be recompiled everytime.
|
||||||
You can rebuild these parts separately if you want.
|
You can rebuild these parts separately if you want.
|
||||||
|
|
||||||
2. some part of Ventoy has 32bit&64bit version (like 4.9 4.10 4.11 follows)
|
2. Some parts of Ventoy have a 32-bit and 64-bit 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.
|
all_in_one.sh only builds the 64bit version of them. If you want to rebuild the 32bit verison, you should create a 32-bit CentOS environment and build them.
|
||||||
Fortunately these parts are few modified, you only need to build once or you can directly use the binary I have built.
|
Fortunately these parts are rarely modified, so you only need to build once or you can directly use the binaries I have built.
|
||||||
|
|
||||||
Besides, after a fully compile and pack, you can only build the part you modified (for example grub2) and run ventoy_pack.sh to generate the package.
|
Besides, after a full compile and packaging, you can only build the part you modified (for example grub2) and run ventoy_pack.sh to generate the package.
|
||||||
|
|
||||||
==========================================
|
==========================================
|
||||||
4. Build every part of Ventoy
|
4. Build every part of Ventoy
|
||||||
@@ -122,14 +122,14 @@
|
|||||||
After that, copy EXFAT/shared/mkexfatfs ===> /home/Ventoy-master/INSTALL/tool/mkexfatfs_64
|
After that, copy EXFAT/shared/mkexfatfs ===> /home/Ventoy-master/INSTALL/tool/mkexfatfs_64
|
||||||
After that, copy EXFAT/shared/mount.exfat-fuse ===> /home/Ventoy-master/INSTALL/tool/mount.exfat-fuse_64
|
After that, copy EXFAT/shared/mount.exfat-fuse ===> /home/Ventoy-master/INSTALL/tool/mount.exfat-fuse_64
|
||||||
|
|
||||||
Use the same build step to build exfat-util 32bit in a 32bit CentOS system and get mkexfatfs_32 and mount.exfat-fuse_32
|
Use the same build step to build exfat-util 32-bit in a 32-bit CentOS system and get mkexfatfs_32 and mount.exfat-fuse_32
|
||||||
|
|
||||||
4.10 == Build vtoy_fuse_iso_64/vtoy_fuse_iso_32 ==
|
4.10 == Build vtoy_fuse_iso_64/vtoy_fuse_iso_32 ==
|
||||||
cd /home/Ventoy-master/FUSEISO
|
cd /home/Ventoy-master/FUSEISO
|
||||||
sh build_libfuse.sh
|
sh build_libfuse.sh
|
||||||
sh build.sh
|
sh build.sh
|
||||||
|
|
||||||
Use the same build step to build in a 32bit CentOS system and get vtoy_fuse_iso_32
|
Use the same build step to build in a 32-bit CentOS system and get vtoy_fuse_iso_32
|
||||||
|
|
||||||
4.11 == Build unsquashfs_64/unsquashfs_32 ==
|
4.11 == Build unsquashfs_64/unsquashfs_32 ==
|
||||||
cd /home/Ventoy-master/SQUASHFS/SRC
|
cd /home/Ventoy-master/SQUASHFS/SRC
|
||||||
@@ -141,7 +141,7 @@
|
|||||||
cd /home/Ventoy-master/SQUASHFS/squashfs-tools-4.4/squashfs-tools
|
cd /home/Ventoy-master/SQUASHFS/squashfs-tools-4.4/squashfs-tools
|
||||||
sh build.sh
|
sh build.sh
|
||||||
|
|
||||||
Use the same build step to build in a 32bit CentOS system and get unsquashfs_32
|
Use the same build step to build in a 32-bit CentOS system and get unsquashfs_32
|
||||||
|
|
||||||
4.12 == Build vblade_64/vblade_32 ==
|
4.12 == Build vblade_64/vblade_32 ==
|
||||||
cd /home/Ventoy-master/VBLADE/vblade-master
|
cd /home/Ventoy-master/VBLADE/vblade-master
|
||||||
@@ -159,12 +159,12 @@
|
|||||||
make -f ventoy_makefile
|
make -f ventoy_makefile
|
||||||
strip --strip-all xzminidec
|
strip --strip-all xzminidec
|
||||||
|
|
||||||
4.16 == Build xzminidec64 ==
|
4.16 == Build xzminidec64/xzminidec64_musl ==
|
||||||
cd /home/Ventoy-master/Ventoy2Disk/Ventoy2Disk/xz-embedded-20130513/userspace
|
cd /home/Ventoy-master/Ventoy2Disk/Ventoy2Disk/xz-embedded-20130513/userspace
|
||||||
make -f ventoy_makefile64
|
make -f ventoy_makefile64 or make -f ventoy_makefile64_musl
|
||||||
strip --strip-all xzminidec
|
strip --strip-all xzminidec
|
||||||
|
|
||||||
4.17 == Build iso9660_x64.efi ==
|
4.17 == Build iso9660_x64.efi/udf_x64.efi/iso9660_ia32.efi/udf_ia32.efi/iso9660_aa64.efi/udf_aa64.efi/ ==
|
||||||
This efi driver is from https://github.com/pbatard/efifs
|
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)
|
Follow all the build instructions in this project. I modified 3 files (the original and modified source are at /home/Ventoy-master/EDK2/efiffs)
|
||||||
|
|
||||||
@@ -185,6 +185,16 @@
|
|||||||
make
|
make
|
||||||
aarch64-buildroot-linux-uclibc-strip --strip-all lunzip
|
aarch64-buildroot-linux-uclibc-strip --strip-all lunzip
|
||||||
|
|
||||||
|
4.17 == Build xzminidecaa64 ==
|
||||||
|
cd /home/Ventoy-master/Ventoy2Disk/Ventoy2Disk/xz-embedded-20130513/userspace
|
||||||
|
make -f ventoy_makefileaa64
|
||||||
|
strip --strip-all xzminidec
|
||||||
|
|
||||||
|
4.18 == Build xzminidecm64e ==
|
||||||
|
cd /home/Ventoy-master/Ventoy2Disk/Ventoy2Disk/xz-embedded-20130513/userspace
|
||||||
|
make -f ventoy_makefilem64e
|
||||||
|
strip --strip-all xzminidec
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
==========================================
|
==========================================
|
||||||
@@ -256,5 +266,11 @@
|
|||||||
ISNTALL/ventoy/7z/64/7za.exe SHA-256: 8117e40ee7f824f63373a4f5625bb62749f69159d0c449b3ce2f35aad3b83549
|
ISNTALL/ventoy/7z/64/7za.exe SHA-256: 8117e40ee7f824f63373a4f5625bb62749f69159d0c449b3ce2f35aad3b83549
|
||||||
ISNTALL/ventoy/7z/32/7za.exe SHA-256: ea308c76a2f927b160a143d94072b0dce232e04b751f0c6432a94e05164e716d
|
ISNTALL/ventoy/7z/32/7za.exe SHA-256: ea308c76a2f927b160a143d94072b0dce232e04b751f0c6432a94e05164e716d
|
||||||
|
|
||||||
|
5.13 ./Ventoy/Unix/ventoy_unix/DragonFly/sbin/dmsetup
|
||||||
|
download from https://cdimage.debian.org/mirror/dragonflybsd.org/iso-images/dfly-x86_64-5.8.3_REL.iso.bz2
|
||||||
|
extract from the ISO file sbin/dmsetup
|
||||||
|
dmsetup SHA-256: bedcf26650e87edfe961e33bae20d832bce73efd4b6239f9a6a5785661e4e698
|
||||||
|
|
||||||
|
5.14 ./LiveCD/ISO/EFI/boot/vmlinuz64
|
||||||
|
download from http://www.tinycorelinux.net/11.x/x86_64/archive/11.0/distribution_files/vmlinuz64
|
||||||
|
vmlinuz64 SHA-256: 641077fc1f9914af244c248453005f56536ba9e7f54ba3e52402f26709ddb8a5
|
||||||
|
@@ -1,6 +1,11 @@
|
|||||||
FROM centos:7
|
FROM centos:7
|
||||||
|
|
||||||
RUN yum -y -q install \
|
RUN sed -i \
|
||||||
|
-e 's/^mirrorlist/#mirrorlist/' \
|
||||||
|
-e 's/^#baseurl/baseurl/' \
|
||||||
|
-e 's/mirror\.centos\.org/vault.centos.org/' \
|
||||||
|
/etc/yum.repos.d/*.repo && \
|
||||||
|
yum -y -q install \
|
||||||
libXpm net-tools bzip2 wget vim gcc gcc-c++ samba dos2unix glibc-devel glibc.i686 glibc-devel.i686 \
|
libXpm net-tools bzip2 wget vim gcc gcc-c++ samba dos2unix glibc-devel glibc.i686 glibc-devel.i686 \
|
||||||
mpfr.i686 mpfr-devel.i686 rsync autogen autoconf automake libtool gettext* bison binutils \
|
mpfr.i686 mpfr-devel.i686 rsync autogen autoconf automake libtool gettext* bison binutils \
|
||||||
flex device-mapper-devel SDL libpciaccess libusb freetype freetype-devel gnu-free-* qemu-* virt-* \
|
flex device-mapper-devel SDL libpciaccess libusb freetype freetype-devel gnu-free-* qemu-* virt-* \
|
||||||
|
@@ -103,6 +103,7 @@ GRUB_MOD_LICENSE ("GPLv3+");
|
|||||||
#define EXT4_FEATURE_INCOMPAT_64BIT 0x0080
|
#define EXT4_FEATURE_INCOMPAT_64BIT 0x0080
|
||||||
#define EXT4_FEATURE_INCOMPAT_MMP 0x0100
|
#define EXT4_FEATURE_INCOMPAT_MMP 0x0100
|
||||||
#define EXT4_FEATURE_INCOMPAT_FLEX_BG 0x0200
|
#define EXT4_FEATURE_INCOMPAT_FLEX_BG 0x0200
|
||||||
|
#define EXT4_FEATURE_INCOMPAT_CSUM_SEED 0x2000
|
||||||
#define EXT4_FEATURE_INCOMPAT_ENCRYPT 0x10000
|
#define EXT4_FEATURE_INCOMPAT_ENCRYPT 0x10000
|
||||||
|
|
||||||
/* The set of back-incompatible features this driver DOES support. Add (OR)
|
/* The set of back-incompatible features this driver DOES support. Add (OR)
|
||||||
@@ -123,9 +124,16 @@ GRUB_MOD_LICENSE ("GPLv3+");
|
|||||||
* mmp: Not really back-incompatible - was added as such to
|
* mmp: Not really back-incompatible - was added as such to
|
||||||
* avoid multiple read-write mounts. Safe to ignore for this
|
* avoid multiple read-write mounts. Safe to ignore for this
|
||||||
* RO driver.
|
* RO driver.
|
||||||
|
* checksum seed: Not really back-incompatible - was added to allow tools
|
||||||
|
* such as tune2fs to change the UUID on a mounted metadata
|
||||||
|
* checksummed filesystem. Safe to ignore for now since the
|
||||||
|
* driver doesn't support checksum verification. But it must
|
||||||
|
* be removed from this list if that support is added later.
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
#define EXT2_DRIVER_IGNORED_INCOMPAT ( EXT3_FEATURE_INCOMPAT_RECOVER \
|
#define EXT2_DRIVER_IGNORED_INCOMPAT ( EXT3_FEATURE_INCOMPAT_RECOVER \
|
||||||
| EXT4_FEATURE_INCOMPAT_MMP)
|
| EXT4_FEATURE_INCOMPAT_MMP \
|
||||||
|
| EXT4_FEATURE_INCOMPAT_CSUM_SEED)
|
||||||
|
|
||||||
|
|
||||||
#define EXT3_JOURNAL_MAGIC_NUMBER 0xc03b3998U
|
#define EXT3_JOURNAL_MAGIC_NUMBER 0xc03b3998U
|
||||||
@@ -723,10 +731,11 @@ grub_ext2_read_symlink (grub_fshelp_node_t node)
|
|||||||
if (! symlink)
|
if (! symlink)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* If the filesize of the symlink is bigger than
|
/*
|
||||||
60 the symlink is stored in a separate block,
|
* If the filesize of the symlink is equal to or bigger than 60 the symlink
|
||||||
otherwise it is stored in the inode. */
|
* is stored in a separate block, otherwise it is stored in the inode.
|
||||||
if (grub_le_to_cpu32 (diro->inode.size) <= sizeof (diro->inode.symlink))
|
*/
|
||||||
|
if (grub_le_to_cpu32 (diro->inode.size) < sizeof (diro->inode.symlink))
|
||||||
grub_memcpy (symlink,
|
grub_memcpy (symlink,
|
||||||
diro->inode.symlink,
|
diro->inode.symlink,
|
||||||
grub_le_to_cpu32 (diro->inode.size));
|
grub_le_to_cpu32 (diro->inode.size));
|
||||||
|
@@ -23,11 +23,25 @@
|
|||||||
#include <grub/misc.h>
|
#include <grub/misc.h>
|
||||||
#include <grub/disk.h>
|
#include <grub/disk.h>
|
||||||
#include <grub/dl.h>
|
#include <grub/dl.h>
|
||||||
|
#include <grub/time.h>
|
||||||
#include <grub/types.h>
|
#include <grub/types.h>
|
||||||
#include <grub/fshelp.h>
|
#include <grub/fshelp.h>
|
||||||
|
|
||||||
GRUB_MOD_LICENSE ("GPLv3+");
|
GRUB_MOD_LICENSE ("GPLv3+");
|
||||||
|
|
||||||
|
#define NSEC_PER_SEC ((grub_int64_t) 1000000000)
|
||||||
|
|
||||||
|
// GRUB 2.04 doesn't have safemath.h
|
||||||
|
// #include <grub/safemath.h>
|
||||||
|
|
||||||
|
// gcc < 5.1 doesn't support __builtin_add_overflow and __builtin_mul_overflow
|
||||||
|
// #define grub_add(a, b, res) __builtin_add_overflow(a, b, res)
|
||||||
|
// #define grub_mul(a, b, res) __builtin_mul_overflow(a, b, res)
|
||||||
|
// Warning: This is unsafe!
|
||||||
|
#define grub_add(a, b, res) ({ *(res) = (a) + (b); 0; })
|
||||||
|
|
||||||
|
#define grub_mul(a, b, res) ({ *(res) = (a) * (b); 0; })
|
||||||
|
|
||||||
#define XFS_INODE_EXTENTS 9
|
#define XFS_INODE_EXTENTS 9
|
||||||
|
|
||||||
#define XFS_INODE_FORMAT_INO 1
|
#define XFS_INODE_FORMAT_INO 1
|
||||||
@@ -74,10 +88,22 @@ GRUB_MOD_LICENSE ("GPLv3+");
|
|||||||
XFS_SB_VERSION2_PROJID32BIT | \
|
XFS_SB_VERSION2_PROJID32BIT | \
|
||||||
XFS_SB_VERSION2_FTYPE)
|
XFS_SB_VERSION2_FTYPE)
|
||||||
|
|
||||||
|
/* Inode flags2 flags */
|
||||||
|
#define XFS_DIFLAG2_BIGTIME_BIT 3
|
||||||
|
#define XFS_DIFLAG2_BIGTIME (1 << XFS_DIFLAG2_BIGTIME_BIT)
|
||||||
|
#define XFS_DIFLAG2_NREXT64_BIT 4
|
||||||
|
#define XFS_DIFLAG2_NREXT64 (1 << XFS_DIFLAG2_NREXT64_BIT)
|
||||||
|
|
||||||
/* incompat feature flags */
|
/* incompat feature flags */
|
||||||
#define XFS_SB_FEAT_INCOMPAT_FTYPE (1 << 0) /* filetype in dirent */
|
#define XFS_SB_FEAT_INCOMPAT_FTYPE (1 << 0) /* filetype in dirent */
|
||||||
#define XFS_SB_FEAT_INCOMPAT_SPINODES (1 << 1) /* sparse inode chunks */
|
#define XFS_SB_FEAT_INCOMPAT_SPINODES (1 << 1) /* sparse inode chunks */
|
||||||
#define XFS_SB_FEAT_INCOMPAT_META_UUID (1 << 2) /* metadata UUID */
|
#define XFS_SB_FEAT_INCOMPAT_META_UUID (1 << 2) /* metadata UUID */
|
||||||
|
#define XFS_SB_FEAT_INCOMPAT_BIGTIME (1 << 3) /* large timestamps */
|
||||||
|
#define XFS_SB_FEAT_INCOMPAT_NEEDSREPAIR (1 << 4) /* needs xfs_repair */
|
||||||
|
#define XFS_SB_FEAT_INCOMPAT_NREXT64 (1 << 5) /* large extent counters */
|
||||||
|
#define XFS_SB_FEAT_INCOMPAT_EXCHRANGE (1 << 6) /* exchangerange supported */
|
||||||
|
#define XFS_SB_FEAT_INCOMPAT_PARENT (1 << 7) /* parent pointers */
|
||||||
|
#define XFS_SB_FEAT_INCOMPAT_METADIR (1 << 8) /* metadata dir tree */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Directory entries with ftype are explicitly handled by GRUB code.
|
* Directory entries with ftype are explicitly handled by GRUB code.
|
||||||
@@ -87,11 +113,26 @@ GRUB_MOD_LICENSE ("GPLv3+");
|
|||||||
*
|
*
|
||||||
* We do not currently verify metadata UUID, so it is safe to read filesystems
|
* We do not currently verify metadata UUID, so it is safe to read filesystems
|
||||||
* with the XFS_SB_FEAT_INCOMPAT_META_UUID feature.
|
* with the XFS_SB_FEAT_INCOMPAT_META_UUID feature.
|
||||||
|
*
|
||||||
|
* We do not currently replay the log, so it is safe to read filesystems
|
||||||
|
* with the XFS_SB_FEAT_INCOMPAT_EXCHRANGE feature.
|
||||||
|
*
|
||||||
|
* We do not currently read directory parent pointers, so it is safe to read
|
||||||
|
* filesystems with the XFS_SB_FEAT_INCOMPAT_PARENT feature.
|
||||||
|
*
|
||||||
|
* We do not currently look at realtime or quota metadata, so it is safe to
|
||||||
|
* read filesystems with the XFS_SB_FEAT_INCOMPAT_METADIR feature.
|
||||||
*/
|
*/
|
||||||
#define XFS_SB_FEAT_INCOMPAT_SUPPORTED \
|
#define XFS_SB_FEAT_INCOMPAT_SUPPORTED \
|
||||||
(XFS_SB_FEAT_INCOMPAT_FTYPE | \
|
(XFS_SB_FEAT_INCOMPAT_FTYPE | \
|
||||||
XFS_SB_FEAT_INCOMPAT_SPINODES | \
|
XFS_SB_FEAT_INCOMPAT_SPINODES | \
|
||||||
XFS_SB_FEAT_INCOMPAT_META_UUID)
|
XFS_SB_FEAT_INCOMPAT_META_UUID | \
|
||||||
|
XFS_SB_FEAT_INCOMPAT_BIGTIME | \
|
||||||
|
XFS_SB_FEAT_INCOMPAT_NEEDSREPAIR | \
|
||||||
|
XFS_SB_FEAT_INCOMPAT_NREXT64 | \
|
||||||
|
XFS_SB_FEAT_INCOMPAT_EXCHRANGE | \
|
||||||
|
XFS_SB_FEAT_INCOMPAT_PARENT | \
|
||||||
|
XFS_SB_FEAT_INCOMPAT_METADIR)
|
||||||
|
|
||||||
struct grub_xfs_sblock
|
struct grub_xfs_sblock
|
||||||
{
|
{
|
||||||
@@ -176,33 +217,49 @@ struct grub_xfs_btree_root
|
|||||||
grub_uint64_t keys[1];
|
grub_uint64_t keys[1];
|
||||||
} GRUB_PACKED;
|
} GRUB_PACKED;
|
||||||
|
|
||||||
struct grub_xfs_time
|
struct grub_xfs_time_legacy
|
||||||
{
|
{
|
||||||
grub_uint32_t sec;
|
grub_uint32_t sec;
|
||||||
grub_uint32_t nanosec;
|
grub_uint32_t nanosec;
|
||||||
} GRUB_PACKED;
|
} GRUB_PACKED;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The struct grub_xfs_inode layout was taken from the
|
||||||
|
* struct xfs_dinode_core which is described here:
|
||||||
|
* https://mirrors.edge.kernel.org/pub/linux/utils/fs/xfs/docs/xfs_filesystem_structure.pdf
|
||||||
|
*/
|
||||||
struct grub_xfs_inode
|
struct grub_xfs_inode
|
||||||
{
|
{
|
||||||
grub_uint8_t magic[2];
|
grub_uint8_t magic[2];
|
||||||
grub_uint16_t mode;
|
grub_uint16_t mode;
|
||||||
grub_uint8_t version;
|
grub_uint8_t version;
|
||||||
grub_uint8_t format;
|
grub_uint8_t format;
|
||||||
grub_uint8_t unused2[26];
|
grub_uint8_t unused2[18];
|
||||||
struct grub_xfs_time atime;
|
grub_uint64_t nextents_big;
|
||||||
struct grub_xfs_time mtime;
|
grub_uint64_t atime;
|
||||||
struct grub_xfs_time ctime;
|
grub_uint64_t mtime;
|
||||||
|
grub_uint64_t ctime;
|
||||||
grub_uint64_t size;
|
grub_uint64_t size;
|
||||||
grub_uint64_t nblocks;
|
grub_uint64_t nblocks;
|
||||||
grub_uint32_t extsize;
|
grub_uint32_t extsize;
|
||||||
grub_uint32_t nextents;
|
grub_uint32_t nextents;
|
||||||
grub_uint16_t unused3;
|
grub_uint16_t unused3;
|
||||||
grub_uint8_t fork_offset;
|
grub_uint8_t fork_offset;
|
||||||
grub_uint8_t unused4[17];
|
grub_uint8_t unused4[17]; /* Last member of inode v2. */
|
||||||
|
grub_uint8_t unused5[20]; /* First member of inode v3. */
|
||||||
|
grub_uint64_t flags2;
|
||||||
|
grub_uint8_t unused6[48]; /* Last member of inode v3. */
|
||||||
} GRUB_PACKED;
|
} GRUB_PACKED;
|
||||||
|
|
||||||
#define XFS_V2_INODE_SIZE sizeof(struct grub_xfs_inode)
|
#define XFS_V3_INODE_SIZE sizeof(struct grub_xfs_inode)
|
||||||
#define XFS_V3_INODE_SIZE (XFS_V2_INODE_SIZE + 76)
|
/* Size of struct grub_xfs_inode v2, up to unused4 member included. */
|
||||||
|
#define XFS_V2_INODE_SIZE (XFS_V3_INODE_SIZE - 76)
|
||||||
|
|
||||||
|
struct grub_xfs_dir_leaf_entry
|
||||||
|
{
|
||||||
|
grub_uint32_t hashval;
|
||||||
|
grub_uint32_t address;
|
||||||
|
} GRUB_PACKED;
|
||||||
|
|
||||||
struct grub_xfs_dirblock_tail
|
struct grub_xfs_dirblock_tail
|
||||||
{
|
{
|
||||||
@@ -220,6 +277,7 @@ struct grub_fshelp_node
|
|||||||
|
|
||||||
struct grub_xfs_data
|
struct grub_xfs_data
|
||||||
{
|
{
|
||||||
|
grub_size_t data_size;
|
||||||
struct grub_xfs_sblock sblock;
|
struct grub_xfs_sblock sblock;
|
||||||
grub_disk_t disk;
|
grub_disk_t disk;
|
||||||
int pos;
|
int pos;
|
||||||
@@ -232,8 +290,6 @@ struct grub_xfs_data
|
|||||||
|
|
||||||
static grub_dl_t my_mod;
|
static grub_dl_t my_mod;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static int grub_xfs_sb_hascrc(struct grub_xfs_data *data)
|
static int grub_xfs_sb_hascrc(struct grub_xfs_data *data)
|
||||||
{
|
{
|
||||||
return (data->sblock.version & grub_cpu_to_be16_compile_time(XFS_SB_VERSION_NUMBITS)) ==
|
return (data->sblock.version & grub_cpu_to_be16_compile_time(XFS_SB_VERSION_NUMBITS)) ==
|
||||||
@@ -296,9 +352,21 @@ static int grub_xfs_sb_valid(struct grub_xfs_data *data)
|
|||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
grub_error (GRUB_ERR_BAD_FS, "unsupported XFS filesystem version");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
grub_xfs_sb_needs_repair (struct grub_xfs_data *data)
|
||||||
|
{
|
||||||
|
return ((data->sblock.version &
|
||||||
|
grub_cpu_to_be16_compile_time (XFS_SB_VERSION_NUMBITS)) ==
|
||||||
|
grub_cpu_to_be16_compile_time (XFS_SB_VERSION_5) &&
|
||||||
|
(data->sblock.sb_features_incompat &
|
||||||
|
grub_cpu_to_be32_compile_time (XFS_SB_FEAT_INCOMPAT_NEEDSREPAIR)));
|
||||||
|
}
|
||||||
|
|
||||||
/* Filetype information as used in inodes. */
|
/* Filetype information as used in inodes. */
|
||||||
#define FILETYPE_INO_MASK 0170000
|
#define FILETYPE_INO_MASK 0170000
|
||||||
#define FILETYPE_INO_REG 0100000
|
#define FILETYPE_INO_REG 0100000
|
||||||
@@ -354,7 +422,6 @@ GRUB_XFS_EXTENT_SIZE (struct grub_xfs_extent *exts, int ex)
|
|||||||
return (grub_be_to_cpu32 (exts[ex].raw[3]) & ((1 << 21) - 1));
|
return (grub_be_to_cpu32 (exts[ex].raw[3]) & ((1 << 21) - 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static inline grub_uint64_t
|
static inline grub_uint64_t
|
||||||
grub_xfs_inode_block (struct grub_xfs_data *data,
|
grub_xfs_inode_block (struct grub_xfs_data *data,
|
||||||
grub_uint64_t ino)
|
grub_uint64_t ino)
|
||||||
@@ -489,7 +556,7 @@ grub_xfs_read_inode (struct grub_xfs_data *data, grub_uint64_t ino,
|
|||||||
grub_uint64_t block = grub_xfs_inode_block (data, ino);
|
grub_uint64_t block = grub_xfs_inode_block (data, ino);
|
||||||
int offset = grub_xfs_inode_offset (data, ino);
|
int offset = grub_xfs_inode_offset (data, ino);
|
||||||
|
|
||||||
grub_dprintf("xfs", "Reading inode (%"PRIuGRUB_UINT64_T") - %"PRIuGRUB_UINT64_T", %d\n",
|
grub_dprintf("xfs", "Reading inode (%" PRIuGRUB_UINT64_T ") - %" PRIuGRUB_UINT64_T ", %d\n",
|
||||||
ino, block, offset);
|
ino, block, offset);
|
||||||
/* Read the inode. */
|
/* Read the inode. */
|
||||||
if (grub_disk_read (data->disk, block, offset, grub_xfs_inode_size(data),
|
if (grub_disk_read (data->disk, block, offset, grub_xfs_inode_size(data),
|
||||||
@@ -509,11 +576,26 @@ get_fsb (const void *keys, int idx)
|
|||||||
return grub_be_to_cpu64 (grub_get_unaligned64 (p));
|
return grub_be_to_cpu64 (grub_get_unaligned64 (p));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
grub_xfs_inode_has_large_extent_counts (const struct grub_xfs_inode *inode)
|
||||||
|
{
|
||||||
|
return inode->version >= 3 &&
|
||||||
|
(inode->flags2 & grub_cpu_to_be64_compile_time (XFS_DIFLAG2_NREXT64));
|
||||||
|
}
|
||||||
|
|
||||||
|
static grub_uint64_t
|
||||||
|
grub_xfs_get_inode_nextents (struct grub_xfs_inode *inode)
|
||||||
|
{
|
||||||
|
return (grub_xfs_inode_has_large_extent_counts (inode)) ?
|
||||||
|
grub_be_to_cpu64 (inode->nextents_big) :
|
||||||
|
grub_be_to_cpu32 (inode->nextents);
|
||||||
|
}
|
||||||
|
|
||||||
static grub_disk_addr_t
|
static grub_disk_addr_t
|
||||||
grub_xfs_read_block (grub_fshelp_node_t node, grub_disk_addr_t fileblock)
|
grub_xfs_read_block (grub_fshelp_node_t node, grub_disk_addr_t fileblock)
|
||||||
{
|
{
|
||||||
struct grub_xfs_btree_node *leaf = 0;
|
struct grub_xfs_btree_node *leaf = 0;
|
||||||
int ex, nrec;
|
grub_uint64_t ex, nrec;
|
||||||
struct grub_xfs_extent *exts;
|
struct grub_xfs_extent *exts;
|
||||||
grub_uint64_t ret = 0;
|
grub_uint64_t ret = 0;
|
||||||
|
|
||||||
@@ -538,7 +620,18 @@ grub_xfs_read_block (grub_fshelp_node_t node, grub_disk_addr_t fileblock)
|
|||||||
/ (2 * sizeof (grub_uint64_t));
|
/ (2 * sizeof (grub_uint64_t));
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
int i;
|
grub_uint64_t i;
|
||||||
|
grub_addr_t keys_end, data_end;
|
||||||
|
|
||||||
|
if (grub_mul (sizeof (grub_uint64_t), nrec, &keys_end) ||
|
||||||
|
grub_add ((grub_addr_t) keys, keys_end, &keys_end) ||
|
||||||
|
grub_add ((grub_addr_t) node->data, node->data->data_size, &data_end) ||
|
||||||
|
keys_end > data_end)
|
||||||
|
{
|
||||||
|
grub_error (GRUB_ERR_BAD_FS, "invalid number of XFS root keys");
|
||||||
|
grub_free (leaf);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < nrec; i++)
|
for (i = 0; i < nrec; i++)
|
||||||
{
|
{
|
||||||
@@ -556,7 +649,10 @@ grub_xfs_read_block (grub_fshelp_node_t node, grub_disk_addr_t fileblock)
|
|||||||
if (grub_disk_read (node->data->disk,
|
if (grub_disk_read (node->data->disk,
|
||||||
GRUB_XFS_FSB_TO_BLOCK (node->data, get_fsb (keys, i - 1 + recoffset)) << (node->data->sblock.log2_bsize - GRUB_DISK_SECTOR_BITS),
|
GRUB_XFS_FSB_TO_BLOCK (node->data, get_fsb (keys, i - 1 + recoffset)) << (node->data->sblock.log2_bsize - GRUB_DISK_SECTOR_BITS),
|
||||||
0, node->data->bsize, leaf))
|
0, node->data->bsize, leaf))
|
||||||
return 0;
|
{
|
||||||
|
grub_free (leaf);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
if ((!node->data->hascrc &&
|
if ((!node->data->hascrc &&
|
||||||
grub_strncmp ((char *) leaf->magic, "BMAP", 4)) ||
|
grub_strncmp ((char *) leaf->magic, "BMAP", 4)) ||
|
||||||
@@ -579,8 +675,20 @@ grub_xfs_read_block (grub_fshelp_node_t node, grub_disk_addr_t fileblock)
|
|||||||
}
|
}
|
||||||
else if (node->inode.format == XFS_INODE_FORMAT_EXT)
|
else if (node->inode.format == XFS_INODE_FORMAT_EXT)
|
||||||
{
|
{
|
||||||
nrec = grub_be_to_cpu32 (node->inode.nextents);
|
grub_addr_t exts_end = 0;
|
||||||
|
grub_addr_t data_end = 0;
|
||||||
|
|
||||||
|
nrec = grub_xfs_get_inode_nextents (&node->inode);
|
||||||
exts = (struct grub_xfs_extent *) grub_xfs_inode_data(&node->inode);
|
exts = (struct grub_xfs_extent *) grub_xfs_inode_data(&node->inode);
|
||||||
|
|
||||||
|
if (grub_mul (sizeof (struct grub_xfs_extent), nrec, &exts_end) ||
|
||||||
|
grub_add ((grub_addr_t) node->data, exts_end, &exts_end) ||
|
||||||
|
grub_add ((grub_addr_t) node->data, node->data->data_size, &data_end) ||
|
||||||
|
exts_end > data_end)
|
||||||
|
{
|
||||||
|
grub_error (GRUB_ERR_BAD_FS, "invalid number of XFS extents");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -634,6 +742,7 @@ static char *
|
|||||||
grub_xfs_read_symlink (grub_fshelp_node_t node)
|
grub_xfs_read_symlink (grub_fshelp_node_t node)
|
||||||
{
|
{
|
||||||
grub_ssize_t size = grub_be_to_cpu64 (node->inode.size);
|
grub_ssize_t size = grub_be_to_cpu64 (node->inode.size);
|
||||||
|
grub_size_t sz;
|
||||||
|
|
||||||
if (size < 0)
|
if (size < 0)
|
||||||
{
|
{
|
||||||
@@ -655,7 +764,12 @@ grub_xfs_read_symlink (grub_fshelp_node_t node)
|
|||||||
if (node->data->hascrc)
|
if (node->data->hascrc)
|
||||||
off = 56;
|
off = 56;
|
||||||
|
|
||||||
symlink = grub_malloc (size + 1);
|
if (grub_add (size, 1, &sz))
|
||||||
|
{
|
||||||
|
grub_error (GRUB_ERR_OUT_OF_RANGE, N_("symlink size overflow"));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
symlink = grub_malloc (sz);
|
||||||
if (!symlink)
|
if (!symlink)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
@@ -705,8 +819,15 @@ static int iterate_dir_call_hook (grub_uint64_t ino, const char *filename,
|
|||||||
{
|
{
|
||||||
struct grub_fshelp_node *fdiro;
|
struct grub_fshelp_node *fdiro;
|
||||||
grub_err_t err;
|
grub_err_t err;
|
||||||
|
grub_size_t sz;
|
||||||
|
|
||||||
fdiro = grub_malloc (grub_xfs_fshelp_size(ctx->diro->data) + 1);
|
if (grub_add (grub_xfs_fshelp_size(ctx->diro->data), 1, &sz))
|
||||||
|
{
|
||||||
|
grub_error (GRUB_ERR_OUT_OF_RANGE, N_("directory data size overflow"));
|
||||||
|
grub_print_error ();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
fdiro = grub_malloc (sz);
|
||||||
if (!fdiro)
|
if (!fdiro)
|
||||||
{
|
{
|
||||||
grub_print_error ();
|
grub_print_error ();
|
||||||
@@ -722,6 +843,7 @@ static int iterate_dir_call_hook (grub_uint64_t ino, const char *filename,
|
|||||||
if (err)
|
if (err)
|
||||||
{
|
{
|
||||||
grub_print_error ();
|
grub_print_error ();
|
||||||
|
grub_free (fdiro);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -764,12 +886,20 @@ grub_xfs_iterate_dir (grub_fshelp_node_t dir,
|
|||||||
if (iterate_dir_call_hook (parent, "..", &ctx))
|
if (iterate_dir_call_hook (parent, "..", &ctx))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
for (i = 0; i < head->count; i++)
|
for (i = 0; i < head->count &&
|
||||||
|
(grub_uint8_t *) de < ((grub_uint8_t *) dir + grub_xfs_fshelp_size (dir->data)); i++)
|
||||||
{
|
{
|
||||||
grub_uint64_t ino;
|
grub_uint64_t ino;
|
||||||
grub_uint8_t *inopos = grub_xfs_inline_de_inopos(dir->data, de);
|
grub_uint8_t *inopos = grub_xfs_inline_de_inopos(dir->data, de);
|
||||||
grub_uint8_t c;
|
grub_uint8_t c;
|
||||||
|
|
||||||
|
if ((inopos + (smallino ? 4 : 8)) > (grub_uint8_t *) dir + grub_xfs_fshelp_size (dir->data))
|
||||||
|
{
|
||||||
|
grub_error (GRUB_ERR_BAD_FS, "invalid XFS inode");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* inopos might be unaligned. */
|
/* inopos might be unaligned. */
|
||||||
if (smallino)
|
if (smallino)
|
||||||
ino = (((grub_uint32_t) inopos[0]) << 24)
|
ino = (((grub_uint32_t) inopos[0]) << 24)
|
||||||
@@ -824,24 +954,49 @@ grub_xfs_iterate_dir (grub_fshelp_node_t dir,
|
|||||||
{
|
{
|
||||||
struct grub_xfs_dir2_entry *direntry =
|
struct grub_xfs_dir2_entry *direntry =
|
||||||
grub_xfs_first_de(dir->data, dirblock);
|
grub_xfs_first_de(dir->data, dirblock);
|
||||||
int entries;
|
int entries = -1;
|
||||||
struct grub_xfs_dirblock_tail *tail =
|
char *end = dirblock + dirblk_size;
|
||||||
grub_xfs_dir_tail(dir->data, dirblock);
|
grub_uint32_t magic;
|
||||||
|
|
||||||
numread = grub_xfs_read_file (dir, 0, 0,
|
numread = grub_xfs_read_file (dir, 0, 0,
|
||||||
blk << dirblk_log2,
|
blk << dirblk_log2,
|
||||||
dirblk_size, dirblock, 0);
|
dirblk_size, dirblock, 0);
|
||||||
if (numread != dirblk_size)
|
if (numread != dirblk_size)
|
||||||
return 0;
|
{
|
||||||
|
grub_free (dirblock);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
entries = (grub_be_to_cpu32 (tail->leaf_count)
|
/*
|
||||||
- grub_be_to_cpu32 (tail->leaf_stale));
|
* If this data block isn't actually part of the extent list then
|
||||||
|
* grub_xfs_read_file() returns a block of zeros. So, if the magic
|
||||||
if (!entries)
|
* number field is all zeros then this block should be skipped.
|
||||||
|
*/
|
||||||
|
magic = *(grub_uint32_t *)(void *) dirblock;
|
||||||
|
if (!magic)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Leaf and tail information are only in the data block if the number
|
||||||
|
* of extents is 1.
|
||||||
|
*/
|
||||||
|
if (grub_xfs_get_inode_nextents (&dir->inode) == 1)
|
||||||
|
{
|
||||||
|
struct grub_xfs_dirblock_tail *tail = grub_xfs_dir_tail (dir->data, dirblock);
|
||||||
|
|
||||||
|
end = (char *) tail;
|
||||||
|
|
||||||
|
/* Subtract the space used by leaf nodes. */
|
||||||
|
end -= grub_be_to_cpu32 (tail->leaf_count) * sizeof (struct grub_xfs_dir_leaf_entry);
|
||||||
|
|
||||||
|
entries = grub_be_to_cpu32 (tail->leaf_count) - grub_be_to_cpu32 (tail->leaf_stale);
|
||||||
|
|
||||||
|
if (!entries)
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
/* Iterate over all entries within this block. */
|
/* Iterate over all entries within this block. */
|
||||||
while ((char *)direntry < (char *)tail)
|
while ((char *) direntry < (char *) end)
|
||||||
{
|
{
|
||||||
grub_uint8_t *freetag;
|
grub_uint8_t *freetag;
|
||||||
char *filename;
|
char *filename;
|
||||||
@@ -861,6 +1016,12 @@ grub_xfs_iterate_dir (grub_fshelp_node_t dir,
|
|||||||
}
|
}
|
||||||
|
|
||||||
filename = (char *)(direntry + 1);
|
filename = (char *)(direntry + 1);
|
||||||
|
if (filename + direntry->len + 1 > (char *) end)
|
||||||
|
{
|
||||||
|
grub_error (GRUB_ERR_BAD_FS, "invalid XFS directory entry");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* The byte after the filename is for the filetype, padding, or
|
/* The byte after the filename is for the filetype, padding, or
|
||||||
tag, which is not used by GRUB. So it can be overwritten. */
|
tag, which is not used by GRUB. So it can be overwritten. */
|
||||||
filename[direntry->len] = '\0';
|
filename[direntry->len] = '\0';
|
||||||
@@ -872,11 +1033,17 @@ grub_xfs_iterate_dir (grub_fshelp_node_t dir,
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check if last direntry in this block is
|
/*
|
||||||
reached. */
|
* The expected number of directory entries is only tracked for the
|
||||||
entries--;
|
* single extent case.
|
||||||
if (!entries)
|
*/
|
||||||
break;
|
if (grub_xfs_get_inode_nextents (&dir->inode) == 1)
|
||||||
|
{
|
||||||
|
/* Check if last direntry in this block is reached. */
|
||||||
|
entries--;
|
||||||
|
if (!entries)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
/* Select the next directory entry. */
|
/* Select the next directory entry. */
|
||||||
direntry = grub_xfs_next_de(dir->data, direntry);
|
direntry = grub_xfs_next_de(dir->data, direntry);
|
||||||
@@ -899,11 +1066,14 @@ static struct grub_xfs_data *
|
|||||||
grub_xfs_mount (grub_disk_t disk)
|
grub_xfs_mount (grub_disk_t disk)
|
||||||
{
|
{
|
||||||
struct grub_xfs_data *data = 0;
|
struct grub_xfs_data *data = 0;
|
||||||
|
grub_size_t sz;
|
||||||
|
|
||||||
data = grub_zalloc (sizeof (struct grub_xfs_data));
|
data = grub_zalloc (sizeof (struct grub_xfs_data));
|
||||||
if (!data)
|
if (!data)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
data->data_size = sizeof (struct grub_xfs_data);
|
||||||
|
|
||||||
grub_dprintf("xfs", "Reading sb\n");
|
grub_dprintf("xfs", "Reading sb\n");
|
||||||
/* Read the superblock. */
|
/* Read the superblock. */
|
||||||
if (grub_disk_read (disk, 0, 0,
|
if (grub_disk_read (disk, 0, 0,
|
||||||
@@ -913,14 +1083,19 @@ grub_xfs_mount (grub_disk_t disk)
|
|||||||
if (!grub_xfs_sb_valid(data))
|
if (!grub_xfs_sb_valid(data))
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
data = grub_realloc (data,
|
if (grub_xfs_sb_needs_repair (data))
|
||||||
sizeof (struct grub_xfs_data)
|
grub_dprintf ("xfs", "XFS filesystem needs repair, boot may fail\n");
|
||||||
- sizeof (struct grub_xfs_inode)
|
|
||||||
+ grub_xfs_inode_size(data) + 1);
|
if (grub_add (grub_xfs_inode_size (data),
|
||||||
|
sizeof (struct grub_xfs_data) - sizeof (struct grub_xfs_inode) + 1, &sz))
|
||||||
|
goto fail;
|
||||||
|
|
||||||
|
data = grub_realloc (data, sz);
|
||||||
|
|
||||||
if (! data)
|
if (! data)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
|
data->data_size = sz;
|
||||||
data->diropen.data = data;
|
data->diropen.data = data;
|
||||||
data->diropen.ino = grub_be_to_cpu64(data->sblock.rootino);
|
data->diropen.ino = grub_be_to_cpu64(data->sblock.rootino);
|
||||||
data->diropen.inode_read = 1;
|
data->diropen.inode_read = 1;
|
||||||
@@ -931,7 +1106,7 @@ grub_xfs_mount (grub_disk_t disk)
|
|||||||
|
|
||||||
data->disk = disk;
|
data->disk = disk;
|
||||||
data->pos = 0;
|
data->pos = 0;
|
||||||
grub_dprintf("xfs", "Reading root ino %"PRIuGRUB_UINT64_T"\n",
|
grub_dprintf("xfs", "Reading root ino %" PRIuGRUB_UINT64_T "\n",
|
||||||
grub_cpu_to_be64(data->sblock.rootino));
|
grub_cpu_to_be64(data->sblock.rootino));
|
||||||
|
|
||||||
grub_xfs_read_inode (data, data->diropen.ino, &data->diropen.inode);
|
grub_xfs_read_inode (data, data->diropen.ino, &data->diropen.inode);
|
||||||
@@ -939,7 +1114,7 @@ grub_xfs_mount (grub_disk_t disk)
|
|||||||
return data;
|
return data;
|
||||||
fail:
|
fail:
|
||||||
|
|
||||||
if (grub_errno == GRUB_ERR_OUT_OF_RANGE)
|
if (grub_errno == GRUB_ERR_OUT_OF_RANGE || grub_errno == GRUB_ERR_NONE)
|
||||||
grub_error (GRUB_ERR_BAD_FS, "not an XFS filesystem");
|
grub_error (GRUB_ERR_BAD_FS, "not an XFS filesystem");
|
||||||
|
|
||||||
grub_free (data);
|
grub_free (data);
|
||||||
@@ -947,7 +1122,6 @@ grub_xfs_mount (grub_disk_t disk)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Context for grub_xfs_dir. */
|
/* Context for grub_xfs_dir. */
|
||||||
struct grub_xfs_dir_ctx
|
struct grub_xfs_dir_ctx
|
||||||
{
|
{
|
||||||
@@ -955,6 +1129,27 @@ struct grub_xfs_dir_ctx
|
|||||||
void *hook_data;
|
void *hook_data;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Bigtime inodes helpers. */
|
||||||
|
#define XFS_BIGTIME_EPOCH_OFFSET (-(grub_int64_t) GRUB_INT32_MIN)
|
||||||
|
|
||||||
|
static int grub_xfs_inode_has_bigtime (const struct grub_xfs_inode *inode)
|
||||||
|
{
|
||||||
|
return inode->version >= 3 &&
|
||||||
|
(inode->flags2 & grub_cpu_to_be64_compile_time (XFS_DIFLAG2_BIGTIME));
|
||||||
|
}
|
||||||
|
|
||||||
|
static grub_int64_t
|
||||||
|
grub_xfs_get_inode_time (struct grub_xfs_inode *inode)
|
||||||
|
{
|
||||||
|
struct grub_xfs_time_legacy *lts;
|
||||||
|
|
||||||
|
if (grub_xfs_inode_has_bigtime (inode))
|
||||||
|
return grub_divmod64 (grub_be_to_cpu64 (inode->mtime), NSEC_PER_SEC, NULL) - XFS_BIGTIME_EPOCH_OFFSET;
|
||||||
|
|
||||||
|
lts = (struct grub_xfs_time_legacy *) &inode->mtime;
|
||||||
|
return grub_be_to_cpu32 (lts->sec);
|
||||||
|
}
|
||||||
|
|
||||||
/* Helper for grub_xfs_dir. */
|
/* Helper for grub_xfs_dir. */
|
||||||
static int
|
static int
|
||||||
grub_xfs_dir_iter (const char *filename, enum grub_fshelp_filetype filetype,
|
grub_xfs_dir_iter (const char *filename, enum grub_fshelp_filetype filetype,
|
||||||
@@ -967,7 +1162,7 @@ grub_xfs_dir_iter (const char *filename, enum grub_fshelp_filetype filetype,
|
|||||||
if (node->inode_read)
|
if (node->inode_read)
|
||||||
{
|
{
|
||||||
info.mtimeset = 1;
|
info.mtimeset = 1;
|
||||||
info.mtime = grub_be_to_cpu32 (node->inode.mtime.sec);
|
info.mtime = grub_xfs_get_inode_time (&node->inode);
|
||||||
}
|
}
|
||||||
info.dir = ((filetype & GRUB_FSHELP_TYPE_MASK) == GRUB_FSHELP_DIR);
|
info.dir = ((filetype & GRUB_FSHELP_TYPE_MASK) == GRUB_FSHELP_DIR);
|
||||||
grub_free (node);
|
grub_free (node);
|
||||||
@@ -1132,8 +1327,6 @@ grub_xfs_uuid (grub_device_t device, char **uuid)
|
|||||||
return grub_errno;
|
return grub_errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static struct grub_fs grub_xfs_fs =
|
static struct grub_fs grub_xfs_fs =
|
||||||
{
|
{
|
||||||
.name = "xfs",
|
.name = "xfs",
|
||||||
@@ -1152,6 +1345,7 @@ static struct grub_fs grub_xfs_fs =
|
|||||||
|
|
||||||
GRUB_MOD_INIT(xfs)
|
GRUB_MOD_INIT(xfs)
|
||||||
{
|
{
|
||||||
|
//grub_xfs_fs.mod = mod;
|
||||||
grub_fs_register (&grub_xfs_fs);
|
grub_fs_register (&grub_xfs_fs);
|
||||||
my_mod = mod;
|
my_mod = mod;
|
||||||
}
|
}
|
||||||
|
@@ -128,11 +128,22 @@ insert_dir (const char *name, struct dir **root,
|
|||||||
n->name = grub_strndup (cb, ce - cb);
|
n->name = grub_strndup (cb, ce - cb);
|
||||||
if (ptr)
|
if (ptr)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
* Create the substring with the trailing NUL byte
|
||||||
|
* to be included in the cpio header.
|
||||||
|
*/
|
||||||
|
char *tmp_name = grub_strndup (name, ce - name);
|
||||||
|
if (!tmp_name) {
|
||||||
|
grub_free (n->name);
|
||||||
|
grub_free (n);
|
||||||
|
return grub_errno;
|
||||||
|
}
|
||||||
grub_dprintf ("linux", "Creating directory %s, %s\n", name, ce);
|
grub_dprintf ("linux", "Creating directory %s, %s\n", name, ce);
|
||||||
ptr = make_header (ptr, name, ce - name,
|
ptr = make_header (ptr, tmp_name, ce - name + 1,
|
||||||
040777, 0);
|
040777, 0);
|
||||||
|
grub_free (tmp_name);
|
||||||
}
|
}
|
||||||
size += ALIGN_UP ((ce - (char *) name)
|
size += ALIGN_UP ((ce - (char *) name + 1)
|
||||||
+ sizeof (struct newc_head), 4);
|
+ sizeof (struct newc_head), 4);
|
||||||
*head = n;
|
*head = n;
|
||||||
cur = n;
|
cur = n;
|
||||||
@@ -183,7 +194,7 @@ grub_initrd_init (int argc, char *argv[],
|
|||||||
}
|
}
|
||||||
initrd_ctx->size
|
initrd_ctx->size
|
||||||
+= ALIGN_UP (sizeof (struct newc_head)
|
+= ALIGN_UP (sizeof (struct newc_head)
|
||||||
+ grub_strlen (initrd_ctx->components[i].newc_name),
|
+ grub_strlen (initrd_ctx->components[i].newc_name) + 1,
|
||||||
4);
|
4);
|
||||||
initrd_ctx->size += insert_dir (initrd_ctx->components[i].newc_name,
|
initrd_ctx->size += insert_dir (initrd_ctx->components[i].newc_name,
|
||||||
&root, 0);
|
&root, 0);
|
||||||
@@ -194,7 +205,7 @@ grub_initrd_init (int argc, char *argv[],
|
|||||||
else if (newc)
|
else if (newc)
|
||||||
{
|
{
|
||||||
initrd_ctx->size += ALIGN_UP (sizeof (struct newc_head)
|
initrd_ctx->size += ALIGN_UP (sizeof (struct newc_head)
|
||||||
+ sizeof ("TRAILER!!!") - 1, 4);
|
+ sizeof ("TRAILER!!!"), 4);
|
||||||
free_dir (root);
|
free_dir (root);
|
||||||
root = 0;
|
root = 0;
|
||||||
newc = 0;
|
newc = 0;
|
||||||
@@ -217,7 +228,7 @@ grub_initrd_init (int argc, char *argv[],
|
|||||||
{
|
{
|
||||||
initrd_ctx->size = ALIGN_UP (initrd_ctx->size, 4);
|
initrd_ctx->size = ALIGN_UP (initrd_ctx->size, 4);
|
||||||
initrd_ctx->size += ALIGN_UP (sizeof (struct newc_head)
|
initrd_ctx->size += ALIGN_UP (sizeof (struct newc_head)
|
||||||
+ sizeof ("TRAILER!!!") - 1, 4);
|
+ sizeof ("TRAILER!!!"), 4);
|
||||||
free_dir (root);
|
free_dir (root);
|
||||||
root = 0;
|
root = 0;
|
||||||
}
|
}
|
||||||
@@ -269,14 +280,14 @@ grub_initrd_load (struct grub_linux_initrd_context *initrd_ctx,
|
|||||||
ptr += insert_dir (initrd_ctx->components[i].newc_name,
|
ptr += insert_dir (initrd_ctx->components[i].newc_name,
|
||||||
&root, ptr);
|
&root, ptr);
|
||||||
ptr = make_header (ptr, initrd_ctx->components[i].newc_name,
|
ptr = make_header (ptr, initrd_ctx->components[i].newc_name,
|
||||||
grub_strlen (initrd_ctx->components[i].newc_name),
|
grub_strlen (initrd_ctx->components[i].newc_name) + 1,
|
||||||
0100777,
|
0100777,
|
||||||
initrd_ctx->components[i].size);
|
initrd_ctx->components[i].size);
|
||||||
newc = 1;
|
newc = 1;
|
||||||
}
|
}
|
||||||
else if (newc)
|
else if (newc)
|
||||||
{
|
{
|
||||||
ptr = make_header (ptr, "TRAILER!!!", sizeof ("TRAILER!!!") - 1,
|
ptr = make_header (ptr, "TRAILER!!!", sizeof ("TRAILER!!!"),
|
||||||
0, 0);
|
0, 0);
|
||||||
free_dir (root);
|
free_dir (root);
|
||||||
root = 0;
|
root = 0;
|
||||||
@@ -308,7 +319,7 @@ grub_initrd_load (struct grub_linux_initrd_context *initrd_ctx,
|
|||||||
{
|
{
|
||||||
grub_memset (ptr, 0, ALIGN_UP_OVERHEAD (cursize, 4));
|
grub_memset (ptr, 0, ALIGN_UP_OVERHEAD (cursize, 4));
|
||||||
ptr += ALIGN_UP_OVERHEAD (cursize, 4);
|
ptr += ALIGN_UP_OVERHEAD (cursize, 4);
|
||||||
ptr = make_header (ptr, "TRAILER!!!", sizeof ("TRAILER!!!") - 1, 0, 0);
|
ptr = make_header (ptr, "TRAILER!!!", sizeof ("TRAILER!!!"), 0, 0);
|
||||||
}
|
}
|
||||||
free_dir (root);
|
free_dir (root);
|
||||||
root = 0;
|
root = 0;
|
||||||
|
@@ -244,6 +244,15 @@ static int ventoy_browser_valid_dirname(const char *name, int len)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (g_filt_trash_dir)
|
||||||
|
{
|
||||||
|
if (0 == grub_strncmp(name, ".trash-", 7) ||
|
||||||
|
0 == grub_strcmp(name, ".Trashes"))
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (name[0] == '$')
|
if (name[0] == '$')
|
||||||
{
|
{
|
||||||
if (0 == grub_strncmp(name, "$RECYCLE.BIN", 12) ||
|
if (0 == grub_strncmp(name, "$RECYCLE.BIN", 12) ||
|
||||||
|
@@ -65,6 +65,7 @@ int g_initrd_img_count = 0;
|
|||||||
int g_valid_initrd_count = 0;
|
int g_valid_initrd_count = 0;
|
||||||
int g_default_menu_mode = 0;
|
int g_default_menu_mode = 0;
|
||||||
int g_filt_dot_underscore_file = 0;
|
int g_filt_dot_underscore_file = 0;
|
||||||
|
int g_filt_trash_dir = 1;
|
||||||
int g_sort_case_sensitive = 0;
|
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;
|
||||||
@@ -1568,19 +1569,25 @@ int ventoy_cmp_img(img_info *img1, img_info *img2)
|
|||||||
|
|
||||||
static int ventoy_cmp_subdir(img_iterator_node *node1, img_iterator_node *node2)
|
static int ventoy_cmp_subdir(img_iterator_node *node1, img_iterator_node *node2)
|
||||||
{
|
{
|
||||||
char *s1, *s2;
|
int i = 0;
|
||||||
int c1 = 0;
|
int c1 = 0;
|
||||||
int c2 = 0;
|
int c2 = 0;
|
||||||
|
int len = 0;
|
||||||
|
char *s1, *s2;
|
||||||
|
|
||||||
if (g_plugin_image_list == VENTOY_IMG_WHITE_LIST)
|
if (g_plugin_image_list == VENTOY_IMG_WHITE_LIST)
|
||||||
{
|
{
|
||||||
return (node1->plugin_list_index - node2->plugin_list_index);
|
return (node1->plugin_list_index - node2->plugin_list_index);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (s1 = node1->dir, s2 = node2->dir; *s1 && *s2; s1++, s2++)
|
s1 = node1->dir;
|
||||||
|
s2 = node2->dir;
|
||||||
|
len = grub_min(node1->dirlen, node2->dirlen);
|
||||||
|
|
||||||
|
for (i = 0; i < len - 1; i++)
|
||||||
{
|
{
|
||||||
c1 = *s1;
|
c1 = *s1++;
|
||||||
c2 = *s2;
|
c2 = *s2++;
|
||||||
|
|
||||||
if (0 == g_sort_case_sensitive)
|
if (0 == g_sort_case_sensitive)
|
||||||
{
|
{
|
||||||
@@ -1597,10 +1604,20 @@ static int ventoy_cmp_subdir(img_iterator_node *node1, img_iterator_node *node2)
|
|||||||
|
|
||||||
if (c1 != c2)
|
if (c1 != c2)
|
||||||
{
|
{
|
||||||
break;
|
return (c1 - c2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (len == node1->dirlen)
|
||||||
|
{
|
||||||
|
c1 = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (len == node2->dirlen)
|
||||||
|
{
|
||||||
|
c2 = 0;
|
||||||
|
}
|
||||||
|
|
||||||
return (c1 - c2);
|
return (c1 - c2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1900,9 +1917,14 @@ static int ventoy_collect_img_files(const char *filename, const struct grub_dirh
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (filename[0] == '$' && 0 == grub_strncmp(filename, "$RECYCLE.BIN", 12))
|
if (g_filt_trash_dir)
|
||||||
{
|
{
|
||||||
return 0;
|
if (0 == grub_strncmp(filename, ".trash-", 7) ||
|
||||||
|
0 == grub_strcmp(filename, ".Trashes") ||
|
||||||
|
0 == grub_strncmp(filename, "$RECYCLE.BIN", 12))
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g_plugin_image_list == VENTOY_IMG_WHITE_LIST)
|
if (g_plugin_image_list == VENTOY_IMG_WHITE_LIST)
|
||||||
@@ -2832,6 +2854,12 @@ static grub_err_t ventoy_cmd_list_img(grub_extcmd_context_t ctxt, int argc, char
|
|||||||
g_filt_dot_underscore_file = 1;
|
g_filt_dot_underscore_file = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
strdata = ventoy_get_env("VTOY_FILT_TRASH_DIR");
|
||||||
|
if (strdata && strdata[0] == '0' && strdata[1] == 0)
|
||||||
|
{
|
||||||
|
g_filt_trash_dir = 0;
|
||||||
|
}
|
||||||
|
|
||||||
strdata = ventoy_get_env("VTOY_SORT_CASE_SENSITIVE");
|
strdata = ventoy_get_env("VTOY_SORT_CASE_SENSITIVE");
|
||||||
if (strdata && strdata[0] == '1' && strdata[1] == 0)
|
if (strdata && strdata[0] == '1' && strdata[1] == 0)
|
||||||
{
|
{
|
||||||
|
@@ -861,7 +861,8 @@ typedef struct vhd_footer_t
|
|||||||
grub_uint8_t savedst; // Saved state
|
grub_uint8_t savedst; // Saved state
|
||||||
}vhd_footer_t;
|
}vhd_footer_t;
|
||||||
|
|
||||||
#define VDI_IMAGE_FILE_INFO "<<< Oracle VM VirtualBox Disk Image >>>\n"
|
#define VDI_IMAGE_FILE_INFO "<<< Oracle VM VirtualBox Disk Image >>>\n"
|
||||||
|
#define VDI_IMAGE_FILE_INFO2 "<<< Oracle VirtualBox Disk Image >>>\n"
|
||||||
|
|
||||||
/** Image signature. */
|
/** Image signature. */
|
||||||
#define VDI_IMAGE_SIGNATURE (0xbeda107f)
|
#define VDI_IMAGE_SIGNATURE (0xbeda107f)
|
||||||
@@ -1298,6 +1299,7 @@ extern int g_tree_view_menu_style;
|
|||||||
extern int g_sort_case_sensitive;
|
extern int g_sort_case_sensitive;
|
||||||
extern int g_wimboot_enable;
|
extern int g_wimboot_enable;
|
||||||
extern int g_filt_dot_underscore_file;
|
extern int g_filt_dot_underscore_file;
|
||||||
|
extern int g_filt_trash_dir;
|
||||||
extern int g_vtoy_file_flt[VTOY_FILE_FLT_BUTT];
|
extern int g_vtoy_file_flt[VTOY_FILE_FLT_BUTT];
|
||||||
extern const char *g_menu_class[img_type_max];
|
extern const char *g_menu_class[img_type_max];
|
||||||
extern char g_iso_path[256];
|
extern char g_iso_path[256];
|
||||||
|
@@ -504,7 +504,7 @@ grub_err_t ventoy_cmd_get_vtoy_type(grub_extcmd_context_t ctxt, int argc, char *
|
|||||||
vhd_footer_t vhdfoot;
|
vhd_footer_t vhdfoot;
|
||||||
VDIPREHEADER vdihdr;
|
VDIPREHEADER vdihdr;
|
||||||
char type[16] = {0};
|
char type[16] = {0};
|
||||||
ventoy_gpt_info *gpt;
|
ventoy_gpt_info *gpt = NULL;
|
||||||
|
|
||||||
(void)ctxt;
|
(void)ctxt;
|
||||||
|
|
||||||
@@ -536,12 +536,25 @@ grub_err_t ventoy_cmd_get_vtoy_type(grub_extcmd_context_t ctxt, int argc, char *
|
|||||||
{
|
{
|
||||||
grub_file_seek(file, 0);
|
grub_file_seek(file, 0);
|
||||||
grub_file_read(file, &vdihdr, sizeof(vdihdr));
|
grub_file_read(file, &vdihdr, sizeof(vdihdr));
|
||||||
if (vdihdr.u32Signature == VDI_IMAGE_SIGNATURE &&
|
if (vdihdr.u32Signature == VDI_IMAGE_SIGNATURE)
|
||||||
grub_strncmp(vdihdr.szFileInfo, VDI_IMAGE_FILE_INFO, grub_strlen(VDI_IMAGE_FILE_INFO)) == 0)
|
|
||||||
{
|
{
|
||||||
offset = 2 * 1048576;
|
|
||||||
g_img_trim_head_secnum = offset / 512;
|
|
||||||
grub_snprintf(type, sizeof(type), "vdi");
|
grub_snprintf(type, sizeof(type), "vdi");
|
||||||
|
if (grub_strncmp(vdihdr.szFileInfo, VDI_IMAGE_FILE_INFO, grub_strlen(VDI_IMAGE_FILE_INFO)) == 0)
|
||||||
|
{
|
||||||
|
offset = 2 * 1048576;
|
||||||
|
g_img_trim_head_secnum = offset / 512;
|
||||||
|
debug("VDI V1\n");
|
||||||
|
}
|
||||||
|
else if (grub_strncmp(vdihdr.szFileInfo, VDI_IMAGE_FILE_INFO2, grub_strlen(VDI_IMAGE_FILE_INFO2)) == 0)
|
||||||
|
{
|
||||||
|
offset = 2 * 1048576;
|
||||||
|
g_img_trim_head_secnum = offset / 512;
|
||||||
|
debug("VDI V2\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
debug("invalid file info <%s>\n", vdihdr.szFileInfo);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -568,7 +581,7 @@ grub_err_t ventoy_cmd_get_vtoy_type(grub_extcmd_context_t ctxt, int argc, char *
|
|||||||
if (gpt->MBR.Byte55 != 0x55 || gpt->MBR.ByteAA != 0xAA)
|
if (gpt->MBR.Byte55 != 0x55 || gpt->MBR.ByteAA != 0xAA)
|
||||||
{
|
{
|
||||||
grub_env_set(args[1], "unknown");
|
grub_env_set(args[1], "unknown");
|
||||||
debug("invalid mbr signature: 0x%x 0x%x\n", gpt->MBR.Byte55, gpt->MBR.ByteAA);
|
debug("invalid mbr signature: 0x%x 0x%x offset=%d\n", gpt->MBR.Byte55, gpt->MBR.ByteAA, offset);
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -20,7 +20,7 @@
|
|||||||
. $VTOY_PATH/hook/ventoy-os-lib.sh
|
. $VTOY_PATH/hook/ventoy-os-lib.sh
|
||||||
|
|
||||||
$BUSYBOX_PATH/mkdir /dev
|
$BUSYBOX_PATH/mkdir /dev
|
||||||
$BUSYBOX_PATH/mknod -m 660 /dev/console b 5 1
|
$BUSYBOX_PATH/mknod -m 660 /dev/console c 5 1
|
||||||
|
|
||||||
$SED "/for device in/i $BUSYBOX_PATH/sh $VTOY_PATH/hook/aryalinux/disk_hook.sh" -i /init
|
$SED "/for device in/i $BUSYBOX_PATH/sh $VTOY_PATH/hook/aryalinux/disk_hook.sh" -i /init
|
||||||
#$SED "/for device in/i exec $BUSYBOX_PATH/sh" -i /init
|
#$SED "/for device in/i exec $BUSYBOX_PATH/sh" -i /init
|
||||||
|
43
IMG/cpio/ventoy/hook/debian/devuan-disk.sh
Normal file
43
IMG/cpio/ventoy/hook/debian/devuan-disk.sh
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
#!/ventoy/busybox/sh
|
||||||
|
#************************************************************************************
|
||||||
|
# Copyright (c) 2020, longpanda <admin@ventoy.net>
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or
|
||||||
|
# modify it under the terms of the GNU General Public License as
|
||||||
|
# published by the Free Software Foundation; either version 3 of the
|
||||||
|
# License, or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful, but
|
||||||
|
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
# General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
#************************************************************************************
|
||||||
|
|
||||||
|
. /ventoy/hook/ventoy-hook-lib.sh
|
||||||
|
|
||||||
|
if is_ventoy_hook_finished; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
vtlog "####### $0 $* ########"
|
||||||
|
|
||||||
|
VTPATH_OLD=$PATH; PATH=$BUSYBOX_PATH:$VTOY_PATH/tool:$PATH
|
||||||
|
|
||||||
|
wait_for_usb_disk_ready
|
||||||
|
|
||||||
|
vtdiskname=$(get_ventoy_disk_name)
|
||||||
|
if [ "$vtdiskname" = "unknown" ]; then
|
||||||
|
vtlog "ventoy disk not found"
|
||||||
|
PATH=$VTPATH_OLD
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2"
|
||||||
|
|
||||||
|
PATH=$VTPATH_OLD
|
||||||
|
|
||||||
|
set_ventoy_hook_finish
|
21
IMG/cpio/ventoy/hook/debian/devuan-hook.sh
Normal file
21
IMG/cpio/ventoy/hook/debian/devuan-hook.sh
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
#!/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/>.
|
||||||
|
#
|
||||||
|
#************************************************************************************
|
||||||
|
|
||||||
|
$SED "/Mount.*cdrom/a\ $BUSYBOX_PATH/sh $VTOY_PATH/hook/debian/devuan-disk.sh" -i /init
|
||||||
|
|
25
IMG/cpio/ventoy/hook/debian/truenas-bottom.sh
Normal file
25
IMG/cpio/ventoy/hook/debian/truenas-bottom.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/>.
|
||||||
|
#
|
||||||
|
#************************************************************************************
|
||||||
|
|
||||||
|
. /ventoy/hook/ventoy-hook-lib.sh
|
||||||
|
|
||||||
|
vtlog "mount ventoy.iso"
|
||||||
|
mkdir -p /root/cdrom >>$VTLOG 2>&1
|
||||||
|
mount -t iso9660 $VTOY_PATH/mnt/fuse/ventoy.iso /root/cdrom >>$VTLOG 2>&1
|
||||||
|
|
52
IMG/cpio/ventoy/hook/debian/truenas-disk.sh
Normal file
52
IMG/cpio/ventoy/hook/debian/truenas-disk.sh
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
#!/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
|
||||||
|
|
||||||
|
vtlog "####### $0 $* ########"
|
||||||
|
|
||||||
|
VTPATH_OLD=$PATH; PATH=$BUSYBOX_PATH:$VTOY_PATH/tool:$PATH
|
||||||
|
|
||||||
|
|
||||||
|
ventoy_run_fuse() {
|
||||||
|
vtlog "ventoy_run_fuse $*"
|
||||||
|
|
||||||
|
mkdir -p $VTOY_PATH/mnt/fuse $VTOY_PATH/mnt/iso
|
||||||
|
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
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_run_fuse $vtdiskname
|
||||||
|
|
||||||
|
if [ -f /ventoy/autoinstall ]; then
|
||||||
|
sh /ventoy/hook/default/auto_install_varexp.sh /ventoy/autoinstall
|
||||||
|
fi
|
27
IMG/cpio/ventoy/hook/debian/truenas-hook.sh
Normal file
27
IMG/cpio/ventoy/hook/debian/truenas-hook.sh
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
#!/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/truenas-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
|
||||||
|
$SED "/^mountroot$/i\\export FROMISO=$VTOY_PATH/mnt/fuse/ventoy.iso" -i /init
|
||||||
|
$SED "/exec *run-init/i\\$BUSYBOX_PATH/sh $VTOY_PATH/hook/debian/truenas-bottom.sh" -i /init
|
||||||
|
fi
|
@@ -49,6 +49,8 @@ ventoy_get_debian_distro() {
|
|||||||
echo 'mll'; return
|
echo 'mll'; return
|
||||||
elif $GREP -m1 -q 'stratodesk.com' /init; then
|
elif $GREP -m1 -q 'stratodesk.com' /init; then
|
||||||
echo 'stratodesk'; return
|
echo 'stratodesk'; return
|
||||||
|
elif $GREP -q "\bPVE\b" /init; then
|
||||||
|
echo 'pve'; return
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -108,6 +110,14 @@ ventoy_get_debian_distro() {
|
|||||||
echo 'pyabr'; return
|
echo 'pyabr'; return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -e /devuan-logo.txt ]; then
|
||||||
|
echo 'devuan'; return
|
||||||
|
fi
|
||||||
|
|
||||||
|
if $GREP -q 'truenas' /proc/version; then
|
||||||
|
echo 'truenas'; return
|
||||||
|
fi
|
||||||
|
|
||||||
echo 'default'
|
echo 'default'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
75
IMG/cpio/ventoy/hook/ewe/ventoy-disk.sh
Normal file
75
IMG/cpio/ventoy/hook/ewe/ventoy-disk.sh
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
#!/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
|
||||||
|
|
||||||
|
vtlog "######### $0 $* ############"
|
||||||
|
|
||||||
|
if is_ventoy_hook_finished; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
wait_for_usb_disk_ready
|
||||||
|
|
||||||
|
vtdiskname=$(get_ventoy_disk_name)
|
||||||
|
if [ "$vtdiskname" = "unknown" ]; then
|
||||||
|
vtlog "ventoy disk not found"
|
||||||
|
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})
|
||||||
|
vtlog "blkdev_num=$blkdev_num vtDM=$vtDM ..."
|
||||||
|
|
||||||
|
while [ -n "Y" ]; do
|
||||||
|
if [ -b /dev/$vtDM ]; then
|
||||||
|
break
|
||||||
|
else
|
||||||
|
sleep 0.3
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ -n "$1" ]; then
|
||||||
|
vtlog "ln -s /dev/$vtDM $1"
|
||||||
|
|
||||||
|
if [ -e "$1" ]; then
|
||||||
|
vtlog "$1 already exist"
|
||||||
|
else
|
||||||
|
ln -s /dev/$vtDM "$1"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
vtLABEL=$($BUSYBOX_PATH/blkid /dev/$vtDM | $SED 's/.*LABEL="\([^"]*\)".*/\1/')
|
||||||
|
vtlog "vtLABEL is $vtLABEL"
|
||||||
|
|
||||||
|
if [ -z "$vtLABEL" ]; then
|
||||||
|
vtLABEL=$($SED "s/.*label=\([^ ]*\)/\1/" /proc/cmdline)
|
||||||
|
vtlog "vtLABEL is $vtLABEL from cmdline"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -e "/dev/disk/by-label/$vtLABEL" ]; then
|
||||||
|
vtlog "$1 already exist"
|
||||||
|
else
|
||||||
|
ln -s /dev/$vtDM "/dev/disk/by-label/$vtLABEL"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# OK finish
|
||||||
|
set_ventoy_hook_finish
|
25
IMG/cpio/ventoy/hook/ewe/ventoy-hook.sh
Normal file
25
IMG/cpio/ventoy/hook/ewe/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
|
||||||
|
|
||||||
|
echo "hook live.init" >> $VTLOG
|
||||||
|
|
||||||
|
$SED "1i $BUSYBOX_PATH/sh $VTOY_PATH/hook/ewe/ventoy-disk.sh" -i /lib/tinyramfs/hook.d/live/live.init
|
||||||
|
|
@@ -26,6 +26,12 @@ if [ -f $VTOY_PATH/autoinstall ]; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if $GREP -q 'rdinit=/vtoy/vtoy' /proc/cmdline; then
|
||||||
|
echo "remove rdinit param" >> $VTLOG
|
||||||
|
echo "ptoptions=+rdinit" >> /linuxrc.config
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
if $BUSYBOX_PATH/ls $VTOY_PATH | $GREP -q 'ventoy_dud[0-9]'; then
|
if $BUSYBOX_PATH/ls $VTOY_PATH | $GREP -q 'ventoy_dud[0-9]'; then
|
||||||
if [ -f /linuxrc.config ]; then
|
if [ -f /linuxrc.config ]; then
|
||||||
vtKerVer=$($BUSYBOX_PATH/uname -r)
|
vtKerVer=$($BUSYBOX_PATH/uname -r)
|
||||||
@@ -60,7 +66,7 @@ fi
|
|||||||
if [ -e /etc/initrd.functions ] && $GREP -q 'HPIP' /etc/initrd.functions; then
|
if [ -e /etc/initrd.functions ] && $GREP -q 'HPIP' /etc/initrd.functions; then
|
||||||
echo "HPIP" >> $VTLOG
|
echo "HPIP" >> $VTLOG
|
||||||
$BUSYBOX_PATH/mkdir /dev
|
$BUSYBOX_PATH/mkdir /dev
|
||||||
$BUSYBOX_PATH/mknod -m 660 /dev/console b 5 1
|
$BUSYBOX_PATH/mknod -m 660 /dev/console c 5 1
|
||||||
$SED "/CD_DEVICES=/a $BUSYBOX_PATH/sh $VTOY_PATH/hook/suse/disk_hook.sh" -i /etc/initrd.functions
|
$SED "/CD_DEVICES=/a $BUSYBOX_PATH/sh $VTOY_PATH/hook/suse/disk_hook.sh" -i /etc/initrd.functions
|
||||||
$SED "/CD_DEVICES=/a CD_DEVICES=\"/dev/ventoy \$CD_DEVICES\"" -i /etc/initrd.functions
|
$SED "/CD_DEVICES=/a CD_DEVICES=\"/dev/ventoy \$CD_DEVICES\"" -i /etc/initrd.functions
|
||||||
elif [ -f /scripts/udev_setup ]; then
|
elif [ -f /scripts/udev_setup ]; then
|
||||||
|
@@ -45,6 +45,13 @@ fi
|
|||||||
# TinyCore linux distro doesn't contain dmsetup, we use aoe here
|
# TinyCore linux distro doesn't contain dmsetup, we use aoe here
|
||||||
sudo modprobe aoe aoe_iflist=lo
|
sudo modprobe aoe aoe_iflist=lo
|
||||||
if [ -e /sys/module/aoe ]; then
|
if [ -e /sys/module/aoe ]; then
|
||||||
|
|
||||||
|
if ! [ -d /lib64 ]; then
|
||||||
|
vtlog "link lib64"
|
||||||
|
NEED_UNLIB64=1
|
||||||
|
ln -s /lib /lib64
|
||||||
|
fi
|
||||||
|
|
||||||
VBLADE_BIN=$(ventoy_get_vblade_bin)
|
VBLADE_BIN=$(ventoy_get_vblade_bin)
|
||||||
|
|
||||||
sudo nohup $VBLADE_BIN -r -f $VTOY_PATH/ventoy_image_map 9 0 lo "$vtdiskname" > /dev/null &
|
sudo nohup $VBLADE_BIN -r -f $VTOY_PATH/ventoy_image_map 9 0 lo "$vtdiskname" > /dev/null &
|
||||||
@@ -57,6 +64,11 @@ if [ -e /sys/module/aoe ]; then
|
|||||||
|
|
||||||
sudo cp -a /dev/etherd/e9.0 "$vPart"
|
sudo cp -a /dev/etherd/e9.0 "$vPart"
|
||||||
|
|
||||||
|
if [ -n "$NEED_UNLIB64" ]; then
|
||||||
|
vtlog "unlink lib64"
|
||||||
|
unlink /lib64
|
||||||
|
fi
|
||||||
|
|
||||||
ventoy_find_bin_run rebuildfstab
|
ventoy_find_bin_run rebuildfstab
|
||||||
else
|
else
|
||||||
vterr "aoe driver module load failed..."
|
vterr "aoe driver module load failed..."
|
||||||
|
@@ -64,6 +64,12 @@ is_ventoy_hook_finished() {
|
|||||||
|
|
||||||
set_ventoy_hook_finish() {
|
set_ventoy_hook_finish() {
|
||||||
echo 'Y' > $VTOY_PATH/hook_finish
|
echo 'Y' > $VTOY_PATH/hook_finish
|
||||||
|
|
||||||
|
if [ -f /ventoy/ventoy_iso_part_dm_cmd ]; then
|
||||||
|
echo "### create iso part raw dm" >> $VTLOG
|
||||||
|
$BUSYBOX_PATH/sh /ventoy/ventoy_iso_part_dm_cmd >>$VTLOG 2>&1
|
||||||
|
$BUSYBOX_PATH/rm -f /ventoy/ventoy_iso_part_dm_cmd
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
get_ventoy_disk_name() {
|
get_ventoy_disk_name() {
|
||||||
@@ -232,230 +238,6 @@ ventoy_check_dm_module() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
ventoy_need_proc_ibt() {
|
|
||||||
vtKv=$($BUSYBOX_PATH/uname -r)
|
|
||||||
vtMajor=$(echo $vtKv | $AWK -F. '{print $1}')
|
|
||||||
vtMinor=$(echo $vtKv | $AWK -F. '{print $2}')
|
|
||||||
|
|
||||||
#ibt was supported since linux kernel 5.18
|
|
||||||
if [ $vtMajor -lt 5 ]; then
|
|
||||||
$BUSYBOX_PATH/false; return
|
|
||||||
elif [ $vtMajor -eq 5 ]; then
|
|
||||||
if [ $vtMajor -lt 18 ]; then
|
|
||||||
$BUSYBOX_PATH/false; return
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if $GREP -q ' ibt=off' /proc/cmdline; then
|
|
||||||
$BUSYBOX_PATH/false; return
|
|
||||||
fi
|
|
||||||
|
|
||||||
#hardware CPU doesn't support IBT
|
|
||||||
if $VTOY_PATH/tool/vtoykmod -I; then
|
|
||||||
:
|
|
||||||
else
|
|
||||||
$BUSYBOX_PATH/false; return
|
|
||||||
fi
|
|
||||||
|
|
||||||
#dot.CONFIG not enabled
|
|
||||||
if $GREP -q ' ibt_restore$' /proc/kallsyms; then
|
|
||||||
:
|
|
||||||
else
|
|
||||||
$BUSYBOX_PATH/false; return
|
|
||||||
fi
|
|
||||||
|
|
||||||
$BUSYBOX_PATH/true
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
ventoy_need_dm_patch() {
|
|
||||||
if [ "$VTOY_LINUX_REMOUNT" != "01" ]; then
|
|
||||||
if $GREP -q 'VTOY_LINUX_REMOUNT=1' /proc/cmdline; then
|
|
||||||
:
|
|
||||||
else
|
|
||||||
$BUSYBOX_PATH/false; return
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if $GREP -q 'device-mapper' /proc/devices; then
|
|
||||||
:
|
|
||||||
else
|
|
||||||
$BUSYBOX_PATH/false; return
|
|
||||||
fi
|
|
||||||
|
|
||||||
if $GREP -q 'dm_patch' /proc/modules; then
|
|
||||||
$BUSYBOX_PATH/false; return
|
|
||||||
fi
|
|
||||||
|
|
||||||
vtMajorVer=$($BUSYBOX_PATH/uname -r | $AWK -F. '{print $1}')
|
|
||||||
vtMinorVer=$($BUSYBOX_PATH/uname -r | $AWK -F. '{print $2}')
|
|
||||||
|
|
||||||
if [ $vtMajorVer -lt 3 ]; then
|
|
||||||
$BUSYBOX_PATH/false; return
|
|
||||||
elif [ $vtMajorVer -eq 3 -a $vtMinorVer -lt 10 ]; then
|
|
||||||
$BUSYBOX_PATH/false; return
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
$BUSYBOX_PATH/true
|
|
||||||
}
|
|
||||||
|
|
||||||
ventoy_dm_patch() {
|
|
||||||
vtDmPatchDebug=0
|
|
||||||
vtMType=$($BUSYBOX_PATH/uname -m)
|
|
||||||
|
|
||||||
vtlog "######### ventoy_dm_patch ############"
|
|
||||||
|
|
||||||
if echo $vtMType | $EGREP -i -q "x86.64|amd64"; then
|
|
||||||
vtKoName=dm_patch_64.ko
|
|
||||||
elif echo $vtMType | $EGREP -i -q "i[3-6]86"; then
|
|
||||||
vtKoName=dm_patch_32.ko
|
|
||||||
else
|
|
||||||
vtlog "unsupported machine type $vtMType"
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ventoy_need_proc_ibt; then
|
|
||||||
vtlog "need to proc IBT"
|
|
||||||
vtKoName=dm_patch_ibt_64.ko
|
|
||||||
vtIBT='0x8888'
|
|
||||||
else
|
|
||||||
vtlog "NO need to proc IBT"
|
|
||||||
vtIBT='0'
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
if [ -f $VTOY_PATH/tool/$vtKoName ]; then
|
|
||||||
vtlog "/ventoy/tool/$vtKoName exist OK"
|
|
||||||
else
|
|
||||||
vtlog "/ventoy/tool/$vtKoName NOT exist"
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
$CAT /proc/kallsyms | $BUSYBOX_PATH/sort > $VTOY_PATH/kallsyms
|
|
||||||
|
|
||||||
if $GREP -m1 -q 'open_table_device.isra' $VTOY_PATH/kallsyms; then
|
|
||||||
vtLine=$($VTOY_PATH/tool/vtoyksym open_table_device.isra $VTOY_PATH/kallsyms)
|
|
||||||
vtlog "get open_table_device.isra address $vtLine"
|
|
||||||
else
|
|
||||||
vtLine=$($VTOY_PATH/tool/vtoyksym dm_get_table_device $VTOY_PATH/kallsyms)
|
|
||||||
vtlog "get dm_get_table_device address $vtLine"
|
|
||||||
fi
|
|
||||||
get_addr=$(echo $vtLine | $AWK '{print $1}')
|
|
||||||
get_size=$(echo $vtLine | $AWK '{print $2}')
|
|
||||||
|
|
||||||
if $GREP -m1 -q 'close_table_device.isra' $VTOY_PATH/kallsyms; then
|
|
||||||
vtLine=$($VTOY_PATH/tool/vtoyksym close_table_device.isra $VTOY_PATH/kallsyms)
|
|
||||||
vtlog "get close_table_device.isra address $vtLine"
|
|
||||||
else
|
|
||||||
vtLine=$($VTOY_PATH/tool/vtoyksym dm_put_table_device $VTOY_PATH/kallsyms)
|
|
||||||
vtlog "get dm_put_table_device address $vtLine"
|
|
||||||
fi
|
|
||||||
put_addr=$(echo $vtLine | $AWK '{print $1}')
|
|
||||||
put_size=$(echo $vtLine | $AWK '{print $2}')
|
|
||||||
|
|
||||||
ro_addr=$($GREP ' set_memory_ro$' /proc/kallsyms | $AWK '{print $1}')
|
|
||||||
rw_addr=$($GREP ' set_memory_rw$' /proc/kallsyms | $AWK '{print $1}')
|
|
||||||
kprobe_reg_addr=$($GREP ' register_kprobe$' /proc/kallsyms | $AWK '{print $1}')
|
|
||||||
kprobe_unreg_addr=$($GREP ' unregister_kprobe$' /proc/kallsyms | $AWK '{print $1}')
|
|
||||||
|
|
||||||
if [ "$VTOY_DEBUG_LEVEL" = "01" ]; then
|
|
||||||
vtDmPatchDebug=1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if $GREP -q 'dmpatch_debug' /proc/cmdline; then
|
|
||||||
vtDmPatchDebug=1
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
if [ $vtDmPatchDebug -eq 1 ]; then
|
|
||||||
printk_addr=$($GREP ' printk$' /proc/kallsyms | $AWK '{print $1}')
|
|
||||||
if [ -z "$printk_addr" ]; then
|
|
||||||
printk_addr=$($GREP ' _printk$' /proc/kallsyms | $AWK '{print $1}')
|
|
||||||
fi
|
|
||||||
vtDebug="-v"
|
|
||||||
else
|
|
||||||
printk_addr=0
|
|
||||||
fi
|
|
||||||
|
|
||||||
#printk_addr=$($GREP ' printk$' /proc/kallsyms | $AWK '{print $1}')
|
|
||||||
#vtDebug="-v"
|
|
||||||
|
|
||||||
vtlog get_addr=$get_addr get_size=$get_size
|
|
||||||
vtlog put_addr=$put_addr put_size=$put_size
|
|
||||||
vtlog kprobe_reg_addr=$kprobe_reg_addr kprobe_unreg_addr=$kprobe_unreg_addr
|
|
||||||
vtlog ro_addr=$ro_addr rw_addr=$rw_addr printk_addr=$printk_addr
|
|
||||||
|
|
||||||
if [ "$get_addr" = "0" -o "$put_addr" = "0" ]; then
|
|
||||||
vtlog "Invalid symbol address"
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
if [ "$ro_addr" = "0" -o "$rw_addr" = "0" ]; then
|
|
||||||
vtlog "Invalid symbol address"
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
vtKv=$($BUSYBOX_PATH/uname -r)
|
|
||||||
|
|
||||||
if [ ! -d /lib/modules/$vtKv ]; then
|
|
||||||
vtlog "No modules directory found"
|
|
||||||
return
|
|
||||||
elif [ -d /lib/modules/$vtKv/kernel/fs ]; then
|
|
||||||
vtModPath=$($FIND /lib/modules/$vtKv/kernel/fs/ -name "*.ko*" | $HEAD -n1)
|
|
||||||
elif [ -d /lib/modules/$vtKv/kernel ]; then
|
|
||||||
vtModPath=$($FIND /lib/modules/$vtKv/kernel/ -name "xfs.ko*" | $HEAD -n1)
|
|
||||||
elif [ -d /lib/modules/$vtKv/initrd ]; then
|
|
||||||
vtModPath=$($FIND /lib/modules/$vtKv/initrd/ -name "xfs.ko*" | $HEAD -n1)
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
if [ -z "$vtModPath" ]; then
|
|
||||||
vtModPath=$($FIND /lib/modules/$vtKv/ -name "*.ko*" | $HEAD -n1)
|
|
||||||
fi
|
|
||||||
|
|
||||||
vtModName=$($BUSYBOX_PATH/basename $vtModPath)
|
|
||||||
|
|
||||||
vtlog "template module is $vtModPath $vtModName"
|
|
||||||
|
|
||||||
if [ -z "$vtModPath" ]; then
|
|
||||||
vtlog "No template module found"
|
|
||||||
return
|
|
||||||
elif echo $vtModPath | $GREP -q "[.]ko$"; then
|
|
||||||
$BUSYBOX_PATH/cp -a $vtModPath $VTOY_PATH/$vtModName
|
|
||||||
elif echo $vtModPath | $GREP -q "[.]ko[.]xz$"; then
|
|
||||||
$BUSYBOX_PATH/xzcat $vtModPath > $VTOY_PATH/$vtModName
|
|
||||||
elif echo $vtModPath | $GREP -q "[.]ko[.]gz$"; then
|
|
||||||
$BUSYBOX_PATH/zcat $vtModPath > $VTOY_PATH/$vtModName
|
|
||||||
elif echo $vtModPath | $GREP -q "[.]ko[.]zst$"; then
|
|
||||||
$VTOY_PATH/tool/zstdcat $vtModPath > $VTOY_PATH/$vtModName
|
|
||||||
else
|
|
||||||
vtlog "unsupport module type"
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#step1: modify vermagic/mod crc/relocation
|
|
||||||
vtlog "$VTOY_PATH/tool/vtoykmod -u $VTOY_PATH/tool/$vtKoName $VTOY_PATH/$vtModName $vtDebug"
|
|
||||||
$VTOY_PATH/tool/vtoykmod -u $VTOY_PATH/tool/$vtKoName $VTOY_PATH/$vtModName $vtDebug >>$VTLOG 2>&1
|
|
||||||
|
|
||||||
#step2: fill parameters
|
|
||||||
vtPgsize=$($VTOY_PATH/tool/vtoyksym -p)
|
|
||||||
vtlog "$VTOY_PATH/tool/vtoykmod -f $VTOY_PATH/tool/$vtKoName $vtPgsize 0x$printk_addr 0x$ro_addr 0x$rw_addr $get_addr $get_size $put_addr $put_size 0x$kprobe_reg_addr 0x$kprobe_unreg_addr $vtKv $vtIBT $vtDebug"
|
|
||||||
$VTOY_PATH/tool/vtoykmod -f $VTOY_PATH/tool/$vtKoName $vtPgsize 0x$printk_addr 0x$ro_addr 0x$rw_addr $get_addr $get_size $put_addr $put_size 0x$kprobe_reg_addr 0x$kprobe_unreg_addr $vtKv $vtIBT $vtDebug >>$VTLOG 2>&1
|
|
||||||
|
|
||||||
vtlog "insmod $VTOY_PATH/tool/$vtKoName"
|
|
||||||
$BUSYBOX_PATH/insmod $VTOY_PATH/tool/$vtKoName >>$VTLOG 2>&1
|
|
||||||
|
|
||||||
if $GREP -q 'dm_patch' /proc/modules; then
|
|
||||||
vtlog "dm_patch module OK"
|
|
||||||
echo "done" > $VTOY_PATH/dm_patch_done
|
|
||||||
else
|
|
||||||
vtlog "dm_patch module FAILED"
|
|
||||||
fi
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
create_ventoy_device_mapper() {
|
create_ventoy_device_mapper() {
|
||||||
vtlog "create_ventoy_device_mapper $*"
|
vtlog "create_ventoy_device_mapper $*"
|
||||||
@@ -475,17 +257,7 @@ create_ventoy_device_mapper() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
$VTOY_PATH/tool/vtoydm -p -f $VTOY_PATH/ventoy_image_map -d $1 > $VTOY_PATH/ventoy_dm_table
|
$VTOY_PATH/tool/vtoydm -p -f $VTOY_PATH/ventoy_image_map -d $1 > $VTOY_PATH/ventoy_dm_table
|
||||||
|
$VTOY_PATH/tool/vtoydm -r -f $VTOY_PATH/ventoy_image_map -d $1 > $VTOY_PATH/ventoy_raw_table
|
||||||
|
|
||||||
vtLevel1=$($CAT /proc/sys/kernel/printk | $AWK '{print $1}')
|
|
||||||
vtLevel2=$($CAT /proc/sys/kernel/printk | $AWK '{print $2}')
|
|
||||||
vtLevel3=$($CAT /proc/sys/kernel/printk | $AWK '{print $3}')
|
|
||||||
vtLevel4=$($CAT /proc/sys/kernel/printk | $AWK '{print $4}')
|
|
||||||
if ventoy_need_dm_patch; then
|
|
||||||
ventoy_dm_patch
|
|
||||||
#suppress printk message
|
|
||||||
echo 0 $vtLevel2 0 $vtLevel4 > /proc/sys/kernel/printk
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z "$2" ]; then
|
if [ -z "$2" ]; then
|
||||||
$VT_DM_BIN create ventoy $VTOY_PATH/ventoy_dm_table >>$VTLOG 2>&1
|
$VT_DM_BIN create ventoy $VTOY_PATH/ventoy_dm_table >>$VTLOG 2>&1
|
||||||
@@ -493,10 +265,8 @@ create_ventoy_device_mapper() {
|
|||||||
$VT_DM_BIN "$2" create ventoy $VTOY_PATH/ventoy_dm_table >>$VTLOG 2>&1
|
$VT_DM_BIN "$2" create ventoy $VTOY_PATH/ventoy_dm_table >>$VTLOG 2>&1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ventoy_need_dm_patch; then
|
RAWDISKNAME=$($HEAD -n1 $VTOY_PATH/ventoy_raw_table | $AWK '{print $4}')
|
||||||
#recover printk level
|
echo "$VT_DM_BIN create ${RAWDISKNAME#/dev/} $VTOY_PATH/ventoy_raw_table" > /ventoy/ventoy_iso_part_dm_cmd
|
||||||
echo $vtLevel1 $vtLevel2 $vtLevel3 $vtLevel4 > /proc/sys/kernel/printk
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
create_persistent_device_mapper() {
|
create_persistent_device_mapper() {
|
||||||
@@ -517,23 +287,7 @@ create_persistent_device_mapper() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
$VTOY_PATH/tool/vtoydm -p -f $VTOY_PATH/ventoy_persistent_map -d $1 > $VTOY_PATH/persistent_dm_table
|
$VTOY_PATH/tool/vtoydm -p -f $VTOY_PATH/ventoy_persistent_map -d $1 > $VTOY_PATH/persistent_dm_table
|
||||||
|
|
||||||
|
|
||||||
vtLevel1=$($CAT /proc/sys/kernel/printk | $AWK '{print $1}')
|
|
||||||
vtLevel2=$($CAT /proc/sys/kernel/printk | $AWK '{print $2}')
|
|
||||||
vtLevel3=$($CAT /proc/sys/kernel/printk | $AWK '{print $3}')
|
|
||||||
vtLevel4=$($CAT /proc/sys/kernel/printk | $AWK '{print $4}')
|
|
||||||
if [ -f $VTOY_PATH/dm_patch_done ]; then
|
|
||||||
#suppress printk message
|
|
||||||
echo 0 $vtLevel2 0 $vtLevel4 > /proc/sys/kernel/printk
|
|
||||||
fi
|
|
||||||
|
|
||||||
$VT_DM_BIN create vtoy_persistent $VTOY_PATH/persistent_dm_table >>$VTLOG 2>&1
|
$VT_DM_BIN create vtoy_persistent $VTOY_PATH/persistent_dm_table >>$VTLOG 2>&1
|
||||||
|
|
||||||
if [ -f $VTOY_PATH/dm_patch_done ]; then
|
|
||||||
#recover printk level
|
|
||||||
echo $vtLevel1 $vtLevel2 $vtLevel3 $vtLevel4 > /proc/sys/kernel/printk
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -827,11 +581,6 @@ ventoy_udev_disk_common_hook() {
|
|||||||
create_persistent_device_mapper "/dev/$VTDISK"
|
create_persistent_device_mapper "/dev/$VTDISK"
|
||||||
ventoy_create_persistent_link
|
ventoy_create_persistent_link
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if $GREP -q 'dm_patch' /proc/modules; then
|
|
||||||
vtlog "remove dm_patch module."
|
|
||||||
$BUSYBOX_PATH/rmmod dm_patch
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ventoy_create_dev_ventoy_part() {
|
ventoy_create_dev_ventoy_part() {
|
||||||
@@ -840,16 +589,6 @@ ventoy_create_dev_ventoy_part() {
|
|||||||
|
|
||||||
if [ -e /vtoy_dm_table ]; then
|
if [ -e /vtoy_dm_table ]; then
|
||||||
vtPartid=1
|
vtPartid=1
|
||||||
|
|
||||||
vtLevel1=$($CAT /proc/sys/kernel/printk | $AWK '{print $1}')
|
|
||||||
vtLevel2=$($CAT /proc/sys/kernel/printk | $AWK '{print $2}')
|
|
||||||
vtLevel3=$($CAT /proc/sys/kernel/printk | $AWK '{print $3}')
|
|
||||||
vtLevel4=$($CAT /proc/sys/kernel/printk | $AWK '{print $4}')
|
|
||||||
if [ -f $VTOY_PATH/dm_patch_done ]; then
|
|
||||||
#suppress printk message
|
|
||||||
echo 0 $vtLevel2 0 $vtLevel4 > /proc/sys/kernel/printk
|
|
||||||
fi
|
|
||||||
|
|
||||||
$CAT /vtoy_dm_table | while read vtline; do
|
$CAT /vtoy_dm_table | while read vtline; do
|
||||||
echo $vtline > /ventoy/dm_table_part${vtPartid}
|
echo $vtline > /ventoy/dm_table_part${vtPartid}
|
||||||
$VTOY_PATH/tool/dmsetup create ventoy${vtPartid} /ventoy/dm_table_part${vtPartid}
|
$VTOY_PATH/tool/dmsetup create ventoy${vtPartid} /ventoy/dm_table_part${vtPartid}
|
||||||
@@ -859,11 +598,6 @@ ventoy_create_dev_ventoy_part() {
|
|||||||
|
|
||||||
vtPartid=$(expr $vtPartid + 1)
|
vtPartid=$(expr $vtPartid + 1)
|
||||||
done
|
done
|
||||||
|
|
||||||
if [ -f $VTOY_PATH/dm_patch_done ]; then
|
|
||||||
#recover printk level
|
|
||||||
echo $vtLevel1 $vtLevel2 $vtLevel3 $vtLevel4 > /proc/sys/kernel/printk
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -73,25 +73,27 @@ ventoy_unpack_initramfs() {
|
|||||||
for vtx in '1F8B zcat' '1F9E zcat' '425A bzcat' '5D00 lzcat' 'FD37 xzcat' '894C lzopcat' '0221 lz4cat' '28B5 zstdcat' '3037 cat' '4C5A lunzip -c'; do
|
for vtx in '1F8B zcat' '1F9E zcat' '425A bzcat' '5D00 lzcat' 'FD37 xzcat' '894C lzopcat' '0221 lz4cat' '28B5 zstdcat' '3037 cat' '4C5A lunzip -c'; do
|
||||||
if [ "${vtx:0:4}" = "${vtmagic:0:4}" ]; then
|
if [ "${vtx:0:4}" = "${vtmagic:0:4}" ]; then
|
||||||
echo "vtx=$vtx" >> $VTLOG
|
echo "vtx=$vtx" >> $VTLOG
|
||||||
if [ $vtskip -eq 0 ]; then
|
if [ $vtskip -ne 0 ]; then
|
||||||
if [ "${vtx:5}" = "xzcat" ]; then
|
dd if=$vtfile skip=$vtskip iflag=skip_bytes status=none > ${vtfile}.skip
|
||||||
rm -f $VTOY_PATH/xzlog
|
rm -f $vtfile
|
||||||
${vtx:5} $vtfile 2> $VTOY_PATH/xzlog | (cpio -idmu 2>>$VTLOG; cat > $vttmp)
|
mv ${vtfile}.skip $vtfile
|
||||||
if grep -q 'corrupted data' $VTOY_PATH/xzlog; then
|
fi
|
||||||
echo 'xzcat failed, now try xzminidec...' >> $VTLOG
|
|
||||||
rm -f $VTOY_PATH/xzlog
|
|
||||||
cat $vtfile | xzminidec 2> $VTOY_PATH/xzlog | (cpio -idmu 2>>$VTLOG; cat > $vttmp)
|
|
||||||
|
|
||||||
if grep -q 'limit' $VTOY_PATH/xzlog; then
|
if [ "${vtx:5}" = "xzcat" ]; then
|
||||||
echo 'xzminidec failed, now try xzcat_musl ...' >> $VTLOG
|
rm -f $VTOY_PATH/xzlog
|
||||||
xzcat_musl $vtfile | (cpio -idmu 2>>$VTLOG; cat > $vttmp)
|
${vtx:5} $vtfile 2> $VTOY_PATH/xzlog | (cpio -idmu 2>>$VTLOG; cat > $vttmp)
|
||||||
fi
|
if grep -q 'corrupted data' $VTOY_PATH/xzlog; then
|
||||||
|
echo 'xzcat failed, now try xzminidec...' >> $VTLOG
|
||||||
|
rm -f $VTOY_PATH/xzlog
|
||||||
|
cat $vtfile | xzminidec 2> $VTOY_PATH/xzlog | (cpio -idmu 2>>$VTLOG; cat > $vttmp)
|
||||||
|
|
||||||
|
if grep -q 'limit' $VTOY_PATH/xzlog; then
|
||||||
|
echo 'xzminidec failed, now try xzcat_musl ...' >> $VTLOG
|
||||||
|
xzcat_musl $vtfile | (cpio -idmu 2>>$VTLOG; cat > $vttmp)
|
||||||
fi
|
fi
|
||||||
else
|
|
||||||
${vtx:5} $vtfile | (cpio -idmu 2>>$VTLOG; cat > $vttmp)
|
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
dd if=$vtfile skip=$vtskip iflag=skip_bytes status=none | ${vtx:5} | (cpio -idmu 2>>$VTLOG; cat > $vttmp)
|
${vtx:5} $vtfile | (cpio -idmu 2>>$VTLOG; cat > $vttmp)
|
||||||
fi
|
fi
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
@@ -112,6 +114,28 @@ ventoy_unpack_initrd() {
|
|||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
vtfile_head_zero() {
|
||||||
|
local vsize
|
||||||
|
local voffset
|
||||||
|
local vfile
|
||||||
|
local vzero
|
||||||
|
local vdump
|
||||||
|
|
||||||
|
voffset=0
|
||||||
|
vfile=$1
|
||||||
|
vsize=$(stat -c '%s' ${vfile})
|
||||||
|
vzero=$(hexdump -n 512 -e '512/1 "%02X"' $vfile)
|
||||||
|
|
||||||
|
while [ $voffset -lt $vsize ]; do
|
||||||
|
vdump=$(hexdump -s $voffset -n 512 -e '512/1 "%02X"' $vfile)
|
||||||
|
if [ "$vdump" != "$vzero" ]; then
|
||||||
|
echo $voffset
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
voffset=$($BUSYBOX_PATH/expr $voffset + 512)
|
||||||
|
done
|
||||||
|
echo 0
|
||||||
|
}
|
||||||
|
|
||||||
# This export is for busybox cpio command
|
# This export is for busybox cpio command
|
||||||
export EXTRACT_UNSAFE_SYMLINKS=1
|
export EXTRACT_UNSAFE_SYMLINKS=1
|
||||||
@@ -131,13 +155,22 @@ for vtfile in $(ls /initrd*); do
|
|||||||
#only for cpio,cpio,...,initrd sequence, initrd,cpio or initrd,initrd sequence is not supported
|
#only for cpio,cpio,...,initrd sequence, initrd,cpio or initrd,initrd sequence is not supported
|
||||||
while [ -e ${vtfile}_tmp ] && [ $(stat -c '%s' ${vtfile}_tmp) -gt 512 ]; do
|
while [ -e ${vtfile}_tmp ] && [ $(stat -c '%s' ${vtfile}_tmp) -gt 512 ]; do
|
||||||
mv ${vtfile}_tmp $vtfile
|
mv ${vtfile}_tmp $vtfile
|
||||||
|
|
||||||
vtdump=$(hexdump -n 512 -e '512/1 "%02X"' $vtfile)
|
vtdump=$(hexdump -n 512 -e '512/1 "%02X"' $vtfile)
|
||||||
vtmagic=$(echo $vtdump | sed 's/^\(00\)*//')
|
vtmagic=$(echo $vtdump | sed 's/^\(00\)*//')
|
||||||
let vtoffset="(${#vtdump}-${#vtmagic})/2"
|
let vtoffset="(${#vtdump}-${#vtmagic})/2"
|
||||||
|
|
||||||
if [ -z "$vtmagic" ]; then
|
if [ -z "$vtmagic" ]; then
|
||||||
echo "terminate with all zero data file" >> $VTLOG
|
vtHeadZero=$(vtfile_head_zero $vtfile)
|
||||||
break
|
if [ $vtHeadZero -gt 0 ]; then
|
||||||
|
vtdump=$(hexdump -s $vtHeadZero -n 512 -e '512/1 "%02X"' $vtfile)
|
||||||
|
vtmagic=$(echo $vtdump | sed 's/^\(00\)*//')
|
||||||
|
let vtoffset="(${#vtdump}-${#vtmagic})/2+$vtHeadZero"
|
||||||
|
echo "skip head $vtHeadZero zeros with magic ${vtmagic:0:4}" >> $VTLOG
|
||||||
|
else
|
||||||
|
echo "terminate with all zero data file" >> $VTLOG
|
||||||
|
break
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
ventoy_unpack_initramfs $vtfile $vtoffset ${vtmagic:0:4} ${vtfile}_tmp
|
ventoy_unpack_initramfs $vtfile $vtoffset ${vtmagic:0:4} ${vtfile}_tmp
|
||||||
|
@@ -39,35 +39,6 @@ fi
|
|||||||
ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2" "noreplace"
|
ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2" "noreplace"
|
||||||
ventoy_create_dev_ventoy_part
|
ventoy_create_dev_ventoy_part
|
||||||
|
|
||||||
if ventoy_need_dm_patch; then
|
|
||||||
vtlog "extract a ko file"
|
|
||||||
|
|
||||||
mkdir -p /ventoy/tmpmnt1 /ventoy/tmpmnt2
|
|
||||||
mount /dev/ventoy1 /ventoy/tmpmnt1
|
|
||||||
mount /ventoy/tmpmnt1/boot/batocera /ventoy/tmpmnt2
|
|
||||||
vtKV=$(uname -r)
|
|
||||||
|
|
||||||
mkdir -p /lib/modules/$vtKV/kernel/
|
|
||||||
vtKO=$(find "/ventoy/tmpmnt2/lib/modules/$vtKV/kernel/fs/" -name "*.ko*" | head -n1)
|
|
||||||
cp -a $vtKO /lib/modules/$vtKV/kernel/
|
|
||||||
|
|
||||||
vtlog "vtKV=$vtKV vtKO=$vtKO"
|
|
||||||
|
|
||||||
umount /ventoy/tmpmnt2
|
|
||||||
umount /ventoy/tmpmnt1
|
|
||||||
|
|
||||||
vtPartid=1
|
|
||||||
cat /vtoy_dm_table | while read vtline; do
|
|
||||||
dmsetup remove ventoy$vtPartid
|
|
||||||
vtPartid=$(expr $vtPartid + 1)
|
|
||||||
done
|
|
||||||
dmsetup remove ventoy
|
|
||||||
|
|
||||||
vtlog "Recreate device-mapper"
|
|
||||||
ventoy_udev_disk_common_hook "${vtdiskname#/dev/}2" "noreplace"
|
|
||||||
ventoy_create_dev_ventoy_part
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
PATH=$VTPATH_OLD
|
PATH=$VTPATH_OLD
|
||||||
|
|
||||||
|
@@ -52,6 +52,11 @@ ventoy_get_os_type() {
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Parted Magic
|
||||||
|
if [ -d /pmagic ]; then
|
||||||
|
echo 'pmagic'; return
|
||||||
|
fi
|
||||||
|
|
||||||
# PrimeOS :
|
# PrimeOS :
|
||||||
if $GREP -q 'PrimeOS' /proc/version; then
|
if $GREP -q 'PrimeOS' /proc/version; then
|
||||||
echo 'primeos'; return
|
echo 'primeos'; return
|
||||||
@@ -237,10 +242,6 @@ ventoy_get_os_type() {
|
|||||||
echo 'adelie'; return
|
echo 'adelie'; return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if $GREP -q 'pmagic' /proc/version; then
|
|
||||||
echo 'pmagic'; return
|
|
||||||
fi
|
|
||||||
|
|
||||||
if $GREP -q 'CDlinux' /proc/cmdline; then
|
if $GREP -q 'CDlinux' /proc/cmdline; then
|
||||||
echo 'cdlinux'; return
|
echo 'cdlinux'; return
|
||||||
fi
|
fi
|
||||||
@@ -384,6 +385,12 @@ ventoy_get_os_type() {
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -f /etc/tinyramfs/config ]; then
|
||||||
|
if $GREP -q 'EWE_ISO' /etc/tinyramfs/config; then
|
||||||
|
echo "ewe"; return
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
echo "default"
|
echo "default"
|
||||||
}
|
}
|
||||||
|
@@ -101,6 +101,11 @@ ventoy_get_os_type() {
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Parted Magic
|
||||||
|
if [ -d /pmagic ]; then
|
||||||
|
echo 'pmagic'; return
|
||||||
|
fi
|
||||||
|
|
||||||
# rhel5/CentOS5 and all other distributions based on them
|
# rhel5/CentOS5 and all other distributions based on them
|
||||||
if $GREP -q 'el5' /proc/version; then
|
if $GREP -q 'el5' /proc/version; then
|
||||||
echo 'rhel5'; return
|
echo 'rhel5'; return
|
||||||
@@ -269,10 +274,6 @@ ventoy_get_os_type() {
|
|||||||
echo 'adelie'; return
|
echo 'adelie'; return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if $GREP -q 'pmagic' /proc/version; then
|
|
||||||
echo 'pmagic'; return
|
|
||||||
fi
|
|
||||||
|
|
||||||
if $GREP -q 'CDlinux' /proc/cmdline; then
|
if $GREP -q 'CDlinux' /proc/cmdline; then
|
||||||
echo 'cdlinux'; return
|
echo 'cdlinux'; return
|
||||||
fi
|
fi
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -4,8 +4,9 @@ print_usage() {
|
|||||||
echo 'Usage: ExtendPersistentImg.sh file size'
|
echo 'Usage: ExtendPersistentImg.sh file size'
|
||||||
echo ' file persistent dat file'
|
echo ' file persistent dat file'
|
||||||
echo ' size extend size in MB'
|
echo ' size extend size in MB'
|
||||||
echo 'Example:'
|
echo 'Examples:'
|
||||||
echo ' sh ExtendPersistentImg.sh ubuntu.dat 2048'
|
echo ' sh ExtendPersistentImg.sh ubuntu.dat 2048 - This command would extend ubuntu.dat by 2048MB (2GB)'
|
||||||
|
echo ' sh ExtendPersistentImg.sh ubuntu.dat -2048 - This command reduces ubuntu.dat by 2048MB (-2GB)'
|
||||||
echo ''
|
echo ''
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -19,6 +20,11 @@ if [ -z "$2" ]; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
uid=$(id -u)
|
||||||
|
if [ $uid -ne 0 ]; then
|
||||||
|
print_err "Please use sudo or run the script as root."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
if [ "$1" = "__vbash__" ]; then
|
if [ "$1" = "__vbash__" ]; then
|
||||||
shift
|
shift
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -21,15 +21,6 @@ submenu "$VTLANG_CTRL_TEMP_SET" --class=debug_temp_set --class=F5tool {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
menuentry "[ $VTOY_LINUX_REMOUNT ] $VTLANG_LINUX_REMOUNT" --class=debug_temp_linux_remount --class=debug_temp_set --class=F5tool \
|
|
||||||
VTOY_RUN_SET2 {
|
|
||||||
if [ "$VTOY_LINUX_REMOUNT" = "0" ]; then
|
|
||||||
set VTOY_LINUX_REMOUNT=1
|
|
||||||
else
|
|
||||||
set VTOY_LINUX_REMOUNT=0
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
menuentry "[ $VTOY_SECONDARY_BOOT_MENU ] $VTLANG_SECONDARY_BOOT_MENU" --class=debug_temp_second_menu --class=debug_temp_set --class=F5tool \
|
menuentry "[ $VTOY_SECONDARY_BOOT_MENU ] $VTLANG_SECONDARY_BOOT_MENU" --class=debug_temp_second_menu --class=debug_temp_set --class=F5tool \
|
||||||
VTOY_RUN_SET3 {
|
VTOY_RUN_SET3 {
|
||||||
if [ "$VTOY_SECONDARY_BOOT_MENU" = "0" ]; then
|
if [ "$VTOY_SECONDARY_BOOT_MENU" = "0" ]; then
|
||||||
|
@@ -33,6 +33,21 @@ function ventoy_debug_pause {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function ventoy_max_resolution {
|
||||||
|
#Skip this for VirtualBox
|
||||||
|
smbios -t 1 -s 0x05 --set=system_product;
|
||||||
|
if vt_str_casebegin "$system_product" "VirtualBox"; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
vt_enum_video_mode
|
||||||
|
vt_get_video_mode 0 vtCurMode
|
||||||
|
terminal_output console
|
||||||
|
set gfxmode=$vtCurMode
|
||||||
|
terminal_output gfxterm
|
||||||
|
}
|
||||||
|
|
||||||
function ventoy_cli_console {
|
function ventoy_cli_console {
|
||||||
if [ -z "$vtoy_display_mode" ]; then
|
if [ -z "$vtoy_display_mode" ]; then
|
||||||
terminal_output console
|
terminal_output console
|
||||||
@@ -403,10 +418,14 @@ function distro_specify_initrd_file_phase2 {
|
|||||||
vt_linux_specify_initrd_file /images/pxeboot/initrd.img
|
vt_linux_specify_initrd_file /images/pxeboot/initrd.img
|
||||||
elif [ -f (loop)/live/initrd ]; then
|
elif [ -f (loop)/live/initrd ]; then
|
||||||
vt_linux_specify_initrd_file /live/initrd
|
vt_linux_specify_initrd_file /live/initrd
|
||||||
|
elif [ -f (loop)/initramfs-linux.img ]; then
|
||||||
|
vt_linux_specify_initrd_file /initramfs-linux.img
|
||||||
|
elif [ -f (loop)/boot/isolinux/initrd.gz ]; then
|
||||||
|
vt_linux_specify_initrd_file /boot/isolinux/initrd.gz
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function ventoy_get_ghostbsd_ver {
|
function ventoy_get_ghostbsd_ver {
|
||||||
# fallback to parse version from elf /boot/kernel/kernel
|
# fallback to parse version from elf /boot/kernel/kernel
|
||||||
set vt_freebsd_ver=xx
|
set vt_freebsd_ver=xx
|
||||||
@@ -514,6 +533,13 @@ function ventoy_freebsd_proc {
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ "$vt_freebsd_ver" = "14.x" ]; then
|
||||||
|
if [ -e (loop)/boot/lua/brand-pfSense.lua ]; then
|
||||||
|
set vtFreeBsdDistro=pfSense
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
if [ -n "${vtdebug_flag}" ]; then
|
if [ -n "${vtdebug_flag}" ]; then
|
||||||
echo "This is $vtFreeBsdDistro $vt_freebsd_ver ${vt_freebsd_bit}bit"
|
echo "This is $vtFreeBsdDistro $vt_freebsd_ver ${vt_freebsd_bit}bit"
|
||||||
fi
|
fi
|
||||||
@@ -620,7 +646,7 @@ function uefi_windows_menu_func {
|
|||||||
|
|
||||||
if [ -n "$vtoy_chain_mem_addr" ]; then
|
if [ -n "$vtoy_chain_mem_addr" ]; then
|
||||||
ventoy_acpi_param ${vtoy_chain_mem_addr} 2048
|
ventoy_acpi_param ${vtoy_chain_mem_addr} 2048
|
||||||
ventoy_cli_console
|
ventoy_max_resolution
|
||||||
chainloader ${vtoy_path}/ventoy_${VTOY_EFI_ARCH}.efi env_param=${env_param} isoefi=${LoadIsoEfiDriver} iso_${ventoy_fs_probe} ${vtdebug_flag} mem:${vtoy_chain_mem_addr}:size:${vtoy_chain_mem_size}
|
chainloader ${vtoy_path}/ventoy_${VTOY_EFI_ARCH}.efi env_param=${env_param} isoefi=${LoadIsoEfiDriver} iso_${ventoy_fs_probe} ${vtdebug_flag} mem:${vtoy_chain_mem_addr}:size:${vtoy_chain_mem_size}
|
||||||
boot
|
boot
|
||||||
else
|
else
|
||||||
@@ -662,7 +688,7 @@ function uefi_linux_menu_func {
|
|||||||
if [ -d (loop)/pmagic ]; then
|
if [ -d (loop)/pmagic ]; then
|
||||||
vt_linux_specify_initrd_file /pmagic/initrd.img
|
vt_linux_specify_initrd_file /pmagic/initrd.img
|
||||||
else
|
else
|
||||||
for file in "boot/grub/grub.cfg" "EFI/BOOT/grub.cfg" "EFI/boot/grub.cfg" "efi/boot/grub.cfg" "EFI/BOOT/BOOTX64.conf" "/grub/grub.cfg"; do
|
for file in "boot/grub/grub.cfg" "EFI/BOOT/grub.cfg" "EFI/boot/grub.cfg" "efi/boot/grub.cfg" "EFI/BOOT/BOOTX64.conf" "/grub/grub.cfg" "EFI/BOOT/grub/grub.cfg"; do
|
||||||
if [ -e (loop)/$file ]; then
|
if [ -e (loop)/$file ]; then
|
||||||
vt_linux_parse_initrd_grub file (loop)/$file
|
vt_linux_parse_initrd_grub file (loop)/$file
|
||||||
fi
|
fi
|
||||||
@@ -1411,6 +1437,8 @@ function ventoy_iso_busybox_ver {
|
|||||||
set ventoy_busybox_ver=64
|
set ventoy_busybox_ver=64
|
||||||
elif vt_str_begin "$vt_volume_id" "LDiagBootable"; then
|
elif vt_str_begin "$vt_volume_id" "LDiagBootable"; then
|
||||||
set ventoy_busybox_ver=64
|
set ventoy_busybox_ver=64
|
||||||
|
elif vt_str_begin "$vt_volume_id" "KAOS_"; then
|
||||||
|
set ventoy_busybox_ver=64
|
||||||
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
@@ -1889,6 +1917,12 @@ function ventoy_img_volumio {
|
|||||||
function ventoy_img_openelec {
|
function ventoy_img_openelec {
|
||||||
elec_ver=$1
|
elec_ver=$1
|
||||||
|
|
||||||
|
if [ "$elec_ver" = "LibreELEC" ]; then
|
||||||
|
if vt_strstr "$vt_chosen_name" "x86_64"; then
|
||||||
|
set ventoy_busybox_ver=64
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
vt_load_cpio $vtoy_path "${vt_chosen_path}" ${vtoy_iso_part} "busybox=$ventoy_busybox_ver"
|
vt_load_cpio $vtoy_path "${vt_chosen_path}" ${vtoy_iso_part} "busybox=$ventoy_busybox_ver"
|
||||||
vt_trailer_cpio ${vtoy_iso_part} "${vt_chosen_path}" noinit
|
vt_trailer_cpio ${vtoy_iso_part} "${vt_chosen_path}" noinit
|
||||||
|
|
||||||
@@ -2397,7 +2431,7 @@ function mimg_common_menuentry {
|
|||||||
#############################################################
|
#############################################################
|
||||||
#############################################################
|
#############################################################
|
||||||
|
|
||||||
set VENTOY_VERSION="1.0.96"
|
set VENTOY_VERSION="1.1.06"
|
||||||
|
|
||||||
#ACPI not compatible with Window7/8, so disable by default
|
#ACPI not compatible with Window7/8, so disable by default
|
||||||
set VTOY_PARAM_NO_ACPI=1
|
set VTOY_PARAM_NO_ACPI=1
|
||||||
|
@@ -1,19 +1,19 @@
|
|||||||
L - Nyelv kiválasztása
|
L - Nyelv kiválasztása
|
||||||
F1 - Jelenítse meg ezt a súgóinformációt
|
F1 - Súgóinformációk megjelenítése
|
||||||
F2 - A helyi lemezen lévő fájlok böngészése és indítása
|
F2 - Helyi lemezen lévő fájlok tallózása és indítása
|
||||||
F3 - Menü mód váltása Fanézet <-> Listanézet között
|
F3 - Menü mód váltása fanézet <-> listanézet között
|
||||||
F4 - Windows/Linux indítása helyi lemezről
|
F4 - Windows/Linux indítása a helyi lemezről
|
||||||
F5 - Segédprogramok
|
F5 - Segédprogramok
|
||||||
F6 - Egyéni Grub2 menü betöltése
|
F6 - Egyéni Grub2 menü betöltése
|
||||||
F7 - Váltás Grafikus mód <-> Szövege mód között
|
F7 - Váltás grafikus mód <-> szöveges mód között
|
||||||
|
|
||||||
m/Ctrl+m - Image fájlok ell.összege (md5/sha1/sha256/sha512)
|
m/Ctrl+m - Lemezképfájlok ellenőrzőösszege (md5/sha1/sha256/sha512)
|
||||||
d/Ctrl+d - Memdisk mód (Csak kis WinPE/LiveCD ISO/IMG esetén)
|
d/Ctrl+d - Memórialemez mód (csak kis WinPE/LiveCD ISO/IMG esetén)
|
||||||
w/Ctrl+w - WIMBOOT mód (Csak Windows/WinPE ISO esetében)
|
w/Ctrl+w - WIMBOOT mód (csak Windows/WinPE ISO esetén)
|
||||||
r/Ctrl+r - Grub2 mód (Csak néhány Linux disztró esetében)
|
r/Ctrl+r - Grub2 mód (csak néhány Linux disztribúció esetén)
|
||||||
i/Ctrl+i - Kompatibilis mód (Csak hibakeresésre)
|
i/Ctrl+i - Kompatibilis mód (csak hibakereséshez)
|
||||||
u/Ctrl+u - ISO efi driver betöltés (Csak hibakeresésre, hivatalosan nem használható.)
|
u/Ctrl+u - ISO EFI illesztőprogram betöltés (csak hibakereséshez, hivatalosan nem használható)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Nyomjon ESC-et a visszatéréshez ......
|
Nyomja meg az ESC billentyűt a visszalépéshez ......
|
@@ -1,19 +1,19 @@
|
|||||||
L - Selezione lingua
|
L - Selezione lingua interfaccia
|
||||||
F1 - Mostra informazioni di aiuto
|
F1 - Visualizza informazioni Aiuto (questa guida)
|
||||||
F2 - Sfoglia e avvia file sul disco locale
|
F2 - Sfoglia e avvia file nel disco locale
|
||||||
F3 - Cambia la modalità del menu tra VistaAlbero <-> VistaLista
|
F3 - Cambia modalità menu tra VistaStruttura <-> VistaElenco
|
||||||
F4 - Avvia Windows/Linux sul disco locale
|
F4 - Avvia Windows/Linux dal disco locale
|
||||||
F5 - Utilità
|
F5 - Utilità
|
||||||
F6 - Carica il menu Grub2 personalizzato
|
F6 - Carica il menu Grub2 personalizzato
|
||||||
F7 - Passa tra Modalità GUI <-> Modalità TESTO
|
F7 - Cambia modalità GUI <-> modalità TESTO
|
||||||
|
|
||||||
m/Ctrl+m - Checksum dei file immagine (md5/sha1/sha256/sha512)
|
m/Ctrl+m - Checksum file immagine (md5/sha1/sha256/sha512)
|
||||||
d/Ctrl+d - Modalità Memdisk (Solo per i file ISO/IMG di WinPE/LiveCD piccoli)
|
d/Ctrl+d - Modalità Memdisk (solo per i file ISO/IMG WinPE/LiveCD piccoli)
|
||||||
w/Ctrl+w - Modalità WIMBOOT (SOlo per i file ISO di Windows/WinPE)
|
w/Ctrl+w - Modalità WIMBOOT (solo per i file ISO Windows/WinPE)
|
||||||
r/Ctrl+r - Modalità Grub2 (Solo per alcune distro Linux)
|
r/Ctrl+r - Modalità Grub2 (solo per alcune distro Linux)
|
||||||
i/Ctrl+i - Modalità Compatibile (Solo per debugging)
|
i/Ctrl+i - Modalità Compatibile (solo per debugging)
|
||||||
u/Ctrl+u - Carica driver EFI ISO (Solo per debugging, non può essere usato ufficialmente)
|
u/Ctrl+u - Carica driver EFI ISO (solo per debugging, non usato ufficialmente)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Premi ESC per ritornare ......
|
Premi 'ESC' per continuare...
|
||||||
|
@@ -1,19 +1,19 @@
|
|||||||
L - Dil Seçimi
|
L - Dil Seçimi
|
||||||
F1 - Yardım bilgilerini göster
|
F1 - Yardım bilgilerini göster
|
||||||
F2 - Yerel diskteki önyükleme dosyalarına GÖZAT ve Önyükleme yap
|
F2 - Yerel diskteki önyükleme dosyalarına göz at ve önyükleme yap
|
||||||
F3 - Menü modunu Ağaç Görünümü <-> Liste Görünümü arasında değiştir
|
F3 - Menü modunu Ağaç Görünümü <-> Liste Görünümü arasında değiştir
|
||||||
F4 - Windows & Linux'u yerel diskten önyükle
|
F4 - Windows & Linux'u yerel diskten önyükle
|
||||||
F5 - Ventoy Araçlar menüsü
|
F5 - Ventoy araçlar menüsü
|
||||||
F6 - Özelleştirilmiş Grub2 menüsünü yükle
|
F6 - Özelleştirilmiş Grub2 menüsünü yükle
|
||||||
F7 - Grafik(GUI) <--> Metin(Text) modları arasında geçiş yap
|
F7 - Grafik(GUI) <--> Metin(Text) modları arasında geçiş yap
|
||||||
|
|
||||||
m/Ctrl+m - Görüntü dosyalarını sağlama toplamı (md5/sha1/sha256/sha512)
|
m/Ctrl+m - Görüntü dosyalarının sağlama toplamını al (md5/sha1/sha256/sha512)
|
||||||
d/Ctrl+d - Memdisk Modu başlat(Yalnızca küçük WinPE/LiveCD ISO/IMG ler için)
|
d/Ctrl+d - Memdisk Modunu başlat(Yalnızca küçük WinPE/LiveCD ISO/IMG'ler için)
|
||||||
w/Ctrl+w - WIMBOOT Modu başlat(Yalnızca normal Windows/WinPE ISO ları için)
|
w/Ctrl+w - WIMBOOT Modunu başlat(Yalnızca normal Windows/WinPE ISO'ları için)
|
||||||
r/Ctrl+r - Grub2 Modu başlat (Yalnızca bazı Linux dağıtımları için)
|
r/Ctrl+r - Grub2 Modunu başlat (Yalnızca bazı Linux dağıtımları için)
|
||||||
i/Ctrl+i - Uyumluluk Modu (Yalnızca hata ayıklama için )
|
i/Ctrl+i - Uyumluluk Modu (Yalnızca hata ayıklama için)
|
||||||
u/Ctrl+u - ISO efi sürücüsünü yükle (Saedece hata ayıklama için, resmi olarak kullanılamaz)
|
u/Ctrl+u - ISO EFI sürücüsünü yükle (Sadece hata ayıklama için, resmi olarak kullanılamaz)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Geriye dönmek için ESC tuşuna basınız......
|
Geri dönmek için ESC tuşuna basınız ......
|
||||||
|
19
INSTALL/grub/help/vi_VN.txt
Normal file
19
INSTALL/grub/help/vi_VN.txt
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
L - Lựa chọn ngôn ngữ
|
||||||
|
F1 - Hiển thị thông tin trợ giúp
|
||||||
|
F2 - Duyệt tìm và khởi động tệp từ ổ đĩa trên máy
|
||||||
|
F3 - Chuyển đổi chế độ bảng chọn giữa dạng cây <-> dạng danh sách.
|
||||||
|
F4 - Khởi động Windows hoặc GNU/Linux trên đĩa cục bộ
|
||||||
|
F5 - Các tiện ích
|
||||||
|
F6 - Tải menu GRUB2 tuỳ chọn
|
||||||
|
F7 - Chuyển giữa giao diện đồ hoạ <-> giao diện văn bản
|
||||||
|
|
||||||
|
m/Ctrl+m - Checksum các tệp ảnh đĩa (md5/sha1/sha256/sha512)
|
||||||
|
d/Ctrl+d - Chế độ Memdisk (Chỉ dùng cho các tệp ISO/IMG WinPE/LiveCD có kích thước nhỏ)
|
||||||
|
w/Ctrl+w - Chế độ WIMBOOT (Chỉ dùng cho các tệp ISO Windows/WinPE)
|
||||||
|
r/Ctrl+r - Chế độ Grub2 (Chỉ dùng cho một vài bản phân phối của GNU/Linux)
|
||||||
|
i/Ctrl+i - Chế độ tương thích (Chỉ dùng cho việc sửa lỗi)
|
||||||
|
u/Ctrl+u - Tải ISO của một driver EFI (Chỉ dùng cho việc sửa lỗi, không thể dùng chính thức)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Nhấn ESC để quay lại ......
|
@@ -1,12 +1,14 @@
|
|||||||
{
|
{
|
||||||
"VTLANG_LANGUAGE_NAME": "Arabic (العربية)",
|
"VTLANG_LANGUAGE_NAME": "Arabic (العربية)",
|
||||||
|
|
||||||
"VTLANG_STR_HOTKEY_LIST": "L: لغه F1: مساعدة F2: تصفح F3: عرض قائمه F4: اقلا محلي F5: أدوات F6: عوده",
|
"VTLANG_STR_HOTKEY_LIST": "L: لغة F1: مساعدة F2: تصفح F3: عرض لائحي F4: إقلاع محلي F5: أدوات F6: عوده",
|
||||||
"VTLANG_STR_HOTKEY_TREE": "L: لغه F1: مساعدة F2: تصفح F3: عرض تصنيف F4: اقلاع محلي F5: أدوات F6: عوده",
|
"VTLANG_STR_HOTKEY_TREE": "L: لغة F1: مساعدة F2: تصفح F3: عرض شجري F4: إقلاع محلي F5: أدوات F6: عوده",
|
||||||
"VTLANG_RETURN_PREVIOUS": "عودة إلى القائمة السابقة [Esc]",
|
"VTLANG_RETURN_PREVIOUS": "عودة إلى القائمة السابقة [Esc]",
|
||||||
"VTLANG_RETURN_PRV_NOESC": "عودة إلى القائمة السابقة",
|
"VTLANG_RETURN_PRV_NOESC": "عودة إلى القائمة السابقة",
|
||||||
|
|
||||||
"VTLANG_MENU_LANG": "اختيار اللغة في القائمة",
|
"VTLANG_MENU_LANG": "اختيار اللغة في القائمة",
|
||||||
"VTLANG_LB_SBOOT_WINDOWS": "البحث والإقلاع على ويندوز",
|
|
||||||
|
"VTLANG_LB_SBOOT_WINDOWS": "البحث والإقلاع على Windows",
|
||||||
"VTLANG_LB_SBOOT_G4D": "البحث والإقلاع على Grub4dos",
|
"VTLANG_LB_SBOOT_G4D": "البحث والإقلاع على Grub4dos",
|
||||||
"VTLANG_LB_SBOOT_HDD1": "الإقلاع على القرص المحلي الأول",
|
"VTLANG_LB_SBOOT_HDD1": "الإقلاع على القرص المحلي الأول",
|
||||||
"VTLANG_LB_SBOOT_HDD2": "الإقلاع على القرص المحلي الثاني",
|
"VTLANG_LB_SBOOT_HDD2": "الإقلاع على القرص المحلي الثاني",
|
||||||
@@ -15,32 +17,39 @@
|
|||||||
"VTLANG_LB_SBOOT_IA32EFI": "البحث والإقلاع على BOOTIA32.EFI",
|
"VTLANG_LB_SBOOT_IA32EFI": "البحث والإقلاع على BOOTIA32.EFI",
|
||||||
"VTLANG_LB_SBOOT_AA64EFI": "البحث والإقلاع على BOOTAA64.EFI",
|
"VTLANG_LB_SBOOT_AA64EFI": "البحث والإقلاع على BOOTAA64.EFI",
|
||||||
"VTLANG_LB_SBOOT_XORBOOT": "البحث والإقلاع على xorboot",
|
"VTLANG_LB_SBOOT_XORBOOT": "البحث والإقلاع على xorboot",
|
||||||
"VTLANG_FILE_CHKSUM": "مجموعة التحقق من الملفات",
|
|
||||||
"VTLANG_CHKSUM_MD5_CALC": "حساب md5sum",
|
"VTLANG_FILE_CHKSUM": "تدقيق المجموع للملف",
|
||||||
"VTLANG_CHKSUM_SHA1_CALC": "حساب sha1sum",
|
"VTLANG_CHKSUM_MD5_CALC": "احسب md5sum",
|
||||||
"VTLANG_CHKSUM_SHA256_CALC": "حساب sha256sum",
|
"VTLANG_CHKSUM_SHA1_CALC": "احسب sha1sum",
|
||||||
"VTLANG_CHKSUM_SHA512_CALC": "حساب sha512sum",
|
"VTLANG_CHKSUM_SHA256_CALC": "احسب sha256sum",
|
||||||
"VTLANG_CHKSUM_MD5_CALC_CHK": "حساب وتحقق md5sum",
|
"VTLANG_CHKSUM_SHA512_CALC": "احسب sha512sum",
|
||||||
"VTLANG_CHKSUM_SHA1_CALC_CHK": "حساب وتحقق sha1sum",
|
"VTLANG_CHKSUM_MD5_CALC_CHK": "احسب وتحقق md5sum",
|
||||||
"VTLANG_CHKSUM_SHA256_CALC_CHK": "حساب وتحقق sha256sum",
|
"VTLANG_CHKSUM_SHA1_CALC_CHK": "احسب وتحقق sha1sum",
|
||||||
"VTLANG_CHKSUM_SHA512_CALC_CHK": "حساب وتحقق sha512sum",
|
"VTLANG_CHKSUM_SHA256_CALC_CHK": "احسب وتحقق sha256sum",
|
||||||
|
"VTLANG_CHKSUM_SHA512_CALC_CHK": "احسب وتحقق sha512sum",
|
||||||
|
|
||||||
"VTLANG_POWER": "الطاقة",
|
"VTLANG_POWER": "الطاقة",
|
||||||
"VTLANG_POWER_REBOOT": "إعادة التشغيل",
|
"VTLANG_POWER_REBOOT": "إعادة التشغيل",
|
||||||
"VTLANG_POWER_HALT": "إيقاف",
|
"VTLANG_POWER_HALT": "إيقاف",
|
||||||
"VTLANG_POWER_BOOT_EFIFW": "إعادة التشغيل إلى إعداد EFI",
|
"VTLANG_POWER_BOOT_EFIFW": "إعادة التشغيل إلى إعداد EFI",
|
||||||
|
|
||||||
"VTLANG_KEYBRD_LAYOUT": "تخطيطات لوحة المفاتيح",
|
"VTLANG_KEYBRD_LAYOUT": "تخطيطات لوحة المفاتيح",
|
||||||
"VTLANG_HWINFO": "معلومات الأجهزة الأساسية",
|
"VTLANG_HWINFO": "معلومات حول العتاد",
|
||||||
|
|
||||||
"VTLANG_RESOLUTION_CFG": "تكوين الدقة",
|
"VTLANG_RESOLUTION_CFG": "تكوين الدقة",
|
||||||
"VTLANG_SCREEN_MODE": "وضع عرض الشاشة",
|
"VTLANG_SCREEN_MODE": "وضع عرض الشاشة",
|
||||||
"VTLANG_SCREEN_TEXT_MODE": "القيام بتحديد وضع النص",
|
"VTLANG_SCREEN_TEXT_MODE": "فرض تحديد وضع النص",
|
||||||
"VTLANG_SCREEN_GUI_MODE": "القيام بتحديد وضع الرسومات",
|
"VTLANG_SCREEN_GUI_MODE": "فرض تحديد وضع الرسومات",
|
||||||
"VTLANG_THEME_SELECT": "اختيار الموضوع",
|
|
||||||
"VTLANG_UEFI_UTIL": "Ventoy UEFI Utilities",
|
"VTLANG_THEME_SELECT": "اختر السمة",
|
||||||
|
|
||||||
|
"VTLANG_UEFI_UTIL": "أدوات Ventoy UEFI المساعدة",
|
||||||
"VTLANG_UTIL_SHOW_EFI_DRV": "عرض برامج تشغيل EFI",
|
"VTLANG_UTIL_SHOW_EFI_DRV": "عرض برامج تشغيل EFI",
|
||||||
"VTLANG_UTIL_FIX_BLINIT_FAIL": "إصلاح فشل تهيئة Windows BlinitializeLibrary",
|
"VTLANG_UTIL_FIX_BLINIT_FAIL": "إصلاح فشل تهيئة Windows BlinitializeLibrary",
|
||||||
|
|
||||||
"VTLANG_JSON_CHK_JSON": "التحقق من تكوين json للبرنامج الإضافي (ventoy.json)",
|
"VTLANG_JSON_CHK_JSON": "التحقق من تكوين json للبرنامج الإضافي (ventoy.json)",
|
||||||
"VTLANG_JSON_CHK_CONTROL": "التحقق من تكوين برنامج الإضافي العام للتحكم",
|
"VTLANG_JSON_CHK_CONTROL": "التحقق من تكوين برنامج الإضافي العام للتحكم",
|
||||||
"VTLANG_JSON_CHK_THEME": "التحقق من تكوين برنامج الإضافي الخاص بالموضوع",
|
"VTLANG_JSON_CHK_THEME": "التحقق من تكوين برنامج الإضافي الخاص بالسمة",
|
||||||
"VTLANG_JSON_CHK_AUTOINS": "التحقق من تكوين برنامج الإضافي للتثبيت التلقائي",
|
"VTLANG_JSON_CHK_AUTOINS": "التحقق من تكوين برنامج الإضافي للتثبيت التلقائي",
|
||||||
"VTLANG_JSON_CHK_PERSIST": "التحقق من تكوين برنامج الإضافي المستمر",
|
"VTLANG_JSON_CHK_PERSIST": "التحقق من تكوين برنامج الإضافي المستمر",
|
||||||
"VTLANG_JSON_CHK_MENU_ALIAS": "التحقق من تكوين برنامج الإضافي الخاص بالقائمة المستعارة",
|
"VTLANG_JSON_CHK_MENU_ALIAS": "التحقق من تكوين برنامج الإضافي الخاص بالقائمة المستعارة",
|
||||||
@@ -53,27 +62,32 @@
|
|||||||
"VTLANG_JSON_CHK_CONF_REPLACE": "التحقق من تكوين برنامج الإضافي الخاص باستبدال ملف التكوين للإقلاع",
|
"VTLANG_JSON_CHK_CONF_REPLACE": "التحقق من تكوين برنامج الإضافي الخاص باستبدال ملف التكوين للإقلاع",
|
||||||
"VTLANG_JSON_CHK_DUD": "التحقق من تكوين برنامج الإضافي الخاص بـ dud",
|
"VTLANG_JSON_CHK_DUD": "التحقق من تكوين برنامج الإضافي الخاص بـ dud",
|
||||||
"VTLANG_JSON_CHK_PASSWORD": "التحقق من تكوين برنامج الإضافي الخاص بكلمة المرور",
|
"VTLANG_JSON_CHK_PASSWORD": "التحقق من تكوين برنامج الإضافي الخاص بكلمة المرور",
|
||||||
|
|
||||||
"VTLANG_NORMAL_MODE": "الإقلاع في الوضع العادي",
|
"VTLANG_NORMAL_MODE": "الإقلاع في الوضع العادي",
|
||||||
"VTLANG_WIMBOOT_MODE": "الإقلاع في وضع wimboot",
|
"VTLANG_WIMBOOT_MODE": "الإقلاع في وضع wimboot",
|
||||||
"VTLANG_GRUB2_MODE": "الإقلاع في وضع grub2",
|
"VTLANG_GRUB2_MODE": "الإقلاع في وضع grub2",
|
||||||
"VTLANG_MEMDISK_MODE": "الإقلاع في وضع memdisk",
|
"VTLANG_MEMDISK_MODE": "الإقلاع في وضع memdisk",
|
||||||
|
|
||||||
"VTLANG_RET_TO_LISTVIEW": "العودة إلى ListView",
|
"VTLANG_RET_TO_LISTVIEW": "العودة إلى ListView",
|
||||||
"VTLANG_RET_TO_TREEVIEW": "العودة إلى TreeView",
|
"VTLANG_RET_TO_TREEVIEW": "العودة إلى TreeView",
|
||||||
|
|
||||||
"VTLANG_NO_AUTOINS_SCRIPT": "الإقلاع بدون قالب التثبيت التلقائي",
|
"VTLANG_NO_AUTOINS_SCRIPT": "الإقلاع بدون قالب التثبيت التلقائي",
|
||||||
"VTLANG_AUTOINS_USE": "الإقلاع مع",
|
"VTLANG_AUTOINS_USE": "الإقلاع مع",
|
||||||
|
|
||||||
"VTLANG_NO_PERSIST": "الإقلاع بدون الاستمرارية",
|
"VTLANG_NO_PERSIST": "الإقلاع بدون الاستمرارية",
|
||||||
"VTLANG_PERSIST_USE": "الإقلاع مع",
|
"VTLANG_PERSIST_USE": "الإقلاع مع",
|
||||||
|
|
||||||
"VTLANG_BROWER_RETURN": "العودة",
|
"VTLANG_BROWER_RETURN": "العودة",
|
||||||
|
|
||||||
"VTLANG_ENTER_EXIT": "اضغط على مفتاح Enter للخروج",
|
"VTLANG_ENTER_EXIT": "اضغط على مفتاح Enter للخروج",
|
||||||
"VTLANG_ENTER_REBOOT": "اضغط على مفتاح Enter لإعادة التشغيل",
|
"VTLANG_ENTER_REBOOT": "اضغط على مفتاح Enter لإعادة التشغيل",
|
||||||
"VTLANG_ENTER_CONTINUE": "اضغط على مفتاح Enter للمتابعة",
|
"VTLANG_ENTER_CONTINUE": "اضغط على مفتاح Enter للمتابعة",
|
||||||
|
|
||||||
"VTLANG_CTRL_TEMP_SET": "Temporary Control Settings",
|
"VTLANG_CTRL_TEMP_SET": "إعدادات التحكم المؤقتة",
|
||||||
"VTLANG_WIN11_BYPASS_CHECK": "Bypass CPU/TPM/SecureBoot check when install Windows 11",
|
"VTLANG_WIN11_BYPASS_CHECK": "تجاوز فحص CPU/TPM/SecureBoot عند تثبيت Windows 11",
|
||||||
"VTLANG_WIN11_BYPASS_NRO": "Bypass online account requirement when install Windows 11",
|
"VTLANG_WIN11_BYPASS_NRO": "تجاوز متطلبات الحساب عبر الإنترنت عند تثبيت Windows 11",
|
||||||
"VTLANG_LINUX_REMOUNT": "Mount Ventoy partition after boot Linux",
|
"VTLANG_LINUX_REMOUNT": "ضم قسم Ventoy بعد إقلاع Linux",
|
||||||
"VTLANG_SECONDARY_BOOT_MENU": "Show secondary boot menu",
|
"VTLANG_SECONDARY_BOOT_MENU": "اظهر قائمة الإقلاع الثانوية",
|
||||||
|
|
||||||
"MENU_STR_XXX": ""
|
"MENU_STR_XXX": ""
|
||||||
}
|
}
|
||||||
|
@@ -47,7 +47,7 @@
|
|||||||
"VTLANG_UTIL_SHOW_EFI_DRV": "Afficher les pilotes EFI",
|
"VTLANG_UTIL_SHOW_EFI_DRV": "Afficher les pilotes EFI",
|
||||||
"VTLANG_UTIL_FIX_BLINIT_FAIL": "Contourner l’échec de Windows BlinitializeLibrary",
|
"VTLANG_UTIL_FIX_BLINIT_FAIL": "Contourner l’échec de Windows BlinitializeLibrary",
|
||||||
|
|
||||||
"VTLANG_JSON_CHK_JSON": "Afficher le fichiers de configuration (ventoy.json)",
|
"VTLANG_JSON_CHK_JSON": "Afficher le fichier de configuration (ventoy.json)",
|
||||||
"VTLANG_JSON_CHK_CONTROL": "Afficher la configuration du plugin de contrôle global",
|
"VTLANG_JSON_CHK_CONTROL": "Afficher la configuration du plugin de contrôle global",
|
||||||
"VTLANG_JSON_CHK_THEME": "Afficher la configuration du plugin de thème",
|
"VTLANG_JSON_CHK_THEME": "Afficher la configuration du plugin de thème",
|
||||||
"VTLANG_JSON_CHK_AUTOINS": "Afficher la configuration du plugin d’installation automatique",
|
"VTLANG_JSON_CHK_AUTOINS": "Afficher la configuration du plugin d’installation automatique",
|
||||||
|
@@ -1,93 +1,93 @@
|
|||||||
{
|
{
|
||||||
"VTLANG_LANGUAGE_NAME": "Hungarian (Magyar)",
|
"VTLANG_LANGUAGE_NAME": "Magyar (Hungarian)",
|
||||||
|
|
||||||
"VTLANG_STR_HOTKEY_LIST": "L:Nyelv F1:Súgó F2:Tallóz F3:Listanézet F4:Helyi indítás F5:Eszközök F6:Bővített menü",
|
"VTLANG_STR_HOTKEY_LIST": "L:Nyelv F1:Súgó F2:Tallózás F3:Listanézet F4:Helyi indítás F5:Eszközök F6:Bővített menü",
|
||||||
"VTLANG_STR_HOTKEY_TREE": "L:Nyelv F1:Súgó F2:Tallóz F3:Fanézet F4:Helyi indítás F5:Eszközök F6:Bővített menü",
|
"VTLANG_STR_HOTKEY_TREE": "L:Nyelv F1:Súgó F2:Tallózás F3:Fanézet F4:Helyi indítás F5:Eszközök F6:Bővített menü",
|
||||||
"VTLANG_RETURN_PREVIOUS": "Vissza az előző menübe [Esc]",
|
"VTLANG_RETURN_PREVIOUS": "Vissza az előző menübe [Esc]",
|
||||||
"VTLANG_RETURN_PRV_NOESC": "Vissza az előző menübe",
|
"VTLANG_RETURN_PRV_NOESC": "Vissza az előző menübe",
|
||||||
|
|
||||||
"VTLANG_MENU_LANG": "Menü nyelv kiválasztás",
|
"VTLANG_MENU_LANG": "Menü nyelvének kiválasztása",
|
||||||
|
|
||||||
"VTLANG_LB_SBOOT_WINDOWS": "Keresés és indítás - Windows",
|
"VTLANG_LB_SBOOT_WINDOWS": "Windows keresése és indítása",
|
||||||
"VTLANG_LB_SBOOT_G4D": "Keresés és indítás - Grub4dos",
|
"VTLANG_LB_SBOOT_G4D": "Grub4dos keresése és indítása",
|
||||||
"VTLANG_LB_SBOOT_HDD1": "Indítás az 1. helyi lemezről",
|
"VTLANG_LB_SBOOT_HDD1": "Indítás az 1. helyi lemezről",
|
||||||
"VTLANG_LB_SBOOT_HDD2": "Indítás az 2. helyi lemezről",
|
"VTLANG_LB_SBOOT_HDD2": "Indítás a 2. helyi lemezről",
|
||||||
"VTLANG_LB_SBOOT_HDD3": "Indítás az 3. helyi lemezről",
|
"VTLANG_LB_SBOOT_HDD3": "Indítás a 3. helyi lemezről",
|
||||||
"VTLANG_LB_SBOOT_X64EFI": "Keresés és indítás - BOOTX64.EFI",
|
"VTLANG_LB_SBOOT_X64EFI": "BOOTX64.EFI keresése és indítása",
|
||||||
"VTLANG_LB_SBOOT_IA32EFI": "Keresés és indítás - BOOTIA32.EFI",
|
"VTLANG_LB_SBOOT_IA32EFI": "BOOTIA32.EFI keresése és indítása",
|
||||||
"VTLANG_LB_SBOOT_AA64EFI": "Keresés és indítás - BOOTAA64.EFI",
|
"VTLANG_LB_SBOOT_AA64EFI": "BOOTAA64.EFI keresése és indítása",
|
||||||
"VTLANG_LB_SBOOT_XORBOOT": "Keresés és indítás - xorboot",
|
"VTLANG_LB_SBOOT_XORBOOT": "xorboot keresése és indítása",
|
||||||
|
|
||||||
"VTLANG_FILE_CHKSUM": "Fájl ell.összeg",
|
"VTLANG_FILE_CHKSUM": "Fájl ellenőrzőösszege",
|
||||||
"VTLANG_CHKSUM_MD5_CALC": "Számítás - md5sum",
|
"VTLANG_CHKSUM_MD5_CALC": "md5sum kiszámítása",
|
||||||
"VTLANG_CHKSUM_SHA1_CALC": "Számítás - sha1sum",
|
"VTLANG_CHKSUM_SHA1_CALC": "sha1sum kiszámítása",
|
||||||
"VTLANG_CHKSUM_SHA256_CALC": "Számítás - sha256sum",
|
"VTLANG_CHKSUM_SHA256_CALC": "sha256sum kiszámítása",
|
||||||
"VTLANG_CHKSUM_SHA512_CALC": "Számítás - sha512sum",
|
"VTLANG_CHKSUM_SHA512_CALC": "sha512sum kiszámítása",
|
||||||
"VTLANG_CHKSUM_MD5_CALC_CHK": "Számítás és ellenőrzés - md5sum",
|
"VTLANG_CHKSUM_MD5_CALC_CHK": "md5sum kiszámítása és ellenőrzése",
|
||||||
"VTLANG_CHKSUM_SHA1_CALC_CHK": "Számítás és ellenőrzés - sha1sum",
|
"VTLANG_CHKSUM_SHA1_CALC_CHK": "sha1sum kiszámítása és ellenőrzése",
|
||||||
"VTLANG_CHKSUM_SHA256_CALC_CHK": "Számítás és ellenőrzés - sha256sum",
|
"VTLANG_CHKSUM_SHA256_CALC_CHK": "sha256sum kiszámítása és ellenőrzése",
|
||||||
"VTLANG_CHKSUM_SHA512_CALC_CHK": "Számítás és ellenőrzés - sha512sum",
|
"VTLANG_CHKSUM_SHA512_CALC_CHK": "sha512sum kiszámítása és ellenőrzése",
|
||||||
|
|
||||||
"VTLANG_POWER": "Energia",
|
"VTLANG_POWER": "Főkapcsoló",
|
||||||
"VTLANG_POWER_REBOOT": "Újraindítás",
|
"VTLANG_POWER_REBOOT": "Újraindítás",
|
||||||
"VTLANG_POWER_HALT": "Leállítás",
|
"VTLANG_POWER_HALT": "Leállítás",
|
||||||
"VTLANG_POWER_BOOT_EFIFW": "Újraindítás - EFI setup",
|
"VTLANG_POWER_BOOT_EFIFW": "Újraindítás EFI beállításba",
|
||||||
|
|
||||||
"VTLANG_KEYBRD_LAYOUT": "Billentyű kiosztások",
|
"VTLANG_KEYBRD_LAYOUT": "Billentyűzetkiosztások",
|
||||||
"VTLANG_HWINFO": "Hardver információ",
|
"VTLANG_HWINFO": "Hardverinformációk",
|
||||||
|
|
||||||
"VTLANG_RESOLUTION_CFG": "Felbontás konfigurációja",
|
"VTLANG_RESOLUTION_CFG": "Felbontás beállítása",
|
||||||
"VTLANG_SCREEN_MODE": "Képernyő megjelenítési mód",
|
"VTLANG_SCREEN_MODE": "Képernyő megjelenítési módja",
|
||||||
"VTLANG_SCREEN_TEXT_MODE": "Kénysz. szöveges mód",
|
"VTLANG_SCREEN_TEXT_MODE": "Szöveges mód kényszerítése",
|
||||||
"VTLANG_SCREEN_GUI_MODE": "Kénysz. grafikus mód",
|
"VTLANG_SCREEN_GUI_MODE": "Grafikus mód kényszerítése",
|
||||||
|
|
||||||
"VTLANG_THEME_SELECT": "Téma kiválasztása",
|
"VTLANG_THEME_SELECT": "Téma kiválasztása",
|
||||||
|
|
||||||
"VTLANG_UEFI_UTIL": "Ventoy UEFI Utilities",
|
"VTLANG_UEFI_UTIL": "Ventoy UEFI-segédprogramok",
|
||||||
"VTLANG_UTIL_SHOW_EFI_DRV": "EFI driverek megjelenítése",
|
"VTLANG_UTIL_SHOW_EFI_DRV": "EFI-illesztőprogramok megjelenítése",
|
||||||
"VTLANG_UTIL_FIX_BLINIT_FAIL": "A Windows BlinitializeLibrary hibájának javítása",
|
"VTLANG_UTIL_FIX_BLINIT_FAIL": "A Windows BlinitializeLibrary hibájának javítása",
|
||||||
|
|
||||||
"VTLANG_JSON_CHK_JSON": "Ellenőrizze a plugin json konfigurációt (ventoy.json)",
|
"VTLANG_JSON_CHK_JSON": "A bővítmény JSON-beállításának (ventoy.json) ellenőrzése",
|
||||||
"VTLANG_JSON_CHK_CONTROL": "Ellenőrizze a globális vezérlő plugin konfigurációt",
|
"VTLANG_JSON_CHK_CONTROL": "A globális vezérlőbővítmény beállításának ellenőrzése",
|
||||||
"VTLANG_JSON_CHK_THEME": "Ellenőrizze a téma plugin konfigurációt",
|
"VTLANG_JSON_CHK_THEME": "A téma bővítmény beállításnak ellenőrzése",
|
||||||
"VTLANG_JSON_CHK_AUTOINS": "Ellenőrizze az auto. telepítő plugin konfigurációt",
|
"VTLANG_JSON_CHK_AUTOINS": "Az automatikus telepítés bővítmény beállításának ellenőrzése",
|
||||||
"VTLANG_JSON_CHK_PERSIST": "A persistence plugin konfigurációjának ellenőrzése",
|
"VTLANG_JSON_CHK_PERSIST": "Az állandóság bővítmény beállításának ellenőrzése",
|
||||||
"VTLANG_JSON_CHK_MENU_ALIAS": "Ellenőrizze a menü alias plugin konfigurációt",
|
"VTLANG_JSON_CHK_MENU_ALIAS": "A menüálnév bővítmény beállításának ellenőrzése",
|
||||||
"VTLANG_JSON_CHK_MENU_TIP": "Ellenőrizze a menü tipp plugin konfigurációt",
|
"VTLANG_JSON_CHK_MENU_TIP": "A menütipp bővítmény beállításának ellenőrzése",
|
||||||
"VTLANG_JSON_CHK_MENU_CLASS": "Ellenőrizze a menü osztály plugin konfigurációt",
|
"VTLANG_JSON_CHK_MENU_CLASS": "A menüosztály bővítmény beállításának ellenőrzése",
|
||||||
"VTLANG_JSON_CHK_INJECTION": "Injekciós plugin konfiguráció ellenőrzése",
|
"VTLANG_JSON_CHK_INJECTION": "A befecskendezés bővítmény beállításnak ellenőrzése",
|
||||||
"VTLANG_JSON_CHK_AUTO_MEMDISK": "Auto. memdisk plugin konfiguráció ellenőrzése",
|
"VTLANG_JSON_CHK_AUTO_MEMDISK": "Az automatikus memórialemez bővítmény beállításának ellenőrzése",
|
||||||
"VTLANG_JSON_CHK_IMG_LIST": "Ellenőrizze a képlista plugin beállításait",
|
"VTLANG_JSON_CHK_IMG_LIST": "A lemezképlista bővítmény beállításnak ellenőrzése",
|
||||||
"VTLANG_JSON_CHK_IMG_BLIST": "Ellenőrizze a kép feketelista plugin konfigurációt",
|
"VTLANG_JSON_CHK_IMG_BLIST": "A lemezkép-tiltólista bővítmény beállításnak ellenőrzése",
|
||||||
"VTLANG_JSON_CHK_CONF_REPLACE": "Check boot conf cserélje ki a plugin konfigurációt",
|
"VTLANG_JSON_CHK_CONF_REPLACE": "Az indítási beállítás csere bővítmény beállításnak ellenőrzése",
|
||||||
"VTLANG_JSON_CHK_DUD": "Ellenőrizze a dud plugin konfigurációt",
|
"VTLANG_JSON_CHK_DUD": "A dud bővítmény beállításnak ellenőrzése",
|
||||||
"VTLANG_JSON_CHK_PASSWORD": "Ellenőrizze a jelszó plugin konfigurációját",
|
"VTLANG_JSON_CHK_PASSWORD": "A jelszó bővítmény beállításnak ellenőrzése",
|
||||||
|
|
||||||
"VTLANG_NORMAL_MODE": "Indítás normál módban",
|
"VTLANG_NORMAL_MODE": "Indítás normál módban",
|
||||||
"VTLANG_WIMBOOT_MODE": "Indítás wimboot módban",
|
"VTLANG_WIMBOOT_MODE": "Indítás wimboot módban",
|
||||||
"VTLANG_GRUB2_MODE": "Indítás grub2 módban",
|
"VTLANG_GRUB2_MODE": "Indítás grub2 módban",
|
||||||
"VTLANG_MEMDISK_MODE": "Indítás memdisk módban",
|
"VTLANG_MEMDISK_MODE": "Indítás memórialemez módban",
|
||||||
|
|
||||||
"VTLANG_RET_TO_LISTVIEW": "Vissza a Listanézethez",
|
"VTLANG_RET_TO_LISTVIEW": "Vissza a listanézethez",
|
||||||
"VTLANG_RET_TO_TREEVIEW": "Vissza a Fanézethez",
|
"VTLANG_RET_TO_TREEVIEW": "Vissza a fanézethez",
|
||||||
|
|
||||||
"VTLANG_NO_AUTOINS_SCRIPT": "Indítás auto. telepítési sablon nélkül",
|
"VTLANG_NO_AUTOINS_SCRIPT": "Indítás automatikus telepítési sablon nélkül",
|
||||||
"VTLANG_AUTOINS_USE": "Indítás ezzel",
|
"VTLANG_AUTOINS_USE": "Indítás ezzel:",
|
||||||
|
|
||||||
"VTLANG_NO_PERSIST": "Indítás perzisztencia nélkül",
|
"VTLANG_NO_PERSIST": "Indítás állandóság nélkül",
|
||||||
"VTLANG_PERSIST_USE": "Indítás ezzel",
|
"VTLANG_PERSIST_USE": "Indítás ezzel:",
|
||||||
|
|
||||||
"VTLANG_BROWER_RETURN": "Vissza",
|
"VTLANG_BROWER_RETURN": "Vissza",
|
||||||
|
|
||||||
"VTLANG_ENTER_EXIT": "nyomja meg az Enter billentyűt a kilépéshez",
|
"VTLANG_ENTER_EXIT": "nyomja meg az Enter billentyűt a kilépéshez",
|
||||||
"VTLANG_ENTER_REBOOT": "nyomja meg az Enter billentyűt az újraindításhoz",
|
"VTLANG_ENTER_REBOOT": "nyomja meg az Enter billentyűt az újraindításhoz",
|
||||||
"VTLANG_ENTER_CONTINUE": "a folytatáshoz nyomja meg az Enter billentyűt",
|
"VTLANG_ENTER_CONTINUE": "nyomja meg az Enter billentyűt a folytatáshoz",
|
||||||
|
|
||||||
"VTLANG_CTRL_TEMP_SET": "Temporary Control Settings",
|
"VTLANG_CTRL_TEMP_SET": "Ideiglenes vezérlési beállítások",
|
||||||
"VTLANG_WIN11_BYPASS_CHECK": "Bypass CPU/TPM/SecureBoot check when install Windows 11",
|
"VTLANG_WIN11_BYPASS_CHECK": "CPU/TPM/SecureBoot ellenőrzés megkerülése Windows 11 telepítésekor",
|
||||||
"VTLANG_WIN11_BYPASS_NRO": "Bypass online account requirement when install Windows 11",
|
"VTLANG_WIN11_BYPASS_NRO": "Internetes fiók követelményének megkerülése Windows 11 telepítésekor",
|
||||||
"VTLANG_LINUX_REMOUNT": "Mount Ventoy partition after boot Linux",
|
"VTLANG_LINUX_REMOUNT": "Ventoy partíció csatolása a Linux indítása után",
|
||||||
"VTLANG_SECONDARY_BOOT_MENU": "Show secondary boot menu",
|
"VTLANG_SECONDARY_BOOT_MENU": "Másodlagos indítási menü megjelenítése",
|
||||||
|
|
||||||
"MENU_STR_XXX": ""
|
"MENU_STR_XXX": ""
|
||||||
}
|
}
|
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"VTLANG_LANGUAGE_NAME": "Italiano (Italian)",
|
"VTLANG_LANGUAGE_NAME": "Italiano (Italian)",
|
||||||
|
|
||||||
"VTLANG_STR_HOTKEY_LIST": "L:Lingua F1:Aiuto F2:Sfoglia F3:VistaLista F4:BootLocale F5:Strumenti F6:ExMenu",
|
"VTLANG_STR_HOTKEY_LIST": "L:Lingua F1:Aiuto F2:Sfoglia F3:VistaElenco F4:BootLocale F5:Strumenti F6:MenuEx",
|
||||||
"VTLANG_STR_HOTKEY_TREE": "L:Lingua F1:Aiuto F2:Sfoglia F3:VistaAlbero F4:BootLocale F5:Strumenti F6:ExMenu",
|
"VTLANG_STR_HOTKEY_TREE": "L:Lingua F1:Aiuto F2:Sfoglia F3:VistaStruttura F4:BootLocale F5:Strumenti F6:MenuEx",
|
||||||
"VTLANG_RETURN_PREVIOUS": "Ritorna al menu precedente [Esc]",
|
"VTLANG_RETURN_PREVIOUS": "Torna al menu precedente [Esc]",
|
||||||
"VTLANG_RETURN_PRV_NOESC": "Ritorna al menu precedente",
|
"VTLANG_RETURN_PRV_NOESC": "Torna al menu precedente",
|
||||||
|
|
||||||
"VTLANG_MENU_LANG": "Menu selezione lingua",
|
"VTLANG_MENU_LANG": "Selezione lingua interfaccia",
|
||||||
|
|
||||||
"VTLANG_LB_SBOOT_WINDOWS": "Cerca e avvia Windows",
|
"VTLANG_LB_SBOOT_WINDOWS": "Cerca e avvia Windows",
|
||||||
"VTLANG_LB_SBOOT_G4D": "Cerca e avvia Grub4dos",
|
"VTLANG_LB_SBOOT_G4D": "Cerca e avvia Grub4dos",
|
||||||
@@ -18,7 +18,7 @@
|
|||||||
"VTLANG_LB_SBOOT_AA64EFI": "Cerca e avvia BOOTAA64.EFI",
|
"VTLANG_LB_SBOOT_AA64EFI": "Cerca e avvia BOOTAA64.EFI",
|
||||||
"VTLANG_LB_SBOOT_XORBOOT": "Cerca e avvia xorboot",
|
"VTLANG_LB_SBOOT_XORBOOT": "Cerca e avvia xorboot",
|
||||||
|
|
||||||
"VTLANG_FILE_CHKSUM": "Checksum file",
|
"VTLANG_FILE_CHKSUM": "File checksum",
|
||||||
"VTLANG_CHKSUM_MD5_CALC": "Calcola md5sum",
|
"VTLANG_CHKSUM_MD5_CALC": "Calcola md5sum",
|
||||||
"VTLANG_CHKSUM_SHA1_CALC": "Calcola sha1sum",
|
"VTLANG_CHKSUM_SHA1_CALC": "Calcola sha1sum",
|
||||||
"VTLANG_CHKSUM_SHA256_CALC": "Calcola sha256sum",
|
"VTLANG_CHKSUM_SHA256_CALC": "Calcola sha256sum",
|
||||||
@@ -28,66 +28,66 @@
|
|||||||
"VTLANG_CHKSUM_SHA256_CALC_CHK": "Calcola e controlla sha256sum",
|
"VTLANG_CHKSUM_SHA256_CALC_CHK": "Calcola e controlla sha256sum",
|
||||||
"VTLANG_CHKSUM_SHA512_CALC_CHK": "Calcola e controlla sha512sum",
|
"VTLANG_CHKSUM_SHA512_CALC_CHK": "Calcola e controlla sha512sum",
|
||||||
|
|
||||||
"VTLANG_POWER": "Spegni",
|
"VTLANG_POWER": "Spegni il computer",
|
||||||
"VTLANG_POWER_REBOOT": "Riavvia",
|
"VTLANG_POWER_REBOOT": "Riavvia il computer",
|
||||||
"VTLANG_POWER_HALT": "Arresta",
|
"VTLANG_POWER_HALT": "Arresta il computer",
|
||||||
"VTLANG_POWER_BOOT_EFIFW": "Riavvia nel setup EFI",
|
"VTLANG_POWER_BOOT_EFIFW": "Riavvia il computer nell'impostazione EFI",
|
||||||
|
|
||||||
"VTLANG_KEYBRD_LAYOUT": "Layout di tastiera",
|
"VTLANG_KEYBRD_LAYOUT": "Layout tastiera",
|
||||||
"VTLANG_HWINFO": "Informazioni hardware",
|
"VTLANG_HWINFO": "Informazioni hardware computer",
|
||||||
|
|
||||||
"VTLANG_RESOLUTION_CFG": "Configurazione risoluzione",
|
"VTLANG_RESOLUTION_CFG": "Imposta risoluzione schermo",
|
||||||
"VTLANG_SCREEN_MODE": "Modalità display schermo",
|
"VTLANG_SCREEN_MODE": "Modalità schermo (testo/grafica)",
|
||||||
"VTLANG_SCREEN_TEXT_MODE": "Forza modalità testuale",
|
"VTLANG_SCREEN_TEXT_MODE": "Forza modalità testo schermo",
|
||||||
"VTLANG_SCREEN_GUI_MODE": "Forza modalità grafica",
|
"VTLANG_SCREEN_GUI_MODE": "Forza modalità grafica schermo",
|
||||||
|
|
||||||
"VTLANG_THEME_SELECT": "Seleziona tema",
|
"VTLANG_THEME_SELECT": "Seleziona tema interfaccia",
|
||||||
|
|
||||||
"VTLANG_UEFI_UTIL": "Utilità UEFI Ventoy UEFI Utilities",
|
"VTLANG_UEFI_UTIL": "Utilità UEFI Ventoy",
|
||||||
"VTLANG_UTIL_SHOW_EFI_DRV": "Mostra driver EFI",
|
"VTLANG_UTIL_SHOW_EFI_DRV": "Visualizza driver EFI",
|
||||||
"VTLANG_UTIL_FIX_BLINIT_FAIL": "Correzione del fallimento di BlinitializeLibrary di Windows",
|
"VTLANG_UTIL_FIX_BLINIT_FAIL": "Correzione fallimento BlinitializeLibrary di Windows",
|
||||||
|
|
||||||
"VTLANG_JSON_CHK_JSON": "Controlla la configurazione json dei plugin (ventoy.json)",
|
"VTLANG_JSON_CHK_JSON": "Modifica file .json plugin (ventoy.json)",
|
||||||
"VTLANG_JSON_CHK_CONTROL": "Controlla il controllo globale della configurazione dei plugin",
|
"VTLANG_JSON_CHK_CONTROL": "Modifica controllo globale della configurazione dei plugin",
|
||||||
"VTLANG_JSON_CHK_THEME": "Controlla il tema della configurazione dei plugin",
|
"VTLANG_JSON_CHK_THEME": "Modifica tema configurazione dei plugin",
|
||||||
"VTLANG_JSON_CHK_AUTOINS": "Controlla l'installazione automatica della configurazione dei plugin",
|
"VTLANG_JSON_CHK_AUTOINS": "Modifica installazione automatica della configurazione dei plugin",
|
||||||
"VTLANG_JSON_CHK_PERSIST": "Controlla la persistenza della configurazione dei plugin",
|
"VTLANG_JSON_CHK_PERSIST": "Modifica persistenza della configurazione dei plugin",
|
||||||
"VTLANG_JSON_CHK_MENU_ALIAS": "Controlla l'alias del menu della configurazione dei plugin",
|
"VTLANG_JSON_CHK_MENU_ALIAS": "Modifica l'alias del menu della configurazione dei plugin",
|
||||||
"VTLANG_JSON_CHK_MENU_TIP": "Controlla il suggerimento del menu della configurazione dei plugin",
|
"VTLANG_JSON_CHK_MENU_TIP": "Modifica suggerimento del menu della configurazione dei plugin",
|
||||||
"VTLANG_JSON_CHK_MENU_CLASS": "Controlla la classe del menu della configurazione dei plugin",
|
"VTLANG_JSON_CHK_MENU_CLASS": "Modifica classe menu configurazione plugin",
|
||||||
"VTLANG_JSON_CHK_INJECTION": "Controlla l'injection della configurazione dei plugin",
|
"VTLANG_JSON_CHK_INJECTION": "Modifica injection della configurazione plugin",
|
||||||
"VTLANG_JSON_CHK_AUTO_MEMDISK": "Controlla il memdisk automatico della configurazione dei plugin",
|
"VTLANG_JSON_CHK_AUTO_MEMDISK": "Modifica memdisk automatico della configurazione dei plugin",
|
||||||
"VTLANG_JSON_CHK_IMG_LIST": "Controlla la lista delle immagini della configurazione dei plugin",
|
"VTLANG_JSON_CHK_IMG_LIST": "Modifica elenco immagini configurazione plugin",
|
||||||
"VTLANG_JSON_CHK_IMG_BLIST": "Controlla la lista nera delle immagini della configurazione dei plugin",
|
"VTLANG_JSON_CHK_IMG_BLIST": "Modifica elenco immagini vietate configurazione plugin",
|
||||||
"VTLANG_JSON_CHK_CONF_REPLACE": "Controlla la sostituzione della configurazione di avvio della configurazione dei plugin",
|
"VTLANG_JSON_CHK_CONF_REPLACE": "Modifica sostituzione configurazione di avvio configurazione dei plugin",
|
||||||
"VTLANG_JSON_CHK_DUD": "Controlla dud della configurazione dei plugin",
|
"VTLANG_JSON_CHK_DUD": "Modifica dud configurazione plugin",
|
||||||
"VTLANG_JSON_CHK_PASSWORD": "Controlla password della configurazione dei plugin",
|
"VTLANG_JSON_CHK_PASSWORD": "Modifica password configurazione plugin",
|
||||||
|
|
||||||
"VTLANG_NORMAL_MODE": "Avvia in modalità normale",
|
"VTLANG_NORMAL_MODE": "Avvia in modalità normale",
|
||||||
"VTLANG_WIMBOOT_MODE": "Avvia in modalità wimboot",
|
"VTLANG_WIMBOOT_MODE": "Avvia in modalità wimboot",
|
||||||
"VTLANG_GRUB2_MODE": "Avvia in modalità grub2",
|
"VTLANG_GRUB2_MODE": "Avvia in modalità grub2",
|
||||||
"VTLANG_MEMDISK_MODE": "Avvia in modalità memdisk",
|
"VTLANG_MEMDISK_MODE": "Avvia in modalità memdisk",
|
||||||
|
|
||||||
"VTLANG_RET_TO_LISTVIEW": "Ritorna alla VistaLista",
|
"VTLANG_RET_TO_LISTVIEW": "Torna alla VistaElenco",
|
||||||
"VTLANG_RET_TO_TREEVIEW": "Ritorna alla VistaAlbero",
|
"VTLANG_RET_TO_TREEVIEW": "Torna alla VistaStruttura",
|
||||||
|
|
||||||
"VTLANG_NO_AUTOINS_SCRIPT": "Avvia senza il modello di installazione automatica",
|
"VTLANG_NO_AUTOINS_SCRIPT": "Avvia senza il modello installazione automatica",
|
||||||
"VTLANG_AUTOINS_USE": "Avvia con",
|
"VTLANG_AUTOINS_USE": "Avvia con",
|
||||||
|
|
||||||
"VTLANG_NO_PERSIST": "Avvia senza persistenza",
|
"VTLANG_NO_PERSIST": "Avvia senza persistenza",
|
||||||
"VTLANG_PERSIST_USE": "Avvia con",
|
"VTLANG_PERSIST_USE": "Avvia con",
|
||||||
|
|
||||||
"VTLANG_BROWER_RETURN": "Ritorna",
|
"VTLANG_BROWER_RETURN": "Indietro",
|
||||||
|
|
||||||
"VTLANG_ENTER_EXIT": "premi il tasto Invio per uscire",
|
"VTLANG_ENTER_EXIT": "Premi il tasto 'Invio' per uscire",
|
||||||
"VTLANG_ENTER_REBOOT": "premi il tasto Invio per riavviare",
|
"VTLANG_ENTER_REBOOT": "Premi il tasto 'Invio' per riavviare",
|
||||||
"VTLANG_ENTER_CONTINUE": "premi il tasto Invio per continuare",
|
"VTLANG_ENTER_CONTINUE": "Premi il tasto 'Invio' per continuare",
|
||||||
|
|
||||||
"VTLANG_CTRL_TEMP_SET": "Impostazioni controllo temporaneo",
|
"VTLANG_CTRL_TEMP_SET": "Impostazioni controllo temporaneo",
|
||||||
"VTLANG_WIN11_BYPASS_CHECK": "Bypassa il controllo di CPU/TPM/SecureBoot durante l'installazione di Windows 11",
|
"VTLANG_WIN11_BYPASS_CHECK": "Durante l'installazione di Windows 11 bypassa il controllo CPU/TPM/SecureBoot ",
|
||||||
"VTLANG_WIN11_BYPASS_NRO": "Bypassa il requisito di un account online durante l'installazione di Windows 11",
|
"VTLANG_WIN11_BYPASS_NRO": "Durante l'installazione di Windows 11 bypassa il requisito di un account online ",
|
||||||
"VTLANG_LINUX_REMOUNT": "Monta la partizione di Ventoy dopo l'avvio di Linux",
|
"VTLANG_LINUX_REMOUNT": "Dopo l'avvio di Linux monta la partizione Ventoy ",
|
||||||
"VTLANG_SECONDARY_BOOT_MENU": "Mostra il menu di avvio secondario",
|
"VTLANG_SECONDARY_BOOT_MENU": "Visualizza menu di avvio secondario",
|
||||||
|
|
||||||
"MENU_STR_XXX": ""
|
"MENU_STR_XXX": ""
|
||||||
}
|
}
|
||||||
|
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"VTLANG_LANGUAGE_NAME": "Russian (Русский)",
|
"VTLANG_LANGUAGE_NAME": "Russian (Русский)",
|
||||||
|
|
||||||
"VTLANG_STR_HOTKEY_LIST": "L:Язык F1:Помощь F2:Просмотр F3:ВидСписком F4:Локальная загрузка F5:Инструменты F6:Выйти из меню",
|
"VTLANG_STR_HOTKEY_LIST": "L:Язык F1:Помощь F2:Обзор F3:ВидСписок F4:ЛокалЗагрузка F5:Сервис F6:РасширМеню",
|
||||||
"VTLANG_STR_HOTKEY_TREE": "L:Язык F1:Помощь F2:Просмотр F3:ВидДревом F4:Локальная загрузка F5:Инструменты F6:Выйти из меню",
|
"VTLANG_STR_HOTKEY_TREE": "L:Язык F1:Помощь F2:Обзор F3:ВидДерево F4:ЛокалЗагрузка F5:Сервис F6:РасширМеню",
|
||||||
"VTLANG_RETURN_PREVIOUS": "Вернуться в предыдущее меню [Esc]",
|
"VTLANG_RETURN_PREVIOUS": "Вернуться в предыдущее меню [Esc]",
|
||||||
"VTLANG_RETURN_PRV_NOESC": "Вернуться в предыдущее меню",
|
"VTLANG_RETURN_PRV_NOESC": "Вернуться в предыдущее меню",
|
||||||
|
|
||||||
@@ -37,13 +37,13 @@
|
|||||||
"VTLANG_HWINFO": "Сведения об оборудовании",
|
"VTLANG_HWINFO": "Сведения об оборудовании",
|
||||||
|
|
||||||
"VTLANG_RESOLUTION_CFG": "Конфигурация разрешения",
|
"VTLANG_RESOLUTION_CFG": "Конфигурация разрешения",
|
||||||
"VTLANG_SCREEN_MODE": "Режим Screen Display",
|
"VTLANG_SCREEN_MODE": "Режим отображения экрана",
|
||||||
"VTLANG_SCREEN_TEXT_MODE": "Выбрать текстовый режим",
|
"VTLANG_SCREEN_TEXT_MODE": "Выбрать текстовый режим",
|
||||||
"VTLANG_SCREEN_GUI_MODE": "Выбрать графический режим",
|
"VTLANG_SCREEN_GUI_MODE": "Выбрать графический режим",
|
||||||
|
|
||||||
"VTLANG_THEME_SELECT": "Выбор темы",
|
"VTLANG_THEME_SELECT": "Выбор темы",
|
||||||
|
|
||||||
"VTLANG_UEFI_UTIL": "UEFI утилиты Ventoy",
|
"VTLANG_UEFI_UTIL": "Утилиты UEFI Ventoy",
|
||||||
"VTLANG_UTIL_SHOW_EFI_DRV": "Показать драйверы EFI",
|
"VTLANG_UTIL_SHOW_EFI_DRV": "Показать драйверы EFI",
|
||||||
"VTLANG_UTIL_FIX_BLINIT_FAIL": "Исправить ошибку Windows «BlinitializeLibrary»",
|
"VTLANG_UTIL_FIX_BLINIT_FAIL": "Исправить ошибку Windows «BlinitializeLibrary»",
|
||||||
|
|
||||||
|
93
INSTALL/grub/menu/vi_VN.json
Normal file
93
INSTALL/grub/menu/vi_VN.json
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
{
|
||||||
|
"VTLANG_LANGUAGE_NAME": "Vietnamese (Tiếng Việt)",
|
||||||
|
|
||||||
|
"VTLANG_STR_HOTKEY_LIST": "L:Ngôn ngữ F1:Trợ giúp F2:Duyệt F3:ListView F4:Khởi động cục bộ F5:Công cụ F6:ExMenu",
|
||||||
|
"VTLANG_STR_HOTKEY_TREE": "L:Ngôn ngữ F1:Trợ giúp F2:Duyệt F3:TreeView F4:Khởi động cục bộ F5:Công cụ F6:ExMenu",
|
||||||
|
"VTLANG_RETURN_PREVIOUS": "Trở về menu trước [Esc]",
|
||||||
|
"VTLANG_RETURN_PRV_NOESC": "Trở về menu trước",
|
||||||
|
|
||||||
|
"VTLANG_MENU_LANG": "Chọn ngôn ngữ menu",
|
||||||
|
|
||||||
|
"VTLANG_LB_SBOOT_WINDOWS": "Tìm kiếm và khởi động Windows",
|
||||||
|
"VTLANG_LB_SBOOT_G4D": "Tìm kiếm và khởi động Grub4dos",
|
||||||
|
"VTLANG_LB_SBOOT_HDD1": "Khởi động từ ổ đĩa thứ 1 ở trên máy",
|
||||||
|
"VTLANG_LB_SBOOT_HDD2": "Khởi động từ ổ đĩa thứ 2 ở trên máy",
|
||||||
|
"VTLANG_LB_SBOOT_HDD3": "Khởi động từ ổ đĩa thứ 3 ở trên máy",
|
||||||
|
"VTLANG_LB_SBOOT_X64EFI": "Tìm kiếm và khởi động BOOTX64.EFI",
|
||||||
|
"VTLANG_LB_SBOOT_IA32EFI": "Tìm kiếm và khởi động BOOTIA32.EFI",
|
||||||
|
"VTLANG_LB_SBOOT_AA64EFI": "Tìm kiếm và khởi động BOOTAA64.EFI",
|
||||||
|
"VTLANG_LB_SBOOT_XORBOOT": "Tìm kiếm và khởi động xorboot",
|
||||||
|
|
||||||
|
"VTLANG_FILE_CHKSUM": "Checksum tệp",
|
||||||
|
"VTLANG_CHKSUM_MD5_CALC": "Tính md5sum",
|
||||||
|
"VTLANG_CHKSUM_SHA1_CALC": "Tính sha1sum",
|
||||||
|
"VTLANG_CHKSUM_SHA256_CALC": "Tính sha256sum",
|
||||||
|
"VTLANG_CHKSUM_SHA512_CALC": "Tính sha512sum",
|
||||||
|
"VTLANG_CHKSUM_MD5_CALC_CHK": "Tính và kiểm tra md5sum",
|
||||||
|
"VTLANG_CHKSUM_SHA1_CALC_CHK": "Tính và kiểm tra sha1sum",
|
||||||
|
"VTLANG_CHKSUM_SHA256_CALC_CHK": "Tính và kiểm tra sha256sum",
|
||||||
|
"VTLANG_CHKSUM_SHA512_CALC_CHK": "Tính và kiểm tra sha512sum",
|
||||||
|
|
||||||
|
"VTLANG_POWER": "Nguồn điện",
|
||||||
|
"VTLANG_POWER_REBOOT": "Khởi động lại",
|
||||||
|
"VTLANG_POWER_HALT": "Tắt máy",
|
||||||
|
"VTLANG_POWER_BOOT_EFIFW": "Khởi động lại vào cài đặt UEFI",
|
||||||
|
|
||||||
|
"VTLANG_KEYBRD_LAYOUT": "Bố cục bàn phím",
|
||||||
|
"VTLANG_HWINFO": "Thông tin phần cứng",
|
||||||
|
|
||||||
|
"VTLANG_RESOLUTION_CFG": "Cấu hình độ phân giải",
|
||||||
|
"VTLANG_SCREEN_MODE": "Chế độ hiển thị",
|
||||||
|
"VTLANG_SCREEN_TEXT_MODE": "Bắt buộc giao diện văn bản",
|
||||||
|
"VTLANG_SCREEN_GUI_MODE": "Bắt buộc giao diện đồ hoạ",
|
||||||
|
|
||||||
|
"VTLANG_THEME_SELECT": "Chọn chủ đề",
|
||||||
|
|
||||||
|
"VTLANG_UEFI_UTIL": "Các tiện ích UEFI Ventoy",
|
||||||
|
"VTLANG_UTIL_SHOW_EFI_DRV": "Hiển thị các driver EFI",
|
||||||
|
"VTLANG_UTIL_FIX_BLINIT_FAIL": "Sửa lỗi BlinitializeLibrary của Windows",
|
||||||
|
|
||||||
|
"VTLANG_JSON_CHK_JSON": "Kiểm tra cấu hình plugin json (ventoy.json)",
|
||||||
|
"VTLANG_JSON_CHK_CONTROL": "Kiểm tra cấu hình plugin điều khiển toàn cục",
|
||||||
|
"VTLANG_JSON_CHK_THEME": "Kiểm tra cấu hình plugin chủ đề",
|
||||||
|
"VTLANG_JSON_CHK_AUTOINS": "Kiểm tra cấu hình plugin tự động cài đặt",
|
||||||
|
"VTLANG_JSON_CHK_PERSIST": "Kiểm tra cấu hình plugin persistence",
|
||||||
|
"VTLANG_JSON_CHK_MENU_ALIAS": "Kiểm tra cấu hình plugin alias menu",
|
||||||
|
"VTLANG_JSON_CHK_MENU_TIP": "Kiểm tra cấu hình plugin tip menu",
|
||||||
|
"VTLANG_JSON_CHK_MENU_CLASS": "Kiểm tra cấu hình plugin lớp menu",
|
||||||
|
"VTLANG_JSON_CHK_INJECTION": "Kiểm tra cấu hình plugin injection",
|
||||||
|
"VTLANG_JSON_CHK_AUTO_MEMDISK": "Kiểm tra cấu hình plugin auto memdisk",
|
||||||
|
"VTLANG_JSON_CHK_IMG_LIST": "Kiểm tra cấu hình plugin danh sách ảnh đĩa",
|
||||||
|
"VTLANG_JSON_CHK_IMG_BLIST": "Kiểm tra cấu hình plugin danh sách đen ảnh đĩa",
|
||||||
|
"VTLANG_JSON_CHK_CONF_REPLACE": "Kiểm tra cấu hình plugin boot replace conf",
|
||||||
|
"VTLANG_JSON_CHK_DUD": "Kiểm tra cấu hình plugin dud",
|
||||||
|
"VTLANG_JSON_CHK_PASSWORD": "Kiểm tra cấu hình plugin mật khẩu",
|
||||||
|
|
||||||
|
"VTLANG_NORMAL_MODE": "Khởi động ở chế độ bình thường",
|
||||||
|
"VTLANG_WIMBOOT_MODE": "Khởi động ở chế độ wimboot",
|
||||||
|
"VTLANG_GRUB2_MODE": "Khởi động ở chế độ GRUB2",
|
||||||
|
"VTLANG_MEMDISK_MODE": "Khởi động ở chế độ memdisk",
|
||||||
|
|
||||||
|
"VTLANG_RET_TO_LISTVIEW": "Trở về ListView",
|
||||||
|
"VTLANG_RET_TO_TREEVIEW": "Trở về TreeView",
|
||||||
|
|
||||||
|
"VTLANG_NO_AUTOINS_SCRIPT": "Khởi động không dùng mẫu cài đặt",
|
||||||
|
"VTLANG_AUTOINS_USE": "Khởi động với",
|
||||||
|
|
||||||
|
"VTLANG_NO_PERSIST": "Khởi động không có persistence",
|
||||||
|
"VTLANG_PERSIST_USE": "Khởi động với",
|
||||||
|
|
||||||
|
"VTLANG_BROWER_RETURN": "Trở về",
|
||||||
|
|
||||||
|
"VTLANG_ENTER_EXIT": "nhấn Enter để thoát",
|
||||||
|
"VTLANG_ENTER_REBOOT": "nhấn Enter để khởi động lại",
|
||||||
|
"VTLANG_ENTER_CONTINUE": "nhấn enter để tiếp tục",
|
||||||
|
|
||||||
|
"VTLANG_CTRL_TEMP_SET": "Cài đặt điều khiển tạm",
|
||||||
|
"VTLANG_WIN11_BYPASS_CHECK": "Bỏ qua kiểm tra CPU/TPM/SecureBoot khi cài đặt Windows 11",
|
||||||
|
"VTLANG_WIN11_BYPASS_NRO": "Bỏ qua yêu cầu tài khoản trực tuyến khi cài đặt Windows 11",
|
||||||
|
"VTLANG_LINUX_REMOUNT": "Gắn phân vùng Ventoy sau khi khởi động GNU/Linux",
|
||||||
|
"VTLANG_SECONDARY_BOOT_MENU": "Hiện menu khởi động thứ cấp`",
|
||||||
|
|
||||||
|
"MENU_STR_XXX": ""
|
||||||
|
}
|
@@ -626,6 +626,14 @@ else
|
|||||||
vtoycli partresize -s $DISK $part2_start
|
vtoycli partresize -s $DISK $part2_start
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
if [ "$PART1_TYPE" = "EE" ]; then
|
||||||
|
vtinfo "update esp partition attribute"
|
||||||
|
vtoycli gpt -f $DISK
|
||||||
|
sync
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
vtinfo "Update Ventoy on $DISK successfully finished."
|
vtinfo "Update Ventoy on $DISK successfully finished."
|
||||||
echo ""
|
echo ""
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -19,5 +19,34 @@
|
|||||||
"condition": "equal",
|
"condition": "equal",
|
||||||
"expression": "ukui",
|
"expression": "ukui",
|
||||||
"gui": "gtk3"
|
"gui": "gtk3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "env",
|
||||||
|
"name": "DESKTOP_SESSION",
|
||||||
|
"condition": "equal",
|
||||||
|
"expression": "cinnamon",
|
||||||
|
"gui": "gtk3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "env",
|
||||||
|
"name": "DESKTOP_SESSION",
|
||||||
|
"condition": "equal",
|
||||||
|
"expression": "gnome",
|
||||||
|
"gui": "gtk3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "env",
|
||||||
|
"name": "DESKTOP_SESSION",
|
||||||
|
"condition": "equal",
|
||||||
|
"expression": "plasma",
|
||||||
|
"gui": "qt5"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "env",
|
||||||
|
"name": "DESKTOP_SESSION",
|
||||||
|
"condition": "equal",
|
||||||
|
"expression": "xfce",
|
||||||
|
"gui": "gtk3"
|
||||||
}
|
}
|
||||||
|
|
||||||
]
|
]
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -92,6 +92,10 @@ get_disk_part_name() {
|
|||||||
echo ${DISK}p${2}
|
echo ${DISK}p${2}
|
||||||
elif echo $DISK | grep -q "/dev/nbd[0-9]"; then
|
elif echo $DISK | grep -q "/dev/nbd[0-9]"; then
|
||||||
echo ${DISK}p${2}
|
echo ${DISK}p${2}
|
||||||
|
elif echo $DISK | grep -q "/dev/zd[0-9]"; then
|
||||||
|
echo ${DISK}p${2}
|
||||||
|
elif echo $DISK | grep -q "/dev/md[0-9]"; then
|
||||||
|
echo ${DISK}p${2}
|
||||||
else
|
else
|
||||||
echo ${DISK}${2}
|
echo ${DISK}${2}
|
||||||
fi
|
fi
|
||||||
@@ -209,14 +213,14 @@ get_disk_ventoy_version() {
|
|||||||
wait_and_create_part() {
|
wait_and_create_part() {
|
||||||
vPART1=$1
|
vPART1=$1
|
||||||
vPART2=$2
|
vPART2=$2
|
||||||
echo 'Wait for partitions ...'
|
echo 'Wait for partitions $vPART1 and $vPART2 ...'
|
||||||
for i in 0 1 2 3 4 5 6 7 8 9; do
|
for i in 0 1 2 3 4 5 6 7 8 9; do
|
||||||
if ls -l $vPART1 2>/dev/null | grep -q '^b'; then
|
if ls -l $vPART1 2>/dev/null | grep -q '^b'; then
|
||||||
if ls -l $vPART2 2>/dev/null | grep -q '^b'; then
|
if ls -l $vPART2 2>/dev/null | grep -q '^b'; then
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
echo "Wait for $vPART1/$vPART2 ..."
|
echo "Wait for $vPART1 and $vPART2 ..."
|
||||||
sleep 1
|
sleep 1
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
@@ -445,7 +449,6 @@ format_ventoy_disk_gpt() {
|
|||||||
mkpart Ventoy ntfs $part1_start_sector $part1_end_sector \
|
mkpart Ventoy ntfs $part1_start_sector $part1_end_sector \
|
||||||
mkpart VTOYEFI fat16 $part2_start_sector $part2_end_sector \
|
mkpart VTOYEFI fat16 $part2_start_sector $part2_end_sector \
|
||||||
$vt_set_efi_type \
|
$vt_set_efi_type \
|
||||||
set 2 hidden on \
|
|
||||||
quit
|
quit
|
||||||
|
|
||||||
sync
|
sync
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -754,28 +754,28 @@
|
|||||||
"STR_SHOW_ALL_DEV":"Alle Geräte anzeigen",
|
"STR_SHOW_ALL_DEV":"Alle Geräte anzeigen",
|
||||||
"STR_PART_ALIGN_4KB":"Richten Sie Partitionen mit 4KB aus",
|
"STR_PART_ALIGN_4KB":"Richten Sie Partitionen mit 4KB aus",
|
||||||
"STR_WEB_COMMUNICATION_ERR":"Kommunikationsfehler:",
|
"STR_WEB_COMMUNICATION_ERR":"Kommunikationsfehler:",
|
||||||
"STR_WEB_REMOTE_ABNORMAL":"Kommunikationsfehler: unnormales Verhalten",
|
"STR_WEB_REMOTE_ABNORMAL":"Kommunikationsfehler: Unnormales Verhalten",
|
||||||
"STR_WEB_REQUEST_TIMEOUT":"Kommunikationsfehler: Zeitüberschreitung der Anforderung",
|
"STR_WEB_REQUEST_TIMEOUT":"Kommunikationsfehler: Zeitüberschreitung der Anforderung",
|
||||||
"STR_WEB_SERVICE_UNAVAILABLE":"Kommunikationsfehler: Dienst nicht verfügbar",
|
"STR_WEB_SERVICE_UNAVAILABLE":"Kommunikationsfehler: Dienst nicht verfügbar",
|
||||||
"STR_WEB_TOKEN_MISMATCH":"Daemon-Status aktualisiert, bitte später erneut versuchen.",
|
"STR_WEB_TOKEN_MISMATCH":"Daemon-Status aktualisiert, bitte später erneut versuchen.",
|
||||||
"STR_WEB_SERVICE_BUSY":"Dienst ist ausgelastet, bitte später erneut versuchen.",
|
"STR_WEB_SERVICE_BUSY":"Dienst ist ausgelastet, bitte später erneut versuchen.",
|
||||||
"STR_MENU_VTSI_CREATE":"VTSI-Datei erstellen",
|
"STR_MENU_VTSI_CREATE":"VTSI-Datei erstellen",
|
||||||
"STR_VTSI_CREATE_TIP":"Es wird nur eine VTSI-Datei erstellt und nichts auf ein Gerät geschrieben.#@Fortfahren?",
|
"STR_VTSI_CREATE_TIP":"Es wird nur eine VTSI-Datei erstellt und nichts auf ein Gerät geschrieben. #@Fortfahren?",
|
||||||
"STR_VTSI_CREATE_SUCCESS":"VTSI-Datei erfolgreich erstellt!#@Sie können Rufus(3.15+) zum auf das Gerät schreiben verwenden um die Installation von Ventoy fertigzustellen.",
|
"STR_VTSI_CREATE_SUCCESS":"VTSI-Datei erfolgreich erstellt!#@Sie können Rufus(3.15+) zum auf das Gerät schreiben verwenden um die Installation von Ventoy fertigzustellen.",
|
||||||
"STR_VTSI_CREATE_FAILED":"VTSI-Datei konnte nicht erstellt werden.",
|
"STR_VTSI_CREATE_FAILED":"VTSI-Datei konnte nicht erstellt werden.",
|
||||||
"STR_MENU_PART_RESIZE":"zerstörungsfreie Installation",
|
"STR_MENU_PART_RESIZE":"Zerstörungsfreie Installation",
|
||||||
"STR_PART_RESIZE_TIP":"Ventoy wird eine Installation ohne vorherige Formatierung versuchen. #@Fortfahren?",
|
"STR_PART_RESIZE_TIP":"Ventoy wird eine Installation ohne vorherige Formatierung versuchen. #@Fortfahren?",
|
||||||
"STR_PART_RESIZE_SUCCESS":"Glückwunsch!#@Die Installation von Ventoy, ohne vorherige Formatierung, wurde erfolgreich abgeschlossen.",
|
"STR_PART_RESIZE_SUCCESS":"Glückwunsch! #@Die Installation von Ventoy, ohne vorherige Formatierung, wurde erfolgreich abgeschlossen.",
|
||||||
"STR_PART_RESIZE_FAILED":"Installation ohne vorherige Formatierung fehlgeschlagen. Für Details die log.txt prüfen.",
|
"STR_PART_RESIZE_FAILED":"Installation ohne vorherige Formatierung fehlgeschlagen. Details dazu finden Sie in log.txt.",
|
||||||
"STR_PART_RESIZE_UNSUPPORTED":"Installation ohne vorherige Formatierung wurde auf Grund einiger nicht erfüllbarer Bedingungen gestoppt. Für Details die log.txt prüfen.",
|
"STR_PART_RESIZE_UNSUPPORTED":"Aufgrund einiger nicht erfüllbarer Bedingungen wurde die Installation, ohne vorherige Formatierung, gestoppt. Details dazu finden Sie in log.txt.",
|
||||||
"STR_INSTALL_YES_TIP1":"Warnung: Die Daten gehen verloren!",
|
"STR_INSTALL_YES_TIP1":"Warnung: Die Daten gehen verloren!",
|
||||||
"STR_INSTALL_YES_TIP2":"Bitte bestätigen Sie in der unteren Textbox mit YES, dass Sie anstelle eines Upgrades eine frische Installation durchführen möchten.",
|
"STR_INSTALL_YES_TIP2":"Bitte bestätigen Sie die untere Textbox, um eine Neuinstallation durchzuführen.",
|
||||||
"STR_PART_VENTOY_FS":"Dateisystem für die Ventoy-Partition",
|
"STR_PART_VENTOY_FS":"Dateisystem für die Ventoy-Partition",
|
||||||
"STR_PART_FS":"Dateisystem",
|
"STR_PART_FS":"Dateisystem",
|
||||||
"STR_PART_CLUSTER":"Clustergröße",
|
"STR_PART_CLUSTER":"Clustergröße",
|
||||||
"STR_PART_CLUSTER_DEFAULT":"Systemstandardwert",
|
"STR_PART_CLUSTER_DEFAULT":"Systemstandardwert",
|
||||||
"STR_DONATE":"Spenden",
|
"STR_DONATE":"Spenden",
|
||||||
"STR_4KN_UNSUPPORTED":"Ventoy unterstützt derzeit keine nativen 4K Geräte.",
|
"STR_4KN_UNSUPPORTED":"Ventoy unterstützt derzeit keine nativen 4K-Geräte.",
|
||||||
|
|
||||||
"STRXXX":""
|
"STRXXX":""
|
||||||
},
|
},
|
||||||
@@ -1496,65 +1496,65 @@
|
|||||||
{
|
{
|
||||||
"name":"Japanese (日本語)",
|
"name":"Japanese (日本語)",
|
||||||
"FontFamily":"Yu Gothic UI",
|
"FontFamily":"Yu Gothic UI",
|
||||||
"FontSize":14,
|
"FontSize":16,
|
||||||
"Author":"taichi eto, Bentnand, cmplstofB",
|
"Author":"taichi eto, Bentnand, cmplstofB, Re*Index.(ot_inc)",
|
||||||
|
|
||||||
"STR_ERROR":"エラー",
|
"STR_ERROR":"エラー",
|
||||||
"STR_WARNING":"警告",
|
"STR_WARNING":"警告",
|
||||||
"STR_INFO":"情報",
|
"STR_INFO":"情報",
|
||||||
"STR_INCORRECT_DIR":"正しいディレクトリーで実行してください",
|
"STR_INCORRECT_DIR":"正しいディレクトリで実行してください!",
|
||||||
"STR_INCORRECT_TREE_DIR":"この場所で実行するには、パッケージを導入してください。",
|
"STR_INCORRECT_TREE_DIR":"ここで実行をしないでください。リリースされたインストールパッケージをダウンロードして、実行をしてください。",
|
||||||
"STR_DEVICE":"機器",
|
"STR_DEVICE":"デバイス",
|
||||||
"STR_LOCAL_VER":"パッケージ中のVentoy",
|
"STR_LOCAL_VER":"パッケージ内のVentoy",
|
||||||
"STR_DISK_VER":"機器中のVentoy",
|
"STR_DISK_VER":"デバイス内のVentoy",
|
||||||
"STR_STATUS":"状態 - 準備完了",
|
"STR_STATUS":"状態 - 準備完了",
|
||||||
"STR_INSTALL":"導入",
|
"STR_INSTALL":"インストール",
|
||||||
"STR_UPDATE":"更新",
|
"STR_UPDATE":"アップデート",
|
||||||
"STR_UPDATE_TIP":"更新可能です、ISOファイルは改変されません。#@続行しますか?",
|
"STR_UPDATE_TIP":"アップグレードの操作は安全に行なわれ、ISOファイルは変更もされません。#@続行しますか?",
|
||||||
"STR_INSTALL_TIP":"選択した機器は完全に初期化され、保存されたデータは二度と復元できません。#@続行しますか?",
|
"STR_INSTALL_TIP":"デバイスはフォーマットされ、すべてのデータが失われます。#@続行しますか?",
|
||||||
"STR_INSTALL_TIP2":"選択した機器は完全に初期化され、保存されたデータは二度と復元できません。#@続行しますか?(再確認)",
|
"STR_INSTALL_TIP2":"デバイスはフォーマットされ、すべてのデータが失われます。#@続行しますか? (再確認)",
|
||||||
"STR_INSTALL_SUCCESS":"おめでとうございます。#@Ventoyの導入は正常に行われました。",
|
"STR_INSTALL_SUCCESS":"おめでとうございます!#@Ventoyがデバイスにインストールされました。",
|
||||||
"STR_INSTALL_FAILED":"導入中にエラーが発生しました。機器を再接続してもう一度やり直してください。詳細な記録はlog.txtにあります。",
|
"STR_INSTALL_FAILED":"インストール中にエラーが発生しました。USBデバイスを再接続をして再試行ができます。詳細については、log.txtを確認してください。何度も失敗する場合は、公式サイト内のFAQをご参照ください。",
|
||||||
"STR_UPDATE_SUCCESS":"おめでとうございます。#@Ventoyの更新は正常に行われました。",
|
"STR_UPDATE_SUCCESS":"おめでとうございます!#@Ventoyがデバイスで正常にアップデートされました。",
|
||||||
"STR_UPDATE_FAILED":"更新中にエラーが発生しました。機器を再接続してもう一度やり直してください。詳細な記録はlog.txtにあります。",
|
"STR_UPDATE_FAILED":"アップデート中にエラーが発生しました。USBデバイスを再接続して再試行ができます。詳細については、log.txtを確認してください。何度も失敗する場合は、公式サイトのFAQをご参照ください。",
|
||||||
"STR_WAIT_PROCESS":"スレッドが稼動しています。お待ちください...",
|
"STR_WAIT_PROCESS":"スレッドが実行中です。お待ちください...",
|
||||||
"STR_MENU_OPTION":"設定",
|
"STR_MENU_OPTION":"オプション",
|
||||||
"STR_MENU_SECURE_BOOT":"セキュアブート",
|
"STR_MENU_SECURE_BOOT":"セキュアブートのサポート",
|
||||||
"STR_MENU_PART_CFG":"区画構成",
|
"STR_MENU_PART_CFG":"パーティションの設定",
|
||||||
"STR_BTN_OK":"了解",
|
"STR_BTN_OK":"OK",
|
||||||
"STR_BTN_CANCEL":"取消",
|
"STR_BTN_CANCEL":"キャンセル",
|
||||||
"STR_PRESERVE_SPACE":"機器の最後に領域を確保する",
|
"STR_PRESERVE_SPACE":"ディスクの最後にある程度の容量を確保する",
|
||||||
"STR_SPACE_VAL_INVALID":"確保する領域の値が正しくありません",
|
"STR_SPACE_VAL_INVALID":"システム予約済みパーティションの値が無効です",
|
||||||
"STR_MENU_CLEAR":"Ventoyを削除",
|
"STR_MENU_CLEAR":"Ventoyを削除する",
|
||||||
"STR_CLEAR_SUCCESS":"Ventoyが機器から削除されました。",
|
"STR_CLEAR_SUCCESS":"Ventoyがデバイスから正常に削除されました。",
|
||||||
"STR_CLEAR_FAILED":"Ventoyを機器から削除できませんでした。機器を再接続してもう一度やり直してください。詳細な記録はlog.txtにあります。",
|
"STR_CLEAR_FAILED":"Ventoyをディスクから削除するときにエラーが発生しました。USBデバイスを再接続して再試行ができます。詳細については、log.txtを確認してください。",
|
||||||
"STR_MENU_PART_STYLE":"区画の構成方式",
|
"STR_MENU_PART_STYLE":"パーティションのスタイル",
|
||||||
"STR_DISK_2TB_MBR_ERROR":"2TB以上の機器にはGPTを使用してください。",
|
"STR_DISK_2TB_MBR_ERROR":"2TBを超えるデバイスの場合はGPTを選択してください",
|
||||||
"STR_SHOW_ALL_DEV":"すべての機器を表示",
|
"STR_SHOW_ALL_DEV":"すべてのデバイスを表示",
|
||||||
"STR_PART_ALIGN_4KB":"区画単位を4KBに揃える",
|
"STR_PART_ALIGN_4KB":"パーティションを4KBに揃える",
|
||||||
"STR_WEB_COMMUNICATION_ERR":"通信エラー:",
|
"STR_WEB_COMMUNICATION_ERR":"コミュニケーションエラー:",
|
||||||
"STR_WEB_REMOTE_ABNORMAL":"通信エラー: 通信先で異常が発生しています",
|
"STR_WEB_REMOTE_ABNORMAL":"コミュニケーションエラー: リモート先が異常になっています",
|
||||||
"STR_WEB_REQUEST_TIMEOUT":"通信エラー: 要求が時間切れしました",
|
"STR_WEB_REQUEST_TIMEOUT":"コミュニケーションエラー: リクエストがタイムアウトしました",
|
||||||
"STR_WEB_SERVICE_UNAVAILABLE":"通信エラー: サービスが利用できません",
|
"STR_WEB_SERVICE_UNAVAILABLE":"コミュニケーションエラー: サービスが利用できません",
|
||||||
"STR_WEB_TOKEN_MISMATCH":"デーモンの状態が更新されました。しばらくしてから再試行してください。",
|
"STR_WEB_TOKEN_MISMATCH":"デーモンのステータスが更新されました。後で再試行してください。",
|
||||||
"STR_WEB_SERVICE_BUSY":"サービスが繁忙です。後で再試行してください。",
|
"STR_WEB_SERVICE_BUSY":"サービスがビジーの状態です。後で再試行してください。",
|
||||||
"STR_MENU_VTSI_CREATE":"VTSIファイルを生成する",
|
"STR_MENU_VTSI_CREATE":"VTSIファイルを作成する",
|
||||||
"STR_VTSI_CREATE_TIP":"VTSIファイルを生成し,記憶装置への書き込みは行いません。#@続行しますか?",
|
"STR_VTSI_CREATE_TIP":"今回はデバイスへの書き込みを行なわず、VTSIファイルの作成のみを行ないます。#@続行しますか?",
|
||||||
"STR_VTSI_CREATE_SUCCESS":"VTSIファイルが生成されました。#@Rufus(3.15以上の版)を使って記憶装置に書き込んで,Ventoyの導入を完遂しましょう。",
|
"STR_VTSI_CREATE_SUCCESS":"VTSIファイルが正常に作成されました!#@Rufus(3.15以降)を使用してデバイスに書き込むことでVentoyのインストールが完了します。",
|
||||||
"STR_VTSI_CREATE_FAILED":"VTSIファイルを生成できませんでした。",
|
"STR_VTSI_CREATE_FAILED":"VTSIファイルの作成に失敗しました。",
|
||||||
"STR_MENU_PART_RESIZE":"非破壊的導入",
|
"STR_MENU_PART_RESIZE":"非破壊なインストール",
|
||||||
"STR_PART_RESIZE_TIP":"Ventoyを(可能であれば)非破壊的に導入します。#@続行しますか?",
|
"STR_PART_RESIZE_TIP":"Ventoyは、可能であれば非破壊なインストールを試みます。#@続行しますか?",
|
||||||
"STR_PART_RESIZE_SUCCESS":"おめでとうございます。#@Ventoyの非破壊的導入は正常に行われました。",
|
"STR_PART_RESIZE_SUCCESS":"おめでとうございます!#@Ventoyの非破壊なインストールが正常に完了しました。",
|
||||||
"STR_PART_RESIZE_FAILED":"Ventoyを非破壊的に導入できませんでした。詳細な記録はlog.txtにあります。",
|
"STR_PART_RESIZE_FAILED":"非破壊なインストールが失敗しました。詳細については、log.txtを確認してください。",
|
||||||
"STR_PART_RESIZE_UNSUPPORTED":"Ventoyを非破壊的に導入できませんでした。非破壊的導入にあたっての要件が満たされていません。詳細な記録はlog.txtにあります。",
|
"STR_PART_RESIZE_UNSUPPORTED":"いくつかの条件を満たしていないため、Ventoyの非破壊なインストールは停止されました。詳細については、log.txtを確認してください。",
|
||||||
"STR_INSTALL_YES_TIP1":"警告: データが消去されます",
|
"STR_INSTALL_YES_TIP1":"警告: データが失われます!",
|
||||||
"STR_INSTALL_YES_TIP2":"Ventoyを更新するのではなく新規に導入するということを確認するために,下の入力欄に「YES」と入力してください。",
|
"STR_INSTALL_YES_TIP2":"アップグレードではなく新規インストールを実行するには、下のテキストボックスに「YES」と入力してください。",
|
||||||
"STR_PART_VENTOY_FS":"Ventoy パーティションのファイル システム",
|
"STR_PART_VENTOY_FS":"Ventoyパーティションのファイルシステム",
|
||||||
"STR_PART_FS":"ファイルシステム",
|
"STR_PART_FS":"ファイルシステム",
|
||||||
"STR_PART_CLUSTER":"クラスターサイズ",
|
"STR_PART_CLUSTER":"クラスタサイズ",
|
||||||
"STR_PART_CLUSTER_DEFAULT":"システムのデフォルト値",
|
"STR_PART_CLUSTER_DEFAULT":"システムの既定値",
|
||||||
"STR_DONATE":"寄付",
|
"STR_DONATE":"寄付",
|
||||||
"STR_4KN_UNSUPPORTED":"現在、Ventoy は 4K ネイティブ デバイスをサポートしていません。",
|
"STR_4KN_UNSUPPORTED":"現在、Ventoyは4Kネイティブデバイスをサポートしていません。",
|
||||||
|
|
||||||
"STRXXX":""
|
"STRXXX":""
|
||||||
},
|
},
|
||||||
@@ -1575,13 +1575,13 @@
|
|||||||
"STR_STATUS":"Stato - PRONTO",
|
"STR_STATUS":"Stato - PRONTO",
|
||||||
"STR_INSTALL":"Installa",
|
"STR_INSTALL":"Installa",
|
||||||
"STR_UPDATE":"Aggiorna",
|
"STR_UPDATE":"Aggiorna",
|
||||||
"STR_UPDATE_TIP":"L'aggiornamento è sicuro, i file presenti nel dispositivo rimarranno invariati.#@Vuoi continuare?",
|
"STR_UPDATE_TIP":"L'aggiornamento è sicuro, i file presenti nel dispositivo rimarranno invariati.#@#@Vuoi continuare?",
|
||||||
"STR_INSTALL_TIP":"Il dispositivo verrà formattato e tutti i dati saranno persi.#@Vuoi continuare?",
|
"STR_INSTALL_TIP":"Il dispositivo verrà formattato e tutti i dati saranno persi.#@#@Vuoi continuare?",
|
||||||
"STR_INSTALL_TIP2":"Il dispositivo verrà formattato e tutti i dati saranno persi.#@Vuoi continuare (seconda verifica)?",
|
"STR_INSTALL_TIP2":"Il dispositivo verrà formattato e tutti i dati saranno persi.#@#@Vuoi continuare (seconda verifica)?",
|
||||||
"STR_INSTALL_SUCCESS":"Congratulazioni!#@Installazione di Ventoy nel dispositivo completata.",
|
"STR_INSTALL_SUCCESS":"Congratulazioni!#@#@Installazione di Ventoy nel dispositivo completata.",
|
||||||
"STR_INSTALL_FAILED":"Si è verificato un errore durante l'installazione.#@Riconnetti il dispositivo e riprova.#@Controlla il file log.txt per i dettagli.",
|
"STR_INSTALL_FAILED":"Si è verificato un errore durante l'installazione.#@#@Riconnetti il dispositivo e riprova.#@#@Per i dettagli controlla il file log.txt .",
|
||||||
"STR_UPDATE_SUCCESS":"Congratulazioni!#@Aggiornamento di Ventoy nel dispositivo completato",
|
"STR_UPDATE_SUCCESS":"Congratulazioni!#@#@Aggiornamento di Ventoy nel dispositivo completato",
|
||||||
"STR_UPDATE_FAILED":"Si è verificato un errore durante l'aggiornamento.#@È possibile riconnettere il dispositivo USB e riprovare.#@Controlla il file log.txt per i dettagli. Se l'aggiornamento non va a buon fine, consulta le FAQ sul sito ufficiale",
|
"STR_UPDATE_FAILED":"Si è verificato un errore durante l'aggiornamento.#@È possibile riconnettere il dispositivo USB e riprovare.#@Per i dettagli controlla il file log.txt.#@Se l'aggiornamento non va a buon fine, consulta le FAQ sul sito ufficiale",
|
||||||
"STR_WAIT_PROCESS":"Un processo è in esecuzione. Attendi...",
|
"STR_WAIT_PROCESS":"Un processo è in esecuzione. Attendi...",
|
||||||
"STR_MENU_OPTION":"Opzioni",
|
"STR_MENU_OPTION":"Opzioni",
|
||||||
"STR_MENU_SECURE_BOOT":"Avvio protetto (secure boot)",
|
"STR_MENU_SECURE_BOOT":"Avvio protetto (secure boot)",
|
||||||
@@ -1592,28 +1592,28 @@
|
|||||||
"STR_SPACE_VAL_INVALID":"Quantità di spazio da riservare non valida",
|
"STR_SPACE_VAL_INVALID":"Quantità di spazio da riservare non valida",
|
||||||
"STR_MENU_CLEAR":"Rimuovi Ventoy dal dispositivo",
|
"STR_MENU_CLEAR":"Rimuovi Ventoy dal dispositivo",
|
||||||
"STR_CLEAR_SUCCESS":"Rimozione di Ventoy dal dispositivo completata.",
|
"STR_CLEAR_SUCCESS":"Rimozione di Ventoy dal dispositivo completata.",
|
||||||
"STR_CLEAR_FAILED":"Si è verificato un errore durante la rimozione di Ventoy dal dispositivo.#@È possibile riconnettere il dispositivo USB e riprovare.#@Controlla il file log.txt per i dettagli",
|
"STR_CLEAR_FAILED":"Si è verificato un errore durante la rimozione di Ventoy dal dispositivo.#@È possibile riconnettere il dispositivo USB e riprovare.#@Per i dettagli controlla il file log.txt ",
|
||||||
"STR_MENU_PART_STYLE":"Stile tabella partizioni",
|
"STR_MENU_PART_STYLE":"Stile tabella partizioni",
|
||||||
"STR_DISK_2TB_MBR_ERROR":"Seleziona GPT per i dispositivi più grandi di 2TB",
|
"STR_DISK_2TB_MBR_ERROR":"Seleziona GPT per i dispositivi più grandi di 2TB",
|
||||||
"STR_SHOW_ALL_DEV":"Visualizza tutti i dispositivi",
|
"STR_SHOW_ALL_DEV":"Visualizza tutti i dispositivi",
|
||||||
"STR_PART_ALIGN_4KB":"Allinea le partizioni con 4KB",
|
"STR_PART_ALIGN_4KB":"Allinea le partizioni con 4KB",
|
||||||
"STR_WEB_COMMUNICATION_ERR":"Errore di comunicazione:",
|
"STR_WEB_COMMUNICATION_ERR":"Errore di comunicazione:",
|
||||||
"STR_WEB_REMOTE_ABNORMAL":"Errore di comunicazione: remoto anormale",
|
"STR_WEB_REMOTE_ABNORMAL":"Errore di comunicazione: remoto non normale",
|
||||||
"STR_WEB_REQUEST_TIMEOUT":"Errore di comunicazione: richiesta scaduta",
|
"STR_WEB_REQUEST_TIMEOUT":"Errore di comunicazione: richiesta scaduta",
|
||||||
"STR_WEB_SERVICE_UNAVAILABLE":"Errore di comunicazione: servizio non disponibile",
|
"STR_WEB_SERVICE_UNAVAILABLE":"Errore di comunicazione: servizio non disponibile",
|
||||||
"STR_WEB_TOKEN_MISMATCH":"Stato del demone aggiornato. Riprova più tardi.",
|
"STR_WEB_TOKEN_MISMATCH":"Stato del demon aggiornato. Riprova più tardi.",
|
||||||
"STR_WEB_SERVICE_BUSY":"Il servizio è occupato. Riprova più tardi.",
|
"STR_WEB_SERVICE_BUSY":"Il servizio è occupato. Riprova più tardi.",
|
||||||
"STR_MENU_VTSI_CREATE":"Genera file VTSI",
|
"STR_MENU_VTSI_CREATE":"Genera file VTSI",
|
||||||
"STR_VTSI_CREATE_TIP":"Questa volta non scriverà sul dispositivo, ma genererà solo un file VTSI#@Vuoi continuare?",
|
"STR_VTSI_CREATE_TIP":"Questa volta non scriverà sul dispositivo, ma genererà solo un file VTSI#@#@Vuoi continuare?",
|
||||||
"STR_VTSI_CREATE_SUCCESS":"Creazione file VTSI completata!#@Per scriverlo nel dispositivo in modo da completare l'installazione di Ventoy puoi usare Rufus (versione 3.15 o successiva).",
|
"STR_VTSI_CREATE_SUCCESS":"Creazione file VTSI completata!#@Per scriverlo nel dispositivo in modo da completare l'installazione di Ventoy puoi usare Rufus (versione 3.15 o successiva).",
|
||||||
"STR_VTSI_CREATE_FAILED":"Creazione file VTSI non riuscita.",
|
"STR_VTSI_CREATE_FAILED":"Creazione file VTSI non riuscita.",
|
||||||
"STR_MENU_PART_RESIZE":"Installazione non distruttiva",
|
"STR_MENU_PART_RESIZE":"Installazione non distruttiva",
|
||||||
"STR_PART_RESIZE_TIP":"Ventoy proverà, se possibile, l'installazione non distruttiva.#@Vuoi continuare?",
|
"STR_PART_RESIZE_TIP":"Ventoy proverà, se possibile, l'installazione non distruttiva.#@#@Vuoi continuare?",
|
||||||
"STR_PART_RESIZE_SUCCESS":"Congratulazioni!#@Installazione non distruttiva di Ventoy completata.",
|
"STR_PART_RESIZE_SUCCESS":"Congratulazioni!#@Installazione non distruttiva di Ventoy completata.",
|
||||||
"STR_PART_RESIZE_FAILED":"Installazione non distruttiva fallita.#@Controlla il file log.txt per i dettagli.",
|
"STR_PART_RESIZE_FAILED":"Installazione non distruttiva fallita.#@Controlla il file log.txt per i dettagli.",
|
||||||
"STR_PART_RESIZE_UNSUPPORTED":"L'installazione non distruttiva di Ventoy è stata interrotta perché alcune condizioni non possono essere soddisfatte.#@Controlla il file log.txt per i dettagli.",
|
"STR_PART_RESIZE_UNSUPPORTED":"L'installazione non distruttiva di Ventoy è stata interrotta perché alcune condizioni non possono essere soddisfatte.#@Controlla il file log.txt per i dettagli.",
|
||||||
"STR_INSTALL_YES_TIP1":"Attenzione: i dati verranno persi!",
|
"STR_INSTALL_YES_TIP1":"Attenzione: i dati verranno persi!",
|
||||||
"STR_INSTALL_YES_TIP2":"Digita YES nella casella di testo qui sotto per confermare che vuoi davvero eseguire un'installazione pulita anziché un aggiornamento.",
|
"STR_INSTALL_YES_TIP2":"Per confermare che vuoi davvero eseguire un'installazione pulita anziché un aggiornamento digita YES nella casella di testo qui sotto .",
|
||||||
"STR_PART_VENTOY_FS":"File system partizione Ventoy",
|
"STR_PART_VENTOY_FS":"File system partizione Ventoy",
|
||||||
"STR_PART_FS":"File system",
|
"STR_PART_FS":"File system",
|
||||||
"STR_PART_CLUSTER":"Dimensione cluster",
|
"STR_PART_CLUSTER":"Dimensione cluster",
|
||||||
@@ -2082,7 +2082,7 @@
|
|||||||
"name":"Vietnamese (Tiếng Việt)",
|
"name":"Vietnamese (Tiếng Việt)",
|
||||||
"FontFamily":"Tahoma",
|
"FontFamily":"Tahoma",
|
||||||
"FontSize":14,
|
"FontSize":14,
|
||||||
"Author":"Nguyen Quoc Hoang - cuumay.win",
|
"Author":"Nguyen Quoc Hoang - cuumay.win, HoangNPV - @isoamyl50",
|
||||||
|
|
||||||
"STR_ERROR":"Lỗi",
|
"STR_ERROR":"Lỗi",
|
||||||
"STR_WARNING":"Cảnh báo",
|
"STR_WARNING":"Cảnh báo",
|
||||||
@@ -2099,9 +2099,9 @@
|
|||||||
"STR_INSTALL_TIP":"Thiết bị sẽ được định dạng và do đó TẤT CẢ DỮ LIỆU trên thiết bị sẽ bị mất.#@Bạn thật sự muốn tiếp tục?",
|
"STR_INSTALL_TIP":"Thiết bị sẽ được định dạng và do đó TẤT CẢ DỮ LIỆU trên thiết bị sẽ bị mất.#@Bạn thật sự muốn tiếp tục?",
|
||||||
"STR_INSTALL_TIP2":"Thiết bị sẽ được định dạng và do đó TẤT CẢ DỮ LIỆU trên thiết bị sẽ bị mất.#@Bạn thật sự muốn tiếp tục? (Xác nhận lần hai)",
|
"STR_INSTALL_TIP2":"Thiết bị sẽ được định dạng và do đó TẤT CẢ DỮ LIỆU trên thiết bị sẽ bị mất.#@Bạn thật sự muốn tiếp tục? (Xác nhận lần hai)",
|
||||||
"STR_INSTALL_SUCCESS":"Chúc mừng bạn!#@Thiết bị đã được cài Ventoy thành công.",
|
"STR_INSTALL_SUCCESS":"Chúc mừng bạn!#@Thiết bị đã được cài Ventoy thành công.",
|
||||||
"STR_INSTALL_FAILED":"Đã xảy ra lỗi trong quá trình cài đặt Ventoy. Bạn có thể rút thiết bị ra và thử lại. Xem chi tiết ở tệp log.txt.",
|
"STR_INSTALL_FAILED":"Đã xảy ra lỗi trong quá trình cài đặt Ventoy. Bạn có thể cắm lại USB và thử lại. Xem chi tiết ở tệp log.txt. Nếu lỗi tiếp tục xảy ra, vui lòng đọc FAQ tại trang web chính thức.",
|
||||||
"STR_UPDATE_SUCCESS":"Chúc mừng bạn!#@Thiết bị đã được cập nhật Ventoy thành công.",
|
"STR_UPDATE_SUCCESS":"Chúc mừng bạn!#@Thiết bị đã được cập nhật Ventoy thành công.",
|
||||||
"STR_UPDATE_FAILED":"Đã xảy ra lỗi trong quá trình cập nhật Ventoy. Bạn có thể rút thiết bị ra và thử lại. Xem chi tiết ở tệp log.txt.",
|
"STR_UPDATE_FAILED":"Đã xảy ra lỗi trong quá trình cập nhật Ventoy. Bạn có thể cắm lại USB và thử lại. Xem chi tiết ở tệp log.txt. Nếu lỗi tiếp tục xảy ra, vui lòng đọc FAQ tại trang web chính thức.",
|
||||||
"STR_WAIT_PROCESS":"Một luồng xử lý đang chạy, vui lòng chờ...",
|
"STR_WAIT_PROCESS":"Một luồng xử lý đang chạy, vui lòng chờ...",
|
||||||
"STR_MENU_OPTION":"Tùy chọn",
|
"STR_MENU_OPTION":"Tùy chọn",
|
||||||
"STR_MENU_SECURE_BOOT":"Bật hỗ trợ Secure Boot",
|
"STR_MENU_SECURE_BOOT":"Bật hỗ trợ Secure Boot",
|
||||||
@@ -2112,7 +2112,7 @@
|
|||||||
"STR_SPACE_VAL_INVALID":"Giá trị dung lượng giữ lại không hợp lệ.",
|
"STR_SPACE_VAL_INVALID":"Giá trị dung lượng giữ lại không hợp lệ.",
|
||||||
"STR_MENU_CLEAR":"Gỡ bỏ Ventoy",
|
"STR_MENU_CLEAR":"Gỡ bỏ Ventoy",
|
||||||
"STR_CLEAR_SUCCESS":"Chúc mừng bạn!#@Thiết bị đã được gỡ bỏ Ventoy thành công.",
|
"STR_CLEAR_SUCCESS":"Chúc mừng bạn!#@Thiết bị đã được gỡ bỏ Ventoy thành công.",
|
||||||
"STR_CLEAR_FAILED":"Đã xảy ra lỗi trong quá trình gỡ bỏ Ventoy. Bạn có thể rút thiết bị ra và thử lại. Xem chi tiết ở tệp log.txt.",
|
"STR_CLEAR_FAILED":"Đã xảy ra lỗi trong quá trình gỡ bỏ Ventoy. Bạn có thể cắm lại USB và thử lại. Xem chi tiết ở tệp log.txt.",
|
||||||
"STR_MENU_PART_STYLE":"Kiểu phân vùng",
|
"STR_MENU_PART_STYLE":"Kiểu phân vùng",
|
||||||
"STR_DISK_2TB_MBR_ERROR":"Thiết bị có dung lượng lớn hơn 2TB. Vui lòng chọn Kiểu phân vùng là GPT.",
|
"STR_DISK_2TB_MBR_ERROR":"Thiết bị có dung lượng lớn hơn 2TB. Vui lòng chọn Kiểu phân vùng là GPT.",
|
||||||
"STR_SHOW_ALL_DEV":"Hiện tất cả Thiết bị",
|
"STR_SHOW_ALL_DEV":"Hiện tất cả Thiết bị",
|
||||||
@@ -2133,13 +2133,13 @@
|
|||||||
"STR_PART_RESIZE_FAILED":"Đã xảy ra lỗi trong quá trình cài Ventoy theo cách cài đặt không phá hủy. Xem chi tiết ở tệp log.txt.",
|
"STR_PART_RESIZE_FAILED":"Đã xảy ra lỗi trong quá trình cài Ventoy theo cách cài đặt không phá hủy. Xem chi tiết ở tệp log.txt.",
|
||||||
"STR_PART_RESIZE_UNSUPPORTED":"Cài Ventoy theo cách cài đặt không phá hủy đã bị dừng lại vì chưa đúng điều kiện. Xem chi tiết ở tệp log.txt.",
|
"STR_PART_RESIZE_UNSUPPORTED":"Cài Ventoy theo cách cài đặt không phá hủy đã bị dừng lại vì chưa đúng điều kiện. Xem chi tiết ở tệp log.txt.",
|
||||||
"STR_INSTALL_YES_TIP1":"Cảnh báo: Dữ liệu sẽ bị mất !",
|
"STR_INSTALL_YES_TIP1":"Cảnh báo: Dữ liệu sẽ bị mất !",
|
||||||
"STR_INSTALL_YES_TIP2":"Vui lòng nhập YES vào textbox bên dưới để xác nhận bạn muốn cài mới thay vì cài nâng cấp.",
|
"STR_INSTALL_YES_TIP2":"Vui lòng nhập YES vào ô bên dưới để xác nhận bạn muốn cài mới thay vì cài nâng cấp.",
|
||||||
"STR_PART_VENTOY_FS":"Hệ thống tập tin cho Phân vùng Ventoy",
|
"STR_PART_VENTOY_FS":"Hệ thống tập tin cho Phân vùng Ventoy",
|
||||||
"STR_PART_FS":"Hệ thống tập tin",
|
"STR_PART_FS":"Hệ thống tập tin",
|
||||||
"STR_PART_CLUSTER":"Cỡ Cluster",
|
"STR_PART_CLUSTER":"Kích thước Cluster",
|
||||||
"STR_PART_CLUSTER_DEFAULT":"Theo mặc định hệ thống",
|
"STR_PART_CLUSTER_DEFAULT":"Theo giá trị mặc định của hệ thống",
|
||||||
"STR_DONATE":"Thưởng tác giả",
|
"STR_DONATE":"Ủng hộ tác giả",
|
||||||
"STR_4KN_UNSUPPORTED":"Currently Ventoy does not support 4K native devices.",
|
"STR_4KN_UNSUPPORTED":"Hiện tại Ventoy không hỗ trợ các thiết bị 4K native.",
|
||||||
|
|
||||||
"STRXXX":""
|
"STRXXX":""
|
||||||
},
|
},
|
||||||
@@ -2420,7 +2420,7 @@
|
|||||||
"STR_STATUS":"Status - SIAP",
|
"STR_STATUS":"Status - SIAP",
|
||||||
"STR_INSTALL":"Pasang",
|
"STR_INSTALL":"Pasang",
|
||||||
"STR_UPDATE":"Perbarui",
|
"STR_UPDATE":"Perbarui",
|
||||||
"STR_UPDATE_TIP":"Operasi pembaruan ini aman, Tidak akan ada perubahan berkas ISO.#@Lanjutkan?",
|
"STR_UPDATE_TIP":"Operasi pembaruan ini aman, tidak akan ada perubahan pada berkas ISO.#@Lanjutkan?",
|
||||||
"STR_INSTALL_TIP":"Disk akan di-format dan semua data akan hilang.#@Lanjutkan?",
|
"STR_INSTALL_TIP":"Disk akan di-format dan semua data akan hilang.#@Lanjutkan?",
|
||||||
"STR_INSTALL_TIP2":"Disk akan di-format dan semua data akan hilang.#@Lanjutkan? (YAKIN)",
|
"STR_INSTALL_TIP2":"Disk akan di-format dan semua data akan hilang.#@Lanjutkan? (YAKIN)",
|
||||||
"STR_INSTALL_SUCCESS":"Selamat!#@Ventoy telah berhasil terpasang di perangkat ini.",
|
"STR_INSTALL_SUCCESS":"Selamat!#@Ventoy telah berhasil terpasang di perangkat ini.",
|
||||||
@@ -2434,11 +2434,11 @@
|
|||||||
"STR_BTN_OK":"OK",
|
"STR_BTN_OK":"OK",
|
||||||
"STR_BTN_CANCEL":"Batal",
|
"STR_BTN_CANCEL":"Batal",
|
||||||
"STR_PRESERVE_SPACE":"Menyisakan sejumlah ruang penyimpanan pada disk di bawah ini",
|
"STR_PRESERVE_SPACE":"Menyisakan sejumlah ruang penyimpanan pada disk di bawah ini",
|
||||||
"STR_SPACE_VAL_INVALID":"Nilai sisa ruang tidak valid",
|
"STR_SPACE_VAL_INVALID":"Nilai sisa ruang tidak benar",
|
||||||
"STR_MENU_CLEAR":"Bersihkan Ventoy",
|
"STR_MENU_CLEAR":"Bersihkan Ventoy",
|
||||||
"STR_CLEAR_SUCCESS":"Ventoy telah berhasil dihapus pada perangkat ini.",
|
"STR_CLEAR_SUCCESS":"Ventoy telah berhasil dihapus pada perangkat ini.",
|
||||||
"STR_CLEAR_FAILED":"Terjadi kesalahan ketika penghapusan berlangsung. Anda perlu mencabut-pasang ulang USB dan coba lagi. Periksa berkas log.txt untuk detil.",
|
"STR_CLEAR_FAILED":"Terjadi kesalahan ketika penghapusan berlangsung. Anda perlu mencabut-pasang ulang USB dan coba lagi. Periksa berkas log.txt untuk detil.",
|
||||||
"STR_MENU_PART_STYLE":"Gaya Partisi",
|
"STR_MENU_PART_STYLE":"Model Partisi",
|
||||||
"STR_DISK_2TB_MBR_ERROR":"Silakan pilih GPT untuk disk yang lebih dari 2TB",
|
"STR_DISK_2TB_MBR_ERROR":"Silakan pilih GPT untuk disk yang lebih dari 2TB",
|
||||||
"STR_SHOW_ALL_DEV":"Tampilkan semua perangkat",
|
"STR_SHOW_ALL_DEV":"Tampilkan semua perangkat",
|
||||||
"STR_PART_ALIGN_4KB":"Meluruskan dengan partisi 4KB",
|
"STR_PART_ALIGN_4KB":"Meluruskan dengan partisi 4KB",
|
||||||
@@ -2458,7 +2458,7 @@
|
|||||||
"STR_PART_RESIZE_FAILED":"Pemasangan tanpa merusakkan gagal, periksa berkas log.txt untuk detil.",
|
"STR_PART_RESIZE_FAILED":"Pemasangan tanpa merusakkan gagal, periksa berkas log.txt untuk detil.",
|
||||||
"STR_PART_RESIZE_UNSUPPORTED":"Pemasangan tanpa merusakkan Ventoy terhenti karena beberapa kondisi yang tidak mendukung. Periksa berkas log.txt untuk detil.",
|
"STR_PART_RESIZE_UNSUPPORTED":"Pemasangan tanpa merusakkan Ventoy terhenti karena beberapa kondisi yang tidak mendukung. Periksa berkas log.txt untuk detil.",
|
||||||
"STR_INSTALL_YES_TIP1":"Peringatan: Data akan hilang!",
|
"STR_INSTALL_YES_TIP1":"Peringatan: Data akan hilang!",
|
||||||
"STR_INSTALL_YES_TIP2":"Silakan ketik YES pada kotak tulis di bawah untuk meyakinkan bahwa anda memang untuk melakukan pemasangan baru ketimbang memperbaruinya",
|
"STR_INSTALL_YES_TIP2":"Silakan ketik YES pada kotak tulis di bawah untuk mengonfirmasikan bahwa anda memang yakin melakukan pemasangan baru ketimbang memperbaruinya",
|
||||||
"STR_PART_VENTOY_FS":"Berkas Sistem Untuk Partisi Ventoy",
|
"STR_PART_VENTOY_FS":"Berkas Sistem Untuk Partisi Ventoy",
|
||||||
"STR_PART_FS":"Berkas Sistem",
|
"STR_PART_FS":"Berkas Sistem",
|
||||||
"STR_PART_CLUSTER":"Ukuran Kelompok",
|
"STR_PART_CLUSTER":"Ukuran Kelompok",
|
||||||
|
8
LZIP/buildlz4.txt
Normal file
8
LZIP/buildlz4.txt
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
|
||||||
|
/opt/diet64/bin/diet -Os gcc -D_FILE_OFFSET_BITS=64 smallz4cat.c -o lz4cat64
|
||||||
|
|
||||||
|
aarch64-buildroot-linux-uclibc-gcc -Os -static -D_FILE_OFFSET_BITS=64 smallz4cat.c -o lz4cataa64
|
||||||
|
|
||||||
|
mips64el-linux-musl-gcc -mips64r2 -mabi=64 -static -Os -D_FILE_OFFSET_BITS=64 smallz4cat.c -o lz4catm64e
|
||||||
|
|
||||||
|
|
@@ -442,7 +442,7 @@ int ventoy_fill_gpt(uint64_t size, uint64_t reserve, int align4k, VTOY_GPT_INFO
|
|||||||
ventoy_gen_preudo_uuid(&(Table[1].PartGuid));
|
ventoy_gen_preudo_uuid(&(Table[1].PartGuid));
|
||||||
Table[1].StartLBA = Table[0].LastLBA + 1;
|
Table[1].StartLBA = Table[0].LastLBA + 1;
|
||||||
Table[1].LastLBA = Table[1].StartLBA + VTOYEFI_PART_BYTES / 512 - 1;
|
Table[1].LastLBA = Table[1].StartLBA + VTOYEFI_PART_BYTES / 512 - 1;
|
||||||
Table[1].Attr = 0xC000000000000001ULL;
|
Table[1].Attr = 0x8000000000000000ULL;
|
||||||
ventoy_fill_gpt_partname(Table[1].Name, "VTOYEFI");
|
ventoy_fill_gpt_partname(Table[1].Name, "VTOYEFI");
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
|
@@ -727,6 +727,7 @@ static void * ventoy_update_thread(void *data)
|
|||||||
MBR_HEAD MBR;
|
MBR_HEAD MBR;
|
||||||
ventoy_disk *disk = NULL;
|
ventoy_disk *disk = NULL;
|
||||||
ventoy_thread_data *thread = (ventoy_thread_data *)data;
|
ventoy_thread_data *thread = (ventoy_thread_data *)data;
|
||||||
|
VTOY_GPT_INFO *pstGPT = NULL;
|
||||||
|
|
||||||
vdebug("ventoy_update_thread run ...\n");
|
vdebug("ventoy_update_thread run ...\n");
|
||||||
|
|
||||||
@@ -790,6 +791,36 @@ static void * ventoy_update_thread(void *data)
|
|||||||
vlog("No need to update MBR\n");
|
vlog("No need to update MBR\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (disk->vtoydata.partition_style)
|
||||||
|
{
|
||||||
|
pstGPT = (VTOY_GPT_INFO *)malloc(sizeof(VTOY_GPT_INFO));
|
||||||
|
memset(pstGPT, 0, sizeof(VTOY_GPT_INFO));
|
||||||
|
|
||||||
|
offset = lseek(fd, 0, SEEK_SET);
|
||||||
|
len = read(fd, pstGPT, sizeof(VTOY_GPT_INFO));
|
||||||
|
vlog("Read GPT table offset:%llu len:%llu ...\n", (_ull)offset, (_ull)len);
|
||||||
|
|
||||||
|
if (pstGPT->PartTbl[1].Attr != 0x8000000000000000ULL)
|
||||||
|
{
|
||||||
|
vlog("Update EFI part attr from 0x%016llx to 0x%016llx\n",
|
||||||
|
pstGPT->PartTbl[1].Attr, 0x8000000000000000ULL);
|
||||||
|
|
||||||
|
pstGPT->PartTbl[1].Attr = 0x8000000000000000ULL;
|
||||||
|
|
||||||
|
pstGPT->Head.PartTblCrc = ventoy_crc32(pstGPT->PartTbl, sizeof(pstGPT->PartTbl));
|
||||||
|
pstGPT->Head.Crc = 0;
|
||||||
|
pstGPT->Head.Crc = ventoy_crc32(&(pstGPT->Head), pstGPT->Head.Length);
|
||||||
|
ventoy_write_gpt_part_table(fd, disk->size_in_byte, pstGPT);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
vlog("No need to update EFI part attr\n");
|
||||||
|
}
|
||||||
|
free(pstGPT);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
g_current_progress = PT_SYNC_DATA1;
|
g_current_progress = PT_SYNC_DATA1;
|
||||||
|
|
||||||
vlog("fsync data1...\n");
|
vlog("fsync data1...\n");
|
||||||
|
@@ -1 +1 @@
|
|||||||
20231003 23:36:44
|
20231014 18:52:12
|
@@ -1 +1 @@
|
|||||||
ar_ARbn_BNcs_CZde_DEel_GRen_USes_ESfr_FRhi_HIhr_HRhu_HUid_IDja_JPka_GEko_KRpl_PLpt_BRpt_PTru_RUsr_RSta_INtr_TRuk_UAzh_CNzh_TW
|
ar_ARbn_BNcs_CZde_DEel_GRen_USes_ESfr_FRhi_HIhr_HRhu_HUid_IDit_ITja_JPka_GEko_KRpl_PLpt_BRpt_PTru_RUsr_RSta_INtr_TRuk_UAzh_CNzh_TW
|
@@ -757,7 +757,7 @@
|
|||||||
|
|
||||||
<footer class="main-footer">
|
<footer class="main-footer">
|
||||||
<div class="pull-right hidden-xs">
|
<div class="pull-right hidden-xs">
|
||||||
<b id="plugson_build_date">20231003 23:36:44</b>
|
<b id="plugson_build_date">20231014 18:52:12</b>
|
||||||
</div>
|
</div>
|
||||||
<strong><a href="https://www.ventoy.net" target="_blank">https://www.ventoy.net</a></strong>
|
<strong><a href="https://www.ventoy.net" target="_blank">https://www.ventoy.net</a></strong>
|
||||||
</footer>
|
</footer>
|
||||||
@@ -777,10 +777,10 @@
|
|||||||
<script src="/static/js/jQuery-2.1.4.min.js"></script>
|
<script src="/static/js/jQuery-2.1.4.min.js"></script>
|
||||||
<!-- jquery validate -->
|
<!-- jquery validate -->
|
||||||
<script src="/static/js/jquery.validate.min.js"></script>
|
<script src="/static/js/jquery.validate.min.js"></script>
|
||||||
<script src="/static/js/jquery.validate.vtoymethods.js?v=189"></script>
|
<script src="/static/js/jquery.validate.vtoymethods.js?v=192"></script>
|
||||||
|
|
||||||
<script src="/static/js/jquery.vtoy.alert.js?v=189"></script>
|
<script src="/static/js/jquery.vtoy.alert.js?v=192"></script>
|
||||||
<script src="/static/js/vtoy.js?v=189"></script>
|
<script src="/static/js/vtoy.js?v=192"></script>
|
||||||
<script src="/static/js/md5.min.js"></script>
|
<script src="/static/js/md5.min.js"></script>
|
||||||
|
|
||||||
<!-- Bootstrap 3.3.5 -->
|
<!-- Bootstrap 3.3.5 -->
|
||||||
|
@@ -1 +1 @@
|
|||||||
ar_ARbn_BNcs_CZde_DEel_GRen_USes_ESfr_FRhi_HIhr_HRhu_HUid_IDja_JPka_GEko_KRpl_PLpt_BRpt_PTru_RUsl_sisr_RSta_INtr_TRuk_UAzh_CNzh_TW
|
ar_ARbn_BNcs_CZde_DEel_GRen_USes_ESfr_FRhi_HIhr_HRhu_HUid_IDit_ITja_JPka_GEko_KRpl_PLpt_BRpt_PTru_RUsl_sisr_RSta_INtr_TRuk_UAzh_CNzh_TW
|
@@ -357,7 +357,12 @@
|
|||||||
var id = $(this).attr('id');
|
var id = $(this).attr('id');
|
||||||
if (typeof(id) != 'undefined' && id.startsWith('id_theme_file')) {
|
if (typeof(id) != 'undefined' && id.startsWith('id_theme_file')) {
|
||||||
$(this).change(function() {
|
$(this).change(function() {
|
||||||
m_data_theme[current_tab_index].default_file =parseInt(id.substr(id.length - 1));
|
var prelen = 'id_theme_file_radio'.length;
|
||||||
|
m_data_theme[current_tab_index].default_file = parseInt(id.substr(id.length - 1));
|
||||||
|
if (id.substr(0, prelen) === 'id_theme_file_radio') {
|
||||||
|
m_data_theme[current_tab_index].default_file = parseInt(id.substr(prelen));
|
||||||
|
}
|
||||||
|
|
||||||
VtoySaveCurrentPage();
|
VtoySaveCurrentPage();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
13
README.md
13
README.md
@@ -18,7 +18,7 @@ You can also browse ISO/WIM/IMG/VHD(x)/EFI files in local disk and boot them.<br
|
|||||||
x86 Legacy BIOS, IA32 UEFI, x86_64 UEFI, ARM64 UEFI and MIPS64EL UEFI are supported in the same way.<br/>
|
x86 Legacy BIOS, IA32 UEFI, x86_64 UEFI, ARM64 UEFI and MIPS64EL UEFI are supported in the same way.<br/>
|
||||||
Both MBR and GPT partition style are supported in the same way.<br/>
|
Both MBR and GPT partition style are supported in the same way.<br/>
|
||||||
Most type of OS supported(Windows/WinPE/Linux/Unix/ChromeOS/Vmware/Xen...) <br/>
|
Most type of OS supported(Windows/WinPE/Linux/Unix/ChromeOS/Vmware/Xen...) <br/>
|
||||||
1100+ ISO files are tested (<a href="https://www.ventoy.net/en/isolist.html">List</a>). 90%+ distros in <a href="https://distrowatch.com/">distrowatch.com</a> supported (<a href="https://www.ventoy.net/en/distrowatch.html">Details</a>). <br/>
|
1200+ ISO files are tested (<a href="https://www.ventoy.net/en/isolist.html">List</a>). 90%+ distros in <a href="https://distrowatch.com/">distrowatch.com</a> supported (<a href="https://www.ventoy.net/en/distrowatch.html">Details</a>). <br/>
|
||||||
<br/>Official Website: <a href=https://www.ventoy.net>https://www.ventoy.net</a>
|
<br/>Official Website: <a href=https://www.ventoy.net>https://www.ventoy.net</a>
|
||||||
</h4>
|
</h4>
|
||||||
|
|
||||||
@@ -27,10 +27,10 @@ Most type of OS supported(Windows/WinPE/Linux/Unix/ChromeOS/Vmware/Xen...) <br/>
|
|||||||
Windows 7, Windows 8, Windows 8.1, Windows 10, Windows 11, Windows Server 2012, Windows Server 2012 R2, Windows Server 2016, Windows Server 2019, Windows Server 2022, WinPE
|
Windows 7, Windows 8, Windows 8.1, Windows 10, Windows 11, Windows Server 2012, Windows Server 2012 R2, Windows Server 2016, Windows Server 2019, Windows Server 2022, WinPE
|
||||||
|
|
||||||
**Linux**
|
**Linux**
|
||||||
Debian, Ubuntu, CentOS(6/7/8/9), RHEL(6/7/8/9), Deepin, Fedora, Rocky Linux, AlmaLinux, EuroLinux(6/7/8/9), openEuler, OpenAnolis, SLES, openSUSE, MX Linux, Manjaro, Linux Mint, Endless OS, Elementary OS, Solus, Linx, Zorin, antiX, PClinuxOS, Arch, ArcoLinux, ArchLabs, BlackArch, Obarun, Artix Linux, Puppy Linux, Tails, Slax, Kali, Mageia, Slackware, Q4OS, Archman, Gentoo, Pentoo, NixOS, Kylin, openKylin, Ubuntu Kylin, KylinSec, Lubuntu, Xubuntu, Kubuntu, Ubuntu MATE, Ubuntu Budgie, Ubuntu Studio, Bluestar, OpenMandriva, ExTiX, Netrunner, ALT Linux, Nitrux, Peppermint, KDE neon, Linux Lite, Parrot OS, Qubes, Pop OS, ROSA, Void Linux, Star Linux, EndeavourOS, MakuluLinux, Voyager, Feren, ArchBang, LXLE, Knoppix, Calculate Linux, Clear Linux, Pure OS, Oracle Linux, Trident, Septor, Porteus, Devuan, GoboLinux, 4MLinux, Simplicity Linux, Zeroshell, Android-x86, netboot.xyz, Slitaz, SuperGrub2Disk, Proxmox VE, Kaspersky Rescue, SystemRescueCD, MemTest86, MemTest86+, MiniTool Partition Wizard, Parted Magic, veket, Sabayon, Scientific, alpine, ClearOS, CloneZilla, Berry Linux, Trisquel, Ataraxia Linux, Minimal Linux Live, BackBox Linux, Emmabuntüs, ESET SysRescue Live,Nova Linux, AV Linux, RoboLinux, NuTyX, IPFire, SELKS, ZStack, Enso Linux, Security Onion, Network Security Toolkit, Absolute Linux, TinyCore, Springdale Linux, Frost Linux, Shark Linux, LinuxFX, Snail Linux, Astra Linux, Namib Linux, Resilient Linux, Virage Linux, Blackweb Security OS, R-DriveImage, O-O.DiskImage, Macrium, ToOpPy LINUX, GNU Guix, YunoHost, foxclone, siduction, Adelie Linux, Elive, Pardus, CDlinux, AcademiX, Austrumi, Zenwalk, Anarchy, DuZeru, BigLinux, OpenMediaVault, Ubuntu DP, Exe GNU/Linux, 3CX Phone System, KANOTIX, Grml, Karoshi, PrimTux, ArchStrike, CAELinux, Cucumber, Fatdog, ForLEx, Hanthana, Kwort, MiniNo, Redcore, Runtu, Asianux, Clu Linux Live, Uruk, OB2D, BlueOnyx, Finnix, HamoniKR, Parabola, LinHES, LinuxConsole, BEE free, Untangle, Pearl, Thinstation, TurnKey, tuxtrans, Neptune, HefftorLinux, GeckoLinux, Mabox Linux, Zentyal, Maui, Reborn OS, SereneLinux , SkyWave Linux, Kaisen Linux, Regata OS, TROM-Jaro, DRBL Linux, Chalet OS, Chapeau, Desa OS, BlankOn, OpenMamba, Frugalware, Kibojoe Linux, Revenge OS, Tsurugi Linux, Drauger OS, Hash Linux, gNewSense, Ikki Boot, SteamOS, Hyperbola, VyOS, EasyNAS, SuperGamer, Live Raizo, Swift Linux, RebeccaBlackOS, Daphile, CRUX, Univention, Ufficio Zero, Rescuezilla, Phoenix OS, Garuda Linux, Mll, NethServer, OSGeoLive, Easy OS, Volumio, FreedomBox, paldo, UBOS, Recalbox, batocera, Lakka, LibreELEC, Pardus Topluluk, Pinguy, KolibriOS, Elastix, Arya, Omoikane, Omarine, Endian Firewall, Hamara, Rocks Cluster, MorpheusArch, Redo, Slackel, SME Server, APODIO, Smoothwall, Dragora, Linspire, Secure-K OS, Peach OSI, Photon, Plamo, SuperX, Bicom, Ploplinux, HP SPP, LliureX, Freespire, DietPi, BOSS, Webconverger, Lunar, TENS, Source Mage, RancherOS, T2, Vine, Pisi, blackPanther, mAid, Acronis, Active.Boot, AOMEI, Boot.Repair, CAINE, DaRT, EasyUEFI, R-Drive, PrimeOS, Avira Rescue System, bitdefender, Checkra1n Linux, Lenovo Diagnostics, Clover, Bliss-OS, Lenovo BIOS Update, Arcabit Rescue Disk, MiyoLinux, TeLOS, Kerio Control, RED OS, OpenWrt, MocaccinoOS, EasyStartup, Pyabr, Refracta, Eset SysRescue, Linpack Xtreme, Archcraft, NHVBOOT, pearOS, SeaTools, Easy Recovery Essentional, iKuai, StorageCraft SCRE, ZFSBootMenu, TROMjaro, BunsenLabs, Todo en Uno, ChallengerOS, Nobara, Holo, CachyOS, Peux OS, Vanilla OS, ShredOS, paladin, Palen1x, dban, ReviOS, HelenOS, XeroLinux, ......
|
Debian, Ubuntu, CentOS(6/7/8/9), RHEL(6/7/8/9), Deepin, Fedora, Rocky Linux, AlmaLinux, EuroLinux(6/7/8/9), openEuler, OpenAnolis, SLES, openSUSE, MX Linux, Manjaro, Linux Mint, Endless OS, Elementary OS, Solus, Linx, Zorin, antiX, PClinuxOS, Arch, ArcoLinux, ArchLabs, BlackArch, Obarun, Artix Linux, Puppy Linux, Tails, Slax, Kali, Mageia, Slackware, Q4OS, Archman, Gentoo, Pentoo, NixOS, Kylin, openKylin, Ubuntu Kylin, KylinSec, Lubuntu, Xubuntu, Kubuntu, Ubuntu MATE, Ubuntu Budgie, Ubuntu Studio, Bluestar, OpenMandriva, ExTiX, Netrunner, ALT Linux, Nitrux, Peppermint, KDE neon, Linux Lite, Parrot OS, Qubes, Pop OS, ROSA, Void Linux, Star Linux, EndeavourOS, MakuluLinux, Voyager, Feren, ArchBang, LXLE, Knoppix, Calculate Linux, Clear Linux, Pure OS, Oracle Linux, Trident, Septor, Porteus, Devuan, GoboLinux, 4MLinux, Simplicity Linux, Zeroshell, Android-x86, netboot.xyz, Slitaz, SuperGrub2Disk, Proxmox VE, Kaspersky Rescue, SystemRescueCD, MemTest86, MemTest86+, MiniTool Partition Wizard, Parted Magic, veket, Sabayon, Scientific, alpine, ClearOS, CloneZilla, Berry Linux, Trisquel, Ataraxia Linux, Minimal Linux Live, BackBox Linux, Emmabuntüs, ESET SysRescue Live,Nova Linux, AV Linux, RoboLinux, NuTyX, IPFire, SELKS, ZStack, Enso Linux, Security Onion, Network Security Toolkit, Absolute Linux, TinyCore, Springdale Linux, Frost Linux, Shark Linux, LinuxFX, Snail Linux, Astra Linux, Namib Linux, Resilient Linux, Virage Linux, Blackweb Security OS, R-DriveImage, O-O.DiskImage, Macrium, ToOpPy LINUX, GNU Guix, YunoHost, foxclone, siduction, Adelie Linux, Elive, Pardus, CDlinux, AcademiX, Austrumi, Zenwalk, Anarchy, DuZeru, BigLinux, OpenMediaVault, Ubuntu DP, Exe GNU/Linux, 3CX Phone System, KANOTIX, Grml, Karoshi, PrimTux, ArchStrike, CAELinux, Cucumber, Fatdog, ForLEx, Hanthana, Kwort, MiniNo, Redcore, Runtu, Asianux, Clu Linux Live, Uruk, OB2D, BlueOnyx, Finnix, HamoniKR, Parabola, LinHES, LinuxConsole, BEE free, Untangle, Pearl, Thinstation, TurnKey, tuxtrans, Neptune, HefftorLinux, GeckoLinux, Mabox Linux, Zentyal, Maui, Reborn OS, SereneLinux , SkyWave Linux, Kaisen Linux, Regata OS, TROM-Jaro, DRBL Linux, Chalet OS, Chapeau, Desa OS, BlankOn, OpenMamba, Frugalware, Kibojoe Linux, Revenge OS, Tsurugi Linux, Drauger OS, Hash Linux, gNewSense, Ikki Boot, SteamOS, Hyperbola, VyOS, EasyNAS, SuperGamer, Live Raizo, Swift Linux, RebeccaBlackOS, Daphile, CRUX, Univention, Ufficio Zero, Rescuezilla, Phoenix OS, Garuda Linux, Mll, NethServer, OSGeoLive, Easy OS, Volumio, FreedomBox, paldo, UBOS, Recalbox, batocera, Lakka, LibreELEC, Pardus Topluluk, Pinguy, KolibriOS, Elastix, Arya, Omoikane, Omarine, Endian Firewall, Hamara, Rocks Cluster, MorpheusArch, Redo, Slackel, SME Server, APODIO, Smoothwall, Dragora, Linspire, Secure-K OS, Peach OSI, Photon, Plamo, SuperX, Bicom, Ploplinux, HP SPP, LliureX, Freespire, DietPi, BOSS, Webconverger, Lunar, TENS, Source Mage, RancherOS, T2, Vine, Pisi, blackPanther, mAid, Acronis, Active.Boot, AOMEI, Boot.Repair, CAINE, DaRT, EasyUEFI, R-Drive, PrimeOS, Avira Rescue System, bitdefender, Checkra1n Linux, Lenovo Diagnostics, Clover, Bliss-OS, Lenovo BIOS Update, Arcabit Rescue Disk, MiyoLinux, TeLOS, Kerio Control, RED OS, OpenWrt, MocaccinoOS, EasyStartup, Pyabr, Refracta, Eset SysRescue, Linpack Xtreme, Archcraft, NHVBOOT, pearOS, SeaTools, Easy Recovery Essentional, iKuai, StorageCraft SCRE, ZFSBootMenu, TROMjaro, BunsenLabs, Todo en Uno, ChallengerOS, Nobara, Holo, CachyOS, Peux OS, Vanilla OS, ShredOS, paladin, Palen1x, dban, ReviOS, HelenOS, XeroLinux, Tiny 11, chimera linux, CuteFish, DragonOs, Rhino Linux, vanilladpup, crystal, IGELOS, MiniOS, gnoppix, PikaOS, ......
|
||||||
|
|
||||||
**Unix**
|
**Unix**
|
||||||
DragonFly FreeBSD pfSense GhostBSD FreeNAS TrueNAS XigmaNAS FuryBSD OPNsense HardenedBSD MidnightBSD ClonOS EmergencyBootKit
|
DragonFly, FreeBSD, pfSense, GhostBSD, FreeNAS, TrueNAS, XigmaNAS, FuryBSD, OPNsense, HardenedBSD, MidnightBSD, ClonOS, EmergencyBootKit
|
||||||
|
|
||||||
**ChromeOS**
|
**ChromeOS**
|
||||||
FydeOS, CloudReady, ChromeOS Flex
|
FydeOS, CloudReady, ChromeOS Flex
|
||||||
@@ -38,11 +38,6 @@ FydeOS, CloudReady, ChromeOS Flex
|
|||||||
**Other**
|
**Other**
|
||||||
VMware ESXi, Citrix XenServer, Xen XCP-ng
|
VMware ESXi, Citrix XenServer, Xen XCP-ng
|
||||||
|
|
||||||
# Subscription Service
|
|
||||||
Ventoy is an open source software under GPLv3 license.
|
|
||||||
But the Ventoy project needs to pay for the server hosting, domain name, bandwidth, many USB sticks for testing, large capacity of HDD (for downloading ISO files) and so on.
|
|
||||||
For the better and sustainable development of Ventoy, I provide the [【subscription service】](https://www.ventoy.net/en/doc_subscription.html).
|
|
||||||
|
|
||||||
|
|
||||||
# Tested Image Report
|
# Tested Image Report
|
||||||
[【How to report a successfully tested image file】](https://github.com/ventoy/Ventoy/issues/1195)
|
[【How to report a successfully tested image file】](https://github.com/ventoy/Ventoy/issues/1195)
|
||||||
@@ -73,7 +68,7 @@ A GUI Ventoy plugin configurator. [VentoyPlugson](https://www.ventoy.net/en/plug
|
|||||||
* Menu alias, Menu tip message supported
|
* Menu alias, Menu tip message supported
|
||||||
* Password protect supported
|
* Password protect supported
|
||||||
* Native boot menu style for Legacy & UEFI
|
* Native boot menu style for Legacy & UEFI
|
||||||
* Most types of OS supported, 1100+ iso files tested
|
* Most types of OS supported, 1200+ iso files tested
|
||||||
* Linux vDisk boot supported
|
* Linux vDisk boot supported
|
||||||
* Not only boot but also complete installation process
|
* Not only boot but also complete installation process
|
||||||
* Menu dynamically switchable between List/TreeView mode
|
* Menu dynamically switchable between List/TreeView mode
|
||||||
|
10
Unix/BuildUnixKmod.txt
Normal file
10
Unix/BuildUnixKmod.txt
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
ventoy_geom kernel mod is used to boot FreeBSD and other Unix distros.
|
||||||
|
This kernel mod need to build inside a FreeBSD system.
|
||||||
|
|
||||||
|
use VM to install a FreeBSD (e.g. 9.X/10.X/11.X/....), need to install source code.
|
||||||
|
copy these files for example: Unix/ventoy_unix_src/FreeBSD/geom_ventoy_src/10.x/sys to /sys directory.
|
||||||
|
cd /sys/modules/geom/geom_ventoy/
|
||||||
|
make
|
||||||
|
make install
|
||||||
|
|
||||||
|
Other distros are similar.
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,147 @@
|
|||||||
|
/*-
|
||||||
|
* SPDX-License-Identifier: BSD-2-Clause-FreeBSD
|
||||||
|
*
|
||||||
|
* Copyright (c) 2020 longpanda <admin@ventoy.net>
|
||||||
|
* Copyright (c) 2004-2005 Pawel Jakub Dawidek <pjd@FreeBSD.org>
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* $FreeBSD$
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _G_VENTOY_H_
|
||||||
|
#define _G_VENTOY_H_
|
||||||
|
|
||||||
|
#include <sys/endian.h>
|
||||||
|
|
||||||
|
#define G_VENTOY_CLASS_NAME "VENTOY"
|
||||||
|
|
||||||
|
#define G_VENTOY_MAGIC "GEOM::VENTOY"
|
||||||
|
/*
|
||||||
|
* Version history:
|
||||||
|
* 1 - Initial version number.
|
||||||
|
* 2 - Added 'stop' command to gconcat(8).
|
||||||
|
* 3 - Added md_provider field to metadata and '-h' option to gconcat(8).
|
||||||
|
* 4 - Added md_provsize field to metadata.
|
||||||
|
*/
|
||||||
|
#define G_VENTOY_VERSION 4
|
||||||
|
|
||||||
|
#ifdef _KERNEL
|
||||||
|
#define G_VENTOY_TYPE_MANUAL 0
|
||||||
|
#define G_VENTOY_TYPE_AUTOMATIC 1
|
||||||
|
|
||||||
|
#define G_DEBUG(...) if (bootverbose) printf(__VA_ARGS__)
|
||||||
|
#define G_VENTOY_DEBUG(lvl, ...) if (g_ventoy_debug) printf(__VA_ARGS__)
|
||||||
|
#define G_VENTOY_LOGREQ(bp, ...) if (g_ventoy_debug) printf(__VA_ARGS__)
|
||||||
|
|
||||||
|
struct g_ventoy_disk {
|
||||||
|
TAILQ_ENTRY(g_ventoy_disk) d_next;
|
||||||
|
struct g_consumer *d_consumer;
|
||||||
|
struct g_ventoy_softc *d_softc;
|
||||||
|
off_t d_start;
|
||||||
|
off_t d_end;
|
||||||
|
off_t d_map_start;
|
||||||
|
off_t d_map_end;
|
||||||
|
int d_candelete;
|
||||||
|
int d_removed;
|
||||||
|
bool d_hardcoded;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct g_ventoy_softc {
|
||||||
|
u_int sc_type; /* provider type */
|
||||||
|
struct g_geom *sc_geom;
|
||||||
|
struct g_provider *sc_provider;
|
||||||
|
uint32_t sc_id; /* concat unique ID */
|
||||||
|
|
||||||
|
uint16_t sc_ndisks;
|
||||||
|
TAILQ_HEAD(g_ventoy_disks, g_ventoy_disk) sc_disks;
|
||||||
|
struct mtx sc_completion_lock; /* synchronizes cross-boundary IOs */
|
||||||
|
struct sx sc_disks_lock; /* synchronizes modification of sc_disks */
|
||||||
|
};
|
||||||
|
#define sc_name sc_geom->name
|
||||||
|
|
||||||
|
|
||||||
|
#pragma pack(1)
|
||||||
|
#define VENTOY_UNIX_SEG_MAGIC0 0x11223344
|
||||||
|
#define VENTOY_UNIX_SEG_MAGIC1 0x55667788
|
||||||
|
#define VENTOY_UNIX_SEG_MAGIC2 0x99aabbcc
|
||||||
|
#define VENTOY_UNIX_SEG_MAGIC3 0xddeeff00
|
||||||
|
#define VENTOY_UNIX_MAX_SEGNUM 40960
|
||||||
|
struct g_ventoy_seg {
|
||||||
|
uint64_t seg_start_bytes;
|
||||||
|
uint64_t seg_end_bytes;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct g_ventoy_map{
|
||||||
|
uint32_t magic1[4];
|
||||||
|
uint32_t magic2[4];
|
||||||
|
uint64_t segnum;
|
||||||
|
uint64_t disksize;
|
||||||
|
uint8_t diskuuid[16];
|
||||||
|
struct g_ventoy_seg seglist[VENTOY_UNIX_MAX_SEGNUM];
|
||||||
|
uint32_t magic3[4];
|
||||||
|
};
|
||||||
|
#pragma pack()
|
||||||
|
|
||||||
|
#define VENTOY_MAP_VALID(magic2) \
|
||||||
|
(magic2[0] == VENTOY_UNIX_SEG_MAGIC0 && magic2[1] == VENTOY_UNIX_SEG_MAGIC1 && magic2[2] == VENTOY_UNIX_SEG_MAGIC2 && magic2[3] == VENTOY_UNIX_SEG_MAGIC3)
|
||||||
|
|
||||||
|
#endif /* _KERNEL */
|
||||||
|
|
||||||
|
struct g_ventoy_metadata {
|
||||||
|
char md_magic[16]; /* Magic value. */
|
||||||
|
uint32_t md_version; /* Version number. */
|
||||||
|
char md_name[16]; /* Concat name. */
|
||||||
|
uint32_t md_id; /* Unique ID. */
|
||||||
|
uint16_t md_no; /* Disk number. */
|
||||||
|
uint16_t md_all; /* Number of all disks. */
|
||||||
|
char md_provider[16]; /* Hardcoded provider. */
|
||||||
|
uint64_t md_provsize; /* Provider's size. */
|
||||||
|
};
|
||||||
|
static __inline void
|
||||||
|
ventoy_metadata_encode(const struct g_ventoy_metadata *md, u_char *data)
|
||||||
|
{
|
||||||
|
|
||||||
|
bcopy(md->md_magic, data, sizeof(md->md_magic));
|
||||||
|
le32enc(data + 16, md->md_version);
|
||||||
|
bcopy(md->md_name, data + 20, sizeof(md->md_name));
|
||||||
|
le32enc(data + 36, md->md_id);
|
||||||
|
le16enc(data + 40, md->md_no);
|
||||||
|
le16enc(data + 42, md->md_all);
|
||||||
|
bcopy(md->md_provider, data + 44, sizeof(md->md_provider));
|
||||||
|
le64enc(data + 60, md->md_provsize);
|
||||||
|
}
|
||||||
|
static __inline void
|
||||||
|
ventoy_metadata_decode(const u_char *data, struct g_ventoy_metadata *md)
|
||||||
|
{
|
||||||
|
|
||||||
|
bcopy(data, md->md_magic, sizeof(md->md_magic));
|
||||||
|
md->md_version = le32dec(data + 16);
|
||||||
|
bcopy(data + 20, md->md_name, sizeof(md->md_name));
|
||||||
|
md->md_id = le32dec(data + 36);
|
||||||
|
md->md_no = le16dec(data + 40);
|
||||||
|
md->md_all = le16dec(data + 42);
|
||||||
|
bcopy(data + 44, md->md_provider, sizeof(md->md_provider));
|
||||||
|
md->md_provsize = le64dec(data + 60);
|
||||||
|
}
|
||||||
|
#endif /* _G_VENTOY_H_ */
|
@@ -0,0 +1,8 @@
|
|||||||
|
# $FreeBSD$
|
||||||
|
|
||||||
|
.PATH: ${SRCTOP}/sys/geom/ventoy
|
||||||
|
|
||||||
|
KMOD= geom_ventoy
|
||||||
|
SRCS= g_ventoy.c
|
||||||
|
|
||||||
|
.include <bsd.kmod.mk>
|
@@ -2520,7 +2520,7 @@ int PartitionResizeForVentoy(PHY_DRIVE_INFO *pPhyDrive)
|
|||||||
|
|
||||||
pGPT->PartTbl[1].StartLBA = pGPT->PartTbl[0].LastLBA + 1;
|
pGPT->PartTbl[1].StartLBA = pGPT->PartTbl[0].LastLBA + 1;
|
||||||
pGPT->PartTbl[1].LastLBA = pGPT->PartTbl[1].StartLBA + VENTOY_EFI_PART_SIZE / 512 - 1;
|
pGPT->PartTbl[1].LastLBA = pGPT->PartTbl[1].StartLBA + VENTOY_EFI_PART_SIZE / 512 - 1;
|
||||||
pGPT->PartTbl[1].Attr = 0xC000000000000001ULL;
|
pGPT->PartTbl[1].Attr = VENTOY_EFI_PART_ATTR;
|
||||||
memcpy(pGPT->PartTbl[1].Name, L"VTOYEFI", 7 * 2);
|
memcpy(pGPT->PartTbl[1].Name, L"VTOYEFI", 7 * 2);
|
||||||
|
|
||||||
//Update CRC
|
//Update CRC
|
||||||
@@ -2797,6 +2797,7 @@ int UpdateVentoy2PhyDrive(PHY_DRIVE_INFO *pPhyDrive, int TryId)
|
|||||||
BOOL CleanDisk = FALSE;
|
BOOL CleanDisk = FALSE;
|
||||||
BOOL DelEFI = FALSE;
|
BOOL DelEFI = FALSE;
|
||||||
BOOL bWriteBack = TRUE;
|
BOOL bWriteBack = TRUE;
|
||||||
|
BOOL bUpdateEFIAttr = FALSE;
|
||||||
HANDLE hVolume;
|
HANDLE hVolume;
|
||||||
HANDLE hDrive;
|
HANDLE hDrive;
|
||||||
DWORD Status;
|
DWORD Status;
|
||||||
@@ -2906,6 +2907,12 @@ int UpdateVentoy2PhyDrive(PHY_DRIVE_INFO *pPhyDrive, int TryId)
|
|||||||
Log("TryId=%d EFI GPT partition type is 0x%llx", TryId, pPhyDrive->Part2GPTAttr);
|
Log("TryId=%d EFI GPT partition type is 0x%llx", TryId, pPhyDrive->Part2GPTAttr);
|
||||||
PROGRESS_BAR_SET_POS(PT_DEL_ALL_PART);
|
PROGRESS_BAR_SET_POS(PT_DEL_ALL_PART);
|
||||||
|
|
||||||
|
if (pGptInfo->PartTbl[1].Attr != VENTOY_EFI_PART_ATTR)
|
||||||
|
{
|
||||||
|
bUpdateEFIAttr = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (TryId == 1)
|
if (TryId == 1)
|
||||||
{
|
{
|
||||||
Log("Change GPT partition type to ESP");
|
Log("Change GPT partition type to ESP");
|
||||||
@@ -2917,8 +2924,8 @@ int UpdateVentoy2PhyDrive(PHY_DRIVE_INFO *pPhyDrive, int TryId)
|
|||||||
}
|
}
|
||||||
else if (TryId == 2)
|
else if (TryId == 2)
|
||||||
{
|
{
|
||||||
Log("Change GPT partition attribute");
|
Log("Try2 Change GPT partition attribute to 0x%016llx", VENTOY_EFI_PART_ATTR & 0xFFFFFFFFFFFFFFFEULL);
|
||||||
if (DISK_ChangeVtoyEFIAttr(pPhyDrive->PhyDrive, StartSector * 512ULL, 0x8000000000000001))
|
if (DISK_ChangeVtoyEFIAttr(pPhyDrive->PhyDrive, StartSector * 512ULL, VENTOY_EFI_PART_ATTR & 0xFFFFFFFFFFFFFFFEULL))
|
||||||
{
|
{
|
||||||
ChangeAttr = TRUE;
|
ChangeAttr = TRUE;
|
||||||
Sleep(2000);
|
Sleep(2000);
|
||||||
@@ -3253,15 +3260,16 @@ End:
|
|||||||
DISK_ChangeVtoyEFI2Basic(pPhyDrive->PhyDrive, StartSector * 512);
|
DISK_ChangeVtoyEFI2Basic(pPhyDrive->PhyDrive, StartSector * 512);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (pPhyDrive->PartStyle == 1)
|
if (pPhyDrive->PartStyle == 1)
|
||||||
{
|
{
|
||||||
if (ChangeAttr || ((pPhyDrive->Part2GPTAttr >> 56) != 0xC0))
|
if (ChangeAttr || bUpdateEFIAttr)
|
||||||
{
|
{
|
||||||
Log("Change EFI partition attr %u <0x%llx> to <0x%llx>", ChangeAttr, pPhyDrive->Part2GPTAttr, 0xC000000000000001ULL);
|
Log("Change EFI partition attr %u <0x%llx> to <0x%llx>", ChangeAttr, pGptInfo->PartTbl[1].Attr, VENTOY_EFI_PART_ATTR);
|
||||||
if (DISK_ChangeVtoyEFIAttr(pPhyDrive->PhyDrive, StartSector * 512ULL, 0xC000000000000001ULL))
|
if (DISK_ChangeVtoyEFIAttr(pPhyDrive->PhyDrive, StartSector * 512ULL, VENTOY_EFI_PART_ATTR))
|
||||||
{
|
{
|
||||||
Log("Change EFI partition attr success");
|
Log("Change EFI partition attr success");
|
||||||
pPhyDrive->Part2GPTAttr = 0xC000000000000001ULL;
|
pPhyDrive->Part2GPTAttr = VENTOY_EFI_PART_ATTR;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@@ -982,7 +982,7 @@ int VentoyFillGpt(UINT64 DiskSizeBytes, VTOY_GPT_INFO *pInfo)
|
|||||||
CoCreateGuid(&(Table[1].PartGuid));
|
CoCreateGuid(&(Table[1].PartGuid));
|
||||||
Table[1].StartLBA = Table[0].LastLBA + 1;
|
Table[1].StartLBA = Table[0].LastLBA + 1;
|
||||||
Table[1].LastLBA = Table[1].StartLBA + VENTOY_EFI_PART_SIZE / 512 - 1;
|
Table[1].LastLBA = Table[1].StartLBA + VENTOY_EFI_PART_SIZE / 512 - 1;
|
||||||
Table[1].Attr = 0xC000000000000001ULL;
|
Table[1].Attr = VENTOY_EFI_PART_ATTR;
|
||||||
memcpy(Table[1].Name, L"VTOYEFI", 7 * 2);
|
memcpy(Table[1].Name, L"VTOYEFI", 7 * 2);
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
|
@@ -34,6 +34,9 @@ typedef enum VTOY_FS
|
|||||||
|
|
||||||
#define FAT32_MAX_LIMIT (32 * 1073741824ULL)
|
#define FAT32_MAX_LIMIT (32 * 1073741824ULL)
|
||||||
|
|
||||||
|
#define VENTOY_EFI_PART_ATTR 0x8000000000000000ULL
|
||||||
|
|
||||||
|
|
||||||
#define SIZE_1KB (1024)
|
#define SIZE_1KB (1024)
|
||||||
#define SIZE_1GB (1024 * 1024 * 1024)
|
#define SIZE_1GB (1024 * 1024 * 1024)
|
||||||
#define SIZE_1TB (1024ULL * 1024ULL * 1024ULL * 1024ULL)
|
#define SIZE_1TB (1024ULL * 1024ULL * 1024ULL * 1024ULL)
|
||||||
|
@@ -40,7 +40,7 @@ DRESULT disk_ioctl (BYTE pdrv, BYTE cmd, void* buff);
|
|||||||
#define STA_PROTECT 0x04 /* Write protected */
|
#define STA_PROTECT 0x04 /* Write protected */
|
||||||
|
|
||||||
|
|
||||||
/* Command code for disk_ioctrl fucntion */
|
/* Command code for disk_ioctrl function */
|
||||||
|
|
||||||
/* Generic command (Used by FatFs) */
|
/* Generic command (Used by FatFs) */
|
||||||
#define CTRL_SYNC 0 /* Complete pending write process (needed at FF_FS_READONLY == 0) */
|
#define CTRL_SYNC 0 /* Complete pending write process (needed at FF_FS_READONLY == 0) */
|
||||||
|
@@ -68,6 +68,7 @@ static int verbose = 0;
|
|||||||
#define CMD_DUMP_ISO_INFO 3
|
#define CMD_DUMP_ISO_INFO 3
|
||||||
#define CMD_EXTRACT_ISO_FILE 4
|
#define CMD_EXTRACT_ISO_FILE 4
|
||||||
#define CMD_PRINT_EXTRACT_ISO_FILE 5
|
#define CMD_PRINT_EXTRACT_ISO_FILE 5
|
||||||
|
#define CMD_PRINT_RAW_TABLE 6
|
||||||
|
|
||||||
static uint64_t g_iso_file_size;
|
static uint64_t g_iso_file_size;
|
||||||
static char g_disk_name[128];
|
static char g_disk_name[128];
|
||||||
@@ -578,6 +579,45 @@ static uint64_t vtoydm_get_part_start(const char *diskname, int part)
|
|||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static uint64_t vtoydm_get_part_secnum(const char *diskname, int part)
|
||||||
|
{
|
||||||
|
int fd;
|
||||||
|
unsigned long long size = 0;
|
||||||
|
char diskpath[256] = {0};
|
||||||
|
char sizebuf[64] = {0};
|
||||||
|
|
||||||
|
diskname += 5; /* skip /dev/ */
|
||||||
|
|
||||||
|
if (strstr(diskname, "nvme") || strstr(diskname, "mmc") || strstr(diskname, "nbd"))
|
||||||
|
{
|
||||||
|
snprintf(diskpath, sizeof(diskpath) - 1, "/sys/class/block/%sp%d/size", diskname, part);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
snprintf(diskpath, sizeof(diskpath) - 1, "/sys/class/block/%s%d/size", diskname, part);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (access(diskpath, F_OK) >= 0)
|
||||||
|
{
|
||||||
|
debug("get part size from sysfs for %s %d\n", diskname, part);
|
||||||
|
|
||||||
|
fd = open(diskpath, O_RDONLY | O_BINARY);
|
||||||
|
if (fd >= 0)
|
||||||
|
{
|
||||||
|
read(fd, sizebuf, sizeof(sizebuf));
|
||||||
|
size = strtoull(sizebuf, NULL, 10);
|
||||||
|
close(fd);
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
debug("%s not exist \n", diskpath);
|
||||||
|
}
|
||||||
|
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
|
||||||
static int vtoydm_vlnk_convert(char *disk, int len, int *part, uint64_t *offset)
|
static int vtoydm_vlnk_convert(char *disk, int len, int *part, uint64_t *offset)
|
||||||
{
|
{
|
||||||
int rc = 1;
|
int rc = 1;
|
||||||
@@ -627,6 +667,24 @@ end:
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int vtoydm_print_raw_linear_table(const char *img_map_file, const char *diskname, int part)
|
||||||
|
{
|
||||||
|
uint64_t disk_sector_num;
|
||||||
|
|
||||||
|
disk_sector_num = vtoydm_get_part_secnum(diskname, part);
|
||||||
|
|
||||||
|
if (strstr(diskname, "nvme") || strstr(diskname, "mmc") || strstr(diskname, "nbd"))
|
||||||
|
{
|
||||||
|
printf("0 %lu linear %sp%d 0\n", (unsigned long)disk_sector_num, diskname, part);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("0 %lu linear %s%d 0\n", (unsigned long)disk_sector_num, diskname, part);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int vtoydm_main(int argc, char **argv)
|
int vtoydm_main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
int ch;
|
int ch;
|
||||||
@@ -639,7 +697,7 @@ int vtoydm_main(int argc, char **argv)
|
|||||||
char filepath[300] = {0};
|
char filepath[300] = {0};
|
||||||
char outfile[300] = {0};
|
char outfile[300] = {0};
|
||||||
|
|
||||||
while ((ch = getopt(argc, argv, "s:l:o:d:f:v::i::p::c::h::e::E::")) != -1)
|
while ((ch = getopt(argc, argv, "s:l:o:d:f:v::i::p::r::c::h::e::E::")) != -1)
|
||||||
{
|
{
|
||||||
if (ch == 'd')
|
if (ch == 'd')
|
||||||
{
|
{
|
||||||
@@ -653,6 +711,10 @@ int vtoydm_main(int argc, char **argv)
|
|||||||
{
|
{
|
||||||
cmd = CMD_PRINT_TABLE;
|
cmd = CMD_PRINT_TABLE;
|
||||||
}
|
}
|
||||||
|
else if (ch == 'r')
|
||||||
|
{
|
||||||
|
cmd = CMD_PRINT_RAW_TABLE;
|
||||||
|
}
|
||||||
else if (ch == 'c')
|
else if (ch == 'c')
|
||||||
{
|
{
|
||||||
cmd = CMD_CREATE_DM;
|
cmd = CMD_CREATE_DM;
|
||||||
@@ -713,6 +775,10 @@ int vtoydm_main(int argc, char **argv)
|
|||||||
{
|
{
|
||||||
return vtoydm_print_linear_table(filepath, diskname, part, offset);
|
return vtoydm_print_linear_table(filepath, diskname, part, offset);
|
||||||
}
|
}
|
||||||
|
case CMD_PRINT_RAW_TABLE:
|
||||||
|
{
|
||||||
|
return vtoydm_print_raw_linear_table(filepath, diskname, part);
|
||||||
|
}
|
||||||
case CMD_CREATE_DM:
|
case CMD_CREATE_DM:
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
|
@@ -188,6 +188,12 @@ typedef struct ko_param
|
|||||||
unsigned long sym_put_size;
|
unsigned long sym_put_size;
|
||||||
unsigned long kv_major;
|
unsigned long kv_major;
|
||||||
unsigned long ibt;
|
unsigned long ibt;
|
||||||
|
unsigned long kv_minor;
|
||||||
|
unsigned long blkdev_get_addr;
|
||||||
|
unsigned long blkdev_put_addr;
|
||||||
|
unsigned long bdev_open_addr;
|
||||||
|
unsigned long kv_subminor;
|
||||||
|
unsigned long bdev_file_open_addr;
|
||||||
unsigned long padding[1];
|
unsigned long padding[1];
|
||||||
}ko_param;
|
}ko_param;
|
||||||
|
|
||||||
@@ -243,7 +249,7 @@ static int vtoykmod_read_file(char *name, char **buf)
|
|||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int vtoykmod_find_section64(char *buf, char *section, int *offset, int *len)
|
static int vtoykmod_find_section64(char *buf, char *section, int *offset, int *len, Elf64_Shdr **shdr)
|
||||||
{
|
{
|
||||||
uint16_t i;
|
uint16_t i;
|
||||||
int cmplen;
|
int cmplen;
|
||||||
@@ -265,6 +271,10 @@ static int vtoykmod_find_section64(char *buf, char *section, int *offset, int *l
|
|||||||
{
|
{
|
||||||
*offset = (int)(sec[i].sh_offset);
|
*offset = (int)(sec[i].sh_offset);
|
||||||
*len = (int)(sec[i].sh_size);
|
*len = (int)(sec[i].sh_size);
|
||||||
|
if (shdr)
|
||||||
|
{
|
||||||
|
*shdr = sec + i;
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -272,7 +282,7 @@ static int vtoykmod_find_section64(char *buf, char *section, int *offset, int *l
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int vtoykmod_find_section32(char *buf, char *section, int *offset, int *len)
|
static int vtoykmod_find_section32(char *buf, char *section, int *offset, int *len, Elf32_Shdr **shdr)
|
||||||
{
|
{
|
||||||
uint16_t i;
|
uint16_t i;
|
||||||
int cmplen;
|
int cmplen;
|
||||||
@@ -294,6 +304,10 @@ static int vtoykmod_find_section32(char *buf, char *section, int *offset, int *l
|
|||||||
{
|
{
|
||||||
*offset = (int)(sec[i].sh_offset);
|
*offset = (int)(sec[i].sh_offset);
|
||||||
*len = (int)(sec[i].sh_size);
|
*len = (int)(sec[i].sh_size);
|
||||||
|
if (shdr)
|
||||||
|
{
|
||||||
|
*shdr = sec + i;
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -411,7 +425,7 @@ static int vtoykmod_update_vermagic(char *oldbuf, int oldsize, char *newbuf, int
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int vtoykmod_update(char *oldko, char *newko)
|
int vtoykmod_update(int kvMajor, int kvMinor, char *oldko, char *newko)
|
||||||
{
|
{
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
int modver = 0;
|
int modver = 0;
|
||||||
@@ -419,6 +433,7 @@ int vtoykmod_update(char *oldko, char *newko)
|
|||||||
int newoff, newlen;
|
int newoff, newlen;
|
||||||
int oldsize, newsize;
|
int oldsize, newsize;
|
||||||
char *newbuf, *oldbuf;
|
char *newbuf, *oldbuf;
|
||||||
|
Elf64_Shdr *sec = NULL;
|
||||||
|
|
||||||
oldsize = vtoykmod_read_file(oldko, &oldbuf);
|
oldsize = vtoykmod_read_file(oldko, &oldbuf);
|
||||||
newsize = vtoykmod_read_file(newko, &newbuf);
|
newsize = vtoykmod_read_file(newko, &newbuf);
|
||||||
@@ -435,13 +450,13 @@ int vtoykmod_update(char *oldko, char *newko)
|
|||||||
{
|
{
|
||||||
if (oldbuf[EI_CLASS] == ELFCLASS64)
|
if (oldbuf[EI_CLASS] == ELFCLASS64)
|
||||||
{
|
{
|
||||||
rc = vtoykmod_find_section64(oldbuf, "__versions", &oldoff, &oldlen);
|
rc = vtoykmod_find_section64(oldbuf, "__versions", &oldoff, &oldlen, NULL);
|
||||||
rc += vtoykmod_find_section64(newbuf, "__versions", &newoff, &newlen);
|
rc += vtoykmod_find_section64(newbuf, "__versions", &newoff, &newlen, NULL);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
rc = vtoykmod_find_section32(oldbuf, "__versions", &oldoff, &oldlen);
|
rc = vtoykmod_find_section32(oldbuf, "__versions", &oldoff, &oldlen, NULL);
|
||||||
rc += vtoykmod_find_section32(newbuf, "__versions", &newoff, &newlen);
|
rc += vtoykmod_find_section32(newbuf, "__versions", &newoff, &newlen, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rc == 0)
|
if (rc == 0)
|
||||||
@@ -459,8 +474,8 @@ int vtoykmod_update(char *oldko, char *newko)
|
|||||||
{
|
{
|
||||||
Elf64_Rela *oldRela, *newRela;
|
Elf64_Rela *oldRela, *newRela;
|
||||||
|
|
||||||
rc = vtoykmod_find_section64(oldbuf, ".rela.gnu.linkonce.this_module", &oldoff, &oldlen);
|
rc = vtoykmod_find_section64(oldbuf, ".rela.gnu.linkonce.this_module", &oldoff, &oldlen, NULL);
|
||||||
rc += vtoykmod_find_section64(newbuf, ".rela.gnu.linkonce.this_module", &newoff, &newlen);
|
rc += vtoykmod_find_section64(newbuf, ".rela.gnu.linkonce.this_module", &newoff, &newlen, NULL);
|
||||||
if (rc == 0)
|
if (rc == 0)
|
||||||
{
|
{
|
||||||
oldRela = (Elf64_Rela *)(oldbuf + oldoff);
|
oldRela = (Elf64_Rela *)(oldbuf + oldoff);
|
||||||
@@ -478,13 +493,31 @@ int vtoykmod_update(char *oldko, char *newko)
|
|||||||
{
|
{
|
||||||
debug("section .rela.gnu.linkonce.this_module not found\n");
|
debug("section .rela.gnu.linkonce.this_module not found\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (kvMajor > 6 || (kvMajor == 6 && kvMinor >= 3))
|
||||||
|
{
|
||||||
|
rc = vtoykmod_find_section64(oldbuf, ".gnu.linkonce.this_module", &oldoff, &oldlen, &sec);
|
||||||
|
rc += vtoykmod_find_section64(newbuf, ".gnu.linkonce.this_module", &newoff, &newlen, NULL);
|
||||||
|
if (rc == 0)
|
||||||
|
{
|
||||||
|
debug("section .gnu.linkonce.this_module change oldlen:0x%x to newlen:0x%x\n", oldlen, newlen);
|
||||||
|
if (sec)
|
||||||
|
{
|
||||||
|
sec->sh_size = newlen;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
debug("section .gnu.linkonce.this_module not found\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Elf32_Rel *oldRel, *newRel;
|
Elf32_Rel *oldRel, *newRel;
|
||||||
|
|
||||||
rc = vtoykmod_find_section32(oldbuf, ".rel.gnu.linkonce.this_module", &oldoff, &oldlen);
|
rc = vtoykmod_find_section32(oldbuf, ".rel.gnu.linkonce.this_module", &oldoff, &oldlen, NULL);
|
||||||
rc += vtoykmod_find_section32(newbuf, ".rel.gnu.linkonce.this_module", &newoff, &newlen);
|
rc += vtoykmod_find_section32(newbuf, ".rel.gnu.linkonce.this_module", &newoff, &newlen, NULL);
|
||||||
if (rc == 0)
|
if (rc == 0)
|
||||||
{
|
{
|
||||||
oldRel = (Elf32_Rel *)(oldbuf + oldoff);
|
oldRel = (Elf32_Rel *)(oldbuf + oldoff);
|
||||||
@@ -542,8 +575,14 @@ int vtoykmod_fill_param(char **argv)
|
|||||||
param->sym_put_size = strtoul(argv[8], NULL, 10);
|
param->sym_put_size = strtoul(argv[8], NULL, 10);
|
||||||
param->reg_kprobe_addr = strtoul(argv[9], NULL, 16);
|
param->reg_kprobe_addr = strtoul(argv[9], NULL, 16);
|
||||||
param->unreg_kprobe_addr = strtoul(argv[10], NULL, 16);
|
param->unreg_kprobe_addr = strtoul(argv[10], NULL, 16);
|
||||||
param->kv_major = (unsigned long)(argv[11][0] - '0');
|
param->kv_major = strtoul(argv[11], NULL, 10);
|
||||||
param->ibt = strtoul(argv[12], NULL, 16);;
|
param->ibt = strtoul(argv[12], NULL, 16);;
|
||||||
|
param->kv_minor = strtoul(argv[13], NULL, 10);
|
||||||
|
param->blkdev_get_addr = strtoul(argv[14], NULL, 16);
|
||||||
|
param->blkdev_put_addr = strtoul(argv[15], NULL, 16);
|
||||||
|
param->kv_subminor = strtoul(argv[16], NULL, 10);
|
||||||
|
param->bdev_open_addr = strtoul(argv[17], NULL, 16);
|
||||||
|
param->bdev_file_open_addr = strtoul(argv[18], NULL, 16);
|
||||||
|
|
||||||
debug("pgsize=%lu (%s)\n", param->pgsize, argv[1]);
|
debug("pgsize=%lu (%s)\n", param->pgsize, argv[1]);
|
||||||
debug("printk_addr=0x%lx (%s)\n", param->printk_addr, argv[2]);
|
debug("printk_addr=0x%lx (%s)\n", param->printk_addr, argv[2]);
|
||||||
@@ -557,6 +596,12 @@ int vtoykmod_fill_param(char **argv)
|
|||||||
debug("unreg_kprobe_addr=0x%lx (%s)\n", param->unreg_kprobe_addr, argv[10]);
|
debug("unreg_kprobe_addr=0x%lx (%s)\n", param->unreg_kprobe_addr, argv[10]);
|
||||||
debug("kv_major=%lu (%s)\n", param->kv_major, argv[11]);
|
debug("kv_major=%lu (%s)\n", param->kv_major, argv[11]);
|
||||||
debug("ibt=0x%lx (%s)\n", param->ibt, argv[12]);
|
debug("ibt=0x%lx (%s)\n", param->ibt, argv[12]);
|
||||||
|
debug("kv_minor=%lu (%s)\n", param->kv_minor, argv[13]);
|
||||||
|
debug("blkdev_get_addr=0x%lx (%s)\n", param->blkdev_get_addr, argv[14]);
|
||||||
|
debug("blkdev_put_addr=0x%lx (%s)\n", param->blkdev_put_addr, argv[15]);
|
||||||
|
debug("kv_subminor=%lu (%s)\n", param->kv_subminor, argv[16]);
|
||||||
|
debug("bdev_open_addr=0x%lx (%s)\n", param->bdev_open_addr, argv[17]);
|
||||||
|
debug("bdev_file_open_addr=0x%lx (%s)\n", param->bdev_file_open_addr, argv[18]);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -596,6 +641,8 @@ static int vtoykmod_check_ibt(void)
|
|||||||
int vtoykmod_main(int argc, char **argv)
|
int vtoykmod_main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
int kvMajor = 0;
|
||||||
|
int kvMinor = 0;
|
||||||
|
|
||||||
for (i = 0; i < argc; i++)
|
for (i = 0; i < argc; i++)
|
||||||
{
|
{
|
||||||
@@ -606,13 +653,25 @@ int vtoykmod_main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (verbose)
|
||||||
|
{
|
||||||
|
printf("==== Dump Argv ====\n");
|
||||||
|
for (i = 0; i < argc; i++)
|
||||||
|
{
|
||||||
|
printf("<%s> ", argv[i]);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
if (argv[1][0] == '-' && argv[1][1] == 'f')
|
if (argv[1][0] == '-' && argv[1][1] == 'f')
|
||||||
{
|
{
|
||||||
return vtoykmod_fill_param(argv + 2);
|
return vtoykmod_fill_param(argv + 2);
|
||||||
}
|
}
|
||||||
else if (argv[1][0] == '-' && argv[1][1] == 'u')
|
else if (argv[1][0] == '-' && argv[1][1] == 'u')
|
||||||
{
|
{
|
||||||
return vtoykmod_update(argv[2], argv[3]);
|
kvMajor = (int)strtol(argv[2], NULL, 10);
|
||||||
|
kvMinor = (int)strtol(argv[3], NULL, 10);
|
||||||
|
return vtoykmod_update(kvMajor, kvMinor, argv[4], argv[5]);
|
||||||
}
|
}
|
||||||
else if (argv[1][0] == '-' && argv[1][1] == 'I')
|
else if (argv[1][0] == '-' && argv[1][1] == 'I')
|
||||||
{
|
{
|
||||||
|
@@ -21,6 +21,7 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <ctype.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
@@ -30,10 +31,12 @@ static int verbose = 0;
|
|||||||
int vtoyksym_main(int argc, char **argv)
|
int vtoyksym_main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
int len = 0;
|
||||||
unsigned long long addr1 = 0;
|
unsigned long long addr1 = 0;
|
||||||
unsigned long long addr2 = 0;
|
unsigned long long addr2 = 0;
|
||||||
char sym[256];
|
char sym[256];
|
||||||
char line[1024];
|
char line[1024];
|
||||||
|
char *start = NULL;
|
||||||
const char *name = NULL;
|
const char *name = NULL;
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
|
|
||||||
@@ -68,9 +71,11 @@ int vtoyksym_main(int argc, char **argv)
|
|||||||
snprintf(sym, sizeof(sym), " %s", argv[1]);
|
snprintf(sym, sizeof(sym), " %s", argv[1]);
|
||||||
debug("lookup for <%s>\n", sym);
|
debug("lookup for <%s>\n", sym);
|
||||||
|
|
||||||
|
len = (int)strlen(sym);
|
||||||
while (fgets(line, sizeof(line), fp))
|
while (fgets(line, sizeof(line), fp))
|
||||||
{
|
{
|
||||||
if (strstr(line, sym))
|
start = strstr(line, sym);
|
||||||
|
if (start && (start > line) && isspace(*(start + len)))
|
||||||
{
|
{
|
||||||
addr1 = strtoull(line, NULL, 16);
|
addr1 = strtoull(line, NULL, 16);
|
||||||
if (!fgets(line, sizeof(line), fp))
|
if (!fgets(line, sizeof(line), fp))
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user