Commit ebaa4d95 authored by longpanda's avatar longpanda
Browse files

IA32 ARM64 support

parent 2936666a
...@@ -122,7 +122,7 @@ crypto: ...@@ -122,7 +122,7 @@ crypto:
part_bsd: part_msdos part_bsd: part_msdos
cs5536: pci cs5536: pci
biosdisk: biosdisk:
ventoy: ext2 fshelp font crypto exfat udf extcmd normal video gcry_sha1 relocator iso9660 acpi ventoy: ext2 fshelp font crypto exfat udf extcmd normal video gcry_sha256 gcry_sha1 iso9660 acpi
lsapm: lsapm:
gcry_sha512: crypto gcry_sha512: crypto
password: crypto normal password: crypto normal
......
...@@ -92,18 +92,48 @@ else ...@@ -92,18 +92,48 @@ else
fi fi
} }
menuentry 'Search and boot BOOTX64.EFI' --class=boot_uefi { if [ "$grub_cpu" = "i386" ]; then
set VTOY_SEARCH_NO_VTOYEFI=1 menuentry 'Search and boot BOOTIA32.EFI' --class=boot_uefi {
if search -n -s -f /efi/boot/bootx64.efi; then set VTOY_SEARCH_NO_VTOYEFI=1
unset VTOY_SEARCH_NO_VTOYEFI if search -n -s -f /efi/boot/bootia32.efi; then
terminal_output console unset VTOY_SEARCH_NO_VTOYEFI
chainloader /efi/boot/bootx64.efi terminal_output console
boot chainloader /efi/boot/bootia32.efi
else boot
unset VTOY_SEARCH_NO_VTOYEFI else
echo "BOOTX64.EFI NOT found ..." unset VTOY_SEARCH_NO_VTOYEFI
fi echo "BOOTIA32.EFI NOT found ..."
} fi
}
elif [ "$grub_cpu" = "arm64" ]; then
menuentry 'Search and boot BOOTAA64.EFI' --class=boot_uefi {
set VTOY_SEARCH_NO_VTOYEFI=1
if search -n -s -f /efi/boot/bootaa64.efi; then
unset VTOY_SEARCH_NO_VTOYEFI
terminal_output console
chainloader /efi/boot/bootaa64.efi
boot
else
unset VTOY_SEARCH_NO_VTOYEFI
echo "BOOTAA64.EFI NOT found ..."
fi
}
else
menuentry 'Search and boot BOOTX64.EFI' --class=boot_uefi {
set VTOY_SEARCH_NO_VTOYEFI=1
if search -n -s -f /efi/boot/bootx64.efi; then
unset VTOY_SEARCH_NO_VTOYEFI
terminal_output console
chainloader /efi/boot/bootx64.efi
boot
else
unset VTOY_SEARCH_NO_VTOYEFI
echo "BOOTX64.EFI NOT found ..."
fi
}
fi
fi fi
......
...@@ -119,7 +119,7 @@ ehci: cs5536 usb boot ...@@ -119,7 +119,7 @@ ehci: cs5536 usb boot
crypto: crypto:
part_bsd: part_msdos part_bsd: part_msdos
cs5536: cs5536:
ventoy: ext2 fshelp font crypto exfat udf extcmd normal video gcry_sha1 iso9660 ventoy: ext2 fshelp font crypto exfat udf extcmd normal video gcry_sha256 gcry_sha1 iso9660
gcry_sha512: crypto gcry_sha512: crypto
password: crypto normal password: crypto normal
fshelp: fshelp:
......
...@@ -13,7 +13,7 @@ print_usage() { ...@@ -13,7 +13,7 @@ print_usage() {
echo '' echo ''
echo ' OPTION: (optional)' echo ' OPTION: (optional)'
echo ' -r SIZE_MB preserve some space at the bottom of the disk (only for install)' 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 ' -g use GPT partition style, default is MBR (only for install)'
echo ' -L Label of the 1st exfat partition (default is ventoy)' echo ' -L Label of the 1st exfat partition (default is ventoy)'
echo '' echo ''
...@@ -34,6 +34,8 @@ while [ -n "$1" ]; do ...@@ -34,6 +34,8 @@ while [ -n "$1" ]; do
MODE="list" MODE="list"
elif [ "$1" = "-s" ]; then elif [ "$1" = "-s" ]; then
SECUREBOOT="YES" SECUREBOOT="YES"
elif [ "$1" = "-S" ]; then
SECUREBOOT="NO"
elif [ "$1" = "-g" ]; then elif [ "$1" = "-g" ]; then
VTGPT="YES" VTGPT="YES"
elif [ "$1" = "-L" ]; then elif [ "$1" = "-L" ]; then
...@@ -157,6 +159,17 @@ if swapon --help 2>&1 | grep -q '^ \-s,'; then ...@@ -157,6 +159,17 @@ if swapon --help 2>&1 | grep -q '^ \-s,'; then
fi fi
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 if [ "$MODE" = "install" ]; then
vtdebug "install ventoy ..." vtdebug "install ventoy ..."
...@@ -265,15 +278,6 @@ if [ "$MODE" = "install" ]; then ...@@ -265,15 +278,6 @@ if [ "$MODE" = "install" ]; then
fi fi
# format part1 # 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 128KB
# DiskSize < 32GB Cluster Size use 32KB # DiskSize < 32GB Cluster Size use 32KB
...@@ -286,7 +290,7 @@ if [ "$MODE" = "install" ]; then ...@@ -286,7 +290,7 @@ if [ "$MODE" = "install" ]; then
PART1=$(get_disk_part_name $DISK 1) PART1=$(get_disk_part_name $DISK 1)
PART2=$(get_disk_part_name $DISK 2) 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 ..." vtinfo "writing data to disk ..."
...@@ -302,11 +306,15 @@ if [ "$MODE" = "install" ]; then ...@@ -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 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 #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 #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 ..." vtinfo "sync data ..."
sync sync
...@@ -319,7 +327,7 @@ if [ "$MODE" = "install" ]; then ...@@ -319,7 +327,7 @@ if [ "$MODE" = "install" ]; then
umount $mtpnt >/dev/null 2>&1 umount $mtpnt >/dev/null 2>&1
fi fi
if [ "$SECUREBOOT" != "YES" ]; then if [ "$SECUREBOOT" != "YES" ]; then
mkdir ./tmp_mnt mkdir ./tmp_mnt
vtdebug "mounting part2 ...." vtdebug "mounting part2 ...."
...@@ -335,15 +343,27 @@ if [ "$MODE" = "install" ]; then ...@@ -335,15 +343,27 @@ if [ "$MODE" = "install" ]; then
fi fi
sleep 2 sleep 2
done done
rm -f ./tmp_mnt/EFI/BOOT/BOOTX64.EFI rm -f ./tmp_mnt/EFI/BOOT/BOOTX64.EFI
rm -f ./tmp_mnt/EFI/BOOT/grubx64.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/MokManager.efi
rm -f ./tmp_mnt/EFI/BOOT/mmia32.efi
rm -f ./tmp_mnt/ENROLL_THIS_KEY_IN_MOKMANAGER.cer 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/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 for tt in 1 2 3; do
rm -rf ./tmp_mnt 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 fi
echo "" echo ""
...@@ -362,6 +382,15 @@ else ...@@ -362,6 +382,15 @@ else
exit 1 exit 1
fi 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) curver=$(cat ./ventoy/version)
vtinfo "Upgrade operation is safe, all the data in the 1st partition (iso files and other) will be unchanged!" vtinfo "Upgrade operation is safe, all the data in the 1st partition (iso files and other) will be unchanged!"
...@@ -380,13 +409,24 @@ else ...@@ -380,13 +409,24 @@ else
PART1_TYPE=$(dd if=$DISK bs=1 count=1 skip=450 status=none | hexdump -n1 -e '1/1 "%02X"') 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 if [ "$PART1_TYPE" = "EE" ]; then
vtdebug "This is GPT partition style ..." vtdebug "This is GPT partition style ..."
xzcat ./boot/core.img.xz | dd status=none conv=fsync of=$DISK bs=512 count=2014 seek=34 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 echo -en '\x23' | dd of=$DISK conv=fsync bs=1 count=1 seek=17908 status=none
else else
vtdebug "This is MBR partition style ..." 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"') 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"') PART2_ACTIVE=$(dd if=$DISK bs=1 count=1 skip=462 status=none | hexdump -n1 -e '1/1 "%02X"')
...@@ -400,6 +440,9 @@ else ...@@ -400,6 +440,9 @@ else
xzcat ./boot/core.img.xz | dd status=none conv=fsync of=$DISK bs=512 count=2047 seek=1 xzcat ./boot/core.img.xz | dd status=none conv=fsync of=$DISK bs=512 count=2047 seek=1
fi fi
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 xzcat ./ventoy/ventoy.disk.img.xz | dd status=none conv=fsync of=$DISK bs=512 count=$VENTOY_SECTOR_NUM seek=$part2_start
sync sync
...@@ -415,15 +458,28 @@ else ...@@ -415,15 +458,28 @@ else
fi fi
sleep 2 sleep 2
done done
rm -f ./tmp_mnt/EFI/BOOT/BOOTX64.EFI rm -f ./tmp_mnt/EFI/BOOT/BOOTX64.EFI
rm -f ./tmp_mnt/EFI/BOOT/grubx64.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/MokManager.efi
rm -f ./tmp_mnt/EFI/BOOT/mmia32.efi
rm -f ./tmp_mnt/ENROLL_THIS_KEY_IN_MOKMANAGER.cer 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/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 for tt in 1 2 3; do
rm -rf ./tmp_mnt 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 fi
echo "" echo ""
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment