Browse Source
For the Arm Ltd. FPGAs to run, we need to load several payloads into the FPGA's memory: - Some trampoline code at address 0x0, to jump to BL31's entry point. - The actual BL31 binary at the beginning of DRAM. - The (generic) DTB image to describe the hardware. - The actual non-secure payloads (kernel, ramdisks, ...) The latter is application specific, but the first three blobs are rather generic. Since the uploader tool supports ELF binaries, it seems helpful to combine these three images into one .axf file, as this also simplifies the command line. Add a post-build linker script, that combines those three bits into one ELF file, together with their specific load addresses. Include a call to "ld" with this linker script in the platform Makefile, so it will be build automatically. The result will be called "bl31.axf". Change-Id: I4a90da16fa1e0e83b51d19e5b1daf61f5a0bbfca Signed-off-by: Andre Przywara <andre.przywara@arm.com>pull/1979/head
Andre Przywara
4 years ago
2 changed files with 53 additions and 1 deletions
@ -0,0 +1,47 @@ |
|||
/* |
|||
* Copyright (c) 2020, ARM Limited. All rights reserved. |
|||
* |
|||
* SPDX-License-Identifier: BSD-3-Clause |
|||
* |
|||
* Linker script for the Arm Ltd. FPGA boards to generate an ELF file that |
|||
* contains the ROM trampoline, BL31 and the DTB. |
|||
* |
|||
* This allows to pass just one file to the uploader tool, and automatically |
|||
* provides the correct load addresses. |
|||
*/ |
|||
|
|||
#include <platform_def.h> |
|||
|
|||
OUTPUT_FORMAT("elf64-littleaarch64") |
|||
OUTPUT_ARCH(aarch64) |
|||
|
|||
INPUT(./bl31/bl31.elf) |
|||
INPUT(./rom_trampoline.o) |
|||
|
|||
TARGET(binary) |
|||
INPUT(./fdts/arm_fpga.dtb) |
|||
|
|||
ENTRY(_start) |
|||
|
|||
SECTIONS |
|||
{ |
|||
.rom (0x0): { |
|||
*rom_trampoline.o(.text*) |
|||
KEEP(*(.rom)) |
|||
} |
|||
|
|||
.bl31 (BL31_BASE): { |
|||
ASSERT(. == ALIGN(PAGE_SIZE), "BL31_BASE is not page aligned"); |
|||
*bl31.elf(.text* .data* .rodata* ro* .bss*) |
|||
*bl31.elf(.stack) |
|||
} |
|||
|
|||
.dtb (FPGA_PRELOADED_DTB_BASE): { |
|||
ASSERT(. == ALIGN(8), "DTB address is not 8-byte aligned"); |
|||
*arm_fpga.dtb |
|||
} |
|||
|
|||
/DISCARD/ : { *(.debug_*) } |
|||
/DISCARD/ : { *(.note*) } |
|||
/DISCARD/ : { *(.comment*) } |
|||
} |
Loading…
Reference in new issue