1 Chinese translated version of Documentation/arch/arm/booting.rst
3 If you have any comment or update to the content, please contact the
4 original document maintainer directly. However, if you have a problem
5 communicating in English you can also ask the Chinese maintainer for
6 help. Contact the Chinese maintainer if this translation is outdated
7 or if there is a problem with the translation.
9 Maintainer: Russell King <linux@arm.linux.org.uk>
10 Chinese maintainer: Fu Wei <tekkamanninja@gmail.com>
11 ---------------------------------------------------------------------
12 Documentation/arch/arm/booting.rst 的中文翻譯
14 如果想評論或更新本文的內容,請直接聯繫原文檔的維護者。如果你使用英文
15 交流有困難的話,也可以向中文版維護者求助。如果本翻譯更新不及時或者翻
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>
24 ---------------------------------------------------------------------
32 以下文檔適用於 2.4.18-rmk6 及以上版本。
34 爲了啓動 ARM Linux,你需要一個引導裝載程序(boot loader),
35 它是一個在主內核啓動前運行的一個小程序。引導裝載程序需要初始化各種
36 設備,並最終調用 Linux 內核,將信息傳遞給內核。
38 從本質上講,引導裝載程序應提供(至少)以下功能:
42 3、檢測機器的類型(machine type)。
43 4、設置內核標籤列表(tagged list)。
53 引導裝載程序應該找到並初始化系統中所有內核用於保持系統變量數據的 RAM。
54 這個操作的執行是設備依賴的。(它可能使用內部算法來自動定位和計算所有
55 RAM,或可能使用對這個設備已知的 RAM 信息,還可能使用任何引導裝載程序
60 -----------------------------
65 引導加載程序應該初始化並使能一個目標板上的串口。這允許內核串口驅動
66 自動檢測哪個串口用於內核控制檯。(一般用於調試或與目標板通信。)
68 作爲替代方案,引導加載程序也可以通過標籤列表傳遞相關的'console='
69 選項給內核以指定某個串口,而串口數據格式的選項在以下文檔中描述:
71 Documentation/admin-guide/kernel-parameters.rst。
75 --------------------------
80 引導加載程序應該通過某些方式檢測自身所處的機器類型。這是一個硬件
81 代碼或通過查看所連接的硬件用某些算法得到,這些超出了本文檔的範圍。
82 引導加載程序最終必須能提供一個 MACH_TYPE_xxx 值給內核。
83 (詳見 linux/arch/arm/tools/mach-types )。
91 引導加載程序必須提供標籤列表或者 dtb 映像以傳遞配置數據給內核。啓動
92 數據的物理地址通過寄存器 r2 傳遞給內核。
95 --------------------------------
97 bootloader 必須創建和初始化內核標籤列表。一個有效的標籤列表以
98 ATAG_CORE 標籤開始,並以 ATAG_NONE 標籤結束。ATAG_CORE 標籤可以是
99 空的,也可以是非空。一個空 ATAG_CORE 標籤其 size 域設置爲
100 ‘2’(0x00000002)。ATAG_NONE 標籤的 size 域必須設置爲零。
102 在列表中可以保存任意數量的標籤。對於一個重複的標籤是追加到之前標籤
103 所攜帶的信息之後,還是會覆蓋原來的信息,是未定義的。某些標籤的行爲
106 bootloader 必須傳遞一個系統內存的位置和最小值,以及根文件系統位置。
110 基地址 -> | ATAG_CORE | |
112 | ATAG_MEM | | 地址增長方向
119 標籤列表必須置於內核自解壓和 initrd'bootp' 程序都不會覆蓋的內存區。
123 -------------------------
125 bootloader 必須以 64bit 地址對齊的形式加載一個設備樹映像(dtb)到系統
126 RAM 中,並用啓動數據初始化它。dtb 格式在文檔
127 https://www.devicetree.org/specifications/ 中。內核將會在
128 dtb 物理地址處查找 dtb 魔數值(0xd00dfeed),以確定 dtb 是否已經代替
131 bootloader 必須傳遞一個系統內存的位置和最小值,以及根文件系統位置。
132 dtb 必須置於內核自解壓不會覆蓋的內存區。建議將其放置於 RAM 的頭 16KiB
133 中。但是不可將其放置於“0”物理地址處,因爲內核認爲:r2 中爲 0,意味着
137 ---------------------------
142 調用內核映像 zImage 有兩個選擇。如果 zImge 保存在 flash 中,且是爲了
143 在 flash 中直接運行而被正確鏈接的。這樣引導加載程序就可以在 flash 中
146 zImage 也可以被放在系統 RAM(任意位置)中被調用。注意:內核使用映像
147 基地址的前 16KB RAM 空間來保存頁表。建議將映像置於 RAM 的 32KB 處。
149 對於以上任意一種情況,都必須符合以下啓動狀態:
151 - 停止所有 DMA 設備,這樣內存數據就不會因爲虛假網絡包或磁盤數據而被破壞。
156 r1 = (在上面 3 中獲取的)機器類型碼。
157 r2 = 標籤列表在系統 RAM 中的物理地址,或
158 設備樹塊(dtb)在系統 RAM 中的物理地址
161 所有形式的中斷必須被禁止 (IRQs 和 FIQs)
162 CPU 必須處於 SVC 模式。(對於 Angel 調試有特例存在)
169 - 引導加載程序應該通過直接跳轉到內核映像的第一條指令來調用內核映像。
171 對於支持 ARM 指令集的 CPU,跳入內核入口時必須處在 ARM 狀態,即使
174 對於僅支持 Thumb 指令集的 CPU,比如 Cortex-M 系列的 CPU,跳入