<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è) > 嵌入式系統 > 設計應用 > 基于S3C44B0芯片的uClinux內核引導過(guò)程分析

基于S3C44B0芯片的uClinux內核引導過(guò)程分析

作者: 時(shí)間:2012-04-20 來(lái)源:網(wǎng)絡(luò ) 收藏

前 言

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

隨著(zhù)計算機硬件技術(shù)的不斷發(fā)展,功能強大、資源豐富的嵌入式,成為研究人員開(kāi)發(fā)專(zhuān)業(yè)應用領(lǐng)域產(chǎn)品的首選。三星公司生產(chǎn)的,采用ARM7TDM I,具有功耗小、成本低的特點(diǎn),是一款專(zhuān)門(mén)針對移動(dòng)終端及PDA手持設備市場(chǎng)的產(chǎn)品。近幾年,源碼開(kāi)放的L inux系統迅速發(fā)展,很快成為跨平臺操作系統中的佼佼者,并且出現了專(zhuān)門(mén)針對嵌入式系統的產(chǎn)品———。在上移植 操作系統,能夠充分發(fā)揮該芯片系統資源豐富(相對單片機而言)的特點(diǎn),開(kāi)發(fā)出功能強大的應用產(chǎn)品。

嵌入式系統的啟動(dòng)程序與硬件嚴格相關(guān),對編寫(xiě)人員的要求較高,而在移植后又大大增加了程序的復雜程度,因此這部分代碼往往是各個(gè)嵌入式產(chǎn)品開(kāi)發(fā)廠(chǎng)商嚴格保密的部分。下面將以一款市場(chǎng)上成熟的芯片的嵌入式開(kāi)發(fā)板為藍本,對uClinux進(jìn)行。

系統引導

嵌入式系統中uClinux的系統引導通??梢苑譃?個(gè)階段,即boot階段、系統初始化階段和uClinux內核引導階段。通常情況下boot階段和系統初始化階段的工作由一段被稱(chēng)為bootloader的代碼完成,而內核引導則是由事先編譯好了的uClinux可執行鏡像來(lái)實(shí)現。

系統內存組織

由于嵌入式系統的硬件環(huán)境千差萬(wàn)別,即使選用同一種型號的嵌入式芯片,其外圍設備也大不相同,特別是存儲設備的組織,將直接關(guān)系到引導程序的實(shí)現。對于 S3C44B0芯片,其生產(chǎn)廠(chǎng)家規定在系統加電自舉后,從0x00000000處開(kāi)始執行(其他芯片如ARM9系列可以通過(guò)地址映射改變該地址) ,故此處通常安排的是Flash 地址空間,用于保存bootloader啟動(dòng)代碼以及uClinux映象。對于S3C44B0 芯片, RAM 地址被固定在0x0c000000到0x0fffffff的64兆,開(kāi)發(fā)人員可以根據自己的需要再組織RAM,如本開(kāi)發(fā)板存儲器地址安排如下:

44.jpg

此外,考慮到Flash運行速度的問(wèn)題,通常采取的做法是將系統初始化階段的代碼和uClinux內核鏡像拷貝到RAM中執行。下面將分3個(gè)階段系統引導過(guò)程。

boot階段

boot階段的主要工作是設置系統中斷向量、完成對CPU內部寄存器的初始化、系統RAM初始化、為運行C程序組織堆棧、拷貝初始化階段代碼到RAM、跳轉到C程序入口。該階段代碼直接在Flash中運行,為提高執行效率采用匯編語(yǔ)言編寫(xiě)。

(1) 設置中斷向量。設置S3C44B0芯片的8種系統中斷的中斷向量地址(包括復位中斷、未定義指令中斷、軟件中斷、指令預取異常中斷、數據異常中斷、地址異常中斷、IRQ 中斷和F IQ 中斷) ,該地址空間從系統RAM的起始地址開(kāi)始安排。通常情況下,在Flash的起始部分,存放的就是針對各中斷向量地址的無(wú)條件跳轉指令。

__entry :

B ResetHandler

/* for reset vector */

LDR PC, = 0x0c00000c

/* 0x0c00000: 未定義指令中斷向量地址*/

……

/* 中間省略類(lèi)似跳轉*/

LDR PC, = 0x0c000024

/* 0x0c000024: F IQ中斷向量地址*/

(2) CPU內部寄存器初始化。通過(guò)配置CPU運行于SVC模式(采用改變CPSC寄存器中CPU運行模式位的方式來(lái)實(shí)現) ,并設置相關(guān)寄存器,以實(shí)現對基本硬件的初始化工作,包括關(guān)閉中斷、初始化CPU通用端口和設置CPU頻率等。進(jìn)入SVC模式匯編代碼如下:

MRS a1, CPSR /* 保存當前狀態(tài)寄存器值*/

BICa1, a1, #MODE_MASK /* 清除運行模式位*/

ORR a1, a1, #SUP_MODE/* 設置為超級用戶(hù)模式*/

ORR a1, a1, #LOCKOUT /* 關(guān)閉F IQ和IRQ */

MSR CPSR_cxsf, a1 /* 保存到當前狀態(tài)寄存器*/

(3) 系統RAM初始化。初始化系統RAM的主要目的是為下面使用RAM空間的操作做好準備工作,如進(jìn)行代碼拷貝及堆棧初始化等。這部分工作可以分為兩個(gè)步驟。首先,根據系統配置的存儲器特性,初始化相關(guān)存儲塊控制寄存器的值, 在S3C44B0 中存儲空間被分為BANK0到BANK7共8個(gè)塊,分別由BANKCON0到BANKCON7控制各塊存儲器的讀寫(xiě)時(shí)鐘數和片選時(shí)鐘數等信號參數,對于采取不同存儲芯片的嵌入式系統,可以通過(guò)查閱芯片手冊來(lái)獲取該信息,并寫(xiě)入相關(guān)寄存器。

LDR r0, = rBANKCON0

LDR r1, = 0x700

STR r1, [ r0 ]

/* 中間省略BANK1到BANK6*/

LDR r0, = rBANKCON7

LDR r1, = 0x18000

STR r1, [ r0 ]

LDR r0, = rREFRESH

LDR r1, = 0xac03e1

STR r1, [ r0 ]

LDR r0, = rBANKSIZE

LDR r1, = 0x16

STR r1, [ r0 ]


上一頁(yè) 1 2 3 下一頁(yè)

評論


相關(guān)推薦

技術(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>