162306a36Sopenharmony_ci.. SPDX-License-Identifier: GPL-2.0 262306a36Sopenharmony_ci 362306a36Sopenharmony_ci.. include:: ../../disclaimer-zh_CN.rst 462306a36Sopenharmony_ci 562306a36Sopenharmony_ci:Original: Documentation/arch/loongarch/booting.rst 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci:翻译: 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci 司延腾 Yanteng Si <siyanteng@loongson.cn> 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci==================== 1262306a36Sopenharmony_ci启动 Linux/LoongArch 1362306a36Sopenharmony_ci==================== 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ci:作者: 司延腾 <siyanteng@loongson.cn> 1662306a36Sopenharmony_ci:日期: 2022年11月18日 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ciBootLoader传递给内核的信息 1962306a36Sopenharmony_ci========================== 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ciLoongArch支持ACPI和FDT启动,需要传递给内核的信息包括memmap、initrd、cmdline、可 2262306a36Sopenharmony_ci选的ACPI/FDT表等。 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci内核在 `kernel_entry` 入口处被传递以下参数: 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_ci - a0 = efi_boot: `efi_boot` 是一个标志,表示这个启动环境是否完全符合UEFI 2762306a36Sopenharmony_ci 的要求。 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci - a1 = cmdline: `cmdline` 是一个指向内核命令行的指针。 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_ci - a2 = systemtable: `systemtable` 指向EFI的系统表,在这个阶段涉及的所有 3262306a36Sopenharmony_ci 指针都是物理地址。 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ciLinux/LoongArch内核镜像文件头 3562306a36Sopenharmony_ci============================= 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_ci内核镜像是EFI镜像。作为PE文件,它们有一个64字节的头部结构体,如下所示:: 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_ci u32 MZ_MAGIC /* "MZ", MS-DOS 头 */ 4062306a36Sopenharmony_ci u32 res0 = 0 /* 保留 */ 4162306a36Sopenharmony_ci u64 kernel_entry /* 内核入口点 */ 4262306a36Sopenharmony_ci u64 _end - _text /* 内核镜像有效大小 */ 4362306a36Sopenharmony_ci u64 load_offset /* 加载内核镜像相对内存起始地址的偏移量 */ 4462306a36Sopenharmony_ci u64 res1 = 0 /* 保留 */ 4562306a36Sopenharmony_ci u64 res2 = 0 /* 保留 */ 4662306a36Sopenharmony_ci u64 res3 = 0 /* 保留 */ 4762306a36Sopenharmony_ci u32 LINUX_PE_MAGIC /* 魔术数 */ 4862306a36Sopenharmony_ci u32 pe_header - _head /* 到PE头的偏移量 */ 49