2. 启动 Linux/LoongArch

作者:

司彦腾 <siyanteng@loongson.cn>

日期:

2022 年 11 月 18 日

2.1. 从引导加载程序传递给内核的信息

LoongArch 支持 ACPI 和 FDT。需要传递给内核的信息包括内存映射(memmap)、初始 RAM 磁盘(initrd)、命令行,以及可选的 ACPI/FDT 表等。

kernel_entry 时,内核会接收到以下参数:

  • a0 = efi_boot:efi_boot 是一个标志,指示此引导环境是否完全符合 UEFI 标准。

  • a1 = cmdline:cmdline 是指向内核命令行的指针。

  • a2 = systemtable:systemtable 指向 EFI 系统表。此阶段涉及的所有指针都是物理地址。

2.2. Linux/LoongArch 内核镜像的头部

Linux/LoongArch 内核镜像为 EFI 镜像。作为 PE 文件,它们有一个 64 字节的头部,结构如下:

u32     MZ_MAGIC                /* "MZ", MS-DOS header */
u32     res0 = 0                /* Reserved */
u64     kernel_entry            /* Kernel entry point */
u64     _end - _text            /* Kernel image effective size */
u64     load_offset             /* Kernel image load offset from start of RAM */
u64     res1 = 0                /* Reserved */
u64     res2 = 0                /* Reserved */
u64     res3 = 0                /* Reserved */
u32     LINUX_PE_MAGIC          /* Magic number */
u32     pe_header - _head       /* Offset to the PE header */