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

Valdis Klētnieks
2021-11-02T22:00:01Z

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

On Tue, 02 Nov 2021 17:13:16 +0500, Mushahid Hussain said:

> 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.

The config.txt value is for the boot loader, to tell it where the kernel should
be loaded. There's another number, set during the kernel build, that tells the
kernel what address it should expect to be loaded at.

So if your micro-kernel is build to load at 0x80000 and then you tell the boot
loader to load at 0x80001, or vice versa, things will go badly.

You need to find some way to ensure that the boot loader and the initial part
of the kernel (the one that proceeds to unpack the rest of the kernel, set up
KASLR, and relocation if neded) agree on what address things start off at.

[-- Attachment #1.2: Type: application/pgp-signature, Size: 494 bytes --]