版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第二章 嵌入式Linux內(nèi)核文件系統(tǒng)與存儲(chǔ),第二章 嵌入式Linux內(nèi)核文件 系統(tǒng)與存儲(chǔ),主要內(nèi)容 第一節(jié) Linux內(nèi)核定制、裁剪和添加 第二節(jié) 嵌入式引導(dǎo)系統(tǒng)(BootLoader)技術(shù) 第三節(jié) 文件系統(tǒng)的構(gòu)建,學(xué)習(xí)方法與建議,本章主要介紹了三個(gè)部分,分別是嵌入式linux內(nèi)核、引導(dǎo)系統(tǒng)介紹和文件系統(tǒng)等相關(guān)內(nèi)容。該章節(jié)詳細(xì)介紹了關(guān)于嵌入式系統(tǒng)如何構(gòu)建以及內(nèi)核部分的應(yīng)用操作等內(nèi)容,可以更好的幫助理解嵌入式系統(tǒng)的相關(guān)內(nèi)容,具有一定的應(yīng)用價(jià)值,1,一、概述 二、內(nèi)核目錄介紹 三、配置文件和配置工具 四、內(nèi)核的編譯命令,第一節(jié) Linux內(nèi)核定制、裁剪和添加,2,第一節(jié) Linux內(nèi)核定制、裁剪和
2、添加 一、概述,1、操作系統(tǒng)結(jié)構(gòu) - 操作系統(tǒng)(Operating System,OS)是一組能夠管理電腦軟 硬件資源的程序,它能夠管理內(nèi)存、決定系統(tǒng)資源分配、控制輸入輸出設(shè)備以及管理網(wǎng)絡(luò)文件等。 - 操作系統(tǒng)能夠使計(jì)算機(jī)系統(tǒng)資源得到最大限度的利用。 - 利用運(yùn)行在某臺(tái)計(jì)算機(jī)(宿主機(jī))上的編譯器編譯某個(gè)源程序,生成在另一臺(tái)機(jī)器(目標(biāo)機(jī))上運(yùn)行的目標(biāo)代碼的過(guò)程,3,操作系統(tǒng)包括五個(gè)方面的管理功能:進(jìn)程與處理機(jī)管理、存儲(chǔ)管理、設(shè)備管理、文件管理與用戶管理。 操作系統(tǒng)具有四個(gè)共同特征:并發(fā)性(concurrence)、共享性(sharing)、虛擬性(virtual)和不確定性(asynchroni
3、sm)。 - 并發(fā)是指兩個(gè)或者多個(gè)事件在同一時(shí)間間隔之內(nèi)發(fā)生; - 共享指系統(tǒng)中的資源能夠供多個(gè)用戶(用戶程序)共同使用; - 虛擬指通過(guò)某種技術(shù)把一個(gè)物理上的實(shí)體映射為若干個(gè)邏輯上的對(duì)應(yīng); - 不確定性指內(nèi)存中的多個(gè)進(jìn)程均按照各自獨(dú)立的方式執(zhí)行,其執(zhí)行速度由于受到操作系統(tǒng)的自動(dòng)控制,因此是無(wú)法預(yù)知的,一個(gè)操作系統(tǒng)至少具有如下圖所示的結(jié)構(gòu)。 引導(dǎo)系統(tǒng)就是在操作系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行的一段小程序,其作用是初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,并且為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境; 內(nèi)核是一個(gè)操作系統(tǒng)的核心,負(fù)責(zé)管理系統(tǒng)的進(jìn)程、存儲(chǔ)、設(shè)備和文件等,它決定著系統(tǒng)的性能和穩(wěn)定性; 根文件系統(tǒng)并不是
4、一個(gè)具體的文件類(lèi)型,而是一個(gè)理論性的概念,它作為VFS(Virtual Filesystem Switcher)的根節(jié)點(diǎn),可以幫助后者管理文件系統(tǒng)。VFS是內(nèi)核中提供的一種軟件機(jī)制,能夠提供實(shí)際各個(gè)文件系統(tǒng)的掛載點(diǎn),4,第一節(jié) Linux內(nèi)核定制、裁剪和添加 一、概述,2、內(nèi)核源碼安裝 將ARM Linux 系統(tǒng)內(nèi)核源碼安裝到操作系統(tǒng)之中不僅可以方便學(xué)習(xí)內(nèi)核的相應(yīng)內(nèi)容,而且具有幫助編譯驅(qū)動(dòng)程序等功能。完整的內(nèi)核一般規(guī)模較大,可以從官方網(wǎng)站下載。下載的內(nèi)核一般是tar.gz或者是.bz2壓縮文件,使用時(shí)需要解壓。在編譯內(nèi)核注意需要root權(quán)限。 以下為內(nèi)核
5、源碼的安裝步驟: 1)將需要升級(jí)的內(nèi)核拷貝到/usr/src/下: #cp linux-2.4.18.tar.gz /usr/src 2)解壓下載的源程序文件,命令如下所示: #tar zxvf linux-2.4.18.tar.gz 3)文件將解壓到/usr/src/linux目錄中,建立鏈接: #ln s linux-2.4.18 linux,5,第一節(jié) Linux內(nèi)核定制、裁剪和添加 一、概述,第一節(jié) Linux內(nèi)核定制、裁剪和添加 一、概述,3、內(nèi)核版本號(hào)說(shuō)明 可以使用uname a命令或者cat /proc/version命令來(lái)查看系統(tǒng)的內(nèi)核版本號(hào),如下圖所示。 該系統(tǒng)內(nèi)核版本號(hào)為2
6、.4.20-8。其中第一個(gè)數(shù)字為主版本號(hào),第二個(gè)數(shù)字為次版本號(hào),第三個(gè)數(shù)字為修訂號(hào)。如果次版本號(hào)為偶數(shù),則表明是該版本是穩(wěn)定發(fā)行版本;如果次版本號(hào)是奇數(shù),則說(shuō)明該系統(tǒng)內(nèi)核仍在開(kāi)發(fā)中,6,現(xiàn)代的操作系統(tǒng)一般由進(jìn)程管理、內(nèi)存管理、文件系統(tǒng)、驅(qū)動(dòng)程序和網(wǎng)絡(luò)等幾個(gè)功能模塊組成。Linux內(nèi)核源碼的各個(gè)目錄大致與此相對(duì)應(yīng),如下圖所示,第一節(jié) Linux內(nèi)核定制、裁剪和添加 二、內(nèi)核目錄介紹,7,內(nèi)核源碼目錄說(shuō)明,8,第一節(jié) Linux內(nèi)核定制、裁剪和添加 二、內(nèi)核目錄介紹,1配置文件 給用戶提供配置選擇的功能,主要包括如下配置文件,9,第一節(jié) Linux內(nèi)核定制、裁剪和添加 三、配置文件和配置工具,2配
7、置工具 用來(lái)進(jìn)行相關(guān)配置的工具,包括配置命令解釋器,其中配置用戶界面如下: (1)基于字符的界面 使用命令: Make config 該方法簡(jiǎn)單且不需要調(diào)用Xwindows,不過(guò)操作麻煩,用戶界面不友好,10,第一節(jié) Linux內(nèi)核定制、裁剪和添加 三、配置文件和配置工具,2)基于Ncurses的文本模式圖形用戶界面 使用命令: makemenuconfig 該方法簡(jiǎn)單且不需要調(diào)用Xwindows,而且操作簡(jiǎn)單,用戶界面友好后面的實(shí)驗(yàn)就使用該方法進(jìn)行內(nèi)核的相關(guān)配置,11,第一節(jié) Linux內(nèi)核定制、裁剪和添加 三、配置文件和配置工具,3)基于Xwindows圖形界面的用戶配置界面 使用命令:
8、Make xconfig,12,第一節(jié) Linux內(nèi)核定制、裁剪和添加 三、配置文件和配置工具,1在該級(jí)目錄下的Config.in中添加對(duì)該模塊的編譯條件,該變量可以設(shè)置為三種狀態(tài) Y-將該功能模塊編譯進(jìn)內(nèi)核 N-不將該功能模塊編譯進(jìn)內(nèi)核 M-將該功能編譯成模塊方式,可以在需要時(shí)動(dòng)態(tài)插入到內(nèi)核中 的模塊,13,第一節(jié) Linux內(nèi)核定制、裁剪和添加 四、內(nèi)核的編譯命令,2內(nèi)核的編譯操作 下面給出了用于內(nèi)核編譯的主要命令: # make menuconfig -配置編譯選項(xiàng) # make dep -提供變量依賴關(guān)系信息. # make clean -刪除生成的模塊和目標(biāo)文件. # make zI
9、mage -編譯內(nèi)核生成壓縮的映象. # make modules -編譯模塊. # make modules_install-安裝編譯完成的模塊. 編譯完成之后最終生成的壓縮內(nèi)核映象的路徑為arch/arm/boot/zImage,之后拷貝新內(nèi)核文件zImage到啟動(dòng)目錄,并改為合適的名字,即可啟動(dòng)新完成的內(nèi)核鏡像,14,第一節(jié) Linux內(nèi)核定制、裁剪和添加 四、內(nèi)核的編譯命令,內(nèi)容: 一、引導(dǎo)系統(tǒng)概述 簡(jiǎn)單介紹引導(dǎo)系統(tǒng)的概念和模式 二、Linux的Bootloader vivi與uboot vivi和uboot作為ARM平臺(tái)常用的引導(dǎo)程序,具有結(jié)構(gòu)簡(jiǎn)單但是功能強(qiáng)大的特點(diǎn),第二節(jié) 嵌入式引
10、導(dǎo)系統(tǒng)(BootLoader)技術(shù),15,1引導(dǎo)系統(tǒng)介紹 引導(dǎo)程序(BootLoader),即系統(tǒng)加電后運(yùn)行的第一段軟件代碼。一般來(lái)說(shuō)嵌入式系統(tǒng)的Bootloader負(fù)責(zé)加載整個(gè)啟動(dòng)任務(wù)。整個(gè)過(guò)程包括初始化硬件設(shè)備、建立內(nèi)存空間的映射圖、配置合適的軟硬件環(huán)境以便能夠調(diào)用操作系統(tǒng)的內(nèi)核,第二節(jié) 嵌入式引導(dǎo)系統(tǒng)(BootLoader)技術(shù) 一、引導(dǎo)系統(tǒng)概述,16,2引導(dǎo)系統(tǒng)的操作模式 大多數(shù)引導(dǎo)系統(tǒng)都包含兩種不同的操作模式: 啟動(dòng)加載模式 下載模式 1)啟動(dòng)加載模式 啟動(dòng)加載模式也稱(chēng)為“自主”(autonomous)模式。引導(dǎo)系統(tǒng)從目標(biāo)機(jī)上的某個(gè)固態(tài)存儲(chǔ)設(shè)備中將操作系統(tǒng)加載到 RAM 中運(yùn)行。這種
11、模式是引導(dǎo)系統(tǒng)的正常工作模式。 2)下載模式 在下載模式下,目標(biāo)機(jī)上的引導(dǎo)系統(tǒng)將通過(guò)串口連接或網(wǎng)絡(luò)連接等通信手段從主機(jī)下載文件。從主機(jī)下載的文件通常首先被引導(dǎo)系統(tǒng)保存到目標(biāo)機(jī)的RAM中,然后再被引導(dǎo)系統(tǒng)寫(xiě)到目標(biāo)機(jī)上的FLASH類(lèi)固態(tài)存儲(chǔ)設(shè)備中。這種模式通常在第一次安裝內(nèi)核與根文件系統(tǒng)時(shí)使用;此外,以后的系統(tǒng)更新也會(huì)使用引導(dǎo)系統(tǒng)的這種工作模式,第二節(jié) 嵌入式引導(dǎo)系統(tǒng)(BootLoader)技術(shù) 一、引導(dǎo)系統(tǒng)概述,17,3. 引導(dǎo)系統(tǒng)的主要任務(wù)與典型結(jié)構(gòu)框架 大多數(shù)引導(dǎo)系統(tǒng)都分為 stage1 和 stage2 兩大部分。依賴于處理器體系結(jié)構(gòu)和板級(jí)初始化的代碼通常都放在 stage1 中,用匯編實(shí)
12、現(xiàn);而 stage2 則通常用C語(yǔ)言來(lái)實(shí)現(xiàn),這樣可以實(shí)現(xiàn)更復(fù)雜的功能,同時(shí)代碼具有更好的可讀性和可移植性,第二節(jié) 嵌入式引導(dǎo)系統(tǒng)(BootLoader)技術(shù) 一、引導(dǎo)系統(tǒng)概述,18,引導(dǎo)系統(tǒng)的 stage1: 1)硬件設(shè)備初始化。 2)為加載引導(dǎo)系統(tǒng)的 stage2 準(zhǔn)備 RAM 空間。 3)拷貝引導(dǎo)系統(tǒng)的 stage2 到RAM 空間中。 4)設(shè)置好堆棧。 5)跳轉(zhuǎn)到 stage2 的 C 入口點(diǎn),引導(dǎo)系統(tǒng)的 stage2 : 1)初始化本階段要用到的硬件設(shè)備。 2)檢測(cè)系統(tǒng)內(nèi)存映射(memory map)。 3)將內(nèi)核映像和根文件系統(tǒng)映像從flash 上讀到 RAM 空間中。 4)為內(nèi)核設(shè)
13、置啟動(dòng)參數(shù)。 5)調(diào)用內(nèi)核,1vivi的常用命令 - 幫助命令 vivi help - 顯示啟動(dòng)參數(shù) vivi param show - 啟動(dòng)參數(shù)幫助 vivi param help - 設(shè)置參數(shù) vivi param set boot_delay 10000000 Change boot_delay value. 0 x00989680(10000000) to 0 x00989680(10000000) vivi param save,第二節(jié) 嵌入式引導(dǎo)系統(tǒng)(BootLoader)技術(shù) 二、 Linux的Bootloader vivi與uboot,19,1vivi的常用命令 - 顯示分區(qū)幫
14、助 vivi part help - 顯示分區(qū) vivi part show - 存儲(chǔ)器分區(qū) vivi bon help - 引導(dǎo)幫助 vivi boot help - 啟動(dòng)操作系統(tǒng) vivi boot,第二節(jié) 嵌入式引導(dǎo)系統(tǒng)(BootLoader)技術(shù) 二、 Linux的Bootloader vivi與uboot,20,2Uboot 的常用命令 1)protect:protect命令用于對(duì)Flash進(jìn)行寫(xiě)保護(hù),可以使能和解除寫(xiě)保護(hù)。 2)erase:erase命令可以擦除Flash。 3)setenv:setenv命令可以設(shè)置環(huán)境變量。 4)printenv:printenv命令可以打印全部
15、環(huán)境變量,也可以只打印參數(shù)中列出的環(huán)境變量。 5)tftpboot:tftpboot命令能夠使用TFTP協(xié)議通過(guò)網(wǎng)絡(luò)下載二進(jìn)制格式的文檔。另外,使用這個(gè)命令,必須配置好相關(guān)的環(huán)境變量。例如serverip和ipaddr。其命令格式為: tftpboot loadAddress bootfilename 6)bootm:bootm命令可以引導(dǎo)啟動(dòng)存儲(chǔ)在內(nèi)存中的程序映像。這些內(nèi)存包括RAM和可以永久保存的Flash。其命令格式為: bootm addr arg,第二節(jié) 嵌入式引導(dǎo)系統(tǒng)(BootLoader)技術(shù) 二、 Linux的Bootloader vivi與uboot,21,2Uboot 的常
16、用命令 7)go:go命令能夠執(zhí)行應(yīng)用程序。其命令格式為: go addr arg . 8)loadb:loadb命令能夠通過(guò)串口線下載二進(jìn)制格式的文檔。其命令格式為: loadb off baud 9)loads:loads命令可以通過(guò)串口線下載S-Record格式的文件。 10)flinfo:flinfo命令打印全部Flash組的信息,也可以只打印其中某個(gè)組的信息。一般嵌入式系統(tǒng)的Flash只有一個(gè)組。 11)cp:cp命令可以在內(nèi)存中復(fù)制數(shù)據(jù)塊,包括對(duì)Flash的讀寫(xiě)操作,第二節(jié) 嵌入式引導(dǎo)系統(tǒng)(BootLoader)技術(shù) 二、 Linux的Bootloader vivi與uboot,2
17、2,2Uboot 的常用命令 12)cmp:cmp命令可以比較兩塊內(nèi)存中的內(nèi)容。.b表示以字節(jié)為單位;.w表示以字為單位;.l表示以長(zhǎng)字為單位。 13)mw:mw命令可以按照字節(jié)、字、長(zhǎng)字寫(xiě)內(nèi)存,.b ,w,l的用法與cp命令相同。 14)nfs:nfs命令可以使用NFS網(wǎng)絡(luò)協(xié)議通過(guò)網(wǎng)絡(luò)啟動(dòng)映像。 15)nm:nm命令用于修改內(nèi)存,可以按照字節(jié)、字、長(zhǎng)字操作。 16)run:run命令可以執(zhí)行環(huán)境變量中的命令,后面參數(shù)可以是幾個(gè)環(huán)境變量名。 17)sleep:sleep命令可以延遲N秒鐘執(zhí)行,N為十進(jìn)制數(shù),第二節(jié) 嵌入式引導(dǎo)系統(tǒng)(BootLoader)技術(shù) 二、 Linux的Bootloade
18、r vivi與uboot,23,內(nèi)容: 一、文件系統(tǒng)概述 包括根文件系統(tǒng)的概述以及根文件系統(tǒng)的目錄結(jié)構(gòu) 二、BusyBox BusyBox的介紹以及相關(guān)命令,第三節(jié) 文件系統(tǒng)的構(gòu)建,24,1根文件系統(tǒng)描述 - Linux引導(dǎo)啟動(dòng)時(shí),默認(rèn)使用的文件系統(tǒng)是根文件系統(tǒng)。裝載根文件系統(tǒng)也是引導(dǎo)系統(tǒng)啟動(dòng)過(guò)程的最后一個(gè)步驟。 - 文件系統(tǒng)包含兩大類(lèi):根文件系統(tǒng)和附加文件系統(tǒng)。 - 根文件系統(tǒng)是操作系統(tǒng)至少應(yīng)該引導(dǎo)的一個(gè)文件系統(tǒng),它包含了構(gòu)建整個(gè)操作系統(tǒng)的基本程序和相關(guān)目錄 - 附加文件系統(tǒng)則是除了根文件系統(tǒng)之外的所有文件系統(tǒng),本身無(wú)法直接使用,需要掛載到根文件系統(tǒng)的某個(gè)目錄下方可使用,第三節(jié) 文件系統(tǒng)的構(gòu)
19、建 一、文件系統(tǒng)概述,25,第三節(jié) 文件系統(tǒng)的構(gòu)建 一、文件系統(tǒng)概述,26,2根文件系統(tǒng)目錄結(jié)構(gòu) 根文件系統(tǒng)呈倒掛樹(shù)狀層次結(jié)構(gòu),一般包括如下幾個(gè)目錄:/etc、 /dev、/usr、/bin、 /var等。 如下圖所示,第三節(jié) 文件系統(tǒng)的構(gòu)建 一、文件系統(tǒng)概述,27,各目錄功能如下,1BusyBox介紹 BusyBox combines tiny versions of many common UNIX utilities into a single small executable. It provides replacements for most of the utilities you
20、 usually find in GNU fileutils, shellutils, etc. The utilities in BusyBox generally have fewer options than their full-featured GNU cousins; however, the options that are included provide the expected functionality and behave very much like their GNU counterparts. BusyBox provides a fairly complete
21、environment for any small or embedded system. 事實(shí)上,BusyBox提供了相當(dāng)多的工具。從最簡(jiǎn)單的顯示工具到最強(qiáng)大的搜索工具,BusyBox把這些工具存放在/bin和/sbin目錄之下,并且建立一個(gè)能夠使用這些工具的鏈接,第三節(jié) 文件系統(tǒng)的構(gòu)建 二、BusyBox,28,2. BusyBox的相關(guān)命令 BusyBox的相關(guān)配置和編譯內(nèi)核類(lèi)似,需要首先使用make menuconfig命令進(jìn)行手工配置。敲下make menuconfig命令之后,進(jìn)入如下界面,第三節(jié) 文件系統(tǒng)的構(gòu)建 二、BusyBox,29,2. BusyBox的相關(guān)命令 BusyB
22、ox其他命令包括: help 顯示 make 選項(xiàng)的完整列表 defconfig啟用默認(rèn)的(通用)配置 allnoconfig禁用所有的應(yīng)用程序(空配置) allyesconfig啟用所有的應(yīng)用程序(完整配置) allbareconfig啟用所有的應(yīng)用程序,但是不包括子特性 config基于文本的配置工具 menuconfigN-curses(基于菜單的)配置工具 all 編譯 BusyBox 二進(jìn)制文件和文檔(./docs) busybox編譯 BusyBox 二進(jìn)制文件 clean 清除源代碼樹(shù) distclean徹底清除源代碼樹(shù) sizes 顯示所啟用的應(yīng)用程序的文本/數(shù)據(jù)大小,第三節(jié)
23、文件系統(tǒng)的構(gòu)建 二、BusyBox,30,本章主要介紹了三個(gè)部分,分別是嵌入式linux內(nèi)核、引導(dǎo)系統(tǒng)介紹和文件系統(tǒng)等相關(guān)內(nèi)容。在內(nèi)核部分詳細(xì)介紹了Linux操作系統(tǒng)內(nèi)核定制、裁剪和添加;引導(dǎo)部分則介紹了嵌入式BootLoader技術(shù);最后的文件系統(tǒng)部分詳細(xì)介紹了文件系統(tǒng)的構(gòu)建。章節(jié)的最后部分將構(gòu)建Floppylinux作為一個(gè)綜合應(yīng)用實(shí)驗(yàn),試圖讓讀者更加深入理解上述3塊內(nèi)容,小結(jié),31,1. 請(qǐng)簡(jiǎn)述操作系統(tǒng)的結(jié)構(gòu)。 2. 請(qǐng)簡(jiǎn)述操作系統(tǒng)的特點(diǎn)并舉例說(shuō)明。 3. 請(qǐng)列舉出Linux內(nèi)核源碼的所有文件夾,并且說(shuō)明每個(gè)文件夾的意義。 4. 請(qǐng)列舉出Linux有關(guān)內(nèi)核鏡像的三種編譯方法,并陳述每個(gè)方
24、法的特點(diǎn)。 5. 請(qǐng)簡(jiǎn)述Linux引導(dǎo)系統(tǒng)過(guò)的兩種操作模式并分別說(shuō)明。 6. 請(qǐng)列舉出根文件系統(tǒng)的所有目錄,并且分別說(shuō)明每個(gè)文件夾的含義。 7. 請(qǐng)闡述Linux內(nèi)核編譯的選項(xiàng)和BusyBox編譯選項(xiàng)之間的區(qū)別。 8. 請(qǐng)完成本章的綜合實(shí)驗(yàn)FloppyLinux。 9. 請(qǐng)嘗試完成基于U盤(pán)的Linux系統(tǒng),習(xí)題,32,Linux內(nèi)核啟動(dòng)簡(jiǎn)析(匯編部分,第一段代碼位于 arch/arm/boot/compressed/start.S: start: 1: mov r7, r1 保存machine id mov r8, r2 保存參數(shù)地址 mrs r2, cpsr 確定不是在USER模式下 tst
25、 r2, #3 bne not_angel not_angel: mrs r2, cpsr 強(qiáng)制轉(zhuǎn)換到SVC模式 orr r2, r2, #0 xc0 msr cpsr_c, r2,Linux內(nèi)核啟動(dòng)簡(jiǎn)析(匯編部分,Bss段清零: not_relocated: mov r0, #0 1: str r0, r2, #4 R2,BSS開(kāi)始 str r0, r2, #4 str r0, r2, #4 str r0, r2, #4 cmp r2, r3 R3,BSS結(jié)束 blo 1b,Linux內(nèi)核啟動(dòng)簡(jiǎn)析(匯編部分,跳轉(zhuǎn)到C語(yǔ)言實(shí)現(xiàn)的解壓內(nèi)核代碼: . . mov r5, r2 246 mov r0
26、, r5 mov r3, r7 bl decompress_kernel 實(shí)現(xiàn)代碼在arch/arm/boot/compressed/misc.c中,解壓代碼: ulg decompress_kernel(ulg output_start, ulg free_mem_ptr_p, ulg free_mem_ptr_end_p, int arch_id) output_data = (uch *)output_start; free_mem_ptr = free_mem_ptr_p; free_mem_ptr_end = free_mem_ptr_end_p; _machine_arch_typ
27、e = arch_id; arch_decomp_setup(); makecrc(); putstr(Uncompressing Linux.); gunzip(); putstr( done, booting the kernel.n); return output_ptr;,Linux內(nèi)核啟動(dòng)簡(jiǎn)析(匯編部分,call_kernel: bl cache_clean_flush 清除cache bl cache_off 關(guān)閉cache mov r0, #0 mov r1, r7 machine ID mov r2, r8 參數(shù)地址 mov pc, r4 跳轉(zhuǎn)到arch/arm/kernel/
28、head.S中,Linux內(nèi)核啟動(dòng)簡(jiǎn)析(匯編部分,arch/arm/kernel/head.S 跳轉(zhuǎn)到此處時(shí)處理器的狀態(tài): MMU關(guān)閉 D-cache關(guān)閉 I-cache是否關(guān)閉不重要 R0中是0 R1中是machine ID R2中是啟動(dòng)參數(shù)地址,Linux內(nèi)核啟動(dòng)簡(jiǎn)析(匯編部分,ENTRY(stext) msr cpsr_c, #PSR_F_BIT | PSR_I_BIT | SVC_MODE mrc p15, 0, r9, c0, c0 bl _lookup_processor_type movs r10, r5 beq _error_p bl _lookup_machine_type
29、movs r8, r5 beq _error_a bl _vet_atags bl _create_page_tables,Linux內(nèi)核啟動(dòng)簡(jiǎn)析(匯編部分,lookup_processor_type 作用是從硬件中讀出CPU的ID,與編譯內(nèi)核時(shí) 選擇的CPU的ID進(jìn)行比較。如果不一樣,則不 能成功啟動(dòng)。 比如,如果在arm920t的CPU上運(yùn)行為其他CPU 編譯的內(nèi)核,這里就通不過(guò),Linux內(nèi)核啟動(dòng)簡(jiǎn)析(匯編部分,lookup_machine_type 將R1的內(nèi)容(machine ID)與編譯內(nèi)核時(shí)選擇 的machine ID比較,如果不同,則內(nèi)核不能成功啟動(dòng)。 vet_atags檢查t
30、ag(內(nèi)核的啟動(dòng)參數(shù))的合法性,Linux內(nèi)核啟動(dòng)簡(jiǎn)析(匯編部分,create_page_tables 首先將內(nèi)核啟動(dòng)地址前0 x4000(共16KB)的內(nèi)存 空間清零,以便作為內(nèi)核頁(yè)表使用。 然后,清除I-cache、D-cache,使能MMU,為跳 轉(zhuǎn)到C語(yǔ)言實(shí)現(xiàn)部分做準(zhǔn)備,Linux內(nèi)核啟動(dòng)簡(jiǎn)析(匯編部分,Linux內(nèi)核啟動(dòng)簡(jiǎn)析(c語(yǔ)言部分,C語(yǔ)言入口在init/main.c中: asmlinkage void _init start_kernel(void) early_boot_irqs_off(); page_address_init(); printk(KERN_NOTICE);
31、 printk(linux_banner); setup_command_line(command_line); printk(KERN_NOTICE Kernel command line: %sn, boot_command_line); init_IRQ(); mem_init(); rest_init();,Linux內(nèi)核的配置(1/6,1、.config文件 這是linux編譯時(shí)所依賴的文件。我們?cè)谂渲脙?nèi)核時(shí)所 做的任何修改,最終都會(huì)在這個(gè)文件中體現(xiàn)出來(lái)。它 是Makefile對(duì)內(nèi)核進(jìn)行處理的重要依據(jù)。 一般來(lái)說(shuō),內(nèi)核提供了芯片公司demo板的.config文 件,我們一般找一個(gè)近似
32、的進(jìn)行修改。如S3C2410平臺(tái) 上可以選擇s3c2410_deconfig這個(gè)文件,Linux內(nèi)核的配置(2/6,三種配置方式 make config 基于文本對(duì)話的配置方式,比較細(xì)致,但是浪費(fèi)時(shí) 間。對(duì)專(zhuān)業(yè)的內(nèi)核開(kāi)發(fā)人員比較合適。 make xconfig 基于圖形界面的配置方式。非常直觀,但是需要特殊 的軟件支持,一般不推薦。 make menuconfig 推薦的內(nèi)核配置方式,采用目錄的方式,直觀,容易 使用,Linux內(nèi)核的配置(3/6,關(guān)于Kconfig 在進(jìn)行make menuconfig時(shí),目錄的生成依賴于Kconfig 文件。一般來(lái)說(shuō),每個(gè)源代碼目錄下都有一個(gè)Kconfig
33、文件。 config DM9000 tristate DM9000 support depends on ARM | BLACKFIN | MIPS select CRC32 select MII -help- Support for DM9000 chipset. To compile this driver as a module, choose M here. The module will be called dm9000,Linux內(nèi)核的配置(4/6,Kconfig對(duì).config文件的影響: CONFIG_DM9000=y make menuconfig對(duì)內(nèi)核配置所做的修改最終反應(yīng)
34、 在.config文件中。如上所示,在.config文件中 CONFIG_DM9000=y被定義為y,Linux內(nèi)核的配置(5/6,Kconfig對(duì)Makefile的影響: . obj-$(CONFIG_DM9000) += dm9000.o CONFIG_DM9000是tristate類(lèi)型,有三個(gè)可能取值: y:編譯進(jìn)內(nèi)核 m:編譯成模塊 n:不進(jìn)行編譯 若是bool類(lèi)型,則只有兩種可能,y或者n,Linux內(nèi)核的配置(6/6,關(guān)于Makefile Linux內(nèi)核源碼的每個(gè)目錄下都有一個(gè)Makefile,由該 Makefile對(duì)源代碼的編譯、鏈接等操作進(jìn)行控制。 編譯完成后,每個(gè)源代碼目錄下
35、都會(huì)生成一個(gè)名叫 built-in.o的文件。這個(gè)文件由源代碼目錄下的所以 源文件編譯后的目標(biāo)文件鏈接而成;而不同的builtin. o又被上層目錄中的Makefile鏈接成更大的builtin. o,直到最后鏈接成為一個(gè)內(nèi)核vmlinux.o,Linux內(nèi)核移植交叉編譯,關(guān)于交叉編譯 由于我們的目標(biāo)平臺(tái)是ARM,而在x86平臺(tái)上進(jìn)行開(kāi)發(fā), 故必須進(jìn)行交叉編譯。 修改內(nèi)核的頂層Makefile: . ARCH ?= arm CROSS_COMPILE ?= arm-linux- 表示我們的目標(biāo)平臺(tái)是ARM構(gòu)架的,而使用的交叉編譯 器的前綴是arm-linux,Linux內(nèi)核移植.config,
36、獲得.config文件 前面提到,.config是內(nèi)核編譯時(shí)所依賴的重要文件, 與具體的硬件構(gòu)架和開(kāi)發(fā)板類(lèi)型相關(guān)。我們選擇內(nèi)核 提供的s3c2410_defconfig進(jìn)行修改。 cp arch/arm/configs/s3c2410_defconfig .config,Linux內(nèi)核移植demo板選擇,選擇相近的demo板 三星公司針對(duì)s3c2410芯片推出了smdk2410 demo板, Linux內(nèi)核對(duì)該開(kāi)發(fā)板的支持非常完善。為了移植方 便,并最大可能地實(shí)現(xiàn)代碼重用,我們選擇該開(kāi)發(fā)板作 為原始目標(biāo)板,在它的基礎(chǔ)上進(jìn)行必要的修改。 在include/asm-arm/mach-types.h
37、中#define MACH_TYPE_SMDK2410 193與Bootloader中使用的 machine ID是一致的,Linux內(nèi)核移植NAND,經(jīng)典2410的NAND Flash 經(jīng)典2410平臺(tái)上配置一片K9F2808U NAND Flash,容量 大小為64M。為了使內(nèi)核能正常使用NAND Flash,需要 在內(nèi)核中正確地配置NAND Flash驅(qū)動(dòng)支持,添加NAND Flash支持在arch/arm/plat-s3c24xx/common-smdk.c中: static struct mtd_partition smdk_default_nand_part = 0 = .name
38、 = Bootloader, .size = 0 x80000, / 512KB .offset = 0, ,1 = .name = Linux Kernel, .offset = 0 x80000, .size = 0 x200000, / 2MB ,2 = .name = Root File System, .offset = 0 x280000, .size = 0 x400000, / 4MB ,3 = .name = User Space, .offset = 0 x680000, .size = 0 x3980000, / 57.5MB,Linux內(nèi)核移植NAND,將NAND驅(qū)動(dòng)加入初始化列表 struct platform_device s3c_device_nand = .name = s3c2410-nand, .id = -1, .num_resources = ARRAY_SIZE(s3c_nand_resource), .resource = s3c_nand_resource, ; st
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024至2030年商業(yè)用高效率條碼標(biāo)簽印表機(jī)項(xiàng)目投資價(jià)值分析報(bào)告
- 2024至2030年光控同步感應(yīng)器開(kāi)關(guān)項(xiàng)目投資價(jià)值分析報(bào)告
- 2024至2030年中國(guó)青木瓜粉數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2024至2030年中國(guó)連鎖餐飲系統(tǒng)軟件數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2024至2030年中國(guó)電源供應(yīng)器線扣數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025屆高考地理一輪復(fù)習(xí)易錯(cuò)題型專(zhuān)訓(xùn)12環(huán)境與發(fā)展含解析
- 2024版買(mǎi)賣(mài)協(xié)議更新細(xì)節(jié)指南版
- 2024年版不動(dòng)產(chǎn)抵押借款協(xié)議樣本版
- 2024年規(guī)范三輪車(chē)租賃協(xié)議樣本版
- 2024年度灰土樁施工責(zé)任承包協(xié)議書(shū)版
- 讓小車(chē)運(yùn)動(dòng)起來(lái)說(shuō)課稿
- 2018年下半年軟件水平考試(中級(jí))多媒體應(yīng)用設(shè)計(jì)師上午(基礎(chǔ)知識(shí))真題試卷
- 工程招投標(biāo)管理與實(shí)踐作業(yè)指導(dǎo)書(shū)
- ISO 22003-1:2022《食品安全-第 1 部分:食品安全管理體系 審核與認(rèn)證機(jī)構(gòu)要求》中文版(機(jī)翻)
- 2024年全國(guó)企業(yè)員工全面質(zhì)量管理知識(shí)競(jìng)賽題庫(kù)(含答案)(共132題)
- 社會(huì)工作者《社會(huì)工作綜合能力(中級(jí))》試題(附答案)
- 廣東省2024-2025學(xué)年高三上學(xué)期9月份聯(lián)考英語(yǔ)試卷
- 湖北省2023-2024學(xué)年七年級(jí)上學(xué)期語(yǔ)文期中考試試卷(含答案)
- 單元統(tǒng)整視域下的小學(xué)英語(yǔ)課內(nèi)外融合教學(xué)探析
- 合伙協(xié)議書(shū)四人范本
- 2024年新人教版七年級(jí)上冊(cè)數(shù)學(xué)全冊(cè)大單元整體設(shè)計(jì)教案
評(píng)論
0/150
提交評(píng)論