久久无码高潮喷水抽搐,极品馒头泬19p,久久人人爽精品玩人妻av,精品国产成人国产在线视,精品视频一区二区三区在线观看

最新更新最新專題

您的位置:首頁(yè) > ppt下載 > PPT課件 > 儀器設(shè)備PPT > linux內(nèi)核情景分析PPT

linux內(nèi)核情景分析PPT下載

素材大。
247.50 KB
素材授權(quán):
免費(fèi)下載
素材格式:
.ppt
素材上傳:
ppt
上傳時(shí)間:
2018-03-08
素材編號(hào):
183404
素材類別:
儀器設(shè)備PPT

素材預(yù)覽

linux內(nèi)核情景分析PPT

這是一個(gè)關(guān)于linux內(nèi)核情景分析PPT,包括了基本知識(shí),Linux內(nèi)核的子系統(tǒng),Linux內(nèi)核代碼的工程結(jié)構(gòu),內(nèi)核編譯系統(tǒng),小結(jié)等內(nèi)容,第4章 解析Linux內(nèi)核內(nèi)核是操作系統(tǒng)的核心,通常說(shuō)的Linux是指Linux操作系統(tǒng)的內(nèi)核,是一組系統(tǒng)管理軟件的集合。Linux內(nèi)核是目前最流行的開(kāi)源操作系統(tǒng)之一,由于其代碼的高度開(kāi)放性,越來(lái)越多的人參與到Linux內(nèi)核的研究和開(kāi)發(fā)中。Linux內(nèi)核的功能也在不斷提高,性能在不斷改進(jìn)。操作系統(tǒng)內(nèi)核是軟件開(kāi)發(fā)領(lǐng)域比較深的技術(shù)點(diǎn),需要結(jié)合軟硬件知識(shí)才能深入理解。本章由淺入深講解Linux內(nèi)核,帶領(lǐng)讀者進(jìn)入嵌入式開(kāi)發(fā)比較深入的領(lǐng)域,主要內(nèi)容如下:如何獲取Linux內(nèi)核代碼 Linux內(nèi)核功能解析 Linux內(nèi)核代碼布局 Linux內(nèi)核鏡像結(jié)構(gòu) 4.1 基本知識(shí) Linux內(nèi)核是Linux操作系統(tǒng)不可缺少的組成部分,但是內(nèi)核本身不是操作系統(tǒng)。許多Linux操作系統(tǒng)發(fā)行商如RedHat、Debian等都采用Linux內(nèi)核,然后加入用戶需要的工具軟件和程序庫(kù),最終構(gòu)成一個(gè)完整的操作系統(tǒng)。嵌入式Linux系統(tǒng)是運(yùn)行在嵌入式硬件系統(tǒng)上的Linux操作系統(tǒng),每個(gè)嵌入式Linux系統(tǒng)都包括了必要的工具軟件和程序庫(kù),歡迎點(diǎn)擊下載linux內(nèi)核情景分析PPT哦。

linux內(nèi)核情景分析PPT是由紅軟PPT免費(fèi)下載網(wǎng)推薦的一款儀器設(shè)備PPT類型的PowerPoint.

第4章 解析Linux內(nèi)核內(nèi)核是操作系統(tǒng)的核心,通常說(shuō)的Linux是指Linux操作系統(tǒng)的內(nèi)核,是一組系統(tǒng)管理軟件的集合。Linux內(nèi)核是目前最流行的開(kāi)源操作系統(tǒng)之一,由于其代碼的高度開(kāi)放性,越來(lái)越多的人參與到Linux內(nèi)核的研究和開(kāi)發(fā)中。Linux內(nèi)核的功能也在不斷提高,性能在不斷改進(jìn)。操作系統(tǒng)內(nèi)核是軟件開(kāi)發(fā)領(lǐng)域比較深的技術(shù)點(diǎn),需要結(jié)合軟硬件知識(shí)才能深入理解。本章由淺入深講解Linux內(nèi)核,帶領(lǐng)讀者進(jìn)入嵌入式開(kāi)發(fā)比較深入的領(lǐng)域,主要內(nèi)容如下:如何獲取Linux內(nèi)核代碼 Linux內(nèi)核功能解析 Linux內(nèi)核代碼布局 Linux內(nèi)核鏡像結(jié)構(gòu) 4.1 基本知識(shí) Linux內(nèi)核是Linux操作系統(tǒng)不可缺少的組成部分,但是內(nèi)核本身不是操作系統(tǒng)。許多Linux操作系統(tǒng)發(fā)行商如RedHat、Debian等都采用Linux內(nèi)核,然后加入用戶需要的工具軟件和程序庫(kù),最終構(gòu)成一個(gè)完整的操作系統(tǒng)。嵌入式Linux系統(tǒng)是運(yùn)行在嵌入式硬件系統(tǒng)上的Linux操作系統(tǒng),每個(gè)嵌入式Linux系統(tǒng)都包括了必要的工具軟件和程序庫(kù)。 4.1.1 什么是Linux內(nèi)核內(nèi)核是操作系統(tǒng)的核心部分,為應(yīng)用程序提供安全訪問(wèn)硬件資源的功能。直接操作計(jì)算機(jī)硬件是很復(fù)雜的,內(nèi)核通過(guò)硬件抽象的方法屏蔽了硬件的復(fù)雜性和多樣性。通過(guò)硬件抽象的方法,內(nèi)核向應(yīng)用程序提供了統(tǒng)一和簡(jiǎn)潔的接口,應(yīng)用程序設(shè)計(jì)復(fù)雜程度降低。實(shí)際上,內(nèi)核可以被看做是一個(gè)系統(tǒng)資源管理器,內(nèi)核管理計(jì)算機(jī)系統(tǒng)中所有的軟件和硬件資源。應(yīng)用程序可以直接運(yùn)行在計(jì)算機(jī)硬件上而無(wú)需內(nèi)核的支持,從這個(gè)角度看,內(nèi)核不是必要的。在早期的計(jì)算機(jī)系統(tǒng)中,由于系統(tǒng)資源的局限,通常采用直接在硬件上運(yùn)行應(yīng)用程序的辦法。運(yùn)行應(yīng)用程序需要一些輔助程序,如程序加載器、調(diào)試器等。隨著計(jì)算機(jī)性能的不斷提高,硬件和軟件源都變得復(fù)雜,需要一個(gè)統(tǒng)一管理的程序,操作系統(tǒng)的概念也逐漸建立起來(lái)。 4.1.2 Linux內(nèi)核版本 Linux內(nèi)核版本號(hào)采用兩個(gè)“.”分割的三個(gè)數(shù)字來(lái)標(biāo)示,形式為“X.Y.Z”。其中,X是主要版本號(hào),Y是次要版本號(hào),Z代表補(bǔ)丁版本號(hào)。奇數(shù)代表不穩(wěn)定的版本;偶數(shù)代表穩(wěn)定的版本。“穩(wěn)定”和“不穩(wěn)定”是相對(duì)的,如Linux內(nèi)核1.1.0相對(duì)于1.0.0來(lái)說(shuō)是“不穩(wěn)定”版本,但是與1.1.1對(duì)比是“穩(wěn)定”版本。在Linux內(nèi)核開(kāi)發(fā)過(guò)程中,“不穩(wěn)定”版本通常是在原有版本基礎(chǔ)上增加了新的功能或者新的特性。 4.1.3 如何獲取Linux內(nèi)核代碼在PC上,一般的Linux發(fā)行版都提供了內(nèi)核代碼。嵌入式系統(tǒng)沒(méi)有固定的發(fā)行版,需要用戶自己獲取內(nèi)核代碼。Linux內(nèi)核代碼的官方站點(diǎn)是http://www.kernel.org,該站點(diǎn)提供了2.4和2.6所有版本的代碼和補(bǔ)丁,用戶可以打開(kāi)該地址找到和自己所在物理位置就進(jìn)的站點(diǎn),下載自己需要的內(nèi)核版本代碼。高版本Linux內(nèi)核代碼文件比較大,對(duì)于國(guó)內(nèi)的用戶推薦使用ftp方式下載,或者使用斷點(diǎn)續(xù)傳工具下載,具體情況可根據(jù)讀者自身的網(wǎng)絡(luò)情況選擇。下載Linux內(nèi)核代碼后,會(huì)得到一個(gè)類似“linux-2.6.xx.tar.gz”或者“linux-2.6.xx-tar.bz2”形式的壓縮文件,“xx”代表版本號(hào)。在Linux系統(tǒng)上,通常把這個(gè)文件存放在/usr/src目錄下,便于以后使用。 4.1.4 編譯內(nèi)核學(xué)習(xí)Linux內(nèi)核最好的開(kāi)始是編譯一次Linux內(nèi)核代碼,通過(guò)配置Linux內(nèi)核可以對(duì)內(nèi)核代碼有一個(gè)初步的了解。本節(jié)介紹一下在PC機(jī)上如何編譯生成2.6版本的內(nèi)核目標(biāo)文件,試驗(yàn)中講移植Linux部分會(huì)講解如何交叉編譯用于ARM體系結(jié)構(gòu)的Linux內(nèi)核。與2.4版本相比,2.6版本內(nèi)核代碼編譯相對(duì)較容易。內(nèi)核編譯主要分成配置和編譯兩部分,其中配置是關(guān)鍵,許多問(wèn)題都是出在配置環(huán)節(jié)。Linux內(nèi)核編譯配置提供多種方式: make config : make menuconfig : make xconfig : make oldconfig : 4.2 Linux內(nèi)核的子系統(tǒng)內(nèi)核是操作系統(tǒng)的核心。Linux內(nèi)核提供很多基本功能,如虛擬內(nèi)存、多任務(wù)、共享庫(kù)、需求加載、共享寫(xiě)時(shí)拷貝(Copy-On-Write)以及網(wǎng)絡(luò)功能等。增加各種不同功能導(dǎo)致內(nèi)核代碼不斷增加。Linux內(nèi)核把不同功能分成不同的子系統(tǒng)的方法,通過(guò)一種整體的結(jié)構(gòu)把各種功能集合在一起,提高了工作效率。同時(shí)還提供動(dòng)態(tài)加載模塊的方式,為動(dòng)態(tài)修改內(nèi)核功能提供了靈活性。 4.2.1 系統(tǒng)調(diào)用接口 4.2.1 系統(tǒng)調(diào)用接口系統(tǒng)調(diào)用是Linux內(nèi)核提供的,用戶空間無(wú)法直接使用系統(tǒng)調(diào)用。在用戶進(jìn)程使用系統(tǒng)調(diào)用必須跨越應(yīng)用程序和內(nèi)核的界限。Linux內(nèi)核向用戶提供了統(tǒng)一的系統(tǒng)調(diào)用接口,但是在不同處理器上系統(tǒng)調(diào)用的方法各不相同。Linux內(nèi)核提供了大量的系統(tǒng)調(diào)用,本節(jié)從系統(tǒng)調(diào)用的基本原理出發(fā)講解Linux系統(tǒng)調(diào)用的方法。 4.2.2 進(jìn)程管理子系統(tǒng)當(dāng)一個(gè)用戶進(jìn)程被加載后,會(huì)進(jìn)入就緒態(tài),被加入到就緒態(tài)隊(duì)列,CPU時(shí)間被輪轉(zhuǎn)到就緒態(tài)隊(duì)列后,切換到進(jìn)程的代碼,進(jìn)程被執(zhí)行,當(dāng)進(jìn)程的時(shí)間片到了以后被換出。如果進(jìn)程發(fā)生I/O操作也會(huì)提前被換出,并且存放到等待隊(duì)列,當(dāng)I/O請(qǐng)求返回后,進(jìn)程又被放入就緒隊(duì)列。 Linux系統(tǒng)對(duì)進(jìn)程隊(duì)列的管理設(shè)計(jì)了若干不同的方法,主要的目的是提高進(jìn)程調(diào)度的穩(wěn)定性。 4.2.3 內(nèi)存管理子系統(tǒng)內(nèi)存是計(jì)算機(jī)的重要資源,也是內(nèi)核的的重要部分。使用虛擬內(nèi)存技術(shù)的計(jì)算機(jī),內(nèi)存管理的硬件按照分頁(yè)方式管理內(nèi)存。分頁(yè)方式是把計(jì)算機(jī)系統(tǒng)的物理內(nèi)存按照相同大小等分,每個(gè)內(nèi)存分片稱作內(nèi)存頁(yè),通常內(nèi)存頁(yè)大小是4KB。Linux內(nèi)核的內(nèi)存管理子系統(tǒng)管理虛擬內(nèi)存與物理內(nèi)存之間的映射關(guān)系,以及系統(tǒng)可用內(nèi)存空間。內(nèi)存管理要管理的不僅是4KB緩沖區(qū)。Linux提供了對(duì)4KB緩沖區(qū)的抽象,例如slab分配器。這種內(nèi)存管理模式使用4KB緩沖區(qū)為基數(shù),然后從中分配結(jié)構(gòu),并跟蹤內(nèi)存頁(yè)使用情況,比如哪些內(nèi)存頁(yè)是滿的,哪些頁(yè)面沒(méi)有完全使用,哪些頁(yè)面為空。這樣就允許該模式根據(jù)系統(tǒng)需要來(lái)動(dòng)態(tài)調(diào)整內(nèi)存使用。 4.2.4 虛擬文件系統(tǒng)虛擬文件系統(tǒng),即VFS(Virtual File System)是Linux內(nèi)核中的一個(gè)軟件抽象層。它通過(guò)一些數(shù)據(jù)結(jié)構(gòu)及其方法向?qū)嶋H的文件系統(tǒng)如ext2,vfat等提供接口機(jī)制。通過(guò)使用同一套文件 I/O 系統(tǒng)調(diào)用即可對(duì)Linux中的任意文件進(jìn)行操作而無(wú)需考慮其所在的具體文件系統(tǒng)格式;更進(jìn)一步,文件操作可以在不同文件系統(tǒng)之間進(jìn)行。 4.2.4 虛擬文件系統(tǒng) 4.2.5 網(wǎng)絡(luò)堆棧 Linux系統(tǒng)下編寫(xiě)網(wǎng)絡(luò)應(yīng)用程序,使用socket通過(guò)TCP/IP協(xié)議與其他機(jī)器通信,和前面介紹的內(nèi)核子系統(tǒng)相似,socket相關(guān)的函數(shù)也是通過(guò)內(nèi)核的子系統(tǒng)完成的,擔(dān)當(dāng)這部分任務(wù)的是內(nèi)核的網(wǎng)絡(luò)子系統(tǒng),一些資料里也把這部分代碼稱為“網(wǎng)絡(luò)堆棧”。 Linux內(nèi)核提供了優(yōu)秀的網(wǎng)絡(luò)處理能力和功能,這與網(wǎng)絡(luò)堆棧代碼的設(shè)計(jì)思想是分不開(kāi)的,Linux的網(wǎng)絡(luò)堆棧部分沿襲了傳統(tǒng)的層次結(jié)構(gòu),網(wǎng)絡(luò)數(shù)據(jù)從用戶進(jìn)程到達(dá)實(shí)際的網(wǎng)絡(luò)設(shè)備需要四個(gè)層次。 4.2.5 網(wǎng)絡(luò)堆棧 4.2.6 設(shè)備驅(qū)動(dòng) Linux內(nèi)核對(duì)設(shè)備按照主設(shè)備號(hào)和從設(shè)備號(hào)的方法訪問(wèn),主設(shè)備號(hào)描述控制設(shè)備的驅(qū)動(dòng)程序,從設(shè)備號(hào)區(qū)分同一個(gè)驅(qū)動(dòng)程序的不同設(shè)備。也就是說(shuō),主設(shè)備號(hào)和設(shè)備驅(qū)動(dòng)程序?qū)?yīng),代表某一類型的設(shè)備,從設(shè)備號(hào)和具體設(shè)備對(duì)應(yīng),代表同一類的設(shè)備編號(hào)。如使用IDE接口的兩個(gè)硬盤(pán),主設(shè)備號(hào)都相同,但是從設(shè)備號(hào)不同。Linux提供了mknod命令創(chuàng)建設(shè)備驅(qū)動(dòng)程序的描述文件,后面設(shè)備驅(qū)動(dòng)相關(guān)章節(jié)具體講解。Linux內(nèi)核這種主從設(shè)備號(hào)的分類方法可以很好的管理設(shè)備。 4.2.7 依賴體系結(jié)構(gòu)的代碼 Linux內(nèi)核支持眾多體系結(jié)構(gòu),內(nèi)核把與設(shè)備無(wú)關(guān)的代碼放在arch目錄,對(duì)應(yīng)的頭文件放在include/asm-<體系名稱>目錄下。這樣的劃分代碼結(jié)構(gòu)清晰,同時(shí)提高了代碼的復(fù)用率。在arch目錄里,每個(gè)子目錄對(duì)應(yīng)一種體系結(jié)構(gòu),存放這種體系結(jié)構(gòu)對(duì)應(yīng)的代碼,如果代碼較多會(huì)單獨(dú)建立一個(gè)目錄,例如arch/arm目錄下,有一個(gè)kernel目錄,存放的是kernel目錄中在arm體系結(jié)構(gòu)上特有的函數(shù)或者實(shí)現(xiàn)方法;在arch/i386目錄存放了Intel X86體系結(jié)構(gòu)的代碼,不僅有kernel目錄,而且還有多個(gè)目錄,例如mm目錄包含了x86體系上內(nèi)存管理的實(shí)現(xiàn)方法,math-emu包含了x86體系上浮點(diǎn)數(shù)模擬的實(shí)現(xiàn)等。讀者在閱讀內(nèi)核代碼的時(shí)候可以從一個(gè)體系結(jié)構(gòu)代碼入手,對(duì)不同體系結(jié)構(gòu)移植代碼的主要工作是arch里面的代碼。 4.3 Linux內(nèi)核代碼的工程結(jié)構(gòu)隨著Linux內(nèi)核功能的不斷增加,內(nèi)核代碼也在飛速增長(zhǎng),目前2.6版本的內(nèi)核代碼早已達(dá)到數(shù)百萬(wàn)行。如此龐大的代碼量,不僅給學(xué)習(xí)帶來(lái)困難,對(duì)代碼的維護(hù)也是一個(gè)不小的挑戰(zhàn),幸好Linux內(nèi)核開(kāi)發(fā)人員早就考慮到了這一點(diǎn),使得Linux內(nèi)核代碼組織有序,本節(jié)重點(diǎn)講述Linux內(nèi)核代碼的結(jié)構(gòu)。 4.3.1 源代碼目錄布局 4.1.3節(jié)講述了如何獲取到Linux內(nèi)核代碼,通常會(huì)存放在/usr/src目錄下,如果是2.6版本的內(nèi)核解壓后會(huì)得到例如’linux-2.6.xx’類型的目錄,這個(gè)目錄下存放的就是Linux內(nèi)核代碼。進(jìn)入內(nèi)核代碼目錄,查看文件列表,會(huì)看到許多的目錄和文件,如果讀者的系統(tǒng)有tree這個(gè)命令或者腳本,可以查看到Linux內(nèi)核代碼的文件數(shù),那會(huì)是一個(gè)很龐大的結(jié)構(gòu)。好在Linux內(nèi)核代碼的工程組織是很好的,對(duì)于不同版本的內(nèi)核,在工程組織上是基本一致的,有的僅是功能上的差別。 4.3.2 幾個(gè)重要的Linux內(nèi)核文件當(dāng)用戶編譯一個(gè)Linux內(nèi)核代碼后,會(huì)生成幾個(gè)文件:vmlinuz,initrd.img,以及System.map,如果讀者配置過(guò)grub引導(dǎo)管理器程序,會(huì)在/boot目錄下看到這幾個(gè)文件。 1.vmlinuz文件 2.initrd文件 3.System.map文件 4.4 內(nèi)核編譯系統(tǒng) Linux內(nèi)核代碼的復(fù)雜,需要一個(gè)強(qiáng)大的工程管理系統(tǒng),幸好GNU提供了Makefile機(jī)制,此外,內(nèi)核的開(kāi)發(fā)者們還提供了KBuild機(jī)制。通過(guò)Makefile和KBuild的結(jié)合,可以出色的管理Linux內(nèi)核代碼。Linux內(nèi)核的編譯系統(tǒng)和代碼結(jié)構(gòu)是緊密聯(lián)系的,了解內(nèi)核編譯系統(tǒng)對(duì)分析內(nèi)核代碼和編譯內(nèi)核都有幫助作用。 4.4.1 內(nèi)核編譯系統(tǒng)基本架構(gòu) Linux內(nèi)核編譯系統(tǒng)有5種類型的文件。 4.4.2 內(nèi)核頂層Makefile分析編譯內(nèi)核代碼的時(shí)候,頂層Makefile文件在開(kāi)始編譯子目錄下的代碼之前,設(shè)置編譯環(huán)境和需要用到的變量。頂層Makefile文件包含通用部分,arch/$(ARCH) /Makefile包含該體系架構(gòu)所需的設(shè)置。因此arch/$(ARCH)/Makefile會(huì)設(shè)置一些變量和少量的目標(biāo)。 1.設(shè)置變量 2.增加預(yù)設(shè)置項(xiàng) 3.目錄表 4.引導(dǎo)映像 5.編譯非內(nèi)核目標(biāo) 6.編譯引導(dǎo)映像命令 7.定制編譯命令 8.預(yù)處理連接腳本 4.4.3 內(nèi)核編譯文件分析 Linux內(nèi)核代碼使用KBuild作為Makefile的基礎(chǔ)架構(gòu)。Kbuild定義了若干的內(nèi)置變量,本節(jié)介紹Kbuild的主要內(nèi)置變量和常用方法。 1.目標(biāo)定義 2.內(nèi)嵌對(duì)象 - obj-y 3.可加載模塊 - obj-m 4.導(dǎo)出符號(hào)目標(biāo) 5.庫(kù)文件 - lib-y 6.目錄遞歸 7.編譯標(biāo)記 8.依賴關(guān)系 9.特殊規(guī)則 10.$(CC)支持功能 4.4.4 目標(biāo)文件清除機(jī)制 "make clean"命令刪除在編譯內(nèi)核生成的大部分文件如主機(jī)程序。列舉在$(hostprogs-y)、$(hostprogs-m)、$(always)、$(extra-y)和$(targets)中目標(biāo)文件都將被刪除。 代碼目錄數(shù)中的"*.[oas]"、"*.ko"文件和一些由編譯系統(tǒng)產(chǎn)生的附加文件也將被刪除。附加文件可以使用$(clean-files)進(jìn)行定義。例如: #drivers/pci/Makefile clean-files := devlist.h classlist.h 4.4.5 編譯輔助程序內(nèi)核編譯系統(tǒng)支持在編譯(compliation)階段編譯主機(jī)可執(zhí)行程序。為了使用主機(jī)程序需要兩個(gè)步驟:第一個(gè)步驟使用hostprogs-y變量告 訴內(nèi)核編譯系統(tǒng)有主機(jī)程序可用。第二步給主機(jī)程序添加潛在的依賴關(guān)系。有兩種方法,在規(guī)則中增加依賴關(guān)系或使用$(always)變量。具體描述如下。 1.簡(jiǎn)單輔助程序 2.組合輔助程序 3.定義共享庫(kù) 4.C++語(yǔ)言使用方法 5.輔助程序編譯控制選項(xiàng) 6.何時(shí)建立輔助程序 7.使用hostprogs-$(CONFIG_FOO) 4.4.6 KBuild變量 KBuild內(nèi)置了一些變量供頂層Makefile使用,頂層Makefile文件導(dǎo)出下面這些變量: VERSION, PATCHLEVEL, SUBLEVEL, EXTRAVERSION 這幾個(gè)變量定義了當(dāng)前內(nèi)核版本號(hào)。很少體系體系Makefiles文件直接使用他們,常用$(KERNELRELEASE)代替。 4.5 小結(jié) Linux內(nèi)核代碼非常龐大復(fù)雜,對(duì)任何人來(lái)說(shuō)學(xué)習(xí)都是一個(gè)不小的挑戰(zhàn),本章講解了Linux內(nèi)核的工程結(jié)構(gòu)和代碼結(jié)構(gòu),從嵌入式系統(tǒng)開(kāi)發(fā)的角度來(lái)說(shuō),大多數(shù)沒(méi)有必要一行一行的研究?jī)?nèi)核代碼,開(kāi)發(fā)人員需要了解內(nèi)核的機(jī)構(gòu)和工作流程,以及常見(jiàn)的開(kāi)發(fā)方法即可,學(xué)習(xí)內(nèi)核最基本的技能是編譯內(nèi)核,在此基礎(chǔ)上通過(guò)學(xué)習(xí)驅(qū)動(dòng)開(kāi)發(fā)和內(nèi)核移植。BLr紅軟基地

PPT分類Classification

Copyright:2009-2024 紅軟網(wǎng) rsdown.cn 聯(lián)系郵箱:rsdown@163.com

湘ICP備2024053236號(hào)-1