mirror of
https://github.com/ventoy/Ventoy.git
synced 2026-09-07 08:26:39 +00:00
IA32 ARM64 support
This commit is contained in:
@@ -13,7 +13,7 @@ print_usage() {
|
||||
echo ''
|
||||
echo ' OPTION: (optional)'
|
||||
echo ' -r SIZE_MB preserve some space at the bottom of the disk (only for install)'
|
||||
echo ' -s enable secure boot support (default is disabled)'
|
||||
echo ' -s/-S enable/disable secure boot support (default is disabled)'
|
||||
echo ' -g use GPT partition style, default is MBR (only for install)'
|
||||
echo ' -L Label of the 1st exfat partition (default is ventoy)'
|
||||
echo ''
|
||||
@@ -34,6 +34,8 @@ while [ -n "$1" ]; do
|
||||
MODE="list"
|
||||
elif [ "$1" = "-s" ]; then
|
||||
SECUREBOOT="YES"
|
||||
elif [ "$1" = "-S" ]; then
|
||||
SECUREBOOT="NO"
|
||||
elif [ "$1" = "-g" ]; then
|
||||
VTGPT="YES"
|
||||
elif [ "$1" = "-L" ]; then
|
||||
@@ -157,6 +159,17 @@ if swapon --help 2>&1 | grep -q '^ \-s,'; then
|
||||
fi
|
||||
fi
|
||||
|
||||
#check tmp_mnt directory
|
||||
if [ -d ./tmp_mnt ]; then
|
||||
vtdebug "There is a tmp_mnt directory, now delete it."
|
||||
umount ./tmp_mnt >/dev/null 2>&1
|
||||
rm -rf ./tmp_mnt
|
||||
if [ -d ./tmp_mnt ]; then
|
||||
vterr "tmp_mnt directory exit, please delete it first."
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
if [ "$MODE" = "install" ]; then
|
||||
vtdebug "install ventoy ..."
|
||||
@@ -265,15 +278,6 @@ if [ "$MODE" = "install" ]; then
|
||||
fi
|
||||
|
||||
# format part1
|
||||
if ventoy_is_linux64; then
|
||||
cmd=./tool/mkexfatfs_64
|
||||
else
|
||||
cmd=./tool/mkexfatfs_32
|
||||
fi
|
||||
|
||||
if [ -d ./tool/ ]; then
|
||||
chmod +x -R ./tool/
|
||||
fi
|
||||
|
||||
# DiskSize > 32GB Cluster Size use 128KB
|
||||
# DiskSize < 32GB Cluster Size use 32KB
|
||||
@@ -286,7 +290,7 @@ if [ "$MODE" = "install" ]; then
|
||||
PART1=$(get_disk_part_name $DISK 1)
|
||||
PART2=$(get_disk_part_name $DISK 2)
|
||||
|
||||
$cmd -n "$VTNEW_LABEL" -s $cluster_sectors ${PART1}
|
||||
mkexfatfs -n "$VTNEW_LABEL" -s $cluster_sectors ${PART1}
|
||||
|
||||
vtinfo "writing data to disk ..."
|
||||
|
||||
@@ -302,11 +306,15 @@ if [ "$MODE" = "install" ]; then
|
||||
|
||||
xzcat ./ventoy/ventoy.disk.img.xz | dd status=none conv=fsync of=$DISK bs=512 count=$VENTOY_SECTOR_NUM seek=$part2_start_sector
|
||||
|
||||
#test UUID
|
||||
testUUIDStr=$(vtoy_gen_uuid | hexdump -C)
|
||||
vtdebug "test uuid: $testUUIDStr"
|
||||
|
||||
#disk uuid
|
||||
./tool/vtoy_gen_uuid | dd status=none conv=fsync of=${DISK} seek=384 bs=1 count=16
|
||||
vtoy_gen_uuid | dd status=none conv=fsync of=${DISK} seek=384 bs=1 count=16
|
||||
|
||||
#disk signature
|
||||
./tool/vtoy_gen_uuid | dd status=none conv=fsync of=${DISK} skip=12 seek=440 bs=1 count=4
|
||||
vtoy_gen_uuid | dd status=none conv=fsync of=${DISK} skip=12 seek=440 bs=1 count=4
|
||||
|
||||
vtinfo "sync data ..."
|
||||
sync
|
||||
@@ -319,7 +327,7 @@ if [ "$MODE" = "install" ]; then
|
||||
umount $mtpnt >/dev/null 2>&1
|
||||
fi
|
||||
|
||||
if [ "$SECUREBOOT" != "YES" ]; then
|
||||
if [ "$SECUREBOOT" != "YES" ]; then
|
||||
mkdir ./tmp_mnt
|
||||
|
||||
vtdebug "mounting part2 ...."
|
||||
@@ -335,15 +343,27 @@ if [ "$MODE" = "install" ]; then
|
||||
fi
|
||||
sleep 2
|
||||
done
|
||||
|
||||
|
||||
rm -f ./tmp_mnt/EFI/BOOT/BOOTX64.EFI
|
||||
rm -f ./tmp_mnt/EFI/BOOT/grubx64.efi
|
||||
rm -f ./tmp_mnt/EFI/BOOT/BOOTIA32.EFI
|
||||
rm -f ./tmp_mnt/EFI/BOOT/grubia32.efi
|
||||
rm -f ./tmp_mnt/EFI/BOOT/MokManager.efi
|
||||
rm -f ./tmp_mnt/EFI/BOOT/mmia32.efi
|
||||
rm -f ./tmp_mnt/ENROLL_THIS_KEY_IN_MOKMANAGER.cer
|
||||
mv ./tmp_mnt/EFI/BOOT/grubx64_real.efi ./tmp_mnt/EFI/BOOT/BOOTX64.EFI
|
||||
mv ./tmp_mnt/EFI/BOOT/grubia32_real.efi ./tmp_mnt/EFI/BOOT/BOOTIA32.EFI
|
||||
|
||||
umount ./tmp_mnt
|
||||
rm -rf ./tmp_mnt
|
||||
for tt in 1 2 3; do
|
||||
if umount ./tmp_mnt; then
|
||||
vtdebug "umount part2 success"
|
||||
rm -rf ./tmp_mnt
|
||||
break
|
||||
else
|
||||
vtdebug "umount part2 failed, now retry..."
|
||||
sleep 1
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
echo ""
|
||||
@@ -362,6 +382,15 @@ else
|
||||
exit 1
|
||||
fi
|
||||
|
||||
#reserve secure boot option
|
||||
if [ -z "$SECUREBOOT" ]; then
|
||||
if check_disk_secure_boot $DISK; then
|
||||
SECUREBOOT="YES"
|
||||
else
|
||||
SECUREBOOT="NO"
|
||||
fi
|
||||
fi
|
||||
|
||||
curver=$(cat ./ventoy/version)
|
||||
|
||||
vtinfo "Upgrade operation is safe, all the data in the 1st partition (iso files and other) will be unchanged!"
|
||||
@@ -380,13 +409,24 @@ else
|
||||
|
||||
PART1_TYPE=$(dd if=$DISK bs=1 count=1 skip=450 status=none | hexdump -n1 -e '1/1 "%02X"')
|
||||
|
||||
#reserve disk uuid
|
||||
rm -f ./diskuuid.bin
|
||||
dd status=none conv=fsync if=${DISK} skip=384 bs=1 count=16 of=./diskuuid.bin
|
||||
|
||||
dd status=none conv=fsync if=./boot/boot.img of=$DISK bs=1 count=440
|
||||
dd status=none conv=fsync if=./diskuuid.bin of=$DISK bs=1 count=16 seek=384
|
||||
rm -f ./diskuuid.bin
|
||||
|
||||
#reserve data
|
||||
rm -f ./rsvdata.bin
|
||||
dd status=none conv=fsync if=${DISK} skip=2040 bs=512 count=8 of=./rsvdata.bin
|
||||
|
||||
if [ "$PART1_TYPE" = "EE" ]; then
|
||||
vtdebug "This is GPT partition style ..."
|
||||
xzcat ./boot/core.img.xz | dd status=none conv=fsync of=$DISK bs=512 count=2014 seek=34
|
||||
echo -en '\x23' | dd of=$DISK conv=fsync bs=1 count=1 seek=17908 status=none
|
||||
else
|
||||
vtdebug "This is MBR partition style ..."
|
||||
dd status=none conv=fsync if=./boot/boot.img of=$DISK bs=1 count=440
|
||||
|
||||
PART1_ACTIVE=$(dd if=$DISK bs=1 count=1 skip=446 status=none | hexdump -n1 -e '1/1 "%02X"')
|
||||
PART2_ACTIVE=$(dd if=$DISK bs=1 count=1 skip=462 status=none | hexdump -n1 -e '1/1 "%02X"')
|
||||
@@ -400,6 +440,9 @@ else
|
||||
xzcat ./boot/core.img.xz | dd status=none conv=fsync of=$DISK bs=512 count=2047 seek=1
|
||||
fi
|
||||
|
||||
dd status=none conv=fsync if=./rsvdata.bin seek=2040 bs=512 count=8 of=${DISK}
|
||||
rm -f ./rsvdata.bin
|
||||
|
||||
xzcat ./ventoy/ventoy.disk.img.xz | dd status=none conv=fsync of=$DISK bs=512 count=$VENTOY_SECTOR_NUM seek=$part2_start
|
||||
|
||||
sync
|
||||
@@ -415,15 +458,28 @@ else
|
||||
fi
|
||||
sleep 2
|
||||
done
|
||||
|
||||
|
||||
rm -f ./tmp_mnt/EFI/BOOT/BOOTX64.EFI
|
||||
rm -f ./tmp_mnt/EFI/BOOT/grubx64.efi
|
||||
rm -f ./tmp_mnt/EFI/BOOT/BOOTIA32.EFI
|
||||
rm -f ./tmp_mnt/EFI/BOOT/grubia32.efi
|
||||
rm -f ./tmp_mnt/EFI/BOOT/MokManager.efi
|
||||
rm -f ./tmp_mnt/EFI/BOOT/mmia32.efi
|
||||
rm -f ./tmp_mnt/ENROLL_THIS_KEY_IN_MOKMANAGER.cer
|
||||
mv ./tmp_mnt/EFI/BOOT/grubx64_real.efi ./tmp_mnt/EFI/BOOT/BOOTX64.EFI
|
||||
mv ./tmp_mnt/EFI/BOOT/grubia32_real.efi ./tmp_mnt/EFI/BOOT/BOOTIA32.EFI
|
||||
|
||||
umount ./tmp_mnt
|
||||
rm -rf ./tmp_mnt
|
||||
|
||||
for tt in 1 2 3; do
|
||||
if umount ./tmp_mnt; then
|
||||
vtdebug "umount part2 success"
|
||||
rm -rf ./tmp_mnt
|
||||
break
|
||||
else
|
||||
vtdebug "umount part2 failed, now retry..."
|
||||
sleep 1
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
echo ""
|
||||
|
||||
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.
+43
-39
@@ -14,14 +14,6 @@ ventoy_true() {
|
||||
[ "1" = "1" ]
|
||||
}
|
||||
|
||||
ventoy_is_linux64() {
|
||||
if uname -a | egrep -q 'x86_64|amd64'; then
|
||||
ventoy_true
|
||||
return
|
||||
fi
|
||||
|
||||
ventoy_false
|
||||
}
|
||||
|
||||
vtinfo() {
|
||||
echo -e "\033[32m$*\033[0m"
|
||||
@@ -40,17 +32,25 @@ vtdebug() {
|
||||
echo "$*" >> ./log.txt
|
||||
}
|
||||
|
||||
check_tool_work_ok() {
|
||||
|
||||
if ventoy_is_linux64; then
|
||||
vtdebug "This is linux 64"
|
||||
mkexfatfs=mkexfatfs_64
|
||||
vtoyfat=vtoyfat_64
|
||||
vtoy_gen_uuid() {
|
||||
if uuid -F BIN > /dev/null 2>&1; then
|
||||
uuid -F BIN
|
||||
elif uuidgen -V > /dev/null 2>&1; then
|
||||
a=$(uuidgen | sed 's/-//g')
|
||||
echo -en "\x${a:0:2}\x${a:2:2}\x${a:4:2}\x${a:6:2}\x${a:8:2}\x${a:10:2}\x${a:12:2}\x${a:14:2}\x${a:16:2}\x${a:18:2}\x${a:20:2}\x${a:22:2}\x${a:24:2}\x${a:26:2}\x${a:28:2}\x${a:30:2}"
|
||||
elif python -V > /dev/null 2>&1; then
|
||||
a=$(python -c 'import sys,uuid; sys.stdout.write(uuid.uuid4().hex)')
|
||||
echo -en "\x${a:0:2}\x${a:2:2}\x${a:4:2}\x${a:6:2}\x${a:8:2}\x${a:10:2}\x${a:12:2}\x${a:14:2}\x${a:16:2}\x${a:18:2}\x${a:20:2}\x${a:22:2}\x${a:24:2}\x${a:26:2}\x${a:28:2}\x${a:30:2}"
|
||||
elif [ -e /dev/urandom ]; then
|
||||
dd if=/dev/urandom bs=1 count=16 status=none
|
||||
else
|
||||
vtdebug "This is linux 32"
|
||||
mkexfatfs=mkexfatfs_32
|
||||
vtoyfat=vtoyfat_32
|
||||
datestr=$(date +%N%N%N%N%N)
|
||||
a=${datestr:0:32}
|
||||
echo -en "\x${a:0:2}\x${a:2:2}\x${a:4:2}\x${a:6:2}\x${a:8:2}\x${a:10:2}\x${a:12:2}\x${a:14:2}\x${a:16:2}\x${a:18:2}\x${a:20:2}\x${a:22:2}\x${a:24:2}\x${a:26:2}\x${a:28:2}\x${a:30:2}"
|
||||
fi
|
||||
}
|
||||
|
||||
check_tool_work_ok() {
|
||||
|
||||
if echo 1 | hexdump > /dev/null; then
|
||||
vtdebug "hexdump test ok ..."
|
||||
@@ -60,18 +60,18 @@ check_tool_work_ok() {
|
||||
return
|
||||
fi
|
||||
|
||||
if ./tool/$mkexfatfs -V > /dev/null; then
|
||||
vtdebug "$mkexfatfs test ok ..."
|
||||
if mkexfatfs -V > /dev/null; then
|
||||
vtdebug "mkexfatfs test ok ..."
|
||||
else
|
||||
vtdebug "$mkexfatfs test fail ..."
|
||||
vtdebug "mkexfatfs test fail ..."
|
||||
ventoy_false
|
||||
return
|
||||
fi
|
||||
|
||||
if ./tool/$vtoyfat -T; then
|
||||
vtdebug "$vtoyfat test ok ..."
|
||||
if vtoyfat -T; then
|
||||
vtdebug "vtoyfat test ok ..."
|
||||
else
|
||||
vtdebug "$vtoyfat test fail ..."
|
||||
vtdebug "vtoyfat test fail ..."
|
||||
ventoy_false
|
||||
return
|
||||
fi
|
||||
@@ -165,6 +165,17 @@ is_disk_contains_ventoy() {
|
||||
ventoy_true
|
||||
}
|
||||
|
||||
check_disk_secure_boot() {
|
||||
if ! is_disk_contains_ventoy $1; then
|
||||
ventoy_false
|
||||
return
|
||||
fi
|
||||
|
||||
PART2=$(get_disk_part_name $1 2)
|
||||
|
||||
vtoyfat -s $PART2
|
||||
}
|
||||
|
||||
get_disk_ventoy_version() {
|
||||
|
||||
if ! is_disk_contains_ventoy $1; then
|
||||
@@ -174,13 +185,7 @@ get_disk_ventoy_version() {
|
||||
|
||||
PART2=$(get_disk_part_name $1 2)
|
||||
|
||||
if ventoy_is_linux64; then
|
||||
cmd=./tool/vtoyfat_64
|
||||
else
|
||||
cmd=./tool/vtoyfat_32
|
||||
fi
|
||||
|
||||
ParseVer=$($cmd $PART2)
|
||||
ParseVer=$(vtoyfat $PART2)
|
||||
if [ $? -eq 0 ]; then
|
||||
vtdebug "Ventoy version in $PART2 is $ParseVer"
|
||||
echo $ParseVer
|
||||
@@ -342,24 +347,23 @@ format_ventoy_disk_gpt() {
|
||||
echo "Create partitions on $DISK by $PARTTOOL in GPT style ..."
|
||||
|
||||
vtdebug "format disk by parted ..."
|
||||
|
||||
if [ "$TOOLDIR" != "aarch64" ]; then
|
||||
vt_set_efi_type="set 2 msftdata on"
|
||||
fi
|
||||
|
||||
parted -a none --script $DISK \
|
||||
mklabel gpt \
|
||||
unit s \
|
||||
mkpart Ventoy ntfs $part1_start_sector $part1_end_sector \
|
||||
mkpart VTOYEFI fat16 $part2_start_sector $part2_end_sector \
|
||||
set 2 msftdata on \
|
||||
$vt_set_efi_type \
|
||||
set 2 hidden on \
|
||||
quit
|
||||
|
||||
|
||||
sync
|
||||
|
||||
if ventoy_is_linux64; then
|
||||
vtoygpt=./tool/vtoygpt_64
|
||||
else
|
||||
vtoygpt=./tool/vtoygpt_32
|
||||
fi
|
||||
|
||||
$vtoygpt -f $DISK
|
||||
vtoygpt -f $DISK
|
||||
sync
|
||||
|
||||
udevadm trigger --name-match=$DISK >/dev/null 2>&1
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user