2. 启动 Linux/LoongArch

作者:

Yanteng Si <siyanteng@loongson.cn>

日期:

2022 年 11 月 18 日

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

LoongArch 支持 ACPI 和 FDT。需要传递给内核的信息包括 memmap、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 */