scripts: Update build-efi to support arm64

Provide a -A flag to select ARM instead of x86. For now, only the app
is supported and only for 64-bit ARM.

Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Simon Glass
2025-02-02 17:54:24 -07:00
parent 483d409aa3
commit eea87b0b3a

View File

@@ -48,6 +48,8 @@ def parse_args():
epilog='Script for running U-Boot as an EFI app/payload')
parser.add_argument('-a', '--app', action='store_true',
help='Package up the app')
parser.add_argument('-A', '--arm', action='store_true',
help='Run on ARM architecture')
parser.add_argument('-B', '--no-build', action='store_true',
help="Don't build (an existing build must be present")
parser.add_argument('-k', '--kernel', action='store_true',
@@ -131,26 +133,43 @@ class BuildEfi:
"""
extra = []
efi_dir = self.get_setting("efi_dir")
if bitness == 64:
qemu = 'qemu-system-x86_64'
bios = 'OVMF-pure-efi.x64.fd'
else:
qemu = 'qemu-system-i386'
bios = 'OVMF-pure-efi.i386.fd'
if self.args.arm:
qemu_arch = 'aarch64'
extra += ['--machine', 'virt', '-cpu', 'max']
bios = os.path.join(efi_dir, 'OVMF-pure-efi.aarch64.fd.64m')
var_store = os.path.join(efi_dir, 'varstore.img')
extra += [
'-drive', f'if=pflash,format=raw,file={bios},readonly=on',
'-drive', f'if=pflash,format=raw,file={var_store}'
]
extra += ['-drive',
f'id=hd0,file={self.img},if=none,format=raw',
'-device', 'virtio-blk-device,drive=hd0']
else: # x86
if bitness == 64:
qemu_arch = 'x86_64'
bios = 'OVMF-pure-efi.x64.fd'
else:
qemu_arch = 'i386'
bios = 'OVMF-pure-efi.i386.fd'
extra += ['-bios', os.path.join(efi_dir, bios)]
extra += ['-drive', f'id=disk,file={self.img},if=none,format=raw']
extra += ['-device', 'ahci,id=ahci']
extra += ['-device', 'ide-hd,drive=disk,bus=ahci.0']
qemu = f'qemu-system-{qemu_arch}'
if serial_only:
extra = ['-display', 'none', '-serial', 'mon:stdio']
extra += ['-display', 'none', '-serial', 'mon:stdio']
serial_msg = ' (Ctrl-a x to quit)'
else:
extra = ['-serial', 'mon:stdio']
if self.args.arm:
extra += ['-device', 'virtio-gpu-pci']
extra += ['-serial', 'mon:stdio']
serial_msg = ''
print(f'Running {qemu}{serial_msg}')
# Use 512MB since U-Boot EFI likes to have 256MB to play with
cmd = [qemu, '-bios', os.path.join(efi_dir, bios)]
cmd = [qemu]
cmd += '-m', '512'
cmd += '-drive', f'id=disk,file={self.img},if=none,format=raw'
cmd += '-device', 'ahci,id=ahci'
cmd += '-device', 'ide-hd,drive=disk,bus=ahci.0'
cmd += '-nic', 'none'
cmd += extra
command.run(*cmd)
@@ -230,6 +249,7 @@ class BuildEfi:
command.output(*cmd)
except command.CommandExc:
time.sleep(0.5)
cmd = 'sudo', 'kpartx', '-d', self.img
command.output(*cmd)
def do_build(self, build):
@@ -245,15 +265,16 @@ class BuildEfi:
"""This does all the work"""
args = self.args
bitness = 32 if args.word else 64
arch = 'arm' if args.arm else 'x86'
build_type = 'payload' if args.payload else 'app'
self.tmp = f'{self.build_dir}/efi{bitness}{build_type}'
build = f'efi-x86_{build_type}{bitness}'
build = f'efi-{arch}_{build_type}{bitness}'
if not args.no_build:
self.do_build(build)
if args.old and bitness == 32:
build = f'efi-x86_{build_type}'
build = f'efi-{arch}_{build_type}'
self.setup_files(build, build_type)