下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
ARMLinux啟動(dòng)過程分析
摘要:嵌入式Linux的可移植性使得我們可以在各種電子產(chǎn)品上看到它的身影。對(duì)于不同體系結(jié)構(gòu)的處理器來說Linux的啟動(dòng)過程也有所不同。本文以S3C2410ARM處理器為例,詳細(xì)分析了系統(tǒng)上電后bootloader的執(zhí)行流程及ARMLinux的啟動(dòng)過程。關(guān)鍵詞:ARMLinuxbootloader啟動(dòng)過程Abstract:WecanseeembeddedLinuxinkindsofelectronicproductsbecauseofitsportability.Linux’sstart-upprocedurefordifferentprocessorsisalsodifferent.ThispaperprovidestheanalysisofbootloaderexecutionprocessandLinuxkernelstart-upprocedure-takingtheS3C2410ARMprocessorasexample.Keywords:ARMLinuxbootloaderstart-upprocedure1.引言Linux最初是由瑞典赫爾辛基大學(xué)的學(xué)生LinusTorvalds在1991年開發(fā)出來的,之后在GNU的支持下,Linux獲得了巨大的發(fā)展。雖然Linux在桌面PC機(jī)上的普及程度遠(yuǎn)不及微軟的Windows操作系統(tǒng),但它的發(fā)展速度之快、用戶數(shù)量的日益增多,也是微軟所不能輕視的。而近些年來Linux在嵌入式領(lǐng)域的迅猛發(fā)展,更是給Linux注入了新的活力。一個(gè)嵌入式Linux系統(tǒng)從軟件角度看可以分為四個(gè)部分[1]:引導(dǎo)加載程序(bootloader),Linux內(nèi)核,文件系統(tǒng),應(yīng)用程序。其中bootloader是系統(tǒng)啟動(dòng)或復(fù)位以后執(zhí)行的第一段代碼,它主要用來初始化處理器及外設(shè),然后調(diào)用Linux內(nèi)核。Linux內(nèi)核在完成系統(tǒng)的初始化之后需要掛載某個(gè)文件系統(tǒng)做為根文件系統(tǒng)(RootFilesystem)。根文件系統(tǒng)是Linux系統(tǒng)的核心組成部分,它可以做為Linux系統(tǒng)中文件和數(shù)據(jù)的存儲(chǔ)區(qū)域,通常它還包括系統(tǒng)配置文件和運(yùn)行應(yīng)用軟件所需要的庫。應(yīng)用程序可以說是嵌入式系統(tǒng)的“靈魂”,它所實(shí)現(xiàn)的功能通常就是設(shè)計(jì)該嵌入式系統(tǒng)所要達(dá)到的目標(biāo)。如果沒有應(yīng)用程序的支持,任何硬件上設(shè)計(jì)精良的嵌入式系統(tǒng)都沒有實(shí)用意義。從以上分析我們可以看出bootloader和Linux內(nèi)核在嵌入式系統(tǒng)中的關(guān)系和作用。Bootloader在運(yùn)行過程中雖然具有初始化系統(tǒng)和執(zhí)行用戶輸入的命令等作用,但它最根本的功能就是為了啟動(dòng)Linux內(nèi)核。在嵌入式系統(tǒng)開發(fā)的過程中,很大一部分精力都是花在bootloader和Linux內(nèi)核的開發(fā)或移植上。如果能清楚的了解bootloader執(zhí)行流程和Linux的啟動(dòng)過程,將有助于明確開發(fā)過程中所需的工作,從而加速嵌入式系統(tǒng)的開發(fā)過程。而這正是本文的所要研究的內(nèi)容。2.Bootloader2.1Bootloader的概念和作用Bootloader是嵌入式系統(tǒng)的引導(dǎo)加載程序,它是系統(tǒng)上電后運(yùn)行的第一段程序,其作用類似于PC機(jī)上的BIOS。在完成對(duì)系統(tǒng)的初始化任務(wù)之后,它會(huì)將非易失性存儲(chǔ)器(通常是Flash或DOC等)中的Linux內(nèi)核拷貝到RAM中去,然后跳轉(zhuǎn)到內(nèi)核的第一條指令處繼續(xù)執(zhí)行,從而啟動(dòng)Linux內(nèi)核。由此可見,bootloader和Linux內(nèi)核有著密不可分的聯(lián)系,要想清楚的了解Linux內(nèi)核的啟動(dòng)過程,我們必須先得認(rèn)識(shí)bootloader的執(zhí)行過程,這樣才能對(duì)嵌入式系統(tǒng)的整個(gè)啟過程有清晰的掌握。2.2Bootloader的執(zhí)行過程不同的處理器上電或復(fù)位后執(zhí)行的第一條指令地址并不相同,對(duì)于ARM處理器來說,該地址為0x00000000。對(duì)于一般的嵌入式系統(tǒng),通常把Flash等非易失性存儲(chǔ)器映射到這個(gè)地址處,而bootloader就位于該存儲(chǔ)器的最前端,所以系統(tǒng)上電或復(fù)位后執(zhí)行的第一段程序便是bootloader。而因?yàn)榇鎯?chǔ)bootloader的存儲(chǔ)器不同,bootloader的執(zhí)行過程也并不相同,下面將具體分析。嵌入式系統(tǒng)中廣泛采用的非易失性存儲(chǔ)器通常是Flash,而Flash又分為NorFlash和NandFlash兩種。它們之間的不同在于:NorFlash支持芯片內(nèi)執(zhí)行(XIP,eXecuteInPlace),這樣代碼可以在Flash上直接執(zhí)行而不必拷貝到RAM中去執(zhí)行。而NandFlash并不支持XIP,所以要想執(zhí)行NandFlash上的代碼,必須先將其拷貝到RAM中去,然后跳到RAM中去執(zhí)行。實(shí)際應(yīng)用中的bootloader根據(jù)所需功能的不同可以設(shè)計(jì)得很復(fù)雜,除完成基本的初始化系統(tǒng)和調(diào)用Linux內(nèi)核等基本任務(wù)外,還可以執(zhí)行很多用戶輸入的命令,比如設(shè)置Linux啟動(dòng)參數(shù),給Flash分區(qū)等;也可以設(shè)計(jì)得很簡單,只完成最基本的功能。但為了能達(dá)到啟動(dòng)Linux內(nèi)核的目的,所有的bootloader都必須具備以下功能[2]:1)初始化RAM因?yàn)長inux內(nèi)核一般都會(huì)在RAM中運(yùn)行,所以在調(diào)用Linux內(nèi)核之前bootloader必須設(shè)置和初始化RAM,為調(diào)用Linux內(nèi)核做好準(zhǔn)備。初始化RAM的任務(wù)包括設(shè)置CPU的控制寄存器參數(shù),以便能正常使用RAM以及檢測RAM大小等。2)初始化串口串口在Linux的啟動(dòng)過程中有著非常重要的作用,它是Linux內(nèi)核和用戶交互的方式之一。Linux在啟動(dòng)過程中可以將信息通過串口輸出,這樣便可清楚的了解Linux的啟動(dòng)過程。雖然它并不是bootloader必須要完成的工作,但是通過串口輸出信息是調(diào)試bootloader和Linux內(nèi)核的強(qiáng)有力的工具,所以一般的bootloader都會(huì)在執(zhí)行過程中初始化一個(gè)串口做為調(diào)試端口。3)檢測處理器類型Bootloader在調(diào)用Linux內(nèi)核前必須檢測系統(tǒng)的處理器類型,并將其保存到某個(gè)常量中提供給Linux內(nèi)核。Linux內(nèi)核在啟動(dòng)過程中會(huì)根據(jù)該處理器類型調(diào)用相應(yīng)的初始化程序。4)設(shè)置Linux啟動(dòng)參數(shù)Bootloader在執(zhí)行過程中必須設(shè)置和初始化Linux的內(nèi)核啟動(dòng)參數(shù)。目前傳遞啟動(dòng)參數(shù)主要采用兩種方式:即通過structparam_struct和structtag(標(biāo)記列表,taggedlist)兩種結(jié)構(gòu)傳遞。structparam_struct是一種比較老的參數(shù)傳遞方式,在2.4版本以前的內(nèi)核中使用較多。從2.4版本以后Linux內(nèi)核基本上采用標(biāo)記列表的方式。但為了保持和以前版本的兼容性,它仍支持structparam_struct參數(shù)傳遞方式,只不過在內(nèi)核啟動(dòng)過程中它將被轉(zhuǎn)換成標(biāo)記列表方式。標(biāo)記列表方式是種比較新的參數(shù)傳遞方式,它必須以ATAG_CORE開始,并以ATAG_NONE結(jié)尾。中間可以根據(jù)需要加入其他列表。Linux內(nèi)核在啟動(dòng)過程中會(huì)根據(jù)該啟動(dòng)參數(shù)進(jìn)行相應(yīng)的初始化工作。5)調(diào)用Linux內(nèi)核映像Bootloader完成的最后一項(xiàng)工作便是調(diào)用Linux內(nèi)核。如果Linux內(nèi)核存放在Flash中,并且可直接在上面運(yùn)行(這里的Flash指NorFlash),那
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 酒店前臺(tái)接待合同管理辦法
- 2025版跨境電商出口貨物物流代理及國際分撥合同3篇
- 2024年自行車修理店買賣協(xié)議3篇
- 車展中心消防系統(tǒng)升級(jí)投標(biāo)方案
- 親子教育房產(chǎn)交易樣本
- 醫(yī)療設(shè)備采購招投標(biāo)避坑指南
- 2025CD光盤加工復(fù)制合同模板
- 2025年度餐飲管理合同主體變更及服務(wù)質(zhì)量協(xié)議3篇
- 博物館消防設(shè)施改造合同樣本
- 防洪控制工程合同范本
- 2024年廚房述職報(bào)告
- 腹腔穿刺術(shù)評(píng)分表
- 護(hù)理疑難病例討論肺心病
- 汽車產(chǎn)品定義 培訓(xùn)課件
- NICU患兒常規(guī)監(jiān)測和護(hù)理要點(diǎn)
- 數(shù)字工程勘察信息平臺(tái)構(gòu)建
- 噴涂設(shè)備保養(yǎng)和維護(hù)操作規(guī)程
- 監(jiān)控設(shè)備改造項(xiàng)目 投標(biāo)方案(技術(shù)方案)
- 【一例小兒支氣管肺炎的臨床護(hù)理個(gè)案分析2200字】
- 中國特色社會(huì)主義理論與實(shí)踐復(fù)習(xí)資料-研究生
- 抖音學(xué)習(xí)考試題及答案
評(píng)論
0/150
提交評(píng)論