xref: /linux/Documentation/translations/zh_TW/arch/arm/Booting (revision c532de5a67a70f8533d495f8f2aaa9a0491c3ad0)
1Chinese translated version of Documentation/arch/arm/booting.rst
2
3If you have any comment or update to the content, please contact the
4original document maintainer directly.  However, if you have a problem
5communicating in English you can also ask the Chinese maintainer for
6help.  Contact the Chinese maintainer if this translation is outdated
7or if there is a problem with the translation.
8
9Maintainer: Russell King <linux@arm.linux.org.uk>
10Chinese maintainer: Fu Wei <tekkamanninja@gmail.com>
11---------------------------------------------------------------------
12Documentation/arch/arm/booting.rst 的中文翻譯
13
14如果想評論或更新本文的內容,請直接聯繫原文檔的維護者。如果你使用英文
15交流有困難的話,也可以向中文版維護者求助。如果本翻譯更新不及時或者翻
16譯存在問題,請聯繫中文版維護者。
17
18英文版維護者: Russell King <linux@arm.linux.org.uk>
19中文版維護者: 傅煒  Fu Wei <tekkamanninja@gmail.com>
20中文版翻譯者: 傅煒  Fu Wei <tekkamanninja@gmail.com>
21中文版校譯者: 傅煒  Fu Wei <tekkamanninja@gmail.com>
22
23以下爲正文
24---------------------------------------------------------------------
25
26			啓動 ARM Linux
27			==============
28
29作者:Russell King
30日期:2002年5月18日
31
32以下文檔適用於 2.4.18-rmk6 及以上版本。
33
34爲了啓動 ARM Linux,你需要一個引導裝載程序(boot loader),
35它是一個在主內核啓動前運行的一個小程序。引導裝載程序需要初始化各種
36設備,並最終調用 Linux 內核,將信息傳遞給內核。
37
38從本質上講,引導裝載程序應提供(至少)以下功能:
39
401、設置和初始化 RAM。
412、初始化一個串口。
423、檢測機器的類型(machine type)。
434、設置內核標籤列表(tagged list)。
445、調用內核映像。
45
46
471、設置和初始化 RAM
48-------------------
49
50現有的引導加載程序:		強制
51新開發的引導加載程序:		強制
52
53引導裝載程序應該找到並初始化系統中所有內核用於保持系統變量數據的 RAM。
54這個操作的執行是設備依賴的。(它可能使用內部算法來自動定位和計算所有
55RAM,或可能使用對這個設備已知的 RAM 信息,還可能使用任何引導裝載程序
56設計者想到的匹配方法。)
57
58
592、初始化一個串口
60-----------------------------
61
62現有的引導加載程序:		可選、建議
63新開發的引導加載程序:		可選、建議
64
65引導加載程序應該初始化並使能一個目標板上的串口。這允許內核串口驅動
66自動檢測哪個串口用於內核控制檯。(一般用於調試或與目標板通信。)
67
68作爲替代方案,引導加載程序也可以通過標籤列表傳遞相關的'console='
69選項給內核以指定某個串口,而串口數據格式的選項在以下文檔中描述:
70
71       Documentation/admin-guide/kernel-parameters.rst72
73
743、檢測機器類型
75--------------------------
76
77現有的引導加載程序:		可選
78新開發的引導加載程序:		強制
79
80引導加載程序應該通過某些方式檢測自身所處的機器類型。這是一個硬件
81代碼或通過查看所連接的硬件用某些算法得到,這些超出了本文檔的範圍。
82引導加載程序最終必須能提供一個 MACH_TYPE_xxx 值給內核。
83(詳見 linux/arch/arm/tools/mach-types )。
84
854、設置啓動數據
86------------------
87
88現有的引導加載程序:		可選、強烈建議
89新開發的引導加載程序:		強制
90
91引導加載程序必須提供標籤列表或者 dtb 映像以傳遞配置數據給內核。啓動
92數據的物理地址通過寄存器 r2 傳遞給內核。
93
944a、設置內核標籤列表
95--------------------------------
96
97bootloader 必須創建和初始化內核標籤列表。一個有效的標籤列表以
98ATAG_CORE 標籤開始,並以 ATAG_NONE 標籤結束。ATAG_CORE 標籤可以是
99空的,也可以是非空。一個空 ATAG_CORE 標籤其 size 域設置爲
100‘2’(0x00000002)。ATAG_NONE 標籤的 size 域必須設置爲零。
101
102在列表中可以保存任意數量的標籤。對於一個重複的標籤是追加到之前標籤
103所攜帶的信息之後,還是會覆蓋原來的信息,是未定義的。某些標籤的行爲
104是前者,其他是後者。
105
106bootloader 必須傳遞一個系統內存的位置和最小值,以及根文件系統位置。
107因此,最小的標籤列表如下所示:
108
109		+-----------+
110基地址 ->	| ATAG_CORE |  |
111		+-----------+  |
112		| ATAG_MEM  |  | 地址增長方向
113		+-----------+  |
114		| ATAG_NONE |  |
115		+-----------+  v
116
117標籤列表應該保存在系統的 RAM 中。
118
119標籤列表必須置於內核自解壓和 initrd'bootp' 程序都不會覆蓋的內存區。
120建議放在 RAM 的頭 16KiB 中。
121
1224b、設置設備樹
123-------------------------
124
125bootloader 必須以 64bit 地址對齊的形式加載一個設備樹映像(dtb)到系統
126RAM 中,並用啓動數據初始化它。dtb 格式在文檔
127https://www.devicetree.org/specifications/ 中。內核將會在
128dtb 物理地址處查找 dtb 魔數值(0xd00dfeed),以確定 dtb 是否已經代替
129標籤列表被傳遞進來。
130
131bootloader 必須傳遞一個系統內存的位置和最小值,以及根文件系統位置。
132dtb 必須置於內核自解壓不會覆蓋的內存區。建議將其放置於 RAM 的頭 16KiB
133中。但是不可將其放置於“0”物理地址處,因爲內核認爲:r2 中爲 0,意味着
134沒有標籤列表和 dtb 傳遞過來。
135
1365、調用內核映像
137---------------------------
138
139現有的引導加載程序:		強制
140新開發的引導加載程序:		強制
141
142調用內核映像 zImage 有兩個選擇。如果 zImge 保存在 flash 中,且是爲了
143在 flash 中直接運行而被正確鏈接的。這樣引導加載程序就可以在 flash 中
144直接調用 zImage。
145
146zImage 也可以被放在系統 RAM(任意位置)中被調用。注意:內核使用映像
147基地址的前 16KB RAM 空間來保存頁表。建議將映像置於 RAM 的 32KB 處。
148
149對於以上任意一種情況,都必須符合以下啓動狀態:
150
151- 停止所有 DMA 設備,這樣內存數據就不會因爲虛假網絡包或磁盤數據而被破壞。
152  這可能可以節省你許多的調試時間。
153
154- CPU 寄存器配置
155  r0 = 0,
156  r1 = (在上面 3 中獲取的)機器類型碼。
157  r2 = 標籤列表在系統 RAM 中的物理地址,或
158       設備樹塊(dtb)在系統 RAM 中的物理地址
159
160- CPU 模式
161  所有形式的中斷必須被禁止 (IRQs 和 FIQs)
162  CPU 必須處於 SVC 模式。(對於 Angel 調試有特例存在)
163
164- 緩存,MMUs
165  MMU 必須關閉。
166  指令緩存開啓或關閉都可以。
167  數據緩存必須關閉。
168
169- 引導加載程序應該通過直接跳轉到內核映像的第一條指令來調用內核映像。
170
171  對於支持 ARM 指令集的 CPU,跳入內核入口時必須處在 ARM 狀態,即使
172  對於 Thumb-2 內核也是如此。
173
174  對於僅支持 Thumb 指令集的 CPU,比如 Cortex-M 系列的 CPU,跳入
175  內核入口時必須處於 Thumb 狀態。
176
177