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 */