ARM Linux啟動過程分析_第1頁
ARM Linux啟動過程分析_第2頁
ARM Linux啟動過程分析_第3頁
免費預覽已結束,剩余1頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

ARMLinux啟動過程分析

摘要:嵌入式Linux的可移植性使得我們可以在各種電子產品上看到它的身影。對于不同體系結構的處理器來說Linux的啟動過程也有所不同。本文以S3C2410ARM處理器為例,詳細分析了系統(tǒng)上電后bootloader的執(zhí)行流程及ARMLinux的啟動過程。關鍵詞:ARMLinuxbootloader啟動過程Abstract:WecanseeembeddedLinuxinkindsofelectronicproductsbecauseofitsportability.Linux’sstart-upprocedurefordifferentprocessorsisalsodifferent.ThispaperprovidestheanalysisofbootloaderexecutionprocessandLinuxkernelstart-upprocedure-takingtheS3C2410ARMprocessorasexample.Keywords:ARMLinuxbootloaderstart-upprocedure1.引言Linux最初是由瑞典赫爾辛基大學的學生LinusTorvalds在1991年開發(fā)出來的,之后在GNU的支持下,Linux獲得了巨大的發(fā)展。雖然Linux在桌面PC機上的普及程度遠不及微軟的Windows操作系統(tǒng),但它的發(fā)展速度之快、用戶數(shù)量的日益增多,也是微軟所不能輕視的。而近些年來Linux在嵌入式領域的迅猛發(fā)展,更是給Linux注入了新的活力。一個嵌入式Linux系統(tǒng)從軟件角度看可以分為四個部分[1]:引導加載程序(bootloader),Linux內核,文件系統(tǒng),應用程序。其中bootloader是系統(tǒng)啟動或復位以后執(zhí)行的第一段代碼,它主要用來初始化處理器及外設,然后調用Linux內核。Linux內核在完成系統(tǒng)的初始化之后需要掛載某個文件系統(tǒng)做為根文件系統(tǒng)(RootFilesystem)。根文件系統(tǒng)是Linux系統(tǒng)的核心組成部分,它可以做為Linux系統(tǒng)中文件和數(shù)據(jù)的存儲區(qū)域,通常它還包括系統(tǒng)配置文件和運行應用軟件所需要的庫。應用程序可以說是嵌入式系統(tǒng)的“靈魂”,它所實現(xiàn)的功能通常就是設計該嵌入式系統(tǒng)所要達到的目標。如果沒有應用程序的支持,任何硬件上設計精良的嵌入式系統(tǒng)都沒有實用意義。從以上分析我們可以看出bootloader和Linux內核在嵌入式系統(tǒng)中的關系和作用。Bootloader在運行過程中雖然具有初始化系統(tǒng)和執(zhí)行用戶輸入的命令等作用,但它最根本的功能就是為了啟動Linux內核。在嵌入式系統(tǒng)開發(fā)的過程中,很大一部分精力都是花在bootloader和Linux內核的開發(fā)或移植上。如果能清楚的了解bootloader執(zhí)行流程和Linux的啟動過程,將有助于明確開發(fā)過程中所需的工作,從而加速嵌入式系統(tǒng)的開發(fā)過程。而這正是本文的所要研究的內容。2.Bootloader2.1Bootloader的概念和作用Bootloader是嵌入式系統(tǒng)的引導加載程序,它是系統(tǒng)上電后運行的第一段程序,其作用類似于PC機上的BIOS。在完成對系統(tǒng)的初始化任務之后,它會將非易失性存儲器(通常是Flash或DOC等)中的Linux內核拷貝到RAM中去,然后跳轉到內核的第一條指令處繼續(xù)執(zhí)行,從而啟動Linux內核。由此可見,bootloader和Linux內核有著密不可分的聯(lián)系,要想清楚的了解Linux內核的啟動過程,我們必須先得認識bootloader的執(zhí)行過程,這樣才能對嵌入式系統(tǒng)的整個啟過程有清晰的掌握。2.2Bootloader的執(zhí)行過程不同的處理器上電或復位后執(zhí)行的第一條指令地址并不相同,對于ARM處理器來說,該地址為0x00000000。對于一般的嵌入式系統(tǒng),通常把Flash等非易失性存儲器映射到這個地址處,而bootloader就位于該存儲器的最前端,所以系統(tǒng)上電或復位后執(zhí)行的第一段程序便是bootloader。而因為存儲bootloader的存儲器不同,bootloader的執(zhí)行過程也并不相同,下面將具體分析。嵌入式系統(tǒng)中廣泛采用的非易失性存儲器通常是Flash,而Flash又分為NorFlash和NandFlash兩種。它們之間的不同在于:NorFlash支持芯片內執(zhí)行(XIP,eXecuteInPlace),這樣代碼可以在Flash上直接執(zhí)行而不必拷貝到RAM中去執(zhí)行。而NandFlash并不支持XIP,所以要想執(zhí)行NandFlash上的代碼,必須先將其拷貝到RAM中去,然后跳到RAM中去執(zhí)行。實際應用中的bootloader根據(jù)所需功能的不同可以設計得很復雜,除完成基本的初始化系統(tǒng)和調用Linux內核等基本任務外,還可以執(zhí)行很多用戶輸入的命令,比如設置Linux啟動參數(shù),給Flash分區(qū)等;也可以設計得很簡單,只完成最基本的功能。但為了能達到啟動Linux內核的目的,所有的bootloader都必須具備以下功能[2]:1)初始化RAM因為Linux內核一般都會在RAM中運行,所以在調用Linux內核之前bootloader必須設置和初始化RAM,為調用Linux內核做好準備。初始化RAM的任務包括設置CPU的控制寄存器參數(shù),以便能正常使用RAM以及檢測RAM大小等。2)初始化串口串口在Linux的啟動過程中有著非常重要的作用,它是Linux內核和用戶交互的方式之一。Linux在啟動過程中可以將信息通過串口輸出,這樣便可清楚的了解Linux的啟動過程。雖然它并不是bootloader必須要完成的工作,但是通過串口輸出信息是調試bootloader和Linux內核的強有力的工具,所以一般的bootloader都會在執(zhí)行過程中初始化一個串口做為調試端口。3)檢測處理器類型Bootloader在調用Linux內核前必須檢測系統(tǒng)的處理器類型,并將其保存到某個常量中提供給Linux內核。Linux內核在啟動過程中會根據(jù)該處理器類型調用相應的初始化程序。4)設置Linux啟動參數(shù)Bootloader在執(zhí)行過程中必須設置和初始化Linux的內核啟動參數(shù)。目前傳遞啟動參數(shù)主要采用兩種方式:即通過structparam_struct和structtag(標記列表,taggedlist)兩種結構傳遞。structparam_struct是一種比較老的參數(shù)傳遞方式,在2.4版本以前的內核中使用較多。從2.4版本以后Linux內核基本上采用標記列表的方式。但為了保持和以前版本的兼容性,它仍支持structparam_struct參數(shù)傳遞方式,只不過在內核啟動過程中它將被轉換成標記列表方式。標記列表方式是種比較新的參數(shù)傳遞方式,它必須以ATAG_CORE開始,并以ATAG_NONE結尾。中間可以根據(jù)需要加入其他列表。Linux內核在啟動過程中會根據(jù)該啟動參數(shù)進行相應的初始化工作。5)調用Linux內核映像Bootloader完成的最后一項工作便是調用Linux內核。如果Linux內核存放在Flash中,并且可直接在上面運行(這里的Flash指NorFlash),那

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論