Loading a simple "kernel" at the address other than default on Raspberry Pi 4

Mushahid Hussain
2021-11-02T12:16:20Z

[-- Attachment #1.1: Type: text/plain, Size: 1171 bytes --]

Hi,
I have written a simple kernel which prints Hello World to UART. The simple
kernel works successfully and prints Hello World to UART, if I load it at
0x80000, which is the default load address for the 64-bit kernel.

There's a configuration(config.txt)[1] kernel_address on Raspberry Pi 4 but
whenever I change the load address by even 1 byte, the simple kernel would
not run. It is only able to run at 0x80000.

I tried to find the entry address of the standard kernel for raspberry
pi[2]. I have trusted firmware-A[3] on my Raspberry Pi, which prints the
load address before loading the standard kernel. Entry address for the
standard kernel is always 0x200000! Even if I manually change the load
address in the raspberry pi configuration, the standard kernel is always
loaded at 0x200000!.

How is the standard kernel being loaded at 0x200000, but my simple kernel
cannot be loaded at any address except for the default address(0x80000)?

[1]
https://github.com/raspberrypi/documentation/blob/develop/documentation/asciidoc/computers/config_txt/boot.adoc#kernel_address

[2] https://github.com/raspberrypi/linux

[3] https://www.trustedfirmware.org/projects/tf-a/

[-- Attachment #1.2: Type: text/html, Size: 1649 bytes --]