|
| 1 | +.. SPDX-License-Identifier: GPL-2.0 |
| 2 | +
|
| 3 | +======================= |
| 4 | +Booting Linux/LoongArch |
| 5 | +======================= |
| 6 | + |
| 7 | +:Author: Yanteng Si < [email protected]> |
| 8 | +:Date: 18 Nov 2022 |
| 9 | + |
| 10 | +Information passed from BootLoader to kernel |
| 11 | +============================================ |
| 12 | + |
| 13 | +LoongArch supports ACPI and FDT. The information that needs to be passed |
| 14 | +to the kernel includes the memmap, the initrd, the command line, optionally |
| 15 | +the ACPI/FDT tables, and so on. |
| 16 | + |
| 17 | +The kernel is passed the following arguments on `kernel_entry` : |
| 18 | + |
| 19 | + - a0 = efi_boot: `efi_boot` is a flag indicating whether |
| 20 | + this boot environment is fully UEFI-compliant. |
| 21 | + |
| 22 | + - a1 = cmdline: `cmdline` is a pointer to the kernel command line. |
| 23 | + |
| 24 | + - a2 = systemtable: `systemtable` points to the EFI system table. |
| 25 | + All pointers involved at this stage are in physical addresses. |
| 26 | + |
| 27 | +Header of Linux/LoongArch kernel images |
| 28 | +======================================= |
| 29 | + |
| 30 | +Linux/LoongArch kernel images are EFI images. Being PE files, they have |
| 31 | +a 64-byte header structured like:: |
| 32 | + |
| 33 | + u32 MZ_MAGIC /* "MZ", MS-DOS header */ |
| 34 | + u32 res0 = 0 /* Reserved */ |
| 35 | + u64 kernel_entry /* Kernel entry point */ |
| 36 | + u64 _end - _text /* Kernel image effective size */ |
| 37 | + u64 load_offset /* Kernel image load offset from start of RAM */ |
| 38 | + u64 res1 = 0 /* Reserved */ |
| 39 | + u64 res2 = 0 /* Reserved */ |
| 40 | + u64 res3 = 0 /* Reserved */ |
| 41 | + u32 LINUX_PE_MAGIC /* Magic number */ |
| 42 | + u32 pe_header - _head /* Offset to the PE header */ |
0 commit comments