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