aarch64: load arm64 kernels at physical address 0

There is no reason to leave an 8 MB gap at the beginning of guest
memory; shift the kernel load address down to the very beginning of
RAM. This accomodates alternate ELF kernels that want to be loaded at
address 0 as well.

BUG=b:254601048
TEST=boot crostini on arm

Change-Id: Iaa58efc5b20046732ef0f75b3c779134a3ee454b
Reviewed-on: https://chromium-review.googlesource.com/c/crosvm/crosvm/+/4015002
Reviewed-by: Alexandre Courbot <acourbot@chromium.org>
Commit-Queue: Daniel Verkamp <dverkamp@chromium.org>
This commit is contained in:
Daniel Verkamp 2022-11-08 12:44:40 -08:00 committed by crosvm LUCI
parent b6c3227d2d
commit e7473e600e
2 changed files with 3 additions and 3 deletions

View file

@ -68,8 +68,8 @@ use vm_memory::GuestMemoryError;
mod fdt;
// We place the kernel at offset 8MB
const AARCH64_KERNEL_OFFSET: u64 = 0x800000;
// We place the kernel at the very beginning of physical memory.
const AARCH64_KERNEL_OFFSET: u64 = 0;
const AARCH64_FDT_MAX_SIZE: u64 = 0x200000;
const AARCH64_INITRD_ALIGN: u64 = 0x1000000;

View file

@ -69,7 +69,7 @@ These apply when no bootloader is passed, so crosvm boots a kernel directly.
| Name/source link | Address | End (exclusive) | Size | Notes |
| ------------------------- | ----------------- | --------------- | ----- | ---------------------------- |
| [`AARCH64_KERNEL_OFFSET`] | `8080_0000` | | | Kernel load location in RAM |
| [`AARCH64_KERNEL_OFFSET`] | `8000_0000` | | | Kernel load location in RAM |
| [`initrd_addr`] | after kernel | | | Linux initrd location in RAM |
| [`fdt_address`] | before end of RAM | | 2 MiB | Flattened device tree in RAM |