<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > ARM體系架構下的linux啟動(dòng)之一,從bootloader到linux內核

ARM體系架構下的linux啟動(dòng)之一,從bootloader到linux內核

作者: 時(shí)間:2016-11-09 來(lái)源:網(wǎng)絡(luò ) 收藏
1. bootloader的啟動(dòng)


bootloader本身叫做嵌入式系統的引導程序。但是,它支持X86,MIPS,PowerPC,ARM等多種體系架構。

對于操作系統的啟動(dòng)來(lái)講,當機器開(kāi)始上電時(shí),首先加載bootloader,它用來(lái)完成最基本的硬件的初始化,然后加載Linux內核。

本文引用地址:http://dyxdggzs.com/article/201611/317841.htm

用于A(yíng)RM的bootloader一般為U-BOOT,用它來(lái)完成對linux內核的加載設置,一般bootloader燒寫(xiě)在開(kāi)發(fā)板的Flash里,包括Nor Flash或Nand Flash,其中由于NorFlash支持芯片內執行XIP(eXcute In Place),代碼可以直接在FLASH上執行,而NandFlash需要把代碼拷到RAM中再去執行。但是RAM的處理速度比Flash的處理速度要快得多,一般仍然把代碼放在RAM中執行。

一般的bootloader需要完成以下五種功能:

1)RAM的初始化:為調用linux內核做準備。

2)串口的初始化:由于一般的嵌入式系統開(kāi)發(fā)板上沒(méi)有視頻終端,只能用串口進(jìn)行開(kāi)發(fā),串口的初始化非常重要。

3)檢測處理器類(lèi)型:用來(lái)預處理加載內核的處理器類(lèi)型的傳遞工作。

4)設置Linux的啟動(dòng)參數:包括加載地址,啟動(dòng)方式(從本地分區或NFS進(jìn)行根文件系統加載),以及Linux根文件系統

的加載方式。通常用一個(gè)標記列表來(lái)記錄linux內核啟動(dòng)的各個(gè)參數。

5)調用linux內核鏡像:此時(shí)ARM的處理器中的幾個(gè)特殊的寄存器值:r0=0,r1=處理器類(lèi)型,r2=標記列表在RAM中的位置。

2. linux kernel的啟動(dòng)分析

首先從http://www.kernel.org 上下載一個(gè)linux內核的標準版,然后
$make menuconfig
這時(shí)你會(huì )發(fā)現,里面配置的體系架構為X86的,找不到關(guān)于A(yíng)RM配置的相關(guān)選項,這時(shí)由于當前的內核體系架構與你用于開(kāi)發(fā)的電腦上的體系架構一模一樣。如果要做ARM架構下的配置:

$make menuconfig ARCH=arm
便可以對ARM體系下的linux內核進(jìn)行配置操作。

如果需要編譯,還要指定交叉編譯器和體系架構類(lèi)型。


關(guān)于linux的內核一般有兩種映像,一種是非壓縮的映像:Image,另一種是他的壓縮版zImage,在壓縮的鏡像前端還包括了解壓縮的代碼。由于嵌入式系統的存儲空間較小,一般會(huì )采用zImage的內核,犧牲速度,但是能得到較小的內核。

Linux內核中zImage的入口程序為arch/arm/boot/compressed/head.S

這個(gè)文件主要完成以下工作:

1)開(kāi)啟MMU和Cache

2)調用decompress_kernel()解壓內核

3)調用call_kernel()進(jìn)入非壓縮內核Image 的啟動(dòng)

head.S文件分析:

在113行以上是關(guān)于debug的相關(guān)代碼和ARM的不同版本的差別。從114行開(kāi)始,便是函數的入口:

114 start:
115 .type start,#function
116 .rept 8
117 mov r0, r0
118 .endr
119
120 b 1f
121 .word 0x016f2818 @ Magic numbers to help the loader
122 .word start @ absolute load/run zImage address
123 .word _edata @ zImage end address
124 1: mov r7, r1 @ save architecture ID
125 mov r8, r2 @ save atags pointer

從這段代碼中可以看出,總共操作的3個(gè)寄存器r0,r1,r2正是bootloader調用linux內核時(shí)需要操作的3個(gè)寄存器。r0寄存器中存放0。然后是r1的CPU類(lèi)型和r2中的傳入參數列表的指針地址。



關(guān)鍵詞: ARMbootloaderlinux內

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>