嵌入式操作系統(tǒng)課件2016嵌入式的bootloader_第1頁
嵌入式操作系統(tǒng)課件2016嵌入式的bootloader_第2頁
嵌入式操作系統(tǒng)課件2016嵌入式的bootloader_第3頁
嵌入式操作系統(tǒng)課件2016嵌入式的bootloader_第4頁
嵌入式操作系統(tǒng)課件2016嵌入式的bootloader_第5頁
已閱讀5頁,還剩93頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、1第第4章章 嵌入式嵌入式linux的構(gòu)建的構(gòu)建2嵌入式開發(fā)流程嵌入式開發(fā)流程建立交叉編譯環(huán)境建立交叉編譯環(huán)境啟動代碼啟動代碼Bootloader的實現(xiàn)的實現(xiàn)/移植移植kernel的配置的配置/移植移植/編譯編譯根文件系統(tǒng)根文件系統(tǒng)Cramfs的實現(xiàn)的實現(xiàn)33主要內(nèi)容o4.1 嵌入式嵌入式Bootloader技術(shù)技術(shù)o4.2 嵌入式根文件系統(tǒng)構(gòu)建嵌入式根文件系統(tǒng)構(gòu)建o4.3 Linux內(nèi)核及啟動流程內(nèi)核及啟動流程o4.4 基于基于ARM目標(biāo)板的目標(biāo)板的Linux系統(tǒng)及系統(tǒng)及應(yīng)用程序燒定應(yīng)用程序燒定4第4章 嵌入式linux的構(gòu)建-Bootloadero 4.1 Bootloader 簡介o 4

2、.2 常用Bootloader 的介紹o 4.3 Bootloader 的燒寫和使用5第4章 嵌入式linux的構(gòu)建-Bootloadero Bootloader 簡介o 常用Bootloader 的介紹o Bootloader 的燒寫和使用64.1 Bootloader 簡介o 4.1.1 Bootloader 的概念o 4.1.2 Bootloader 的啟動o 4.1.3 Bootloader 的種類74.1.1 Bootloader 的概念o 引入:對于計算機(jī)系統(tǒng)來說,從開機(jī)上電到操作系統(tǒng)引入:對于計算機(jī)系統(tǒng)來說,從開機(jī)上電到操作系統(tǒng)啟動需要一個引導(dǎo)過程。嵌入式啟動需要一個引導(dǎo)過程。嵌

3、入式Linux系統(tǒng)同樣離不開系統(tǒng)同樣離不開引導(dǎo)程序,這個引導(dǎo)程序就叫做引導(dǎo)程序,這個引導(dǎo)程序就叫做BootLoader。o 對比:回憶一下對比:回憶一下PC的體系結(jié)構(gòu)我們可以知道,的體系結(jié)構(gòu)我們可以知道,PC機(jī)中機(jī)中的引導(dǎo)加載程序由的引導(dǎo)加載程序由BIOS(其本質(zhì)就是一段固件程序)(其本質(zhì)就是一段固件程序)和位于硬盤和位于硬盤MBR(Master Boot Record,引導(dǎo)記錄),引導(dǎo)記錄)中的引導(dǎo)程序一起組成。中的引導(dǎo)程序一起組成。o BIOS在完成硬件檢測和資源分配后,將硬盤在完成硬件檢測和資源分配后,將硬盤MBR中中的引導(dǎo)程序讀到系統(tǒng)的的引導(dǎo)程序讀到系統(tǒng)的RAM中,然后將控制權(quán)交給引中

4、,然后將控制權(quán)交給引導(dǎo)程序。導(dǎo)程序。o 引導(dǎo)程序的主要運行任務(wù)就是將內(nèi)核映象從硬盤上讀引導(dǎo)程序的主要運行任務(wù)就是將內(nèi)核映象從硬盤上讀到到RAM中然后跳轉(zhuǎn)到內(nèi)核的入口點去運行,也即開始中然后跳轉(zhuǎn)到內(nèi)核的入口點去運行,也即開始啟動操作系統(tǒng)。啟動操作系統(tǒng)。84.1.1 Bootloader 的概念o 而在嵌入式系統(tǒng)中,通常并沒有像BIOS那樣的固件程序。o 因此整個系統(tǒng)的加載啟動任務(wù)就完全由BootLoader來完成o 比如在一個基于ARM4TDMI core的嵌入式系統(tǒng)中 , 系 統(tǒng) 在 上 電 或 復(fù) 位 時 都 從 地 址0 x00000000開始執(zhí)行而在這個地址處安排的通常就是系統(tǒng)的Boot

5、Loader程序。 94.1.1 Bootloader 的概念o Bootloader的概念和功能o BootLoader是一段匯編代碼,存放在MBR主引導(dǎo)記錄中,它的主要作用就是將操作系統(tǒng)啟動代碼讀入內(nèi)存。o 從功能上看,Bootloader就是在操作系統(tǒng)內(nèi)核或用戶應(yīng)用程序運行之前運行的一段小程序。通過這段小程序可以初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核或用戶應(yīng)用程序準(zhǔn)備好正確的環(huán)境。 104.1.1 Bootloader 的概念o 每種每種CPU 體系結(jié)構(gòu)都有不同的體系結(jié)構(gòu)都有不同的BootLoader。o 有些有些Boo

6、tLoader 也支持多種體系結(jié)構(gòu)的也支持多種體系結(jié)構(gòu)的CPU,比如比如U-Boot 就同時支持就同時支持ARM 體系結(jié)構(gòu)和體系結(jié)構(gòu)和MIPS 體系結(jié)構(gòu)。體系結(jié)構(gòu)。o 除了依賴于除了依賴于CPU 的體系結(jié)構(gòu)外,的體系結(jié)構(gòu)外,BootLoader 實際上也依賴于具體的嵌入式板級設(shè)備的配置。這實際上也依賴于具體的嵌入式板級設(shè)備的配置。這也就是說,對于兩塊不同的嵌入式板而言,即使它也就是說,對于兩塊不同的嵌入式板而言,即使它們是基于同一種們是基于同一種CPU 而構(gòu)建的,要想讓運行在一而構(gòu)建的,要想讓運行在一塊板子上的塊板子上的BootLoader 程序也能運行在另一塊程序也能運行在另一塊板子上,通常

7、也都需要修改板子上,通常也都需要修改BootLoader 的源程的源程序。序。114.1.1 Bootloader 的概念o Bootlaoder的不統(tǒng)一性/不通用性o 特別是在嵌入式領(lǐng)域,為嵌入式系統(tǒng)建立一個通用的BootLoader是很困難的。當(dāng)然,我們可以歸納出一些通用的概念來,以便我們了解特定BootLoader的設(shè)計與實現(xiàn)。當(dāng)前在嵌入式Linux系統(tǒng)中,有了一些流行和通用的Bootloader框架。o 現(xiàn)實開發(fā)中,我們都是采用現(xiàn)有的BootLoader進(jìn)行修改o Vivi,blob,u-boot是最常見的,它們都是開源的o Vivi是三星公司的,我們的實驗板子就是使用的它124.1.

8、2 Bootloader 的啟動o 嵌入式Linux系統(tǒng)也是通過Bootloader引導(dǎo)啟動的。一上電,就要執(zhí)行Bootloader來初始化系統(tǒng)。o 系統(tǒng)加電或復(fù)位后,所有CPU都會從某個地址開始執(zhí)行,具體的地址值是由處理器設(shè)計決定的。o 比如,基于 ARM4TDMI core 的 CPU 在復(fù)位時通常都從地址 0 x00000000 取它的第一條指令。而基于ARM處理器構(gòu)建的嵌入式系統(tǒng)通常都有某種類型的固態(tài)存儲設(shè)備(比如:ROM、EEPROM 或 FLASH 等)被映射到這個預(yù)先安排的地址上。因此在系統(tǒng)加電后,CPU將首先執(zhí)行Bootloader程序。 1313典型存儲空間分配結(jié)構(gòu)bootl

9、oaderbootloader啟動參數(shù)內(nèi)核根文件系統(tǒng)144.1.2 Bootloader 的啟動o 主機(jī)和目標(biāo)機(jī)之間一般通過串口建立連接,BootLoader 軟件在執(zhí)行時通常會通過串口來進(jìn)行I/O,比如:輸出打印信息到串口,從串口讀取用戶控制字符等。o Bootloader多數(shù)是兩階段的啟動過程o 第一個啟動階段是和硬件平臺相關(guān)的,大都采用匯編程序編寫,以達(dá)到短小精悍的目的。o 第二個啟動階段是和硬件平臺無關(guān)的,大都采用C語言編寫,這樣可以實現(xiàn)復(fù)雜的功能,而且代碼會具有更好的可讀性和可移植性。 154.1.2 Bootloader 的啟動o 大多數(shù)Bootloader都包含兩種不同的操作模式

10、: “啟動加載”模式和“下載”模式。最終用戶的角度看,Boot Loader 的作用就是用來加載操作系統(tǒng)。16Bootloader啟動舉例17Bootloader啟動舉例18Bootloader啟動舉例194.1.2 Bootloader 的啟動o 網(wǎng)絡(luò)啟動方式 20o 諸如uboot的BootLoader本身集成網(wǎng)絡(luò)功能支持o 這種方式開發(fā)板不需要配置較大的存儲介質(zhì),跟無盤工作站有點類似。但是使用這種啟動方式之前,需要把BootLoader安裝到板上的EPROM或者Flash中。BootLoader通過以太網(wǎng)接口遠(yuǎn)程下載Linux內(nèi)核映象或者文件系統(tǒng)。 o BootLoader下載文件一般都

11、使用TFTP網(wǎng)絡(luò)協(xié)議,還可以通過DHCP的方式動態(tài)配置IP地址。 4.1.2 Bootloader 的啟動214.1.2 Bootloader 的啟動o 磁盤啟動方式o 傳統(tǒng)的Linux系統(tǒng)運行在臺式機(jī)或者服務(wù)器上,這些計算機(jī)一般都使用BIOS引導(dǎo),并且使用磁盤作為存儲介質(zhì)。o Linux傳統(tǒng)上是通過Lilo(Linux Loader)引導(dǎo)的,后來又出現(xiàn)了GNU的軟件Grub(Grand Unified Bootloader)。這兩種Bootloader廣泛應(yīng)用在X86的Linux系統(tǒng)上。o 在嵌入式系統(tǒng)領(lǐng)域應(yīng)用的并不多。 224.1.2 Bootloader 的啟動o Flash 啟動方式o

12、 大多數(shù)嵌入式系統(tǒng)上都使用Flash存儲介質(zhì),NOR Flash(線性Flash)使用最為普遍。 o Bootloader一般放在Flash的底端或者頂端,這需要根據(jù)處理器的復(fù)位向量來進(jìn)行設(shè)置。o 可以配置成MTD設(shè)備來訪問Flash分區(qū)。 234.1.3 Bootloader 的種類o 嵌入式系統(tǒng)世界已經(jīng)有各種各樣的Bootloader,種類劃分的方法也不是唯一的。o 一般可以按照它所支持處理器體系結(jié)構(gòu)不同進(jìn)行劃分。 o 具體參見表4.1o 嵌入式比較常見的Uboot,vivi和blobo PC系統(tǒng)上是grub和lilo24Bootloader 的種類BootloaderMonitor描述X

13、86ARMPowerPCLilo否Linux磁盤引導(dǎo)程序是否否Grub否GNU引導(dǎo)的Lilo替代程序是否否Loadlin否從DOS引導(dǎo)Linux是否否ROLO否從ROM引導(dǎo)Linux而不需要BIOS是否否Etherboot否通過以太網(wǎng)卡啟動Linux引導(dǎo)程序是否否Linux BIOS否完全替代BUIS的Linux引導(dǎo)程序是否否Blob否LART等硬件平臺的引導(dǎo)程序否是否U-Boot是通用引導(dǎo)程序是是是RedBoot是基于eCos的引導(dǎo)程序是是是25第4章 嵌入式linux的構(gòu)建o 4.1 Bootloader 簡介o 4.2 常用Bootloader 的介紹o 4.3 Bootloader 的

14、燒寫和使用264.2 常用Bootloader 的介紹o 1、vivio vivi是韓國是韓國Mizi公司開發(fā)的公司開發(fā)的Bootloader,適用,適用于于ARM9處理器。處理器。o 2、RedBooto RedBoot也稱作紅帽也稱作紅帽(Red Hat)嵌入式調(diào)試引嵌入式調(diào)試引導(dǎo)程序,是一種用于嵌入式系統(tǒng)的獨立開放源代碼導(dǎo)程序,是一種用于嵌入式系統(tǒng)的獨立開放源代碼引導(dǎo)引導(dǎo)/裝載器。裝載器。o 3、U-Booto UBoot(Universal Bootloader)是一款目)是一款目前功能較為強(qiáng)大的開源前功能較為強(qiáng)大的開源Bootloader程序,它支持程序,它支持多種處理器平臺,包括多

15、種處理器平臺,包括ARM、MIPS等。等。274.2.2 U-Booto U-Boot支持的處理器構(gòu)架包括PowerPC , ARM ,MIPS,x86o U-Boot的功能強(qiáng)大,涵蓋了絕大部分處理器構(gòu)架,提供大量外設(shè)驅(qū)動,支持多個文件系統(tǒng),附帶調(diào)試、腳本和引導(dǎo)等工具 o U-boot可配置性非常強(qiáng) ,它所支持的命令也可以通過配置來增減。U-boot的命令主要包括以下幾類:信息類命令、環(huán)境變量類命令、存儲器命令、Flash專用命令、載類命令、啟動類命令和Cache類命令,參見表4.228vivi簡介p vivi是由韓國MIZI公司開發(fā)的專門用于SAMSUNG ARM架構(gòu)的一種Bootloade

16、r 。它同樣支持啟動加載模式和下載工作模式。p 在下載模式下,vivi為用戶提供一個命令行人機(jī)接口,通過這個人機(jī)接口可以使用vivi提供的一些命令。29vivi簡介簡介o 如果嵌入式系統(tǒng)沒有鍵盤和顯示,那么可以利用vivi中的串口,將其和宿主機(jī)連接起來,利用宿主機(jī)中的串口軟件(如windows中的超級終端或者Linux中的 )來控制。30o Bootloader的啟動過程分兩個階段-stage1和stage2。o 依賴CPU體系結(jié)構(gòu)的代碼通常放在stage1中,而且通常用匯編語言實現(xiàn)。o stage2中的代碼通常用C語言實現(xiàn),這樣可以實現(xiàn)更復(fù)雜的功能,而且代碼會具有更好的可讀性和可移植性。Bo

17、otloader技術(shù)內(nèi)幕31Bootloader的stage1通常包括以下步驟: 1、硬件設(shè)備初始化 2、為加載stage2準(zhǔn)備RAM空間 3、復(fù)制stage2到RAM空間 4、設(shè)置好堆棧 5、跳轉(zhuǎn)到stage2的C入口點32Bootloader的stage2通常包括以下步驟: 1、初始化本階段要用到的硬件設(shè)備 2、檢測系統(tǒng)內(nèi)存映射 3、將kernel映像和根文件系統(tǒng)映像從 Flash上讀到RAM空間 4、為內(nèi)核設(shè)置啟動參數(shù) 5、調(diào)用內(nèi)核3333o把內(nèi)核把內(nèi)核(kernel)(kernel)從從flashflash復(fù)制到復(fù)制到RAMRAM,然后啟,然后啟動它;動它;o初始化硬件;初始化硬件;o

18、下載程序并寫入下載程序并寫入flashflash(通常由串口或者網(wǎng)口(通常由串口或者網(wǎng)口先把內(nèi)核下載到先把內(nèi)核下載到RAMRAM中,然后寫入中,然后寫入flashflash););o檢測目標(biāo)板(檢測目標(biāo)板(bootloaderbootloader會有一些簡單的代會有一些簡單的代碼用以測試目標(biāo)板硬件的好壞)。碼用以測試目標(biāo)板硬件的好壞)。3434vivi代碼分析代碼分析o vivi的第一階段主要完成了依賴于CPU的體系結(jié)構(gòu)硬件初始化,包括禁止中斷、初始化串口、復(fù)制第二階段到RAM中等。由于這些代碼是和硬件緊密相關(guān)的,因此要求大家在閱讀時需要對照S3C2410處理器的數(shù)據(jù)手冊,查閱相關(guān)的寄存器的描

19、述,以便更好地理解。這些匯編代碼全部就集中在viviarchs3c2410目錄下的head.S這一個匯編文件中,當(dāng)然還有相關(guān)的頭文件。35o vivi的第二階段的入口就是init/main.c,按照源代碼的組織流程,根據(jù)模塊化劃分的原則,共分為8個功能模塊即八個步驟,在源代碼的注釋中以step非常清晰的給出了區(qū)分。 o 第一步:vivi從main()函數(shù)開始執(zhí)行,函數(shù)開始通過 putstr(vivi_bannner)打印出vivi的版本。 o 第二步:對開發(fā)板初始化board_init函數(shù),主要完成時鐘初始化(init_time())和通用I/O口設(shè)置(set_gpios(),在/arch/s

20、3c2410/smdk.c中vivi代碼分析代碼分析int board_init(void)init_time();set_gpios();return 0;3636o 第三步:進(jìn)行內(nèi)存映射初始化和內(nèi)存管理單元(MMU)的初始化工作,在mmu.c文件中。o 第四步:初始化堆,函數(shù)heap_init()定義在libheap.c文件中。o 第五步:初始化mtd設(shè)備,用mtd_dev_init()函數(shù)o 第六步:配置參數(shù),主要是init_priv_data函數(shù)。 o 第七步:提供vivi人機(jī)接口的各種命令。 o 第八步:進(jìn)入Bootloader的兩種模式之一。vivi代碼分析代碼分析3737如何進(jìn)入

21、vivi界面p 1、進(jìn)行硬件連接p 連接電源,將5V電源線的連到UP-NETARM2410-S的電源接口;p 連接串口線,一端連接PC的串口,另一端連接到UP-NETARM2410-S的串口(上面的);p 連接網(wǎng)線,將隨機(jī)附帶的交叉網(wǎng)線把UP-NETARM2410-S靠近于電源接口的網(wǎng)口和PC機(jī)的網(wǎng)口連接好。 38如何進(jìn)入vivi界面o 2、進(jìn)入宿主機(jī)中的串口軟件:windows中的超級終端/Linux中的 o 運行Windows系統(tǒng)下(以WindowsXP為例)開始所有程序附件通訊超級終端(HyperTerminal)。o 請大家注意:在windows xp操作系統(tǒng)下,當(dāng)初次建立超級終端的時

22、候,會出現(xiàn)如下對話框,請在中打上,并選擇“否” 39如何進(jìn)入vivi界面n 新建一個通信終端。如果要求輸入?yún)^(qū)號、電話號碼等信息請隨意輸入,出現(xiàn)如圖5.2.1所示對話框時,為所建超級終端取名為arm,可以為其選一個圖標(biāo)。單擊“確定”按鈕。 圖5.2.1 創(chuàng)建超級終端 40如何進(jìn)入vivi界面n 選擇ARM開發(fā)平臺實際連接的PC機(jī)串口(如COM1),按確定后出現(xiàn)如圖5.2.2所示的屬性對話框,設(shè)置通信的格式和協(xié)議。這里波特率為115200,數(shù)據(jù)位8,無奇偶校驗,停止位1,無數(shù)據(jù)流控制。圖5.2.2設(shè)置串行口 41如何進(jìn)入vivi界面o 完成新建超級終端的設(shè)置以后,可以選擇超級終端文件菜單中的另存為

23、,把設(shè)置好的超級終端保存在桌面上,以備后用。o 用串口線將PC機(jī)串口和平臺正確連接后,就可以在超級終端上看到程序輸出的信息了.42如何進(jìn)入vivi界面o 3、打開電源開關(guān),系統(tǒng)會由VIVI開始引導(dǎo)。正常啟動時會顯示啟動信息到“Press Return to start the LINUX now, any other key for vivi”,不進(jìn)行任何操作等待30S或按回車則啟動進(jìn)入linux系統(tǒng),按除回車鍵外的其它鍵則進(jìn)入vivi控制臺,如圖5.3.1。在這里輸入“boot”,進(jìn)入LINUX系統(tǒng);輸入“bootucos”進(jìn)入ucos系統(tǒng)。 43圖5.3.1 vivi控制臺 輸入“boot

24、”后會引導(dǎo)kernel,啟動linux系統(tǒng),見5.3.2. 44在該應(yīng)用程序目錄下,可以掛載nfs文件系統(tǒng),通過“l(fā)s”查看應(yīng)用程序45vivi的文件結(jié)構(gòu)的文件結(jié)構(gòu)o (1)arch:此目錄包括了所有VIVI支持的目標(biāo)板的子目錄,存儲了與CPU架構(gòu)有關(guān)的代碼文件。(第一階段源碼在arch中的head.S文件中,都是匯編語言)o (2)Documentation:存放了許多文檔,包括VIVI使用指南。o (3)drivers:目標(biāo)板的各種設(shè)備驅(qū)動程序,比如串口、Nand Flash和Nor Flash等,實現(xiàn)對設(shè)備的讀寫和控制。46vivi的文件結(jié)構(gòu)的文件結(jié)構(gòu)o (4)include:頭文件的公

25、共目錄,所有vivi源代碼所需的頭文件目錄o (5)init:此目錄只有main.c和version.c兩個文件。與普通的C程序一樣,VIVI將從main函數(shù)開始執(zhí)行(vivi第二階段的入口函數(shù)),main函數(shù)調(diào)用lib下的函數(shù)實現(xiàn)第二階段工作。o (6)lib:一些平臺公共的接口代碼,第二階段的初始化代碼和vivi常用命令的實現(xiàn)。47vivi的文件結(jié)構(gòu)的文件結(jié)構(gòu)o (7)scripts:此目錄存放了配置所需的腳本文件,如Menuconfig和Configure文件,以方便對VIVI的配置。o (8)test:存放一些測試代碼文件。o (9)util:存放與NAND Flash燒寫image相

26、關(guān)的工具實現(xiàn)代碼48第4章 嵌入式linux的構(gòu)建o 4.1 Bootloader 簡介o 4.2 常用Bootloader 的介紹o 4.3 Bootloader 的燒寫和使用494.3 Bootloader(vivi) 的燒寫和使用o linux系統(tǒng)的移植主要包括四個部分:o 燒寫2410S linux 操作系統(tǒng)包括燒寫vivi,kernel,root三個步驟,除此我們還要燒寫yaffs.tar,這四個文件為: o vivi -linux操作系統(tǒng)啟動的bootloader; o zImage-linux操作系統(tǒng)內(nèi)核; o root.cramfs-根文件系統(tǒng); o yaffs.tar-應(yīng)用程

27、序 50燒寫o Vivi既可通串口燒寫也可通過既可通串口燒寫也可通過jtag來燒寫;來燒寫;o zImage和和root.cramfs通過串口來燒寫;通過串口來燒寫;o 應(yīng)用程序壓縮包通過網(wǎng)口來下載。應(yīng)用程序壓縮包通過網(wǎng)口來下載。514.3.1 Bootloader(vivi) 的燒寫o vivi的燒寫有兩種方式:通過JTAG口燒寫和通過串口燒寫。 o 在Flash被格式化且內(nèi)存里也沒有Bootloader的時候,此時目標(biāo)板是一個完全干凈的開發(fā)板,就需要通過JTAG口把Bootloader燒寫到板子上o 串口燒寫主要用于更新和升級Bootloader。o 在Windows下可以通過超級終端來訪

28、問目標(biāo)板來進(jìn)行燒寫,在Linux下可以通過MiniCom燒寫。 52o 板子上沒有任何東西(包括BootLoader)的時候,需要專門的工具對vivi等BootLoader進(jìn)行燒寫B(tài)ootloader舉例手冊第9-19頁53o 板子上有諸如vivi等BootLoader后,再進(jìn)行升級,就可以利用Target上已經(jīng)存在的(舊的)BootLoader了Bootloader舉例544.3.2 Bootloader 的使用o 工作正常的時候工作正常的時候,Bootloader處于加載模式或處于加載模式或者交換模式者交換模式o 如使用如使用vivi的時候的時候,其交互模式的界面是其交互模式的界面是55o

29、 利用vivi升級內(nèi)核Bootloader舉例56o 利用vivi升級文件系統(tǒng)Bootloader舉例574.4 Linux內(nèi)核及啟動過程 Linux內(nèi)核結(jié)構(gòu)內(nèi)核結(jié)構(gòu) Linux內(nèi)核配置、編譯內(nèi)核配置、編譯 Linux內(nèi)核移植內(nèi)核移植58o Linux系統(tǒng)實際上由兩個比較獨立的部分組成,系統(tǒng)實際上由兩個比較獨立的部分組成,即內(nèi)核部分和系統(tǒng)部分(根文件系統(tǒng))。即內(nèi)核部分和系統(tǒng)部分(根文件系統(tǒng))。59p Linux內(nèi)核主要由內(nèi)核主要由5個子系統(tǒng)組成:個子系統(tǒng)組成:p 進(jìn)程調(diào)度進(jìn)程調(diào)度p 內(nèi)存管理內(nèi)存管理p 虛擬文件系統(tǒng)虛擬文件系統(tǒng)p 網(wǎng)絡(luò)接口網(wǎng)絡(luò)接口p 進(jìn)程間通信。進(jìn)程間通信。Linux內(nèi)核結(jié)構(gòu)6

30、0Linux內(nèi)核結(jié)構(gòu)-Linux源碼位置61/include子目錄包含了建立內(nèi)核代碼時所需的大部分包含文件,子目錄包含了建立內(nèi)核代碼時所需的大部分包含文件,/init子目錄包含了內(nèi)核的初始化代碼子目錄包含了內(nèi)核的初始化代碼-內(nèi)核工作起點。內(nèi)核工作起點。/arch子目錄包含了所有硬件結(jié)構(gòu)特定的內(nèi)核代碼。如:子目錄包含了所有硬件結(jié)構(gòu)特定的內(nèi)核代碼。如:arm、i386、alpha。/drivers子目錄包含了內(nèi)核中所有的設(shè)備驅(qū)動程序,如塊設(shè)備和子目錄包含了內(nèi)核中所有的設(shè)備驅(qū)動程序,如塊設(shè)備和SCSI設(shè)備。設(shè)備。/fs子目錄包含了所有的文件系統(tǒng)的代碼,如:子目錄包含了所有的文件系統(tǒng)的代碼,如:ext

31、2,vfat等。等。/net子目錄包含了內(nèi)核的連網(wǎng)代碼。子目錄包含了內(nèi)核的連網(wǎng)代碼。/mm子目錄包含了所有內(nèi)存管理代碼。子目錄包含了所有內(nèi)存管理代碼。/ipc子目錄包含了進(jìn)程間通信代碼。子目錄包含了進(jìn)程間通信代碼。/kernel子目錄包含了主內(nèi)核代碼。子目錄包含了主內(nèi)核代碼。Linux內(nèi)核結(jié)構(gòu)-Linux內(nèi)核子目錄62p Linux內(nèi)核配置系統(tǒng)的組成內(nèi)核配置系統(tǒng)的組成p 1、Makefile:頂層和各源代碼中的:頂層和各源代碼中的makefilep 2、配置文件、配置文件p .config文件,包含配置選項,存放內(nèi)核文件,包含配置選項,存放內(nèi)核配置后結(jié)果。配置后結(jié)果。p Rules.make:

32、規(guī)則文件,被所有的:規(guī)則文件,被所有的 Makefile 使用。使用。Linux內(nèi)核配置編譯63p Linux內(nèi)核配置系統(tǒng)的組成內(nèi)核配置系統(tǒng)的組成p 3、配置工具、配置工具p 基于字符的界面基于字符的界面 make config :進(jìn)入命令行,:進(jìn)入命令行,可以一行一行的配置,但使用不十分方便??梢砸恍幸恍械呐渲茫褂貌皇址奖?。p 基于基于 Ncurses 的文本模式圖形用戶界面的文本模式圖形用戶界面make menuconfig:大多數(shù)開發(fā)人員使用:大多數(shù)開發(fā)人員使用的的Linux 內(nèi)核編譯菜單,使用方便。內(nèi)核編譯菜單,使用方便。p 基于基于 Xwindows 圖形界面的用戶配置界面圖形

33、界面的用戶配置界面make xconfig。Linux內(nèi)核配置編譯6464pLinux內(nèi)核配置與裁減內(nèi)核配置與裁減p下載下載Linux內(nèi)核源碼到內(nèi)核源碼到/usr/src目錄下目錄下p解壓該文件解壓該文件p進(jìn)入進(jìn)入/usr/src/linux-2.x.xx目錄,執(zhí)行目錄,執(zhí)行make menuconfig命令就可以進(jìn)入配置命令就可以進(jìn)入配置界面。界面。Linux內(nèi)核配置編譯65o Make menuconfig的圖形配置界面 6666pLinux內(nèi)核配置與裁減內(nèi)核配置與裁減p在啟動配置菜單后,選擇相應(yīng)的配置時,有在啟動配置菜單后,選擇相應(yīng)的配置時,有三種選擇方式,它們分別代表的含義如下。三種選

34、擇方式,它們分別代表的含義如下。pN不將該功能編譯進(jìn)內(nèi)核不將該功能編譯進(jìn)內(nèi)核pY將該功能編譯進(jìn)內(nèi)核將該功能編譯進(jìn)內(nèi)核pM將該功能編譯成可以在需要時動態(tài)插將該功能編譯成可以在需要時動態(tài)插入到內(nèi)核中的模塊入到內(nèi)核中的模塊Linux內(nèi)核配置編譯6767pLinux內(nèi)核編譯內(nèi)核編譯p 在完成內(nèi)核的裁減之后,內(nèi)核的編譯要執(zhí)行以在完成內(nèi)核的裁減之后,內(nèi)核的編譯要執(zhí)行以下命令:下命令:pmake dep:對內(nèi)核原代碼的文件進(jìn)行完整性:對內(nèi)核原代碼的文件進(jìn)行完整性和依賴性進(jìn)行檢驗,確保關(guān)鍵文件在正確的位置。和依賴性進(jìn)行檢驗,確保關(guān)鍵文件在正確的位置。pmake clean:編譯內(nèi)核之前先把環(huán)境給清理:編譯內(nèi)核

35、之前先把環(huán)境給清理干凈。有時也可用干凈。有時也可用make realclean 或或make mrproper 來徹底清除相關(guān)依賴,保證沒有不來徹底清除相關(guān)依賴,保證沒有不正確的正確的.o 文件存在。文件存在。pmake zImage:創(chuàng)建內(nèi)核鏡像文件:創(chuàng)建內(nèi)核鏡像文件pmake modules:創(chuàng)建內(nèi)核模塊,若不創(chuàng)建:創(chuàng)建內(nèi)核模塊,若不創(chuàng)建內(nèi)核模塊,這步可以不要。內(nèi)核模塊,這步可以不要。Linux內(nèi)核配置編譯內(nèi)核配置編譯6868p Linux移植p Linux 移植其實質(zhì)是獲取某一版本的Linux 內(nèi)核源碼,根據(jù)具體目標(biāo)平臺對這源碼進(jìn)行必要的改寫(主要是修改體系結(jié)構(gòu)相關(guān)部分),然后添加一些外

36、設(shè)的驅(qū)動,打造一款適合于目標(biāo)平臺的新操作系統(tǒng),對該系統(tǒng)進(jìn)行針對目標(biāo)平臺的交叉編譯,生成一個內(nèi)核映象文件,最后通過一些手段把該映象文件燒寫(安裝)到目標(biāo)平臺中?;贏RM開發(fā)板的Linux內(nèi)核移植69p 交叉編譯環(huán)境的搭建交叉編譯環(huán)境的搭建p 修改修改Linux 內(nèi)核源碼內(nèi)核源碼p linux 的移植主要包含啟動代碼的修改,內(nèi)的移植主要包含啟動代碼的修改,內(nèi)核的鏈接及裝入,參數(shù)傳遞,內(nèi)核引導(dǎo)幾個核的鏈接及裝入,參數(shù)傳遞,內(nèi)核引導(dǎo)幾個部分。部分。p 基于基于ARM目標(biāo)板的目標(biāo)板的Linux 內(nèi)核配置裁減與內(nèi)核配置裁減與編譯編譯基于ARM開發(fā)板的Linux內(nèi)核移植70704.2 嵌入式Linux根文

37、件系統(tǒng)構(gòu)建 Linux文件系統(tǒng)介紹文件系統(tǒng)介紹 根文件系統(tǒng)的目錄結(jié)構(gòu)根文件系統(tǒng)的目錄結(jié)構(gòu) BusyBox生成工具集生成工具集 根文件系統(tǒng)啟動流程根文件系統(tǒng)啟動流程7171p 文件系統(tǒng)簡單說就是一種目錄結(jié)構(gòu),文件系統(tǒng)簡單說就是一種目錄結(jié)構(gòu),linux操操作系統(tǒng)中的設(shè)備是以文件的形式存在的,將這作系統(tǒng)中的設(shè)備是以文件的形式存在的,將這些文件進(jìn)行分類管理以及提供和內(nèi)核交互的接些文件進(jìn)行分類管理以及提供和內(nèi)核交互的接口,就形成文件系統(tǒng)。口,就形成文件系統(tǒng)。Linux文件系統(tǒng)介紹7272p 根文件系統(tǒng)是一種特殊的文件系統(tǒng)根文件系統(tǒng)是一種特殊的文件系統(tǒng), 是內(nèi)核啟動時掛載是內(nèi)核啟動時掛載的第一個文件系統(tǒng)。

38、的第一個文件系統(tǒng)。p 該文件系統(tǒng)就要包括該文件系統(tǒng)就要包括Linux啟動時所必須的目錄和關(guān)鍵啟動時所必須的目錄和關(guān)鍵性的文件。例如:性的文件。例如:Linux啟動時都需要有啟動時都需要有init目錄下的目錄下的相關(guān)文件,在相關(guān)文件,在Linux掛載分區(qū)時掛載分區(qū)時Linux一定會找一定會找/etc/fstab這個掛載文件等,根文件系統(tǒng)中還包括了這個掛載文件等,根文件系統(tǒng)中還包括了許多的應(yīng)用程序許多的應(yīng)用程序bin目錄等。任何包括這些目錄等。任何包括這些Linux 系統(tǒng)系統(tǒng)啟動所必須的文件都可以稱為根文件系統(tǒng)。啟動所必須的文件都可以稱為根文件系統(tǒng)。p 內(nèi)核代碼的映像文件保存在根文件系統(tǒng)中。內(nèi)核代

39、碼的映像文件保存在根文件系統(tǒng)中。p 系統(tǒng)引導(dǎo)啟動程序會在根文件系統(tǒng)掛載之后從中把一些系統(tǒng)引導(dǎo)啟動程序會在根文件系統(tǒng)掛載之后從中把一些初始化腳本(如初始化腳本(如rcS,inittab)和服務(wù)加載到內(nèi)存中去)和服務(wù)加載到內(nèi)存中去運行。運行。根文件系統(tǒng)介紹73根文件系統(tǒng)介紹o 文件系統(tǒng)和內(nèi)核是完全獨立的兩個部分。在嵌入式中移植的內(nèi)核下載到開發(fā)板上,是沒有辦法真正的啟動Linux操作系統(tǒng)的(會出現(xiàn)無法加載文件系統(tǒng)的錯誤) ,啟動成功之后可以自動或手動掛載其他的文件系統(tǒng)。 74根文件系統(tǒng)在系統(tǒng)啟動中到底是什么時候掛載的呢?o 先將/dev/ram0掛載,而后執(zhí)行/linuxrc.o 等其執(zhí)行完后,切換

40、根目錄,再掛載具體的根文件系統(tǒng).o 根文件系統(tǒng)執(zhí)行完之后,也就到了Start_kernel()函數(shù)【在init/main.c文件中有個函數(shù)叫start_kernel,它是用來啟動內(nèi)核的主函數(shù)】的最后,執(zhí)行init的進(jìn)程,也就第一個用戶進(jìn)程。對系統(tǒng)進(jìn)行各種初始化的操作。7576對比linux文件系統(tǒng)和根文件系統(tǒng)的目錄結(jié)構(gòu) Linux 根文件系統(tǒng)嵌入式 Linux 系統(tǒng)的根文件系統(tǒng)/bin:存放二進(jìn)制可執(zhí)行命令的目錄。/dev:存放設(shè)備文件和目錄。/etc:存放系統(tǒng)管理和配置文件和目錄。/home:用戶主目錄,比如用戶user 的主目錄就是/home/user,可以用user 來表示。/lib:存

41、放動態(tài)鏈接共享庫的目錄。/sbin:存放系統(tǒng)管理員使用的管理程序的目錄。/tmp:公用的臨時文件存儲點。/root:系統(tǒng)管理員的主目錄。/mnt:用以臨時掛載其他的文件系統(tǒng)。/proc:虛擬文件系統(tǒng),可直接訪問這個目錄來獲取系統(tǒng)信息。/var:某些大文件溢出區(qū)。/usr:存放應(yīng)用程序和文件。/bin/dev/etc/lib/tmp/mnt /proc/var/usr由于受系統(tǒng)資源的限制,一般沒有Linux 根文件系統(tǒng)那么復(fù)雜,僅保留一些常用的目錄即可,對于嵌入式系統(tǒng),必須選擇一個合適的根文件系統(tǒng)以使系統(tǒng)運行最佳。*嵌入式系統(tǒng)通常都不是針對多用戶的77根文件系統(tǒng)o 存放二進(jìn)制文件的目錄主要有四個

42、:/bin, /sbin, /usr/bin和/usr/sbin,二進(jìn)制文件要放在哪個目錄,與它在系統(tǒng)中所扮演的角色有很大的關(guān)系。o 如果這個是用于和系統(tǒng)管理員必備的二進(jìn)制文件,就會放在/bin。o 如果這是系統(tǒng)管理員必備,但是一般用戶根本不會用到的二進(jìn)制文件,就會放在/sbin,o 如果不是用戶必備的二進(jìn)制文件,多半會放在/usr/bin;o 如果不是系統(tǒng)管理必備的工具,多半會放在/usr/sbin中。 78根文件系統(tǒng)o 鏈接庫目錄lib,同樣如此,系統(tǒng)引導(dǎo)以及執(zhí)行最基本命令需要的鏈接庫會在/lib,所有其他的鏈接庫會放在/usr/lib,通常在套件安裝時,會在/usr/lib中產(chǎn)生子目錄,

43、以便放它自己的鏈接庫。 79補(bǔ)充:掛載/掛裝mount命令o 在 Linux 中將一個文件系統(tǒng)與一個存儲設(shè)備關(guān)聯(lián)起來的過程稱為掛裝(mount)。使用 mount 命令將一個文件系統(tǒng)附著到當(dāng)前文件系統(tǒng)層次結(jié)構(gòu)中(根)。 o 命令mount -參數(shù) 設(shè)備名稱 掛載點o 例:mount /dev/sdb1 /mnt80#使用不帶參數(shù)的使用不帶參數(shù)的mount命令來顯示所有已經(jīng)掛載上了的文件系統(tǒng)命令來顯示所有已經(jīng)掛載上了的文件系統(tǒng)#也可將掛載配置寫入也可將掛載配置寫入/etc/fstab中,也實現(xiàn)自動掛載中,也實現(xiàn)自動掛載81根文件系統(tǒng)的類型o 嵌入式Linux 根文件系統(tǒng)主要的根文件系統(tǒng)類型(基于

44、存儲設(shè)備的文件系統(tǒng)類型)有:o JFFS2o YAFFS/YAFFS2o Cramfs等o Romfs o RAMDISK82(1) JFFS2 o JFFS嵌入式系統(tǒng)文件系統(tǒng)最早是由瑞典 Axis Communications公司基于Linux2.0的內(nèi)核為嵌入式系統(tǒng)開發(fā)的文件系統(tǒng)。o JFFS2,日志閃存嵌入式系統(tǒng)文件系統(tǒng)版本2 (Journalling Flash FileSystem v2),是RedHat公司基于JFFS開發(fā)的閃存文件系統(tǒng)。特點是:可讀寫的、支持?jǐn)?shù)據(jù)壓縮的、基于哈希表的日志型文件系統(tǒng),并提供了崩潰/掉電安全保護(hù)等。缺點主要是當(dāng)文件系統(tǒng)已滿或接近滿時,因為垃圾收集的關(guān)系

45、而使jffs2的運行速度大大放慢。目前jffs3正在開發(fā)中。 83(3) Cramfs:Compressed ROM File System o Cramfs是Linux的創(chuàng)始人 Linus Torvalds參與開發(fā)的一種只讀的壓縮文件系統(tǒng)。它也基于MTD驅(qū)動程序。在cramfs文件系統(tǒng)中,每一頁(4KB)被單獨壓縮,可以隨機(jī)頁訪問,其壓縮比高達(dá)2:1,為嵌入式系統(tǒng)節(jié)省大量的Flash存儲空間,使系統(tǒng)可通過更低容量的FLASH存儲相同的文件,從而降低系統(tǒng)成本,而且系統(tǒng)的可靠性較好 。 o 由于以上特性,Cramfs在嵌入式系統(tǒng)中應(yīng)用廣泛。然而它的只讀屬性同時又是它的一大缺陷,使得用戶無法對其內(nèi)

46、容對進(jìn)擴(kuò)充。 84(2) yaffs:Yet Another Flash File System o yaffs/yaffs2是專為嵌入式系統(tǒng)使用 NAND型閃存而設(shè)計的一種日志型文件系統(tǒng)。與jffs2相比,它減少了一些功能(例如不支持?jǐn)?shù)據(jù)壓縮),所以速度更快,掛載時間很短,對內(nèi)存的占用較小。另外,它還是跨平臺的文件系統(tǒng),除了Linux和eCos,還支持WinCE, pSOS和ThreadX等操作系統(tǒng)。 858686p/bin :必要的用戶命令(二進(jìn)制文件)。p*/boot :引導(dǎo)加載程序使用的靜態(tài)文件。p/dev :設(shè)備文件及其他特殊文件。p/etc :系統(tǒng)配置文件。p*/home :用戶主

47、目錄。p/lib :必要的鏈接庫,例如:C鏈接庫、內(nèi)核模塊。p/mnt :臨時掛載的文件系統(tǒng)的掛載點。p*/opt :附加軟件的安裝目錄。pproc :提供內(nèi)核和進(jìn)程信息的proc文件系統(tǒng)。p*/root :root用戶主目錄。psbin :必要的系統(tǒng)管理員命令。ptmp :臨時文件目錄。pusr :大多數(shù)用戶使用的應(yīng)用程序和文件目錄。pvar :監(jiān)控程序和工具程序存放的可變數(shù)據(jù)。根文件系統(tǒng)的目錄結(jié)構(gòu)8787p很小的應(yīng)用程序提供完整的工具集的功能pinit進(jìn)程:由內(nèi)核啟動的第一個也是惟一的一個用戶進(jìn)程,它根據(jù)配置文件決定啟動哪些程序.p在嵌入式領(lǐng)域,通常使用Busybox集成的init程序.嵌

48、入式根目錄下的bin,sbin和usr目錄以及l(fā)inuxc通常就是Busyboxp文件系統(tǒng)、網(wǎng)絡(luò)系統(tǒng)等等的工具集p在 下載Busybox:busybox-1.12.2.tar.bz2p解壓后,進(jìn)入配置菜單:make menuconfigBusyBox生成工具集8888BusyBox生成工具集生成工具集89BusyBox生成工具集生成工具集p 選擇Busybox的編譯方式:Build OptionspBuild BusyBox as a static binary (no shared libs) p 缺省配置為使用鏈接庫p 配置交叉編譯器:Build Optionsp * Do you wan

49、t to build BusyBox with a Cross Compiler? (/opt/crosstools/gcc-3.4.6-glibc-2.3.6/bin/arm-linux-) Cross Compiler prefix p 安裝路徑:Installation Optionsp (./_install) BusyBox installation prefix90BusyBox生成工具集生成工具集p配置其他工具集:pArchival Utilities pCoreutilspConsole UtilitiespDebian UtilitiepEditorspFinding UtilitiespInit UtilitiespLogin/Password Management UtilitiespMiscellaneous UtilitiespLinux Module UtilitiespNetworking UtilitiespProcess UtilitiespShells pSystem Logging Utili

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論