第七章 linux內(nèi)核配置與文件系統(tǒng)制作_第1頁
第七章 linux內(nèi)核配置與文件系統(tǒng)制作_第2頁
第七章 linux內(nèi)核配置與文件系統(tǒng)制作_第3頁
第七章 linux內(nèi)核配置與文件系統(tǒng)制作_第4頁
第七章 linux內(nèi)核配置與文件系統(tǒng)制作_第5頁
已閱讀5頁,還剩47頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

7.1Linux簡介7.2Linux內(nèi)核配置7.3根文件系統(tǒng)2024/3/122桌面版本:面向PC用戶的桌面發(fā)行版本,常見的如redhat、fedora、debian、Ubuntu、SUSE、紅旗等。Linux內(nèi)核內(nèi)核是所有l(wèi)inux系統(tǒng)的中心軟件組件。嵌入式領(lǐng)域所說的linux,一般是指linux內(nèi)核。移植也是指的是移植linux內(nèi)核到目標平臺。Linux介紹內(nèi)核:是一個操作系統(tǒng)的核心。它負責管理系統(tǒng)的進程、內(nèi)存、設(shè)備驅(qū)動程序、文件和網(wǎng)絡(luò)系統(tǒng),決定著系統(tǒng)的性能和穩(wěn)定性。Linux內(nèi)核由5個主要的子系統(tǒng)組成:進程調(diào)度(SCHED)內(nèi)存管理(MM)虛擬文件系統(tǒng)(VFS)網(wǎng)絡(luò)接口(NET)進程間通信(IPC)

進程調(diào)度:

控制著進程對CPU的訪問。Linux使用比較簡單的基于優(yōu)先級的進程調(diào)度算法選擇新的進程。內(nèi)存管理:內(nèi)存管理允許多個進程安全地共享主內(nèi)存區(qū)域。Linux的內(nèi)存管理支持虛擬內(nèi)存,即在計算機中運行的程序,其代碼、數(shù)據(jù)和堆棧的總量可以超過實際內(nèi)存的大小,操作系統(tǒng)只將當前使用的程序塊保存在內(nèi)存中,其余的程序塊則保留在磁盤上。必要時,操作系統(tǒng)負責在磁盤與內(nèi)存之間交換程序塊。虛擬文件系統(tǒng):

它可以隱藏各種硬件的具體細節(jié),為所有設(shè)備提供統(tǒng)一的接口,VFS還支持多達數(shù)十種不同的文件系統(tǒng),這也是Linux較有特色的一部分。網(wǎng)絡(luò)接口:提供對各種網(wǎng)絡(luò)標準的存取和各種網(wǎng)絡(luò)硬件的支持。網(wǎng)絡(luò)接口可分為網(wǎng)絡(luò)協(xié)議和網(wǎng)絡(luò)設(shè)備驅(qū)動程序兩部分。網(wǎng)絡(luò)協(xié)議部分負責實現(xiàn)每一種可能的網(wǎng)絡(luò)傳輸協(xié)議;網(wǎng)絡(luò)設(shè)備驅(qū)動程序負責與硬件設(shè)備進行通信;進程間通信:它的作用是支持進程間各種通信機制。Linux內(nèi)核的版本號2.6.24其中,2是主版本號,6是次版本號,24是修訂版本號。如果次版本號是偶數(shù),說明是穩(wěn)定版本。如果次版本號是奇數(shù),則是開發(fā)版本。我們一般使用穩(wěn)定版本。Linux操作系統(tǒng)的發(fā)展Linux之父:李納斯·托沃茲(LinusTorvalds)Linux基本體系結(jié)構(gòu)7.1Linux簡介7.2Linux內(nèi)核配置7.3根文件系統(tǒng)為什么重新編譯內(nèi)核linux作為一個自由軟件,在廣大愛好者的支持下,內(nèi)核版本不斷更新。新的內(nèi)核增加了許多新的特性。如果用戶想要使用這些新特性,或想根據(jù)自己的系統(tǒng)度身定制一個更高效,更穩(wěn)定的內(nèi)核,就需要重新編譯內(nèi)核。為什么要重新定制自己的內(nèi)核?

一般主要有下面四個考慮:

(1)尺寸小自己定制編譯的內(nèi)核具有更少的代碼,運行會更快

(2)節(jié)省內(nèi)存由于內(nèi)核部分永遠占用物理內(nèi)存,定制內(nèi)核可使系統(tǒng)擁有更多的物理內(nèi)存

(3)減少漏洞不需要的功能編譯進入內(nèi)核可能會增加被系統(tǒng)攻擊者利用的漏洞

(4)動態(tài)加載模塊根據(jù)需要動態(tài)地加載或者卸載模塊,可以節(jié)省系統(tǒng)內(nèi)存1.4內(nèi)核編譯模式

要增加對某部分功能的支持,比如:網(wǎng)絡(luò)之類,可以把相應(yīng)部分編譯到內(nèi)核中(build-in),也可以把該部分編譯成模塊(module),動態(tài)調(diào)用。如果編譯到內(nèi)核中:優(yōu)點:

在內(nèi)核啟動時就可以自動支持相應(yīng)部分的功能,這樣的優(yōu)點是方便、速度快,機器一啟動,你就可以使用這部分功能了;缺點:

會使內(nèi)核變得龐大起來,不管你是否需要這部分功能,它都會存在;建議經(jīng)常使用的部分直接編譯到內(nèi)核中,比如網(wǎng)卡。Linux內(nèi)核的配置(1/6).config文件這是對linux編譯時所依賴的文件。我們在配置內(nèi)核時所做的任何修改,最終都會在這個文件中體現(xiàn)出來。它是Makefile對內(nèi)核進行處理的重要依據(jù)。一般來說,內(nèi)核提供了芯片公司demo板的.config文件,可找一個近似的進行修改。Linux內(nèi)核的配置(2/6)三種配置方式●makeconfig基于文本對話的配置方式,比較細致,但是浪費時間。對專業(yè)的內(nèi)核開發(fā)人員比較合適?!駇akexconfig基于圖形界面的配置方式。非常直觀,但是需要特殊的軟件支持,一般不推薦。●makemenuconfig推薦的內(nèi)核配置方式,采用目錄的方式,直觀,容易使用。

基于圖形界面的menuconfig配置菜單Linux內(nèi)核的配置(3/6)Kconfig在進行makemenuconfig時,目錄的生成依賴于Kconfig文件。一般來說,每個源代碼目錄下都有一個Kconfig文件。configDM9000tristate"DM9000support"dependsonARM||BLACKFIN||MIPSselectCRC32selectMII---help---SupportforDM9000chipset.Tocompilethisdriverasamodule,chooseMhere.Themodulewillbecalleddm9000.Linux內(nèi)核的配置(4/6)Kconfig對.config文件的影響:……………CONFIG_DM9000=y……………makemenuconfig對內(nèi)核配置所做的修改最終反映在.config文件中。如上所示,在.config文件中CONFIG_DM9000=y被定義為y。Linux內(nèi)核的配置(5/6)Kconfig對Makefile的影響:………………..obj-$(CONFIG_DM9000)+=dm9000.o………………CONFIG_DM9000是tristate類型,有三個可能取值:y:編譯進內(nèi)核m:編譯成模塊n:不進行編譯若是bool類型,則只有兩種可能,y或者n。Linux內(nèi)核的配置(6/6)MakefileLinux內(nèi)核源碼的每個目錄下都有一個Makefile,由該Makefile對源代碼的編譯、鏈接等操作進行控制。編譯完成后,每個源代碼目錄下都會生成一個名叫built-in.o的文件。這個文件由源代碼目錄下的所以源文件編譯后的目標文件鏈接而成;而不同的built-in.o又被上層目錄中的Makefile鏈接成更大的builtin.o,直到最后鏈接成為一個內(nèi)核vmlinux.o。Linux內(nèi)核移植——交叉編譯關(guān)于交叉編譯由于我們的目標平臺是ARM,而在x86平臺上進行開發(fā),故必須進行交叉編譯。修改內(nèi)核的頂層Makefile:…………………..ARCH?=armCROSS_COMPILE?=arm-linux-……………………表示我們的目標平臺是ARM構(gòu)架的,而使用的交叉編譯器的前綴是arm-linux例:在內(nèi)核配置中添加對USB輸入設(shè)備的支持1.Makemenuconfig進入配置菜單2.添加Inputcoresupport具體的每個內(nèi)核配置選項的含義需要逐個研究網(wǎng)絡(luò)上下載視頻學習這里不再贅述2024/3/12247.1Linux簡介7.2Linux內(nèi)核配置7.3根文件系統(tǒng)

1.根文件系統(tǒng)的結(jié)構(gòu)根文件系統(tǒng)是Linux內(nèi)核啟動后第一個掛載的文件系統(tǒng)。在根文件系統(tǒng)中存放著內(nèi)核鏡像、各種系統(tǒng)配置文件以及一些其他的重要文件(例如設(shè)備文件、命令程序等)。為了保證通用性,根文件系統(tǒng)的目錄結(jié)構(gòu)需要遵守FHS(文件系統(tǒng)層次標準)標準(FilesystemHierarchyStandard)。FHS標準定義了根文件系統(tǒng)中每個目錄名稱及其作用的規(guī)則規(guī)范。任何一個分區(qū)都必須掛載到某個目錄上。目錄是邏輯上的區(qū)分。分區(qū)是物理上的區(qū)分。

磁盤Linux分區(qū)都必須掛載到目錄樹中的某個具體的目錄上才能進行讀寫操作。根目錄是所有Linux的文件和目錄所在的地方,需要掛載上一個磁盤分區(qū)。根本目的:把不同資料,分別放入不同分區(qū)中管理

2024/3/1229目錄與分區(qū)基于FLASH的RomfsCramfsJffs/jffs2Yaffs基于RAM的RamdiskTmpfs用戶可以根據(jù)可靠性、健壯性和/或增強的功能的需求來選擇文件系統(tǒng)的類型。2024/3/12302.嵌入式linux系統(tǒng)中常用的文件系統(tǒng)要求文件系統(tǒng)在頻繁的文件操作(例如,新建,刪除,截斷)下能夠保持較高的讀寫性能,要求低碎片化。Linux下的日志文件系統(tǒng)(XFS,ReiserFS,Ext3等)能保持數(shù)據(jù)的完整性,但消耗過多系統(tǒng)資源,的弱點使之不能成為嵌入式系統(tǒng)中的主流應(yīng)用。并且這些都是專門為硬盤這類的存儲設(shè)備優(yōu)化,對于flash這類的存儲介質(zhì)并不適用。因為現(xiàn)有的嵌入式文件系統(tǒng)的碎片化的問題,大部分的嵌入式設(shè)備只給用戶提供了只讀文件系統(tǒng),給用戶帶來不便。嵌入式文件系統(tǒng)的載體是以Flash為主的存儲介質(zhì),所以為了延長Flash的使用壽命,應(yīng)該盡量減少對Flash的寫入操作。文件系統(tǒng)采用DirectI/O的話,使I/O效率明顯降低,增加了寫入次數(shù);但采用延時寫的話,雖然能夠降低碎片問題,如果加入日志系統(tǒng)的話,有不能保證數(shù)據(jù)的安全性。這是一個矛盾。Linux對文件系統(tǒng)的要求:Ramdisk文件系統(tǒng)Ramdisk是通過將RAM用作設(shè)備來創(chuàng)建和掛裝文件系統(tǒng)的一種機制,它通常用于無盤系統(tǒng)(當然包括微型嵌入式設(shè)備,它只包含作為永久存儲媒質(zhì)的閃存芯片)。

RomFS文件系統(tǒng)uClinux系統(tǒng)多采用Romfs文件系統(tǒng),Romfs是一種相對簡單、占用空間較少的文件系統(tǒng)。首先內(nèi)核支持Romfs文件系統(tǒng)比支持ext2文件系統(tǒng)需要更少的代碼;其次romfs文件系統(tǒng)相對簡單,在建立文件系統(tǒng)超級塊(Superblock)需要更少的存儲空間。Romfs是只讀的文件系統(tǒng),禁止寫操作,因此系統(tǒng)同時需要虛擬盤(RAMDISK)支持臨時文件和數(shù)據(jù)文件的存儲。

只讀文件系統(tǒng),可以放在ROM空間,也可以在系統(tǒng)的RAM中CRAMFS文件系統(tǒng)CRAMFS中的數(shù)據(jù)已被壓縮,屬于只讀性文件系統(tǒng),不能在閃存中修改。用戶想獲取數(shù)據(jù)時,CRAMFS先把數(shù)據(jù)送到RAM中,用戶從RAM中讀取。一般CRAMFS的上層為RAMFS文件系統(tǒng),經(jīng)修改過的文件都保存在RAM中。RAMFS和CRAMFS結(jié)合的缺陷在于,一旦出現(xiàn)掉電等特殊情況,保存在RAMFS中的修改數(shù)據(jù)將全部丟失。JFFS2文件系統(tǒng)JFFS2是比較常用的嵌入式日志文件系統(tǒng)。JFFS2因為有以下這些優(yōu)點而在無盤嵌入式設(shè)備中越來越受歡迎:

JFFS2在扇區(qū)級別上執(zhí)行閃存擦除/寫/讀操作要比Ext2文件系統(tǒng)好。

JFFS2提供了比Ext2fs更好的崩潰/掉電安全保護。當需要更改少量數(shù)據(jù)時,Ext2文件系統(tǒng)將整個扇區(qū)復(fù)制到內(nèi)存(DRAM)中,在內(nèi)存中合并新數(shù)據(jù),并寫回整個扇區(qū)。這意味著為了更改單個字,必須對整個扇區(qū)(64KB)執(zhí)行讀/擦除/寫例程―這樣做的效率非常低。要是運氣差,當正在DRAM中合并數(shù)據(jù)時,發(fā)生了電源故障或其它事故,那么將丟失整個數(shù)據(jù)集合,因為在將數(shù)據(jù)讀入DRAM后就擦除了閃存扇區(qū)。JFFS2附加文件而是重寫整個扇區(qū),并且具有崩潰/掉電安全保護這一功能。3、創(chuàng)建根文件系統(tǒng)step1創(chuàng)建目錄。

step2創(chuàng)建必要的設(shè)備文件。

step3安裝所需的共享庫。

step4安裝init文件、Shell和各種基本命令(可由busybox提供)。

step5創(chuàng)建和編輯配置文件。Step1創(chuàng)建目錄

首先創(chuàng)建一個新的目錄rootfs,作為整個根文件系統(tǒng)的根目錄,如:

接著根據(jù)FHS標準依次創(chuàng)建各個子目錄,如下所示:Step2創(chuàng)建根文件系統(tǒng)中的命令文件、設(shè)備文件

在創(chuàng)建根文件系統(tǒng)中的命令文件、設(shè)備文件時,最簡單的辦法就是直接復(fù)制桌面Linux系統(tǒng)中的文件。

(1)bin。bin目錄下存放的是命令程序文件。在桌面Linux系統(tǒng)中包含了文件管理、系統(tǒng)管理和設(shè)置、磁盤管理等數(shù)百個命令文件。具體操作如下所示:上述命令的意思是指,將Linux系統(tǒng)中bin目錄中的ls和date命令文件復(fù)制到rootfs/bin目錄下。(2)dev。dev目錄下存放的是各種設(shè)備文件。

1)控制臺設(shè)備。控制臺終端用于顯示各種信息,顯示器是一種最常見的控制臺終端。在linux系統(tǒng)中,控制臺的設(shè)備文件是console??刂婆_在其他設(shè)備驅(qū)動初始化前就可以使用,因此常用來顯示內(nèi)核的啟動信息。

2)虛擬控制終端。為了滿足多用戶多任務(wù)的需要,可以通過虛擬控制終端來使用控制臺終端。例如tty1、tty2、tty3文件等。

3)串口終端。串口終端是使用串行端口連接的終端設(shè)備。在Linux系統(tǒng)中常用的串口終端設(shè)備文件有ttyS0、ttyS1等。在Linux2.6內(nèi)核中ttyS0文件稱為ttySAC0。

這里-a參數(shù)用來保留文件的所有屬性,否則cp命令將試圖從設(shè)備文件中讀取內(nèi)容并寫入新文件。在嵌入式系統(tǒng)中,出于某種需要可能不希望動態(tài)創(chuàng)建設(shè)備文件,這時,所需的設(shè)備文件就要用mknod命令預(yù)先在根文件系統(tǒng)內(nèi)創(chuàng)建,或者將創(chuàng)建設(shè)備文件的命令寫入系統(tǒng)的初始化腳本中。有關(guān)mknod命令的介紹:mknod:創(chuàng)建特殊文件語法mknod[必要參數(shù)][選擇參數(shù)][主設(shè)備號][次設(shè)備號]功能建立一個目錄項和一個特殊文件的對應(yīng)索引節(jié)點建立的文件有三種b:塊設(shè)備c:字符設(shè)備p:管道文件執(zhí)行權(quán)限:超級用戶命令屬性:系統(tǒng)設(shè)置Step3安裝共享庫

lib。lib目錄下存放的是函數(shù)庫文件。在嵌入式linux系統(tǒng)中可以根據(jù)實際的需要選擇各種庫文件。對于使用動態(tài)編譯方式編譯的C應(yīng)用程序來說,以下兩個庫文件是必須的。libc:該庫是C應(yīng)用程序必須使用的基本C函數(shù)庫。ld-linux:該庫是動態(tài)鏈接器,提供動態(tài)鏈接函數(shù)庫的功能。直接從交叉編譯器的lib目錄下把以上庫文件復(fù)制到文件系統(tǒng)的lib目錄下,如下所示:除以上基本庫之外,還有以下一些其他的常用共享庫:libd1.so.2libpthread.so.0libutil.so.1如果要運行C++源碼編譯得到的應(yīng)用程序,則還需要以下共享庫:libstdc++.so.5libgcc_s.so.1

busybox是嵌入式系統(tǒng)中常用的一個軟件包,它把許多常用的Linux命令都集成到一個單一的可執(zhí)行程序中,幾乎只需要這一個可執(zhí)行程序加上Linux內(nèi)核就可以構(gòu)建一個基本的Linux系統(tǒng)。busybox忽略了許多不常用的功能,因此非常小巧,

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論