| #!/usr/bin/env python3 |
| # |
| # Ubuntu aarch64 image |
| # |
| # Copyright 2020 Linaro |
| # |
| # Authors: |
| # Robert Foley <robert.foley@linaro.org> |
| # Originally based on ubuntu.i386 Fam Zheng <famz@redhat.com> |
| # |
| # This code is licensed under the GPL version 2 or later. See |
| # the COPYING file in the top-level directory. |
| # |
| |
| import sys |
| import basevm |
| import aarch64vm |
| import ubuntuvm |
| |
| DEFAULT_CONFIG = { |
| 'cpu' : "cortex-a57", |
| 'machine' : "virt,gic-version=3", |
| 'install_cmds' : "apt-get update,"\ |
| "apt-get build-dep -y --arch-only qemu,"\ |
| "apt-get install -y libfdt-dev pkg-config language-pack-en ninja-build", |
| # We increase beyond the default time since during boot |
| # it can take some time (many seconds) to log into the VM |
| # especially using TCG. |
| 'ssh_timeout' : 60, |
| } |
| |
| class UbuntuAarch64VM(ubuntuvm.UbuntuVM): |
| name = "ubuntu.aarch64" |
| arch = "aarch64" |
| # NOTE: The Ubuntu 20.04 cloud images are periodically updated. The |
| # fixed image chosen below is the latest release at time of |
| # writing. Using a rolling latest instead would mean that the SHA |
| # would be incorrect at an indeterminate point in the future. |
| image_name = "focal-server-cloudimg-arm64.img" |
| image_link = "https://cloud-images.ubuntu.com/focal/20220615/" + image_name |
| image_sha256="95a027336e197debe88c92ff2e554598e23c409139e1e750b71b3b820b514832" |
| BUILD_SCRIPT = """ |
| set -e; |
| cd $(mktemp -d); |
| sudo chmod a+r /dev/vdb; |
| tar --checkpoint=.10 -xf /dev/vdb; |
| ./configure {configure_opts}; |
| make --output-sync {target} -j{jobs} {verbose}; |
| """ |
| def boot(self, img, extra_args=None): |
| aarch64vm.create_flash_images(self._tmpdir, self._efi_aarch64) |
| default_args = aarch64vm.get_pflash_args(self._tmpdir) |
| if extra_args: |
| extra_args.extend(default_args) |
| else: |
| extra_args = default_args |
| # We always add these performance tweaks |
| # because without them, we boot so slowly that we |
| # can time out finding the boot efi device. |
| if '-smp' not in extra_args and \ |
| '-smp' not in self._config['extra_args'] and \ |
| '-smp' not in self._args: |
| # Only add if not already there to give caller option to change it. |
| extra_args.extend(["-smp", "8"]) |
| |
| # We have overridden boot() since aarch64 has additional parameters. |
| # Call down to the base class method. |
| super(UbuntuAarch64VM, self).boot(img, extra_args=extra_args) |
| |
| if __name__ == "__main__": |
| defaults = aarch64vm.get_config_defaults(UbuntuAarch64VM, DEFAULT_CONFIG) |
| sys.exit(basevm.main(UbuntuAarch64VM, defaults)) |