ARM Linux內(nèi)核啟動要求
原版:http://www.arm.linux.org.uk/developer/booting.php
本文引用地址:http://www.ex-cimer.com/article/201611/316973.htmAuthor: Russell KingInitial date: May 18, 2002
Revision:1 - 17 September 20042 - 30 September 2004
為了啟動ARM Linux,首先,你需要一個bootloader,它是一個很小的程序(在內(nèi)核運行之前啟動)。bootloader的第一階段作用就是初始化各種硬件設(shè)備,最后,就是調(diào)用內(nèi)核,并且將第一階段的各種參數(shù)傳遞給內(nèi)核。
本質(zhì)上將,bootloader程序應(yīng)提供(最小限度)如下幾個方面:
1、設(shè)置和初始化化RAM
2、初始化一個串口
3、檢測機器類型
4、設(shè)置內(nèi)核啟動需要的標記列表
5、調(diào)用內(nèi)核鏡像
1、設(shè)置和初始化RAM
現(xiàn)有的bootloader:強制性的(必須的)
新的bootloader:強制性的(必須的)
bootloader被用來去找到并初始化所有內(nèi)核將用于非易失性數(shù)據(jù)存儲系統(tǒng)中使用的內(nèi)存。它完成那些動作都是在機器依賴的方式下完成的。(它可能采用內(nèi)部算法來自動定位和分類所有的RAM,或者它可能采用特定機器的RAM的相關(guān)知識,或者任何其它的、設(shè)計者認為合適的方法)。
2、初始化一個串口
現(xiàn)有的bootloader:可選的,推薦使用的
新的bootloader:可選的,推薦使用的
bootloader在這個過程應(yīng)該以初始化、使能一個串口設(shè)備為目標。這使得內(nèi)核的串行驅(qū)動程序自動檢測哪一個串口應(yīng)該被用來作為內(nèi)核的控制臺。(一般用于調(diào)試或者通信的目的)。
可供選擇的,通過特定的串口標記列表,bootloader可以向內(nèi)核傳遞諸如“console=”相關(guān)的參數(shù),還可以傳遞一些串口格式的參數(shù),比如在linux/Documentation/kernel-parameters.txt中描述的。
3、檢測機器ID
現(xiàn)有的bootloader:可選的
新的bootloader:強制性的(必須的)
bootloader必須創(chuàng)建和初始化內(nèi)核標記列表。一個有效的標記列表開始于ATAG_CORE這個標記,結(jié)束于ATAG_NONE,ATAG_CORE可能會是空的,或者也可能不是。一個空ATAG_CORE標記的大小被設(shè)置為2 (0x00000002),ATAG_NONE這個標記的大小必須設(shè)置為0。
任何號碼的標記都可以放置在這個標記列表中。但是,重復(fù)的標記是否附加到前面的標記所攜帶的信息中,或者它是否會取代完整的信息,這些都是不確定的。
The boot loader must pass at a minimum the size and location ofthe system memory, and root filesystem location,因此,最小的標記列表如下:
+-----------+base -> | ATAG_CORE | |+-----------+ || ATAG_MEM | | increasing address+-----------+ || ATAG_NONE | |+-----------+ v這個標記列表應(yīng)該存放在系統(tǒng)的RAM中。
這個標記列表必須放置在一塊內(nèi)存區(qū)中,這塊內(nèi)存區(qū)內(nèi)核既不能解壓,臨時的文件系統(tǒng)也不能覆蓋它。一般推薦的這個內(nèi)存位置為RAM的第一個16KB大小處。
5、調(diào)用內(nèi)核鏡像
現(xiàn)有的bootloader:強制性的(必須的)
新的bootloader:強制性的(必須的)
bootloader在調(diào)用內(nèi)核的時候提供了連個選項。如果zImage鏡像存儲在Flash中,并且它被正確的鏈接為從Flash中啟動,那么,bootloader直接從Flash調(diào)用zImage就是合法的(有效的)。
zImage還可能放置在系統(tǒng)的RAM(RAM的任何位置)中,并且在那里被調(diào)用。請注意,內(nèi)核使用內(nèi)核鏡像下的16KB RAM來存放頁表。所以,這個頁表推薦放置在RAM的第32KB處。
在上述的兩種情況下,必須滿足以下條件:
●CPU 寄存器設(shè)置
★ r0=0;
★ r1=機器ID(上述第三步中發(fā)現(xiàn)的)
★r2=標記列表在RAM的物理地址
●CPU模式
★所有的中斷必須禁用
★CPU必須設(shè)置為SVC模式(操作系統(tǒng)保護模式),
●高速緩存、MMUs
★關(guān)MMU(內(nèi)存映射)
★指令緩存可以設(shè)為開或者關(guān)
★必須關(guān)數(shù)據(jù)緩存,并且其中不能含有“臟數(shù)據(jù)”
●設(shè)備
★不響應(yīng)DMA設(shè)備
● bootloader通過直接跳轉(zhuǎn)到內(nèi)核鏡像的第一條指令來最終實現(xiàn)內(nèi)核的調(diào)用。
評論