From patchwork Wed Dec 6 14:07:48 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: longjin X-Patchwork-Id: 13481843 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 4BB70C4167B for ; Wed, 6 Dec 2023 14:08:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:Mime-Version:Subject:From:Date: Message-Id:Cc:To:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To: References:List-Owner; bh=Mag6jteB/sFq/jkgINTz80n0iW6Z57e6Hx+W6eP6bZc=; b=CIa cw6hELJkt8pJmlj087+qTLU9QONdfyjhvxM9A2CtP772XdBQSnJdX4X6QqiWRkCdUrHPfNYTOkkGJ 0WUlb0HmBRoJq/v5m6gnUVoPdrzDS1UQTK4hcPeZ6fW6/MMuLcQ3bINK66T/vgq2dtW/NACA0f4Do 4RL9FTgSOxXkmNcFwg1xMdUsdhDA32EXkKZzR58xyV0jLO6xrlUN9U/B8fdC4E0hu/EitDE6voB3V t0evDXB/ybqpoNj4XeZuBkDzko9w5Sj0jtNXdEE8xMne0IEJ+3lWdB/OraQpWjQiotaxbvo+DlQoL nxo+VNJgbt1AFEMYSrxD66JqmFGAADA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1rAsZq-00ASL7-1t; Wed, 06 Dec 2023 14:08:38 +0000 Received: from va-2-31.ptr.blmpb.com ([209.127.231.31]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1rAsZm-00ASJP-15 for linux-riscv@lists.infradead.org; Wed, 06 Dec 2023 14:08:37 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; s=s1; d=dragonos-org.20200927.dkim.feishu.cn; t=1701871701; h=from:subject:mime-version:from:date:message-id:subject:to:cc: reply-to:content-type:mime-version:in-reply-to:message-id; bh=w/fTSeVYJnCZiYAD22e6XTrJCZ/8A89eZY4RqcrszNA=; b=2+u36rL92+0arFq7v+3EBZ7/WQWxfFdgWKG4EYUdr9cn2BlMCRTaqXa3KQa4HNDgFYWqMF zbKrrH/bhstQ7A+TFeaoskCkhTHfo4gUD3IWx0KHBW4Wo112PQ4nFld5wg0tO927qlFRIL 4bGARReZWXxU9/vH2xLWdy5Or7BbqygvRfF2+B4NHEYcr3eseYC/MZnRZQzAzktOum8l/h MS8Ogmy721dcEj2RxjodaCJNTvIGJxXjSVS1ULpqJyAzkGS5rYdpVVAr41wLvZY99g1CyV ZEQnbPDUx2Cp5N+lOgJ5n8XH6XzOPA73/xyaBqeHiV6Jb+gvbwziTNenXbCVEg== To: , Cc: , , , "longjin" , "longjin" Message-Id: <20231206140748.1675409-1-longjin@DragonOS.org> X-Lms-Return-Path: Date: Wed, 6 Dec 2023 14:07:48 +0000 X-Mailer: git-send-email 2.34.1 From: "longjin" Subject: [PATCH] Translated the RISC-V architecture boot documentation. Mime-Version: 1.0 X-Original-From: longjin Received: from longjin-server.8.8.8.8 ([116.56.134.73]) by smtp.feishu.cn with ESMTPS; Wed, 06 Dec 2023 22:08:19 +0800 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231206_060834_549361_FB6B1FD2 X-CRM114-Status: UNSURE ( 8.72 ) X-CRM114-Notice: Please train this message. X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org The patch adds a new file boot.rst to the Documentation/translations/zh_CN/ arch/riscv/ directory, and adds a reference to the new file in the index.rst file. Signed-off-by: longjin --- .../translations/zh_CN/arch/riscv/boot.rst | 144 ++++++++++++++++++ .../translations/zh_CN/arch/riscv/index.rst | 1 + 2 files changed, 145 insertions(+) create mode 100644 Documentation/translations/zh_CN/arch/riscv/boot.rst diff --git a/Documentation/translations/zh_CN/arch/riscv/boot.rst b/Documentation/translations/zh_CN/arch/riscv/boot.rst new file mode 100644 index 000000000000..0fe8fcfc5601 --- /dev/null +++ b/Documentation/translations/zh_CN/arch/riscv/boot.rst @@ -0,0 +1,144 @@ +.. SPDX-License-Identifier: GPL-2.0 +.. include:: ../../disclaimer-zh_CN.rst + +:Original: Documentation/arch/riscv/boot.rst + +:翻译: + + 龙进 Jin Long + +=============================================== +RISC-V内核启动要求和约束 +=============================================== + +:Author: Alexandre Ghiti +:Date: 23 May 2023 + +这份文档描述了RISC-V内核对引导加载程序和固件的期望,以及任何开发者在接触早期启动过程时必须 +牢记的约束。在这份文档中, ``早期启动过程`` 指的是在最终虚拟映射设置之前运行的任何代码。 + +内核预加载的要求和约束 +======================================= + +RISC-V内核对引导加载程序和平台固件有以下要求: + +寄存器状态 +-------------- + +RISC-V内核期望: + + * ``$a0`` 应包含当前核心的hartid。 + * ``$a1`` 应包含内存中设备树的地址。 + +CSR 寄存器状态 +--------- + +RISC-V内核期望: + + * ``$satp = 0``: 如果存在MMU,必须将其禁用。 + +为常驻固件保留的内存 +------------------------------------- + +RISC-V内核在直接映射中不能映射任何常驻内存或用PMPs保护的内存, +因此固件必须根据设备树规范 和/或 UEFI规范正确标记这些区域。 + +内核的位置 +--------------- + +RISC-V内核期望被放置在PMD边界(对于rv64为2MB对齐,对于rv32为4MB对齐)。 +请注意,如果不是这样,EFI stub 将重定位内核。 + +硬件描述 +-------------------- + +固件可以将设备树或ACPI表传递给RISC-V内核。 + +设备树可以直接从前一阶段通过$a1寄存器传递给内核,或者在使用UEFI启动时,可以通过EFI配置表传递。 + +ACPI表通过EFI配置表传递给内核。在这种情况下,EFI stub 仍然会创建一个小的设备树。 +请参阅下面的"EFI stub 和设备树"部分,了解这个设备树的详细信息。 + +内核入口 +------------ + +在SMP系统中,有两种方法可以进入内核: + +在SMP系统中,有两种方法可以进入内核: + +- ``RISCV_BOOT_SPINWAIT``:固件在内核中释放所有的hart,一个hart赢得抽奖并执行早期启动代码, +而其他的hart则停在那里等待初始化完成。这种方法主要用于支持没有SBI HSM扩展和M模式RISC-V内核的旧固件。 +- ``有序启动``:固件只释放一个将执行初始化阶段的hart,然后使用SBI HSM扩展启动所有其他的hart。 +有序启动方法是启动RISC-V内核的首选启动方法,因为它可以支持CPU热插拔和kexec。 + +UEFI +---- + +UEFI 内存映射 +~~~~~~~~~~~~~~~ + +使用UEFI启动时,RISC-V内核将只使用EFI内存映射来填充系统内存。 + +UEFI固件必须解析 ``/reserved-memory`` 设备树节点的子节点,并遵守设备树规范,将这些子节点的属性 +( ``no-map`` 和 ``reusable`` )转换为其正确的EFI等价物(参见设备树规范v0.4-rc1的"3.5.4 +/reserved-memory和UEFI"部分)。 + +RISCV_EFI_BOOT_PROTOCOL +~~~~~~~~~~~~~~~~~~~~~~~ + +使用UEFI启动时,EFI stub 需要引导hartid以便将其传递给 ``$a1`` 中的RISC-V内核。 +EFI stub使用以下方法之一获取引导hartid: + +- ``RISCV_EFI_BOOT_PROTOCOL``(**首选**)。 +- ``boot-hartid``设备树子节点(**已弃用**)。 + +任何新的固件都必须实现 ``RISCV_EFI_BOOT_PROTOCOL``,因为基于设备树的方法现已被弃用。 + +早期启动的要求和约束 +======================================= + +RISC-V内核的早期启动过程遵循以下约束: + +EFI stub 和设备树 +----------------------- + +使用UEFI启动时,EFI stub 会用与arm64相同的参数补充(或创建)设备树, +这些参数在Documentation/arch/arm/uefi.rst中的"UEFI kernel support on ARM"段落中有描述。 + +虚拟映射安装 +---------------------------- + +在RISC-V内核中,虚拟映射的安装分为两步进行: + +1. ``setup_vm()``在 ``early_pg_dir``中安装一个临时的内核映射,这允许发现系统内存。 +此时只有内核文本/数据被映射。在建立这个映射时,不能进行分配(因为系统内存还未知),所以 +``early_pg_dir``页表是静态分配的(每个级别只使用一个表)。 + +2. ``setup_vm_final()``在 ``swapper_pg_dir``中创建最终的内核映射,并利用发现的系统内存 +创建线性映射。在建立这个映射时,内核可以分配内存,但不能直接访问它(因为直接映射还不存在), +所以它使用fixmap区域的临时映射来访问新分配的页表级别。 + +为了让 ``virt_to_phys()``和 ``phys_to_virt()``能够正确地将直接映射地址转换为物理地址, +它们需要知道DRAM的起始位置。这发生在步骤1之后,就在步骤2安装直接映射之前 +(参见arch/riscv/mm/init.c中的 ``setup_bootmem()``函数)。在安装最终虚拟映射之前使用 +这些宏必须仔细检查。 + +通过fixmap进行设备树映射 +----------------------------- + +由于 ``reserved_mem``数组是用 ``setup_vm()``建立的虚拟地址初始化的,并且与 +``setup_vm_final()``建立的映射一起使用,RISC-V内核使用fixmap区域来映射设备树。 +这确保设备树可以通过两种虚拟映射访问。 + +Pre-MMU执行 +----------------- + +在建立第一个虚拟映射之前,需要运行一些代码。这些包括第一个虚拟映射的安装本身,早期替代方案的修补, +以及内核命令行的早期解析。这些代码必须非常小心地编译,因为: + +- ``-fno-pie``:这对于使用``-fPIE``的可重定位内核是必需的,否则,任何对全局符号的访问都将通过 +GOT进行,而GOT只是虚拟地重新定位。 +- ``-mcmodel=medany``:任何对全局符号的访问都必须是PC相对的,以避免在设置MMU之前发生任何重定位。 +- *所有* 的仪表化功能也必须被禁用(包括KASAN,ftrace和其他)。 + +由于使用来自不同编译单元的符号需要用这些标志编译该单元,我们建议尽可能不要使用外部符号。 diff --git a/Documentation/translations/zh_CN/arch/riscv/index.rst b/Documentation/translations/zh_CN/arch/riscv/index.rst index 3b041c116169..96573459105e 100644 --- a/Documentation/translations/zh_CN/arch/riscv/index.rst +++ b/Documentation/translations/zh_CN/arch/riscv/index.rst @@ -17,6 +17,7 @@ RISC-V 体系结构 .. toctree:: :maxdepth: 1 + boot boot-image-header vm-layout patch-acceptance