Skip to content

Commit e5cb949

Browse files
Hu HaowenJonathan Corbet
authored andcommitted
docs/zh_TW: add translations for zh_TW/arm64
Create new translations for zh_TW/arm64 and link them to index. Signed-off-by: Hu Haowen <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Jonathan Corbet <[email protected]>
1 parent 8137a49 commit e5cb949

File tree

11 files changed

+1096
-0
lines changed

11 files changed

+1096
-0
lines changed
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
.. SPDX-License-Identifier: GPL-2.0
2+
3+
.. include:: ../disclaimer-zh_TW.rst
4+
5+
:Original: :ref:`Documentation/arm64/amu.rst <amu_index>`
6+
7+
Translator: Bailu Lin <[email protected]>
8+
Hu Haowen <[email protected]>
9+
10+
==================================
11+
AArch64 Linux 中擴展的活動監控單元
12+
==================================
13+
14+
作者: Ionela Voinescu <[email protected]>
15+
16+
日期: 2019-09-10
17+
18+
本文檔簡要描述了 AArch64 Linux 支持的活動監控單元的規範。
19+
20+
21+
架構總述
22+
--------
23+
24+
活動監控是 ARMv8.4 CPU 架構引入的一個可選擴展特性。
25+
26+
活動監控單元(在每個 CPU 中實現)爲系統管理提供了性能計數器。既可以通
27+
過系統寄存器的方式訪問計數器,同時也支持外部內存映射的方式訪問計數器。
28+
29+
AMUv1 架構實現了一個由4個固定的64位事件計數器組成的計數器組。
30+
31+
- CPU 周期計數器:同 CPU 的頻率增長
32+
- 常量計數器:同固定的系統時鐘頻率增長
33+
- 淘汰指令計數器: 同每次架構指令執行增長
34+
- 內存停頓周期計數器:計算由在時鐘域內的最後一級緩存中未命中而引起
35+
的指令調度停頓周期數
36+
37+
當處於 WFI 或者 WFE 狀態時,計數器不會增長。
38+
39+
AMU 架構提供了一個高達16位的事件計數器空間,未來新的 AMU 版本中可能
40+
用它來實現新增的事件計數器。
41+
42+
另外,AMUv1 實現了一個多達16個64位輔助事件計數器的計數器組。
43+
44+
冷復位時所有的計數器會清零。
45+
46+
47+
基本支持
48+
--------
49+
50+
內核可以安全地運行在支持 AMU 和不支持 AMU 的 CPU 組合中。
51+
因此,當配置 CONFIG_ARM64_AMU_EXTN 後我們無條件使能後續
52+
(secondary or hotplugged) CPU 檢測和使用這個特性。
53+
54+
當在 CPU 上檢測到該特性時,我們會標記爲特性可用但是不能保證計數器的功能,
55+
僅表明有擴展屬性。
56+
57+
固件(代碼運行在高異常級別,例如 arm-tf )需支持以下功能:
58+
59+
- 提供低異常級別(EL2 和 EL1)訪問 AMU 寄存器的能力。
60+
- 使能計數器。如果未使能,它的值應爲 0。
61+
- 在從電源關閉狀態啓動 CPU 前或後保存或者恢復計數器。
62+
63+
當使用使能了該特性的內核啓動但固件損壞時,訪問計數器寄存器可能會遭遇
64+
panic 或者死鎖。即使未發現這些症狀,計數器寄存器返回的數據結果並不一
65+
定能反映真實情況。通常,計數器會返回 0,表明他們未被使能。
66+
67+
如果固件沒有提供適當的支持最好關閉 CONFIG_ARM64_AMU_EXTN。
68+
值得注意的是,出於安全原因,不要繞過 AMUSERRENR_EL0 設置而捕獲從
69+
EL0(用戶空間) 訪問 EL1(內核空間)。 因此,固件應該確保訪問 AMU寄存器
70+
不會困在 EL2或EL3。
71+
72+
AMUv1 的固定計數器可以通過如下系統寄存器訪問:
73+
74+
- SYS_AMEVCNTR0_CORE_EL0
75+
- SYS_AMEVCNTR0_CONST_EL0
76+
- SYS_AMEVCNTR0_INST_RET_EL0
77+
- SYS_AMEVCNTR0_MEM_STALL_EL0
78+
79+
特定輔助計數器可以通過 SYS_AMEVCNTR1_EL0(n) 訪問,其中n介於0到15。
80+
81+
詳細信息定義在目錄:arch/arm64/include/asm/sysreg.h。
82+
83+
84+
用戶空間訪問
85+
------------
86+
87+
由於以下原因,當前禁止從用戶空間訪問 AMU 的寄存器:
88+
89+
- 安全因數:可能會暴露處於安全模式執行的代碼信息。
90+
- 意願:AMU 是用於系統管理的。
91+
92+
同樣,該功能對用戶空間不可見。
93+
94+
95+
虛擬化
96+
------
97+
98+
由於以下原因,當前禁止從 KVM 客戶端的用戶空間(EL0)和內核空間(EL1)
99+
訪問 AMU 的寄存器:
100+
101+
- 安全因數:可能會暴露給其他客戶端或主機端執行的代碼信息。
102+
103+
任何試圖訪問 AMU 寄存器的行爲都會觸發一個註冊在客戶端的未定義異常。
104+
Lines changed: 251 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,251 @@
1+
SPDX-License-Identifier: GPL-2.0
2+
3+
Chinese translated version of Documentation/arm64/booting.rst
4+
5+
If you have any comment or update to the content, please contact the
6+
original document maintainer directly. However, if you have a problem
7+
communicating in English you can also ask the Chinese maintainer for
8+
help. Contact the Chinese maintainer if this translation is outdated
9+
or if there is a problem with the translation.
10+
11+
M: Will Deacon <[email protected]>
12+
zh_CN: Fu Wei <[email protected]>
13+
zh_TW: Hu Haowen <[email protected]>
14+
C: 55f058e7574c3615dea4615573a19bdb258696c6
15+
---------------------------------------------------------------------
16+
Documentation/arm64/booting.rst 的中文翻譯
17+
18+
如果想評論或更新本文的內容,請直接聯繫原文檔的維護者。如果你使用英文
19+
交流有困難的話,也可以向中文版維護者求助。如果本翻譯更新不及時或者翻
20+
譯存在問題,請聯繫中文版維護者。
21+
22+
英文版維護者: Will Deacon <[email protected]>
23+
中文版維護者: 傅煒 Fu Wei <[email protected]>
24+
中文版翻譯者: 傅煒 Fu Wei <[email protected]>
25+
中文版校譯者: 傅煒 Fu Wei <[email protected]>
26+
繁體中文版校譯者: 胡皓文 Hu Haowen <[email protected]>
27+
本文翻譯提交時的 Git 檢出點爲: 55f058e7574c3615dea4615573a19bdb258696c6
28+
29+
以下爲正文
30+
---------------------------------------------------------------------
31+
啓動 AArch64 Linux
32+
==================
33+
34+
作者: Will Deacon <[email protected]>
35+
日期: 2012 年 09 月 07 日
36+
37+
本文檔基於 Russell King 的 ARM 啓動文檔,且適用於所有公開發布的
38+
AArch64 Linux 內核代碼。
39+
40+
AArch64 異常模型由多個異常級(EL0 - EL3)組成,對於 EL0 和 EL1 異常級
41+
有對應的安全和非安全模式。EL2 是系統管理級,且僅存在於非安全模式下。
42+
EL3 是最高特權級,且僅存在於安全模式下。
43+
44+
基於本文檔的目的,我們將簡單地使用『引導裝載程序』(『boot loader』)
45+
這個術語來定義在將控制權交給 Linux 內核前 CPU 上執行的所有軟體。
46+
這可能包含安全監控和系統管理代碼,或者它可能只是一些用於準備最小啓動
47+
環境的指令。
48+
49+
基本上,引導裝載程序(至少)應實現以下操作:
50+
51+
1、設置和初始化 RAM
52+
2、設置設備樹數據
53+
3、解壓內核映像
54+
4、調用內核映像
55+
56+
57+
1、設置和初始化 RAM
58+
-----------------
59+
60+
必要性: 強制
61+
62+
引導裝載程序應該找到並初始化系統中所有內核用於保持系統變量數據的 RAM。
63+
這個操作的執行方式因設備而異。(它可能使用內部算法來自動定位和計算所有
64+
RAM,或可能使用對這個設備已知的 RAM 信息,還可能是引導裝載程序設計者
65+
想到的任何合適的方法。)
66+
67+
68+
2、設置設備樹數據
69+
---------------
70+
71+
必要性: 強制
72+
73+
設備樹數據塊(dtb)必須 8 字節對齊,且大小不能超過 2MB。由於設備樹
74+
數據塊將在使能緩存的情況下以 2MB 粒度被映射,故其不能被置於必須以特定
75+
屬性映射的2M區域內。
76+
77+
註: v4.2 之前的版本同時要求設備樹數據塊被置於從內核映像以下
78+
text_offset 字節處算起第一個 512MB 內。
79+
80+
3、解壓內核映像
81+
-------------
82+
83+
必要性: 可選
84+
85+
AArch64 內核當前沒有提供自解壓代碼,因此如果使用了壓縮內核映像文件
86+
(比如 Image.gz),則需要通過引導裝載程序(使用 gzip 等)來進行解壓。
87+
若引導裝載程序沒有實現這個功能,就要使用非壓縮內核映像文件。
88+
89+
90+
4、調用內核映像
91+
-------------
92+
93+
必要性: 強制
94+
95+
已解壓的內核映像包含一個 64 字節的頭,內容如下:
96+
97+
u32 code0; /* 可執行代碼 */
98+
u32 code1; /* 可執行代碼 */
99+
u64 text_offset; /* 映像裝載偏移,小端模式 */
100+
u64 image_size; /* 映像實際大小, 小端模式 */
101+
u64 flags; /* 內核旗標, 小端模式 *
102+
u64 res2 = 0; /* 保留 */
103+
u64 res3 = 0; /* 保留 */
104+
u64 res4 = 0; /* 保留 */
105+
u32 magic = 0x644d5241; /* 魔數, 小端, "ARM\x64" */
106+
u32 res5; /* 保留 (用於 PE COFF 偏移) */
107+
108+
109+
映像頭注釋:
110+
111+
- 自 v3.17 起,除非另有說明,所有域都是小端模式。
112+
113+
- code0/code1 負責跳轉到 stext.
114+
115+
- 當通過 EFI 啓動時, 最初 code0/code1 被跳過。
116+
res5 是到 PE 文件頭的偏移,而 PE 文件頭含有 EFI 的啓動入口點
117+
(efi_stub_entry)。當 stub 代碼完成了它的使命,它會跳轉到 code0
118+
繼續正常的啓動流程。
119+
120+
- v3.17 之前,未明確指定 text_offset 的字節序。此時,image_size 爲零,
121+
且 text_offset 依照內核字節序爲 0x80000。
122+
當 image_size 非零,text_offset 爲小端模式且是有效值,應被引導加載
123+
程序使用。當 image_size 爲零,text_offset 可假定爲 0x80000。
124+
125+
- flags 域 (v3.17 引入) 爲 64 位小端模式,其編碼如下:
126+
位 0: 內核字節序。 1 表示大端模式,0 表示小端模式。
127+
位 1-2: 內核頁大小。
128+
0 - 未指定。
129+
1 - 4K
130+
2 - 16K
131+
3 - 64K
132+
位 3: 內核物理位置
133+
0 - 2MB 對齊基址應儘量靠近內存起始處,因爲
134+
其基址以下的內存無法通過線性映射訪問
135+
1 - 2MB 對齊基址可以在物理內存的任意位置
136+
位 4-63: 保留。
137+
138+
- 當 image_size 爲零時,引導裝載程序應試圖在內核映像末尾之後儘可能
139+
多地保留空閒內存供內核直接使用。對內存空間的需求量因所選定的內核
140+
特性而異, 並無實際限制。
141+
142+
內核映像必須被放置在任意一個可用系統內存 2MB 對齊基址的 text_offset
143+
字節處,並從該處被調用。2MB 對齊基址和內核映像起始地址之間的區域對於
144+
內核來說沒有特殊意義,且可能被用於其他目的。
145+
從映像起始地址算起,最少必須準備 image_size 字節的空閒內存供內核使用。
146+
註: v4.6 之前的版本無法使用內核映像物理偏移以下的內存,所以當時建議
147+
將映像儘量放置在靠近系統內存起始的地方。
148+
149+
任何提供給內核的內存(甚至在映像起始地址之前),若未從內核中標記爲保留
150+
(如在設備樹(dtb)的 memreserve 區域),都將被認爲對內核是可用。
151+
152+
在跳轉入內核前,必須符合以下狀態:
153+
154+
- 停止所有 DMA 設備,這樣內存數據就不會因爲虛假網絡包或磁碟數據而
155+
被破壞。這可能可以節省你許多的調試時間。
156+
157+
- 主 CPU 通用寄存器設置
158+
x0 = 系統 RAM 中設備樹數據塊(dtb)的物理地址。
159+
x1 = 0 (保留,將來可能使用)
160+
x2 = 0 (保留,將來可能使用)
161+
x3 = 0 (保留,將來可能使用)
162+
163+
- CPU 模式
164+
所有形式的中斷必須在 PSTATE.DAIF 中被屏蔽(Debug、SError、IRQ
165+
和 FIQ)。
166+
CPU 必須處於 EL2(推薦,可訪問虛擬化擴展)或非安全 EL1 模式下。
167+
168+
- 高速緩存、MMU
169+
MMU 必須關閉。
170+
指令緩存開啓或關閉皆可。
171+
已載入的內核映像的相應內存區必須被清理,以達到緩存一致性點(PoC)。
172+
當存在系統緩存或其他使能緩存的一致性主控器時,通常需使用虛擬地址
173+
維護其緩存,而非 set/way 操作。
174+
遵從通過虛擬地址操作維護構架緩存的系統緩存必須被配置,並可以被使能。
175+
而不通過虛擬地址操作維護構架緩存的系統緩存(不推薦),必須被配置且
176+
禁用。
177+
178+
*譯者註:對於 PoC 以及緩存相關內容,請參考 ARMv8 構架參考手冊
179+
ARM DDI 0487A
180+
181+
- 架構計時器
182+
CNTFRQ 必須設定爲計時器的頻率,且 CNTVOFF 必須設定爲對所有 CPU
183+
都一致的值。如果在 EL1 模式下進入內核,則 CNTHCTL_EL2 中的
184+
EL1PCTEN (bit 0) 必須置位。
185+
186+
- 一致性
187+
通過內核啓動的所有 CPU 在內核入口地址上必須處於相同的一致性域中。
188+
這可能要根據具體實現來定義初始化過程,以使能每個CPU上對維護操作的
189+
接收。
190+
191+
- 系統寄存器
192+
在進入內核映像的異常級中,所有構架中可寫的系統寄存器必須通過軟體
193+
在一個更高的異常級別下初始化,以防止在 未知 狀態下運行。
194+
195+
對於擁有 GICv3 中斷控制器並以 v3 模式運行的系統:
196+
- 如果 EL3 存在:
197+
ICC_SRE_EL3.Enable (位 3) 必須初始化爲 0b1。
198+
ICC_SRE_EL3.SRE (位 0) 必須初始化爲 0b1。
199+
- 若內核運行在 EL1:
200+
ICC_SRE_EL2.Enable (位 3) 必須初始化爲 0b1。
201+
ICC_SRE_EL2.SRE (位 0) 必須初始化爲 0b1。
202+
- 設備樹(DT)或 ACPI 表必須描述一個 GICv3 中斷控制器。
203+
204+
對於擁有 GICv3 中斷控制器並以兼容(v2)模式運行的系統:
205+
- 如果 EL3 存在:
206+
ICC_SRE_EL3.SRE (位 0) 必須初始化爲 0b0。
207+
- 若內核運行在 EL1:
208+
ICC_SRE_EL2.SRE (位 0) 必須初始化爲 0b0。
209+
- 設備樹(DT)或 ACPI 表必須描述一個 GICv2 中斷控制器。
210+
211+
以上對於 CPU 模式、高速緩存、MMU、架構計時器、一致性、系統寄存器的
212+
必要條件描述適用於所有 CPU。所有 CPU 必須在同一異常級別跳入內核。
213+
214+
引導裝載程序必須在每個 CPU 處於以下狀態時跳入內核入口:
215+
216+
- 主 CPU 必須直接跳入內核映像的第一條指令。通過此 CPU 傳遞的設備樹
217+
數據塊必須在每個 CPU 節點中包含一個 『enable-method』 屬性,所
218+
支持的 enable-method 請見下文。
219+
220+
引導裝載程序必須生成這些設備樹屬性,並在跳入內核入口之前將其插入
221+
數據塊。
222+
223+
- enable-method 爲 「spin-table」 的 CPU 必須在它們的 CPU
224+
節點中包含一個 『cpu-release-addr』 屬性。這個屬性標識了一個
225+
64 位自然對齊且初始化爲零的內存位置。
226+
227+
這些 CPU 必須在內存保留區(通過設備樹中的 /memreserve/ 域傳遞
228+
給內核)中自旋於內核之外,輪詢它們的 cpu-release-addr 位置(必須
229+
包含在保留區中)。可通過插入 wfe 指令來降低忙循環開銷,而主 CPU 將
230+
發出 sev 指令。當對 cpu-release-addr 所指位置的讀取操作返回非零值
231+
時,CPU 必須跳入此值所指向的地址。此值爲一個單獨的 64 位小端值,
232+
因此 CPU 須在跳轉前將所讀取的值轉換爲其本身的端模式。
233+
234+
- enable-method 爲 「psci」 的 CPU 保持在內核外(比如,在
235+
memory 節點中描述爲內核空間的內存區外,或在通過設備樹 /memreserve/
236+
域中描述爲內核保留區的空間中)。內核將會發起在 ARM 文檔(編號
237+
ARM DEN 0022A:用於 ARM 上的電源狀態協調接口系統軟體)中描述的
238+
CPU_ON 調用來將 CPU 帶入內核。
239+
240+
*譯者注: ARM DEN 0022A 已更新到 ARM DEN 0022C。
241+
242+
設備樹必須包含一個 『psci』 節點,請參考以下文檔:
243+
Documentation/devicetree/bindings/arm/psci.yaml
244+
245+
246+
- 輔助 CPU 通用寄存器設置
247+
x0 = 0 (保留,將來可能使用)
248+
x1 = 0 (保留,將來可能使用)
249+
x2 = 0 (保留,將來可能使用)
250+
x3 = 0 (保留,將來可能使用)
251+

0 commit comments

Comments
 (0)