1 Chinese translated version of Documentation/ar 2 3 If you have any comment or update to the conte 4 original document maintainer directly. Howeve 5 communicating in English you can also ask the 6 help. Contact the Chinese maintainer if this 7 or if there is a problem with the translation. 8 9 M: Will Deacon <will.deacon@arm.com> 10 zh_CN: Fu Wei <wefu@redhat.com> 11 C: 55f058e7574c3615dea4615573a19bdb258696 12 ---------------------------------------------- 13 Documentation/arch/arm64/booting.rst 的中文 14 15 如果想评论或更新本文的内容,请 16 交流有困难的话,也可以向中文版 17 译存在问题,请联系中文版维护者 18 19 英文版维护者: Will Deacon <will.deacon@ 20 中文版维护者: 傅炜 Fu Wei <wefu@redh 21 中文版翻译者: 傅炜 Fu Wei <wefu@redh 22 中文版校译者: 傅炜 Fu Wei <wefu@redh 23 本文翻译提交时的 Git 检出点为: 5 24 25 以下为正文 26 ---------------------------------------------- 27 启动 AArch64 Linux 28 ================== 29 30 作者: Will Deacon <will.deacon@arm.com> 31 日期: 2012 年 09 月 07 日 32 33 本文档基于 Russell King 的 ARM 启动文 34 AArch64 Linux 内核代码。 35 36 AArch64 异常模型由多个异常级(EL0 - 37 有对应的安全和非安全模式。EL2 是 38 EL3 是最高特权级,且仅存在于安全 39 40 基于本文档的目的,我们将简单地 41 这个术语来定义在将控制权交给 Lin 42 这可能包含安全监控和系统管理代 43 环境的指令。 44 45 基本上,引导装载程序(至少)应 46 47 1、设置和初始化 RAM 48 2、设置设备树数据 49 3、解压内核映像 50 4、调用内核映像 51 52 53 1、设置和初始化 RAM 54 ----------------- 55 56 必要性: 强制 57 58 引导装载程序应该找到并初始化系 59 这个操作的执行方式因设备而异。 60 RAM,或可能使用对这个设备已知的 61 想到的任何合适的方法。) 62 63 64 2、设置设备树数据 65 --------------- 66 67 必要性: 强制 68 69 设备树数据块(dtb)必须 8 字节对 70 数据块将在使能缓存的情况下以 2MB 71 属性映射的2M区域内。 72 73 注: v4.2 之前的版本同时要求设备 74 text_offset 字节处算起第一个 512MB 内 75 76 3、解压内核映像 77 ------------- 78 79 必要性: 可选 80 81 AArch64 内核当前没有提供自解压代 82 (比如 Image.gz),则需要通过引导 83 若引导装载程序没有实现这个功能 84 85 86 4、调用内核映像 87 ------------- 88 89 必要性: 强制 90 91 已解压的内核映像包含一个 64 字节 92 93 u32 code0; /* 可执行 94 u32 code1; /* 可执行 95 u64 text_offset; /* 映像装 96 u64 image_size; /* 映像实 97 u64 flags; /* 内核旗 98 u64 res2 = 0; /* 保留 */ 99 u64 res3 = 0; /* 保留 */ 100 u64 res4 = 0; /* 保留 */ 101 u32 magic = 0x644d5241; /* 魔数, 小 102 u32 res5; /* 保留 ( 103 104 105 映像头注释: 106 107 - 自 v3.17 起,除非另有说明,所有 108 109 - code0/code1 负责跳转到 stext. 110 111 - 当通过 EFI 启动时, 最初 code0/code 112 res5 是到 PE 文件头的偏移,而 PE 113 (efi_stub_entry)。当 stub 代码完成 114 继续正常的启动流程。 115 116 - v3.17 之前,未明确指定 text_offset 117 且 text_offset 依照内核字节序为 0x8 118 当 image_size 非零,text_offset 为小 119 程序使用。当 image_size 为零,text_ 120 121 - flags 域 (v3.17 引入) 为 64 位小端模 122 位 0: 内核字节序。 1 表示大 123 位 1-2: 内核页大小。 124 0 - 未指定。 125 1 - 4K 126 2 - 16K 127 3 - 64K 128 位 3: 内核物理位置 129 0 - 2MB 对齐基址 130 其基址以下的 131 1 - 2MB 对齐基址 132 位 4-63: 保留。 133 134 - 当 image_size 为零时,引导装载程 135 多地保留空闲内存供内核直接使 136 特性而异, 并无实际限制。 137 138 内核映像必须被放置在任意一个可 139 字节处,并从该处被调用。2MB 对齐 140 内核来说没有特殊意义,且可能被 141 从映像起始地址算起,最少必须准 142 注: v4.6 之前的版本无法使用内核 143 将映像尽量放置在靠近系统内存起 144 145 任何提供给内核的内存(甚至在映 146 (如在设备树(dtb)的 memreserve 区域 147 148 在跳转入内核前,必须符合以下状 149 150 - 停止所有 DMA 设备,这样内存数据 151 被破坏。这可能可以节省你许多 152 153 - 主 CPU 通用寄存器设置 154 x0 = 系统 RAM 中设备树数据块(dtb 155 x1 = 0 (保留,将来可能使用) 156 x2 = 0 (保留,将来可能使用) 157 x3 = 0 (保留,将来可能使用) 158 159 - CPU 模式 160 所有形式的中断必须在 PSTATE.DAIF 161 和 FIQ)。 162 CPU 必须处于 EL2(推荐,可访问虚 163 164 - 高速缓存、MMU 165 MMU 必须关闭。 166 指令缓存开启或关闭皆可。 167 已载入的内核映像的相应内存区 168 当存在系统缓存或其他使能缓存 169 维护其缓存,而非 set/way 操作。 170 遵从通过虚拟地址操作维护构架 171 而不通过虚拟地址操作维护构架 172 禁用。 173 174 *译者注:对于 PoC 以及缓存相关 175 ARM DDI 0487A 176 177 - 架构计时器 178 CNTFRQ 必须设定为计时器的频率, 179 都一致的值。如果在 EL1 模式下进 180 EL1PCTEN (bit 0) 必须置位。 181 182 - 一致性 183 通过内核启动的所有 CPU 在内核入 184 这可能要根据具体实现来定义初 185 接收。 186 187 - 系统寄存器 188 在进入内核映像的异常级中,所 189 在一个更高的异常级别下初始化 190 191 对于拥有 GICv3 中断控制器并以 v3 192 - 如果 EL3 存在: 193 ICC_SRE_EL3.Enable (位 3) 必须初始化 194 ICC_SRE_EL3.SRE (位 0) 必须初始化为 195 - 若内核运行在 EL1: 196 ICC_SRE_EL2.Enable (位 3) 必须初始化 197 ICC_SRE_EL2.SRE (位 0) 必须初始化为 198 - 设备树(DT)或 ACPI 表必须描述 199 200 对于拥有 GICv3 中断控制器并以兼 201 - 如果 EL3 存在: 202 ICC_SRE_EL3.SRE (位 0) 必须初始化为 203 - 若内核运行在 EL1: 204 ICC_SRE_EL2.SRE (位 0) 必须初始化为 205 - 设备树(DT)或 ACPI 表必须描述 206 207 以上对于 CPU 模式、高速缓存、MMU 208 必要条件描述适用于所有 CPU。所有 209 210 引导装载程序必须在每个 CPU 处于 211 212 - 主 CPU 必须直接跳入内核映像的第 213 数据块必须在每个 CPU 节点中包含 214 支持的 enable-method 请见下文。 215 216 引导装载程序必须生成这些设备 217 数据块。 218 219 - enable-method 为 “spin-table” 的 CPU 220 节点中包含一个 ‘cpu-release-addr’ 221 64 位自然对齐且初始化为零的内 222 223 这些 CPU 必须在内存保留区(通过 224 给内核)中自旋于内核之外,轮 225 包含在保留区中)。可通过插入 w 226 发出 sev 指令。当对 cpu-release-addr 227 时,CPU 必须跳入此值所指向的地 228 因此 CPU 须在跳转前将所读取的值 229 230 - enable-method 为 “psci” 的 CPU 保持 231 memory 节点中描述为内核空间的内 232 域中描述为内核保留区的空间中 233 ARM DEN 0022A:用于 ARM 上的电源状 234 CPU_ON 调用来将 CPU 带入内核。 235 236 *译者注: ARM DEN 0022A 已更新到 ARM D 237 238 设备树必须包含一个 ‘psci’ 节 239 Documentation/devicetree/bindings/arm/psci.y 240 241 242 - 辅助 CPU 通用寄存器设置 243 x0 = 0 (保留,将来可能使用) 244 x1 = 0 (保留,将来可能使用) 245 x2 = 0 (保留,将来可能使用) 246 x3 = 0 (保留,将来可能使用)
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.