




已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
ARM Linux啟動過程分析趙楠 本章學(xué)習目標: l 了解Linux結(jié)構(gòu)及平臺屬性l 了解 bootloader的相關(guān)知識 l 熟悉并掌握啟動過程摘 要: 從嵌入式系統(tǒng)到超級服務(wù)站,嵌入式 Linux 的可移植性使得我們可以在各種電子產(chǎn)品上看到它的身影。Linux 是一個完整通用的Unix 類分布式操作系統(tǒng),它的結(jié)構(gòu)緊湊、功能強、效率高、可移植性好且在Internet 上可自由取用。對于不同體系結(jié)構(gòu)的處理器來說Linux的啟動過程也有所不同。本文以S3C2410 ARM處理器為例,詳細分析了系統(tǒng)上電后 bootloader的執(zhí)行流程及 ARM Linux的啟動過程。關(guān)鍵詞:ARM Linux bootloader 啟動過程Abstract: from the embedded system to super service station, embedded Linux portability allows us to various electronic products in the form of seeing it. Linux is a complete general Unix class distributed operating system, its structure compact, the function is strong, high efficiency, good portability and in the Internet can be free to take. For different system structure of the processor is the start of the Linux process is also different. Based on the ARM processor S3C2410 as an example, the paper analyses system after the execution flow of electric bootloader and ARM Linux start-up process.Keywords: ARM Linux bootloader start-up process1. 引 言 Linux 最初是由瑞典赫爾辛基大學(xué)的學(xué)生 Linus Torvalds在1991 年開發(fā)出來的,之后在 GNU的支持下,Linux 獲得了巨大的發(fā)展。雖然 Linux 在桌面 PC 機上的普及程度遠不及微軟的 Windows 操作系統(tǒng),但它的發(fā)展速度之快、用戶數(shù)量的日益增多,也是微軟所不能輕視的。從嵌入式系統(tǒng)到超級服務(wù)站,Linux 已獲得廣泛的應(yīng)用。Linux 是一個完整通用的Unix 類分布式操作系統(tǒng),它的結(jié)構(gòu)緊湊、功能強、效率高、可移植性好且在Internet 上可自由取用。Linux 和Unix 操作系統(tǒng)一樣,操作系統(tǒng)的主要功能集中在內(nèi)核,內(nèi)核中包含進程管理、文件管理、設(shè)備管理和網(wǎng)絡(luò)管理等部分。近些年來 Linux 在嵌入式領(lǐng)域的迅猛發(fā)展,更是給 Linux 注入了新的活力。2.1 內(nèi)核結(jié)構(gòu)及平臺相關(guān)性 本文以分析的內(nèi)核版本為2.6.9。當我們使用tar 命令將linux-2.6.9.tar.bz2 解開時,內(nèi)核源代碼被放到了linux-2.6.9/目錄中。Linux 內(nèi)核各功能文件分別存放在linux-2.6.9/ 目錄下的相應(yīng)子目錄中。Linux 操作系統(tǒng)可以工作在多種不同硬件平臺上,如80x86CPU 系列(80386 以上)、SUN sparc64 和arm26 等。為了讓Linux 體現(xiàn)優(yōu)良的可移植性,Linux 內(nèi)核代碼針對不同的硬件平臺包含有對應(yīng)的啟動和初始化程序。這些程序處于arch/子目錄中。用戶完全可以根據(jù)自己的需要,從內(nèi)核代碼中各取所需,即時編譯和更換系統(tǒng)內(nèi)核,這也是Linux 操作系統(tǒng)獲得世界各地網(wǎng)絡(luò)愛好者普遍支持的主要原因。鑒于絕大部分Linux 應(yīng)用于Intel 80x86 系列平臺,所以本文也僅限對Linux在80x86 系列平臺的啟動過程進行分析。本文所要探討的啟動程序位于arch/i386/boot/ 目錄,系統(tǒng)的啟動過程主要由bootsect.s、setup.s 和head.s 等3 個匯編程序完成。其中 bootloader是系統(tǒng)啟動或復(fù)位以后執(zhí)行的第一段代碼,它主要用來初始化處理器及外設(shè),然后調(diào)用 Linux 內(nèi)核。Linux 內(nèi)核在完成系統(tǒng)的初始化之后需要掛載某個文件系統(tǒng)做為根文件系統(tǒng)(Root Filesystem)。根文件系統(tǒng)是 Linux 系統(tǒng)的核心組成部分,它可以做為Linux 系統(tǒng)中文件和數(shù)據(jù)的存儲區(qū)域,通常它還包括系統(tǒng)配置文件和運行應(yīng)用軟件所需要的庫。應(yīng)用程序可以說是嵌入式系統(tǒng)的“靈魂”,它所實現(xiàn)的功能通常就是設(shè)計該嵌入式系統(tǒng)所要達到的目標。如果沒有應(yīng)用程序的支持,任何硬件上設(shè)計精良的嵌入式系統(tǒng)都沒有實用意義。 從以上分析我們可以看出 bootloader 和 Linux 內(nèi)核在嵌入式系統(tǒng)中的關(guān)系和作用。Bootloader在運行過程中雖然具有初始化系統(tǒng)和執(zhí)行用戶輸入的命令等作用,但它最根本的功能就是為了啟動 Linux 內(nèi)核。在嵌入式系統(tǒng)開發(fā)的過程中,很大一部分精力都是花在bootloader 和 Linux 內(nèi)核的開發(fā)或移植上。如果能清楚的了解 bootloader 執(zhí)行流程和 Linux的啟動過程,將有助于明確開發(fā)過程中所需的工作,從而加速嵌入式系統(tǒng)的開發(fā)過程。而這正是本文的所要研究的內(nèi)容。3. Bootloader3.1 Bootloader的概念和作用Bootloader是嵌入式系統(tǒng)的引導(dǎo)加載程序,它是系統(tǒng)上電后運行的第一段程序,其作用類似于 PC 機上的 BIOS。在完成對系統(tǒng)的初始化任務(wù)之后,它會將非易失性存儲器(通常是 Flash或 DOC 等)中的Linux 內(nèi)核拷貝到 RAM 中去,然后跳轉(zhuǎn)到內(nèi)核的第一條指令處繼續(xù)執(zhí)行,從而啟動 Linux 內(nèi)核。由此可見,bootloader 和 Linux 內(nèi)核有著密不可分的聯(lián)系,要想清楚的了解 Linux內(nèi)核的啟動過程,我們必須先得認識 bootloader的執(zhí)行過程,這樣才能對嵌入式系統(tǒng)的整個啟過程有清晰的掌握。3.2 Bootloader的執(zhí)行過程不同的處理器上電或復(fù)位后執(zhí)行的第一條指令地址并不相同,對于 ARM 處理器來說,該地址為 0x00000000。對于一般的嵌入式系統(tǒng),通常把 Flash 等非易失性存儲器映射到這個地址處,而 bootloader就位于該存儲器的最前端,所以系統(tǒng)上電或復(fù)位后執(zhí)行的第一段程序便是 bootloader。而因為存儲 bootloader的存儲器不同,bootloader的執(zhí)行過程也并不相同,下面將具體分析。 嵌入式系統(tǒng)中廣泛采用的非易失性存儲器通常是 Flash,而 Flash 又分為 Nor Flash 和Nand Flash 兩種。 它們之間的不同在于: Nor Flash 支持芯片內(nèi)執(zhí)行(XIP, eXecute In Place),這樣代碼可以在Flash上直接執(zhí)行而不必拷貝到RAM中去執(zhí)行。而Nand Flash并不支持XIP,所以要想執(zhí)行 Nand Flash 上的代碼,必須先將其拷貝到 RAM中去,然后跳到 RAM 中去執(zhí)行。實際應(yīng)用中的 bootloader根據(jù)所需功能的不同可以設(shè)計得很復(fù)雜,除完成基本的初始化系統(tǒng)和調(diào)用 Linux 內(nèi)核等基本任務(wù)外,還可以執(zhí)行很多用戶輸入的命令,比如設(shè)置 Linux 啟動參數(shù),給 Flash 分區(qū)等;也可以設(shè)計得很簡單,只完成最基本的功能。但為了能達到啟動Linux 內(nèi)核的目的,所有的 bootloader都必須具備以下功能 : 1.初始化 RAM因為 Linux 內(nèi)核一般都會在 RAM 中運行,所以在調(diào)用 Linux 內(nèi)核之前 bootloader 必須設(shè)置和初始化 RAM,為調(diào)用 Linux內(nèi)核做好準備。初始化 RAM 的任務(wù)包括設(shè)置 CPU 的控制寄存器參數(shù),以便能正常使用 RAM 以及檢測RAM 大小等。 2.初始化串口串口在 Linux 的啟動過程中有著非常重要的作用,它是 Linux內(nèi)核和用戶交互的方式之一。Linux 在啟動過程中可以將信息通過串口輸出,這樣便可清楚的了解 Linux 的啟動過程。雖然它并不是 bootloader 必須要完成的工作,但是通過串口輸出信息是調(diào)試 bootloader 和Linux 內(nèi)核的強有力的工具,所以一般的 bootloader 都會在執(zhí)行過程中初始化一個串口做為調(diào)試端口。 3.檢測處理器類型 Bootloader在調(diào)用 Linux內(nèi)核前必須檢測系統(tǒng)的處理器類型,并將其保存到某個常量中提供給 Linux 內(nèi)核。Linux 內(nèi)核在啟動過程中會根據(jù)該處理器類型調(diào)用相應(yīng)的初始化程序。 4. 設(shè)置 Linux啟動參數(shù) Bootloader在執(zhí)行過程中必須設(shè)置和初始化 Linux 的內(nèi)核啟動參數(shù)。目前傳遞啟動參數(shù)主要采用兩種方式:即通過 struct param_struct 和struct tag(標記列表,tagged list)兩種結(jié)構(gòu)傳遞。struct param_struct 是一種比較老的參數(shù)傳遞方式,在 2.4 版本以前的內(nèi)核中使用較多。從 2.4 版本以后 Linux 內(nèi)核基本上采用標記列表的方式。但為了保持和以前版本的兼容性,它仍支持 struct param_struct 參數(shù)傳遞方式,只不過在內(nèi)核啟動過程中它將被轉(zhuǎn)換成標記列表方式。標記列表方式是種比較新的參數(shù)傳遞方式,它必須以 ATAG_CORE 開始,并以ATAG_NONE 結(jié)尾。中間可以根據(jù)需要加入其他列表。Linux內(nèi)核在啟動過程中會根據(jù)該啟動參數(shù)進行相應(yīng)的初始化工作。 5.調(diào)用 Linux內(nèi)核映像 Bootloader完成的最后一項工作便是調(diào)用 Linux內(nèi)核。如果 Linux 內(nèi)核存放在 Flash 中,并且可直接在上面運行(這里的 Flash 指 Nor Flash),那么可直接跳轉(zhuǎn)到內(nèi)核中去執(zhí)行。但由于在 Flash 中執(zhí)行代碼會有種種限制,而且速度也遠不及 RAM 快,所以一般的嵌入式系統(tǒng)都是將 Linux內(nèi)核拷貝到 RAM 中,然后跳轉(zhuǎn)到 RAM 中去執(zhí)行。不論哪種情況,在跳到 Linux 內(nèi)核執(zhí)行之前 CUP的寄存器必須滿足以下條件:r00,r1處理器類型,r2標記列表在 RAM中的地址。4. 啟動過程分析主要對bootsect.s、setup.s 和head.s 的工作機理做了較為詳細的闡述。4.1 bootsect 模塊分析 bootsect.s 代碼是磁盤引導(dǎo)塊程序,駐留在引導(dǎo)盤的引導(dǎo)扇區(qū)(0 磁道,0 磁頭,第1 扇區(qū))。在PC加電ROM BIOS 自檢后,bootsect.s 由BIOS 自動加載到內(nèi)存0x7C00 處,然后將自己移到內(nèi)存0x90000 處。圖2 代碼顯示了bootsect.s 的移動過程,其中#BOOTSEG 為0x7C00,#INITSEG 為0x9000。接下來,程序利用BIOS中斷,INT 0x13 將setup 模塊從磁盤第2 個扇區(qū)開始讀到0x90200 開始處,共讀4 個扇區(qū)。如果讀出錯誤,則CF標志置位,程序復(fù)位驅(qū)動器,并重試。加載setup 模塊后,程序利用中斷取磁盤驅(qū)動器參數(shù),并將中斷返回的每磁道扇區(qū)數(shù)保存在變量sectors 中。然后程序?qū)ystem 模塊加載到內(nèi)存0x10000 處。加載system 模塊期間,顯示“Loading system”信息。為了提高加載速度,只要可能,就每次加載整條磁道的數(shù)據(jù)。從磁盤讀取一次數(shù)據(jù)后,程序就比較當前所讀段是否就是系統(tǒng)數(shù)據(jù)末端所處的段(#ENDSEG),如果不是,就跳轉(zhuǎn)至ok1_read 標號處繼續(xù)讀數(shù)據(jù)。最后,程序向軟驅(qū)控制卡的驅(qū)動端口0x3f2 寫0,關(guān)閉軟驅(qū)電動機。程序運行jmpi 0,SETUPSEG,跳轉(zhuǎn)到0x9020:0000 處,CPU開始執(zhí)行setup 模塊。 圖2 bootsect 移動代碼4.2 setup 模塊分析 setup.s首先利用ROMBIOS中斷讀取機器系統(tǒng)參數(shù)(光標位置、擴展內(nèi)存數(shù)、硬盤參數(shù)表等),并將這些數(shù)據(jù)保存到內(nèi)存0x90000 開始的位置(覆蓋掉了bootsect 程序)。這些參數(shù)將被內(nèi)核中相關(guān)程序使用,例如設(shè)備驅(qū)動程序集中的ttyio.c。隨后系統(tǒng)進入保護模式運行。CPU 在實模式下運行,尋址一個內(nèi)存地址主要是使用段基址和段內(nèi)偏移值,段值被存放在段寄存器中;而在保護模式運行方式下,段寄存器中存放的是一個描述表中某項的索引值。索引值指定的描述符項中含有需要尋址的內(nèi)存段的基地址、段的最大長度值和段的訪問級別等信息。和實模式下的尋址相比,段寄存器值換成了段描述符項索引。接下來,程序關(guān)閉中斷,將system模塊整體向內(nèi)存低端移動0x1000。每次移動0x8000 字,循環(huán)執(zhí)行8 次。然后程序執(zhí)行l(wèi)idt idt_48 加載中斷描述符表(idt)寄存器;執(zhí)行l(wèi)gdt gdt_48 加載全局描述符表(gdt)寄存器。此時中斷描述符表中只有一個空項(值全為0)。全局描述符表中有3 個描述符項:第1 項無用,但必須存在;第2 項(索引值0x08)是系統(tǒng)代碼段描述符,所定義的段基址為0,段中代碼可被讀和執(zhí)行,段長為8 M;第3項(索引值0x10) 是系統(tǒng)數(shù)據(jù)段描述符,所定義的段的基址為0,段中數(shù)據(jù)可讀和可寫,段限長為8M。最后,程序重置協(xié)處理器,對8259 中斷控制芯片編程,完成進入保護虛地址模式的所有準備工作。通過設(shè)置機器狀態(tài)字MSW(第0 號控制寄存器CR0 的低16 位)中的PE 位使CPU進入保護模式,開始運行system模塊中的head.s(指令jmpi 0,8)。注意,CPU 已在保護模式下運行,CS 置8 表示請求特權(quán)級0,使用全局描述符表中的第1 項(索引值0x08)。圖3 顯示了setup.s 結(jié)束后內(nèi)存分布。 圖3 setup 結(jié)束
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025屆湖南衡陽常寧市第五中學(xué)化學(xué)高一下期末統(tǒng)考模擬試題含解析
- 職業(yè)生涯規(guī)劃書教學(xué)課件
- 職業(yè)生涯的特點
- 北京市西城外國語學(xué)校2025屆化學(xué)高一下期末監(jiān)測模擬試題含解析
- 2024年中國塑膠件行業(yè)市場調(diào)查報告
- 中國無虛線編織機行業(yè)市場發(fā)展前景及發(fā)展趨勢與投資戰(zhàn)略研究報告(2024-2030)
- 中國塑料電鍍行業(yè)市場調(diào)查報告
- 職業(yè)版課件下載
- 中國豬飼料行業(yè)市場全景評估及發(fā)展戰(zhàn)略規(guī)劃報告
- 河南省周口市白集鎮(zhèn)中心校2025年高一化學(xué)第二學(xué)期期末聯(lián)考試題含解析
- 2023年廣東廣州市越秀區(qū)流花街招聘兩名專職統(tǒng)計員筆試備考題庫及答案解析
- 吉林省房屋修繕及抗震加固工程計價定額說明
- 預(yù)制箱梁施工監(jiān)理重點檢查內(nèi)容標準版
- 干部人事檔案目錄(樣表)
- 幼兒園中班語言教案《頑皮的小雨滴》含反思
- 2023年北京理工附中小升初英語分班考試復(fù)習題
- GB/T 20470-2006臨床實驗室室間質(zhì)量評價要求
- 《沙盤游戲與大學(xué)生心理治療》課程教學(xué)大綱
- FZ/T 12001-2006氣流紡棉本色紗
- 丁類(D類)功率放大器
- 論湖湘?zhèn)鹘y(tǒng)文化與大學(xué)生思政教育之間的融合優(yōu)秀獲獎科研論文-1
評論
0/150
提交評論