所謂完整的linux系統包括哪些部分呢?
簡介:三部分:bootloader、linux kernel(linux內核)、rootfile(根文件系統)。 那麽這3部分是怎麽相互協作來構成這個系統的呢?各自有什麽用呢?三者有什麽聯系?怎麽聯系?系統的執行流程又是怎麽樣的呢?搞清楚這個問題你對整個系統的運行就很清楚了,對於下一步制作這個linux系統就打下了另一個重要的根基。

下面是筆者針對網上bootloader、linuxkernel(linux內核)、rootfile(根文件系統),三者關系的一個總結,包括提問和回答。

1.LINUX中bootloader、linuxkernel、rootfile三者之間的確切關系是怎麽樣的呢?

bootloader->linuxkernel->rootfile

啟動順序。

後者需要前者提供功能支持,前者的目的就是啟動後者。

2、嵌入式linux的bootloader的啟動流程是怎樣的

一個嵌入式Linux系統從軟件角度看可以分為四個部分:引導加載程序(Bootloader),Linux內核,文件系統,應用程序。

當系統首次引導時,或系統被重置時,處理器會執行一個位於Flash/ROM中的已知位置處的代碼,Bootloader就是這第一段代碼。它主要用來初始化處理器及外設,然後調用Linux內核。Linux內核在完成系統的初始化之後需要掛載某個文件系統作為根文件系統(RootFilesystem),然後加載必要的內核模塊,啟動應用程序。這就是嵌入式Linux系統啟動過程Linux引導的整個過程。

根文件系統是Linux系統的核心組成部分,它可以作為Linux系統中文件和數據的存儲區域,通常它還包括系統配置文件和運行應用軟件所需要的庫。應用程序可以說是嵌入式系統的“靈魂”,它所實現的功能通常就是設計該嵌入式系統所要達到的目標。如果沒有應用程序的支持,任何硬件上設計精良的嵌入式系統都沒有實用意義。

從以上分析可以看出Bootloader在運行過程中雖然具有初始化系統和執行用戶輸入的命令等作用,但它最根本的功能就是為了啟動Linux內核,讓我們進一步分析Bootloader和Linux內核在嵌入式系統中的關系和作用。

Bootloader

1、Bootloader基本概述

Bootloader是嵌入式系統的引導加載程序,它是系統上電後運行的第一段程序,其作用類似於PC機上的BIOS。Bootloader是依賴於硬件而實現的,特別是在嵌入式領域,為嵌入式系統建立一個通用的Bootloader是很困難的,但為了能達到啟動Linux內核的目的,所有的Bootloader都必須具備以下功能:

1)初始化RAM

因為Linux內核一般都會在RAM中運行,所以在調用Linux內核之前Bootloader必須設置和初始化RAM,為調用Linux內核做好準備。初始化RAM的任務包括設置CPU的控制寄存器參數,以便能正常使用RAM以及檢測RAM大小等。

2)初始化串口端口

在Linux的啟動過程中有著非常重要的作用,它是Linux內核和用戶交互的方式之一。Linux在啟動過程中可以將信息通過串口輸出,這樣便可清楚的了解Linux的啟動過程。雖然它並不是Bootloader必須要完成的工作,但是通過串口輸出信息是調試Bootloader和Linux內核的強有力的工具,所以一般的Bootloader都會在執行過程中初始化一個串口作為調試端口。

3)檢測處理器類型

Bootloader在調用Linux內核前必須檢測系統的處理器類型,並將其保存到某個常量中提供給Linux內核。Linux內核在啟動過程中會根據該處理器類型調用相應的初始化程序。

4)設置Linux啟動參數

Bootloader在執行過程中必須設置和初始化Linux的內核啟動參數。

5)調用Linux內核映像

Bootloader完成的最後一項工作便是調用Linux內核。如果Linux內核存放在Flash中,並且可直接在上面運行(這裏的Flash指NorFlash),那麽可直接跳轉到內核中去執行。但由於在Flash中執行代碼會有種種限制,而且速度也遠不及RAM快,所以一般的嵌入式系統都是將Linux內核拷貝到RAM中,然後跳轉到RAM中去執行。

2、Bootloader啟動過程

嵌入式Linux系統通過Bootloader引導,一上電,就要執行Bootloader來初始化系統。在完成對系統的初始化任務之後,它會將非易失性存儲器(通常是Flash或DOC等)中的Linux內核拷貝到RAM中去,然後跳轉到內核的第一條指令處繼續執行,從而啟動Linux內核。Bootloader和Linux內核有著密不可分的聯系。

Bootloader多數有兩個階段的啟動過程:

Stage1:

基本的硬件初始化

為加載stage2準備RAM空間

拷貝內核映像和文件系統映像到RAM中

設置堆棧指針sp

跳到stage2的入口點

Stage2:

初始化本階段要使用到的硬件設備

檢測系統的內存映射

加載內核映像和文件系統映像

設置內核的啟動參數

嵌入式系統中廣泛采用的非易失性存儲器通常是Flash,而Bootloader就位於該存儲器的最前端,所以系統上電或復位後執行的第一段程序便是Bootloader。Bootloader在flash中的存儲示意圖如下:

Bootloader啟動流程圖

3、Bootloader的啟動方式

3.1網絡啟動方式

這種方式的開發板不需要較大的存儲介質,跟無盤工作站有點類似,但是使用這種啟動方式之前,需要把Bootloader安裝到板上的EPROM或者Flash中。Bootloader通過以太網接口遠程下載Linux內核映像或者文件系統。Bootloader下載文件一般都使用TFTP網絡協議,還可以通過DHCP的方式動態配置IP地址。

3.2硬盤啟動方式

傳統的Linux系統運行在臺式機或者服務器上,這些計算機一般都使用BIOS引導,並使用磁盤作為存儲介質。Linux傳統上是LILO(LinuxLoader)引導,後來又出現了GUN的軟件(GrandUnifiedBootloader)。這兩種Bootloader廣泛應用在X86的Linux系統上。

3.3Flash啟動方式

大多數嵌入式系統上都使用Flash存儲介質。Flash有很多類型,包括NORFlash、NANDFlash和其它半導體盤。它們之間的不同在於:NORFlash支持芯片內執行(XIP,eXecuteInPlace),這樣代碼可以在Flash上直接執行而不必拷貝到RAM中去執行。而NANDFlash並不支持XIP,所以要想執行NANDFlash上的代碼,必須先將其拷貝到RAM中去,然後跳到RAM中去執行。NORFlash使用最為普遍。Bootloader一般放在Flash的底端或者頂端,這需要根據處理器的復位向量來進行設置。可以配置成MTD設備來訪問Flash分區

3.linux的內核是由bootloader裝載到內存中的?

提問:

參考書上寫的內容bootloader的作用是加載內核並將控制權轉交給內核程序,但是內核文件本身是存放在硬盤的文件系統中,bootloader只有512B,此時並沒有能力識別文件系統和initrd,因此是如何在硬盤上定位內核文件的?

對於文件系統的一個疑問,以linux中的ext文件系統為例,文件是由超級塊,inode,數據塊組成的,要讀取數據必須找到inode,從中取出文件是有哪些bloc塊組成的,但是是誰記錄inode的位置呢?是否跟硬盤的MBR一個原理?存在硬盤分區的前幾個固定位置,然後調用系統中斷來取?

回答:

linux的內核的確是由bootloader裝載到內存中的。linux的bootloader有2個部分組成:bootstrap和uboot。所以更準確點的說法是:linux的內核是由uboot裝載到內存中的。內核文件本身是存放在硬盤的文件系統中,這句話就是錯的。內核和文件系統是分開存儲的。uboot讀取kernel到內存是從kernel開始存儲的地址開始讀取的,而讀取開始位置和讀取大小,是由環境變量決定的。所以這個時候不需要文件系統的。

給你張圖片,便於理解吧。這張圖片是bootstrap、uboot、環境變量、kernel、文件系統在nandflash裏面的存儲分布。

其中rootfs.jfss2就是文件系統。

4.請問bootloader、u-boot和linux內核的區別和關系是怎樣的?麻煩哪位大俠給小弟指導指導。

bootloader是取代mbr功能的,可以看成mbr的加強.u-boot是把usb盤做成啟動盤的,linux內核就是linux系統的核心,你用的linux就是在內核基礎上擴展了shell和應用程序.

mbr=masterbootrecord,主引導記錄,位置在磁盤的0磁道0柱面1扇區。bios啟動會首先訪問他,把啟動交給mbr,mbr記錄從哪個地方開始啟動。

簡介

MBR,全稱為MasterBootRecord,即硬盤的主引導記錄。

為了便於理解,一般將MBR分為廣義和狹義兩種:廣義的MBR包含整個扇區(引導程序、分區表及分隔標識),也就是上面所說的主引導記錄;而狹義的MBR僅指引導程序而言。

硬盤的0柱面、0磁頭、1扇區稱為主引導扇區(也叫主引導記錄MBR)。它由三個部分組成,主引導程序、硬盤分區表DPT(DiskPartitiontable)和硬盤有效標誌(55AA)。在總共512字節的主引導扇區裏主引導程序(bootloader)占446個字節,第二部分是Partitiontable區(分區表),即DPT,占64個字節,硬盤中分區有多少以及每一分區的大小都記在其中。第三部分是magicnumber,占2個字節,固定為55AA。

5.為什麽bootloader要去Flash上讀入Linux內核

你這個問題應該分為幾個部分

1bootloader主要是負責系統初始化和系統加載的嵌入式系統一般會把bootloader和系統內核分開存放,這樣的話系統內核損壞了的話還可以通過bootloader進行恢復

2linux內核一般比bootloader大很多。一個嵌入式系統,在系統剛通電的時候,根據cpu的不同,他們是從一個固定的內存地址開始運行的。一般情況下,這個固定地址會是一個ROM,其存儲空間一般較小,一般用來存放bootloader。而根據板子設計的不同,系統內核是保持在flash或者其他存儲介質上的。

3bootloader在完成硬件初始化後,從存儲介質上把系統內核讀入到指定的內存區域,然後用一個跳轉指令跳轉到系統內核處開始執行。註意,這個存儲介質不一定是flash

6.為什麽需要BootLoader?linux

引導加載程序是系統加電後運行的第一段軟件代碼。PC機中的引導加載程序由BIOS(其本質就是一段固件程序)和位於硬盤MBR中的OSBootLoader(比如,LILO和GRUB等)一起組成。BIOS在完成硬件檢測和資源分配後,將硬盤MBR中的BootLoader讀到系統的RAM中,然後將控制權交給OSBootLoader。BootLoader的主要運行任務就是將內核映象從硬盤上讀到RAM中,然後跳轉到內核的入口點去運行,也即開始啟動操作系統。

而在嵌入式系統中,通常並沒有像BIOS那樣的固件程序(註,有的嵌入式CPU也會內嵌一段短小的啟動程序),因此整個系統的加載啟動任務就完全由BootLoader來完成。比如在一個基於ARM7TDMIcore的嵌入式系統中,系統在上電或復位時通常都從地址0x00000000處開始執行,而在這個地址處安排的通常就是系統的BootLoader程序。

簡單地說,BootLoader就是在操作系統內核運行之前運行的一段小程序。通過這段小程序,我們可以初始化硬件設備、建立內存空間的映射圖,從而將系統的軟硬件環境帶到一個合適的狀態,以便為最終調用操作系統內核準備好正確的環境。

通常,BootLoader是嚴重地依賴於硬件而實現的,特別是在嵌入式世界。因此,在嵌入式世界裏建立一個通用的BootLoader幾乎是不可能的。盡管如此,我們仍然可以對BootLoader歸納出一些通用的概念來,以指導用戶特定的BootLoader設計與實現。

在專用的嵌入式板子運行GNU/Linux系統已經變得越來越流行。一個嵌入式Linux系統從軟件的角度看通常可以分為四個層次:

1、引導加載程序。包括固化在固件(firmware)中的boot代碼(可選),和BootLoader兩大部分。

2、Linux內核。特定於嵌入式板子的定制內核以及內核的啟動參數。

3、文件系統。包括根文件系統和建立於Flash內存設備之上文件系統。通常用ramdisk來作為rootfs。

4、用戶應用程序。特定於用戶的應用程序。有時在用戶應用程序和內核層之間可能還會包括一個嵌入式圖形用戶界面。常用的嵌入式GUI有:MicroWindows和MiniGUI等。

arrow
arrow
    全站熱搜

    主要步驟 發表在 痞客邦 留言(0) 人氣()