IA32 ARM64 support

This commit is contained in:
longpanda
2020-12-12 07:56:52 +08:00
parent 2936666a78
commit ebaa4d954a
478 changed files with 10299 additions and 746 deletions
+77 -21
View File
@@ -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.
+43 -39
View File
@@ -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.