fix: Support 4M qcow2 images (#1749)
* Initial changes to support qcow2 firmware
This commit is contained in:
		
							parent
							
								
									78b938facf
								
							
						
					
					
						commit
						aaf00ca76a
					
				
							
								
								
									
										30
									
								
								quickemu
								
								
								
								
							
							
						
						
									
										30
									
								
								quickemu
								
								
								
								
							|  | @ -614,6 +614,12 @@ function configure_ram() { | ||||||
|     fi |     fi | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | function is_firmware_qcow2() { | ||||||
|  |     # Check for the magic bytes that indicate the firmware is in qcow2 format, | ||||||
|  |     # otherwise default to assuming firmware files are in raw format | ||||||
|  |     [ "$(head -c 4 "$1")" = "QFI"$'\xfb' ] && echo "true" || echo "false" | ||||||
|  | } | ||||||
|  | 
 | ||||||
| function configure_bios() { | function configure_bios() { | ||||||
|     # Always Boot macOS using EFI |     # Always Boot macOS using EFI | ||||||
|     if [ "${guest_os}" == "macos" ]; then |     if [ "${guest_os}" == "macos" ]; then | ||||||
|  | @ -680,7 +686,8 @@ function configure_bios() { | ||||||
|                         "${SHARE_PATH}/qemu/ovmf-x86_64-smm-ms-code.bin","${SHARE_PATH}/qemu/ovmf-x86_64-smm-ms-vars.bin" \ |                         "${SHARE_PATH}/qemu/ovmf-x86_64-smm-ms-code.bin","${SHARE_PATH}/qemu/ovmf-x86_64-smm-ms-vars.bin" \ | ||||||
|                         "${SHARE_PATH}/qemu/edk2-x86_64-secure-code.fd","${SHARE_PATH}/qemu/edk2-x86_64-code.fd" \ |                         "${SHARE_PATH}/qemu/edk2-x86_64-secure-code.fd","${SHARE_PATH}/qemu/edk2-x86_64-code.fd" \ | ||||||
|                         "${SHARE_PATH}/edk2-ovmf/x64/OVMF_CODE.secboot.fd","${SHARE_PATH}/edk2-ovmf/x64/OVMF_VARS.fd" \ |                         "${SHARE_PATH}/edk2-ovmf/x64/OVMF_CODE.secboot.fd","${SHARE_PATH}/edk2-ovmf/x64/OVMF_VARS.fd" \ | ||||||
|                         "${SHARE_PATH}/edk2/x64/OVMF_CODE.secboot.4m.fd","${SHARE_PATH}/edk2/x64/OVMF_VARS.4m.fd" |                         "${SHARE_PATH}/edk2/x64/OVMF_CODE.secboot.4m.fd","${SHARE_PATH}/edk2/x64/OVMF_VARS.4m.fd" \ | ||||||
|  |                         "${SHARE_PATH}/edk2/ovmf/OVMF_CODE_4M.secboot.qcow2","${SHARE_PATH}/edk2/ovmf/OVMF_VARS_4M.secboot.qcow2" | ||||||
|                     );; |                     );; | ||||||
|                 *)  # shellcheck disable=SC2054,SC2140 |                 *)  # shellcheck disable=SC2054,SC2140 | ||||||
|                     ovmfs=("${SHARE_PATH}/OVMF/OVMF_CODE_4M.fd","${SHARE_PATH}/OVMF/OVMF_VARS_4M.fd" \ |                     ovmfs=("${SHARE_PATH}/OVMF/OVMF_CODE_4M.fd","${SHARE_PATH}/OVMF/OVMF_VARS_4M.fd" \ | ||||||
|  | @ -691,7 +698,8 @@ function configure_bios() { | ||||||
|                         "${SHARE_PATH}/qemu/ovmf-x86_64-4m-code.bin","${SHARE_PATH}/qemu/ovmf-x86_64-4m-vars.bin" \ |                         "${SHARE_PATH}/qemu/ovmf-x86_64-4m-code.bin","${SHARE_PATH}/qemu/ovmf-x86_64-4m-vars.bin" \ | ||||||
|                         "${SHARE_PATH}/qemu/edk2-x86_64-code.fd","${SHARE_PATH}/qemu/edk2-x86_64-code.fd" \ |                         "${SHARE_PATH}/qemu/edk2-x86_64-code.fd","${SHARE_PATH}/qemu/edk2-x86_64-code.fd" \ | ||||||
|                         "${SHARE_PATH}/edk2-ovmf/x64/OVMF_CODE.fd","${SHARE_PATH}/edk2-ovmf/x64/OVMF_VARS.fd" \ |                         "${SHARE_PATH}/edk2-ovmf/x64/OVMF_CODE.fd","${SHARE_PATH}/edk2-ovmf/x64/OVMF_VARS.fd" \ | ||||||
|                         "${SHARE_PATH}/edk2/x64/OVMF_CODE.4m.fd","${SHARE_PATH}/edk2/x64/OVMF_VARS.4m.fd" |                         "${SHARE_PATH}/edk2/x64/OVMF_CODE.4m.fd","${SHARE_PATH}/edk2/x64/OVMF_VARS.4m.fd" \ | ||||||
|  |                         "${SHARE_PATH}/edk2/ovmf/OVMF_CODE_4M.qcow2","${SHARE_PATH}/edk2/ovmf/OVMF_VARS_4M.qcow2" | ||||||
|                     );; |                     );; | ||||||
|             esac |             esac | ||||||
|             # Attempt each EFI_CODE file one by one, selecting the corresponding code and vars |             # Attempt each EFI_CODE file one by one, selecting the corresponding code and vars | ||||||
|  | @ -722,6 +730,14 @@ function configure_bios() { | ||||||
|                 echo " - EFI:      ERROR! EFI_EXTRA_VARS file ${EFI_EXTRA_VARS} does not exist." |                 echo " - EFI:      ERROR! EFI_EXTRA_VARS file ${EFI_EXTRA_VARS} does not exist." | ||||||
|                 exit 1 |                 exit 1 | ||||||
|             fi |             fi | ||||||
|  |             # Write destination vars file with correct extension | ||||||
|  |             # based on source format of the EFI_EXTRA_VARS file | ||||||
|  |             QCOW2VARS=$(is_firmware_qcow2 "${EFI_EXTRA_VARS}") | ||||||
|  |             if [ "${QCOW2VARS}" = "true" ]; then | ||||||
|  |                 EFI_VARS="${VMDIR}/OVMF_VARS.qcow2" | ||||||
|  |             else | ||||||
|  |                 EFI_VARS="${VMDIR}/OVMF_VARS.fd" | ||||||
|  |             fi | ||||||
|             efi_vars "${EFI_EXTRA_VARS}" "${EFI_VARS}" |             efi_vars "${EFI_EXTRA_VARS}" "${EFI_VARS}" | ||||||
|         fi |         fi | ||||||
| 
 | 
 | ||||||
|  | @ -740,7 +756,7 @@ function configure_bios() { | ||||||
|             EFI_CODE=$(realpath "${EFI_CODE}") |             EFI_CODE=$(realpath "${EFI_CODE}") | ||||||
|             echo "${EFI_CODE}" |             echo "${EFI_CODE}" | ||||||
|         fi |         fi | ||||||
|         BOOT_STATUS="EFI (${guest_os^}), OVMF (${EFI_CODE}), SecureBoot (${secureboot})." |         BOOT_STATUS="EFI (${guest_os^}), OVMF (${EFI_CODE}), EFI Vars (${EFI_VARS}), SecureBoot (${secureboot})." | ||||||
|     else |     else | ||||||
|         BOOT_STATUS="Legacy BIOS (${guest_os^})" |         BOOT_STATUS="Legacy BIOS (${guest_os^})" | ||||||
|         boot="legacy" |         boot="legacy" | ||||||
|  | @ -1375,10 +1391,14 @@ function vm_boot() { | ||||||
|     # Add the disks |     # Add the disks | ||||||
|     # - https://turlucode.com/qemu-disk-io-performance-comparison-native-or-threads-windows-10-version/ |     # - https://turlucode.com/qemu-disk-io-performance-comparison-native-or-threads-windows-10-version/ | ||||||
|     if [[ "${boot}" == *"efi"* ]]; then |     if [[ "${boot}" == *"efi"* ]]; then | ||||||
|  |         QCOW2CODE=$(is_firmware_qcow2 "${EFI_CODE}") | ||||||
|  |         QCOW2VARS=$(is_firmware_qcow2 "${EFI_VARS}") | ||||||
|  |         if [ "${QCOW2CODE}" = "true" ]; then EFI_CODE_FORMAT="qcow2"; else EFI_CODE_FORMAT="raw"; fi | ||||||
|  |         if [ "${QCOW2VARS}" = "true" ]; then EFI_VARS_FORMAT="qcow2"; else EFI_VARS_FORMAT="raw"; fi | ||||||
|         # shellcheck disable=SC2054 |         # shellcheck disable=SC2054 | ||||||
|         args+=(-global driver=cfi.pflash01,property=secure,value=on |         args+=(-global driver=cfi.pflash01,property=secure,value=on | ||||||
|             -drive if=pflash,format=raw,unit=0,file="${EFI_CODE}",readonly=on |             -drive if=pflash,format="${EFI_CODE_FORMAT}",unit=0,file="${EFI_CODE}",readonly=on | ||||||
|             -drive if=pflash,format=raw,unit=1,file="${EFI_VARS}") |             -drive if=pflash,format="${EFI_VARS_FORMAT}",unit=1,file="${EFI_VARS}") | ||||||
|     fi |     fi | ||||||
| 
 | 
 | ||||||
|     if [ -n "${iso}" ] && [ "${guest_os}" == "freedos" ]; then |     if [ -n "${iso}" ] && [ "${guest_os}" == "freedos" ]; then | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue