<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > ARM Linux內(nèi)核啟動(dòng)要求

          ARM Linux內(nèi)核啟動(dòng)要求

          作者: 時(shí)間:2016-11-11 來源:網(wǎng)絡(luò) 收藏
          這篇文章英文原版“ARM Linux Kernel Boot Requirements”,是ARM Linux內(nèi)核的維護(hù)者Russell King寫的。在此我將其簡(jiǎn)易的翻譯成中文,方便大家學(xué)習(xí)下。

          原版:http://www.arm.linux.org.uk/developer/booting.php

          本文引用地址:http://www.ex-cimer.com/article/201611/316973.htmAuthor: Russell King
          Initial date: May 18, 2002

          Revision:1 - 17 September 20042 - 30 September 2004

          為了啟動(dòng)ARM Linux,首先,你需要一個(gè)bootloader,它是一個(gè)很小的程序(在內(nèi)核運(yùn)行之前啟動(dòng))。bootloader的第一階段作用就是初始化各種硬件設(shè)備,最后,就是調(diào)用內(nèi)核,并且將第一階段的各種參數(shù)傳遞給內(nèi)核。

          本質(zhì)上將,bootloader程序應(yīng)提供(最小限度)如下幾個(gè)方面:

          1、設(shè)置和初始化化RAM

          2、初始化一個(gè)串口

          3、檢測(cè)機(jī)器類型

          4、設(shè)置內(nèi)核啟動(dòng)需要的標(biāo)記列表

          5、調(diào)用內(nèi)核鏡像

          1、設(shè)置和初始化RAM

          現(xiàn)有的bootloader:強(qiáng)制性的(必須的)

          新的bootloader:強(qiáng)制性的(必須的)

          bootloader被用來去找到并初始化所有內(nèi)核將用于非易失性數(shù)據(jù)存儲(chǔ)系統(tǒng)中使用的內(nèi)存。它完成那些動(dòng)作都是在機(jī)器依賴的方式下完成的。(它可能采用內(nèi)部算法來自動(dòng)定位和分類所有的RAM,或者它可能采用特定機(jī)器的RAM的相關(guān)知識(shí),或者任何其它的、設(shè)計(jì)者認(rèn)為合適的方法)。

          2、初始化一個(gè)串口

          現(xiàn)有的bootloader:可選的,推薦使用的

          新的bootloader:可選的,推薦使用的

          bootloader在這個(gè)過程應(yīng)該以初始化、使能一個(gè)串口設(shè)備為目標(biāo)。這使得內(nèi)核的串行驅(qū)動(dòng)程序自動(dòng)檢測(cè)哪一個(gè)串口應(yīng)該被用來作為內(nèi)核的控制臺(tái)。(一般用于調(diào)試或者通信的目的)。

          可供選擇的,通過特定的串口標(biāo)記列表,bootloader可以向內(nèi)核傳遞諸如“console=”相關(guān)的參數(shù),還可以傳遞一些串口格式的參數(shù),比如在linux/Documentation/kernel-parameters.txt中描述的。

          3、檢測(cè)機(jī)器ID

          現(xiàn)有的bootloader:可選的

          新的bootloader:強(qiáng)制性的(必須的)

          bootloader必須創(chuàng)建和初始化內(nèi)核標(biāo)記列表。一個(gè)有效的標(biāo)記列表開始于ATAG_CORE這個(gè)標(biāo)記,結(jié)束于ATAG_NONE,ATAG_CORE可能會(huì)是空的,或者也可能不是。一個(gè)空ATAG_CORE標(biāo)記的大小被設(shè)置為2 (0x00000002),ATAG_NONE這個(gè)標(biāo)記的大小必須設(shè)置為0。

          任何號(hào)碼的標(biāo)記都可以放置在這個(gè)標(biāo)記列表中。但是,重復(fù)的標(biāo)記是否附加到前面的標(biāo)記所攜帶的信息中,或者它是否會(huì)取代完整的信息,這些都是不確定的。

          The boot loader must pass at a minimum the size and location ofthe system memory, and root filesystem location,因此,最小的標(biāo)記列表如下:

          +-----------+base ->	| ATAG_CORE |  |+-----------+  || ATAG_MEM  |  | increasing address+-----------+  || ATAG_NONE |  |+-----------+  v
          這個(gè)標(biāo)記列表應(yīng)該存放在系統(tǒng)的RAM中。

          這個(gè)標(biāo)記列表必須放置在一塊內(nèi)存區(qū)中,這塊內(nèi)存區(qū)內(nèi)核既不能解壓,臨時(shí)的文件系統(tǒng)也不能覆蓋它。一般推薦的這個(gè)內(nèi)存位置為RAM的第一個(gè)16KB大小處。

          5、調(diào)用內(nèi)核鏡像

          現(xiàn)有的bootloader:強(qiáng)制性的(必須的)

          新的bootloader:強(qiáng)制性的(必須的)

          bootloader在調(diào)用內(nèi)核的時(shí)候提供了連個(gè)選項(xiàng)。如果zImage鏡像存儲(chǔ)在Flash中,并且它被正確的鏈接為從Flash中啟動(dòng),那么,bootloader直接從Flash調(diào)用zImage就是合法的(有效的)。

          zImage還可能放置在系統(tǒng)的RAM(RAM的任何位置)中,并且在那里被調(diào)用。請(qǐng)注意,內(nèi)核使用內(nèi)核鏡像下的16KB RAM來存放頁表。所以,這個(gè)頁表推薦放置在RAM的第32KB處。

          在上述的兩種情況下,必須滿足以下條件:

          ●CPU 寄存器設(shè)置

          ★ r0=0;

          ★ r1=機(jī)器ID(上述第三步中發(fā)現(xiàn)的)

          ★r2=標(biāo)記列表在RAM的物理地址

          ●CPU模式

          ★所有的中斷必須禁用

          ★CPU必須設(shè)置為SVC模式(操作系統(tǒng)保護(hù)模式),

          ●高速緩存、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)核鏡像的第一條指令來最終實(shí)現(xiàn)內(nèi)核的調(diào)用。



          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();