第12_Linux內(nèi)核結(jié)構(gòu)及移植.ppt_第1頁
第12_Linux內(nèi)核結(jié)構(gòu)及移植.ppt_第2頁
第12_Linux內(nèi)核結(jié)構(gòu)及移植.ppt_第3頁
第12_Linux內(nèi)核結(jié)構(gòu)及移植.ppt_第4頁
第12_Linux內(nèi)核結(jié)構(gòu)及移植.ppt_第5頁
已閱讀5頁,還剩47頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第十二講Linux內(nèi)核結(jié)構(gòu)及移植,河南大學 計算機與信息工程學院,Linux內(nèi)核結(jié)構(gòu)及移植,Linux內(nèi)核結(jié)構(gòu) Linux源代碼結(jié)構(gòu) Linux的移植 Linux內(nèi)核裁剪,2,Linux內(nèi)核結(jié)構(gòu)及移植,Linux內(nèi)核結(jié)構(gòu) Linux源代碼結(jié)構(gòu) Linux的移植 Linux內(nèi)核裁剪,3,04:17,4,Linux內(nèi)核結(jié)構(gòu),04:17,5,Linux 內(nèi)核可以劃分成三層。 系統(tǒng)調(diào)用接口(SCI):實現(xiàn)了一些基本的調(diào)用功能,例如 read 和 write等。 內(nèi)核代碼:獨立于體系結(jié)構(gòu)的內(nèi)核代碼。這些代碼是 Linux 所支持的所有處理器體系結(jié)構(gòu)所通用的。 依賴于體系結(jié)構(gòu)的代碼,構(gòu)成了通常稱為 BSP

2、(Board Support Package)的部分。這些代碼用作給定體系結(jié)構(gòu)的處理器和特定于平臺的代碼。,Linux內(nèi)核結(jié)構(gòu),04:17,6,Linux內(nèi)核的主要子系統(tǒng),Linux內(nèi)核結(jié)構(gòu),04:17,7,1)進程調(diào)度 2)進程間通信 3)內(nèi)存管理 4)虛擬文件系統(tǒng) 5)網(wǎng)絡堆棧 6)設備驅(qū)動程序 7)依賴體系結(jié)構(gòu)的代碼,Linux內(nèi)核的主要子系統(tǒng),Linux內(nèi)核結(jié)構(gòu),04:17,8,內(nèi)核通過系統(tǒng)調(diào)用接口SCI層提供API來創(chuàng)建一個新進程,停止進程,并在進程間進行通信和同步; 進程調(diào)度還包括處理活動進程間共享CPU的需求; 內(nèi)核進程管理的源代碼在“./linux-2.6.x/kernel”中

3、; 依賴于體系結(jié)構(gòu)的源代碼在“./linux-2.6.x/arch”中。,1)進程調(diào)度,Linux內(nèi)核結(jié)構(gòu),04:17,9,支持進程間各種通信機制,包括管道、FIFO、共享內(nèi)存、信號、消息隊列、套接字等。,2)進程間通信,Linux內(nèi)核結(jié)構(gòu),04:17,10,為了提高效率,如果由硬件管理虛擬內(nèi)存,內(nèi)存是按照所謂的內(nèi)存頁方式進行管理的(對于大部分體系結(jié)構(gòu)來說都是4KB)。 Linux包括了管理可用內(nèi)存的方式,以及物理和虛擬映射所使用的硬件機制。 內(nèi)存管理模式使用4KB緩沖區(qū)為基數(shù),從中分配結(jié)構(gòu),并跟蹤內(nèi)存頁使用情況,根據(jù)系統(tǒng)需要動態(tài)調(diào)整內(nèi)存使用。 內(nèi)存管理的源代碼在“./linux-2.6.x/

4、mm”中。,3)內(nèi)存管理,Linux內(nèi)核結(jié)構(gòu),04:17,11,虛擬文件系統(tǒng)(VFS)為文件系統(tǒng)提供了一個通用的接口抽象。VFS 在 SCI 和內(nèi)核所支持的文件系統(tǒng)之間提供了一個交換層。 文件系統(tǒng)的源代碼在“./linux-2.6.x/fs”中。 文件系統(tǒng)層之下的緩沖區(qū)可優(yōu)化對物理設備的訪問;緩沖區(qū)之下設備驅(qū)動程序接口。,4)虛擬文件系統(tǒng),Linux內(nèi)核結(jié)構(gòu),04:17,12,網(wǎng)絡堆棧在設計上遵循模擬協(xié)議本身的分層體系結(jié)構(gòu)。Internet Protocol (IP) 是傳輸協(xié)議(通常稱為傳輸控制協(xié)議 TCP)下面的核心網(wǎng)絡層協(xié)議。TCP 上面是 socket 層,它是通過 SCI 進行調(diào)用的

5、。 Socket層是網(wǎng)絡子系統(tǒng)的標準API,為各種網(wǎng)絡協(xié)議提供用戶接口。從原始幀訪問到IP協(xié)議數(shù)據(jù)單元(PDU),再到TCP和用戶數(shù)據(jù)報協(xié)議UDP,socket層提供了一種標準化的方法來管理連接,并在各個終點之間移動數(shù)據(jù)。 內(nèi)核中網(wǎng)絡源代碼在“./linux-2.6.x/net”中。,5)網(wǎng)絡堆棧,Linux內(nèi)核結(jié)構(gòu),04:17,13,Linux 內(nèi)核中有大量代碼都在設備驅(qū)動程序中,它們能夠支持特定硬件設備的運轉(zhuǎn)。 Linux 源碼樹提供了一個驅(qū)動程序子目錄,這個目錄又進一步劃分為各種支持設備,例如 DMA、I2C、USB 等。 設備驅(qū)動程序的代碼可以在 “./linux-2.6.x/driv

6、ers”中。,6)設備驅(qū)動程序,Linux內(nèi)核結(jié)構(gòu),04:17,14,盡管 Linux 很大程度上獨立于所運行的體系結(jié)構(gòu),但是有些元素則必須考慮體系結(jié)構(gòu)才能正常操作并實現(xiàn)更高效率。 ./linux-2.6.x/arch 子目錄中定義了內(nèi)核源代碼中依賴于體系結(jié)構(gòu)的部分,其中包含了各種特定于體系結(jié)構(gòu)的子目錄(共同組成了 BSP)。,7)依賴體系結(jié)構(gòu)的代碼,Linux內(nèi)核結(jié)構(gòu),04:17,15,Linux 內(nèi)核的技術特點,注重實用和效率:Linux內(nèi)核被設計成分層的微內(nèi)核,所以效率高,緊湊性強。 內(nèi)核可定制:選擇適合的,剔除不需要的部分,適合嵌入式產(chǎn)品。 LKM機制:Loadable Kernel

7、Module機制,用戶在需要時現(xiàn)場動態(tài)加載,使用完畢可動態(tài)卸載。將模塊從內(nèi)核中獨立出來。 網(wǎng)絡支持:支持大量網(wǎng)絡協(xié)議。 被動調(diào)用服務對象:Linux內(nèi)核為用戶進程服務的唯一方式是用戶進程通過系統(tǒng)調(diào)用來請求在內(nèi)核空間運行某個函數(shù)。 虛擬內(nèi)存技術:每個進程的虛擬內(nèi)存空間為4GB。其中0-3GB屬于用戶空間,稱為用戶段;3-4GB屬于內(nèi)核空間,稱為內(nèi)核段。,Linux內(nèi)核結(jié)構(gòu),Linux內(nèi)核結(jié)構(gòu)及移植,Linux內(nèi)核結(jié)構(gòu) Linux源代碼結(jié)構(gòu) Linux的移植 Linux內(nèi)核裁剪,16,17,/pub/linux/kernel/v2.6,內(nèi)核下載,Linux內(nèi)

8、核目錄結(jié)構(gòu),與架構(gòu)和平臺相關的源代碼都放在arch目錄下,對于ARM的Linux,包含于arch目錄下的arm子目錄中。,Linux內(nèi)核arch目錄,04:17,20,Linux源代碼結(jié)構(gòu),結(jié)合源碼包,仔細分析Linux-2.6.39內(nèi)核源代碼結(jié)構(gòu)。,04:17,21,linux-2.6.39:該主目錄中包括所有的子目錄,還含有唯一的一個Makefile文件。主要用途是通過識別哪些文件已被修改過,從而自動地決定在一個含有多個源程序文件的程序系統(tǒng)中哪些文件需要被重新編譯。 linux-2.6.39目錄下的這個Makefile文件還嵌套地調(diào)用了所有子目錄中包含的Makefile文件。這樣,當lin

9、ux目錄(包括子目錄)下的任何文件被修改過時,make都會對其進行重新編譯。 因此為了編譯整個內(nèi)核所有的源代碼文件,只要在linux目錄下運行一次make軟件即可。,Linux源代碼結(jié)構(gòu),1)linux主目錄,04:17,22,arch目錄:包含和硬件體系結(jié)構(gòu)相關的代碼,每種平臺占一個相應的目錄。在這個目錄下,針對不同體系結(jié)構(gòu)所移植的版本都有三個子目錄:kernel、lib和mm。 kernel子目錄包含依賴于體系結(jié)構(gòu)實現(xiàn)的一般內(nèi)核功能,如信號處理、時鐘處理等; lib子目錄包含庫函數(shù)的本地實現(xiàn),如果從依賴于體系結(jié)構(gòu)的源碼編譯,則運行更快; mm子目錄包含存儲管理實現(xiàn)的代碼。,Linux源代碼

10、結(jié)構(gòu),2)arch目錄,04:17,23,3)block目錄:存放部分塊設備驅(qū)動程序。 4)crypto目錄:存放常用加密和散列算法(如AES、SHA等),還有一些壓縮和CRC校驗算法。 5)Documentation目錄:存放關于內(nèi)核各部分的通用解釋和注釋。 6)drivers目錄:存放設備驅(qū)動程序,每個不同的驅(qū)動占用一個子目錄,如聲卡的驅(qū)動對應于drivers/sound。這個目錄擁有50%以上的內(nèi)核源碼,系統(tǒng)中所有的設備驅(qū)動程序都位于該目錄中。 7)fs目錄:Linux支持的文件系統(tǒng)代碼。不同的文件系統(tǒng)有不同的子目錄與之對應。如ext、fat、ntfs等。 8)include目錄:存放頭

11、文件,包括了內(nèi)核的大多數(shù)頭文件,另外對每種支持的體系結(jié)構(gòu)分別有一個子目錄。其中,和系統(tǒng)相關的頭文件被放置在linux子目錄下。,Linux源代碼結(jié)構(gòu),04:17,24,9)init目錄:存放內(nèi)核初始化代碼(不是系統(tǒng)引導代碼)。包含了所有系統(tǒng)的初始化源碼,許多主要的文件,如main.c就位于該目錄下。該文件還包含了許多核心代碼,如實現(xiàn)fork()的代碼和最常執(zhí)行的代碼cpuidle()循環(huán)。 10)ipc目錄:處理進程間通信的全部所需的代碼都放在該目錄下。 11)kernel目錄:內(nèi)核的最核心部分,許多最常調(diào)用的內(nèi)核函數(shù)放在該目錄下。包括調(diào)度器fork()和timer.c等,和平臺相關的一部分代

12、碼放在arch/*/kernel目錄下。 12)lib目錄:存放庫文件代碼。該目錄放置內(nèi)核其他部分經(jīng)常所需要的代碼,如inflate.c就放在這里,它能夠在引導時解壓內(nèi)核并裝入內(nèi)存。與處理器結(jié)構(gòu)相關的庫代碼放在arch/*/lib目錄下。,Linux源代碼結(jié)構(gòu),04:17,25,13)mm目錄:包含了所有Linux實現(xiàn)虛擬內(nèi)存管理的源碼。與具體硬件體協(xié)結(jié)構(gòu)相關的內(nèi)存管理代碼位于arch/*/mm目錄下,如對應X86的就是arch/i386/mm/fault.c 14)modules目錄: 存放已編譯好的可動態(tài)加載的模塊。 15)net目錄:存放所有提供網(wǎng)絡支持的代碼代碼,實現(xiàn)了各種常見的網(wǎng)絡協(xié)

13、議,每個子目錄對應網(wǎng)絡的一個方面。 16)scripts目錄:存放用于配置內(nèi)核的腳本文件及用戶開發(fā)和維護手冊。 17)security目錄:SELinux(Security-Enhanced Linux)的模塊。 18)sound目錄:常用音頻設備的驅(qū)動程序等。 19)usr目錄:/usr 這是最龐大的目錄,我們要用到的應用程序和文件幾乎都存放在這個目錄下,Linux源代碼結(jié)構(gòu),Linux內(nèi)核結(jié)構(gòu)及移植,Linux內(nèi)核結(jié)構(gòu) Linux源代碼結(jié)構(gòu) Linux的移植 Linux內(nèi)核裁剪,26,04:17,27,Linux 移植:把 Linux 操作系統(tǒng)針對具體的目標平臺做必要改寫之后,安裝到該目標

14、平臺使其正確的運行起來。,Linux的移植,Linux的移植,Linux內(nèi)核的移植可以分為板級移植和片級移植。,板級移植:對于Linux發(fā)行版本中已經(jīng)支持的CPU通常只需要針對板級硬件進行適當?shù)男薷募纯伞?片級移植:對于Linux發(fā)行版本中沒有支持的CPU則需要添加相應CPU的內(nèi)核移植。,片級移植相對板級移植來說要復雜許多,目前采用的Linux 發(fā)行版本中已經(jīng)包含S3C2440X ARM920T處理器的移植包,因此,只需要在其上進行Linux板級移植的基本過程和方法。,04:17,29,1)交叉編譯環(huán)境的搭建。 2)修改相關的配置文件,如修改內(nèi)核目錄下的 makefile 文件中關于交叉編譯工

15、具相關的內(nèi)容,此后就可以使用這個makefile進行編譯了。 3)修改linux內(nèi)核源碼,主要是修改和CPU相關的部分。 4)內(nèi)核的裁剪,根據(jù)項目的需要裁剪內(nèi)核模塊。 5)內(nèi)核的編譯,將裁剪好的內(nèi)核進行編譯,生成二進制映像文件。 6)內(nèi)核的下載,將生成的二進制映像文件,燒寫到目標平臺。,Linux的移植,04:17,30,linux 的移植主要包含啟動代碼的修改,內(nèi)核的鏈接及裝入,參數(shù)傳遞,內(nèi)核引導幾個部分。 linux 內(nèi)核分為體系結(jié)構(gòu)相關部分和體系結(jié)構(gòu)無關部分。 在 Linux 啟動的第一階段,內(nèi)核與體系結(jié)構(gòu)相關部分(arch 目錄下)首先執(zhí)行,它會完成硬件寄存器設置,內(nèi)存映像等初始化工作

16、。然后把控制權(quán)轉(zhuǎn)給內(nèi)核中與系統(tǒng)結(jié)構(gòu)無關部分。 在移植工作中要改動的代碼主要集中在與體系結(jié)構(gòu)相關部分。,Linux的移植,Linux內(nèi)核結(jié)構(gòu)及移植,Linux內(nèi)核結(jié)構(gòu) Linux源代碼結(jié)構(gòu) Linux的移植 Linux內(nèi)核裁剪,31,04:17,32,Linux 內(nèi)核的裁剪與編譯看上去是個簡單的過程。只是對配置菜單的簡單選擇。 但是內(nèi)核配置菜單本身結(jié)構(gòu)龐大,內(nèi)容復雜。 熟悉與了解該菜單的各項具體含義就顯得比較重要。,Linux內(nèi)核裁剪,04:17,33,常用有如下幾種方式:,make config 進入命令行,逐行配置 make menuconfig menuconfig菜單 make xcon

17、fig xconfig菜單,Linux內(nèi)核裁剪,make config,04:17,35,make menuconfig,Linux內(nèi)核裁剪,04:17,36,make xconfig,Linux內(nèi)核裁剪,內(nèi)核配置原則:,大部分選項使用默認值,小部分根據(jù)用戶不同進行選擇。 與內(nèi)核關系緊密且經(jīng)常使用的部分功能代碼直接編譯到內(nèi)核中。 與內(nèi)核其他部分關系較遠且不經(jīng)常使用的部分功能代碼編譯成可加載模塊。有利于縮短內(nèi)核長度,減小內(nèi)核消耗的內(nèi)存。 不需要的功能不選,或使用默認值。,37,Linux內(nèi)核裁剪,Linux常用配置選項,系統(tǒng)及其存儲器配置,網(wǎng)絡支持,顯示器支持,觸摸屏支持,系統(tǒng)及其存儲器配置,在

18、System Type菜單中中進行配置,選擇系統(tǒng)類型 處理器型號,選擇處理器其它特性(USB支持等),網(wǎng)絡支持,在Networking options以及Network device support中進行配置,選擇支持TCP/IP協(xié)議,在Network device support配置中,添加選項Network device support,并在Ethernet(10 or 100Mbit)中選擇Other ISA cards,如下圖所示選擇NE2000/NE1000 support,采用RTL8019網(wǎng)卡芯片,為NE2000兼容網(wǎng)卡芯片,網(wǎng)絡支持,顯示器支持,在Character devic

19、es以及Console drivers中進行配置。 在Character devices配置中,添加選項Virtual terminal配置,如下圖所示。,Virtual terminal支持,顯示器支持,在Console drivers中添加Support Frame buffer devices配置,如采用256色STN顯示器,選擇8bpp支持,觸摸屏支持,在Character devices的Support S3C2440 TouchScreen子菜單中進行配置,選擇s3c2440觸摸屏支持,04:17,45,內(nèi)核的編譯,在完成內(nèi)核的裁減之后,內(nèi)核的編譯只要執(zhí)行以下幾條命令: (1)ma

20、ke clean 這條命令是在正式編譯你的內(nèi)核之前先把環(huán)境給清理干凈。有時你也可以用 make realclean 或 make mrproper 來徹底清除相關依賴,保證沒有不正確的.o 文件存在。 (2)make dep 這條命令是編譯相關依賴文件。 (3)make zImage 這條命令就是最終的編譯命令。有時可以直接用 make(2.6.X 版本上用)或 make bzImage(給 PC 機編譯大內(nèi)核時用)。 (4)make install 這條命令可以把相關文件拷貝到默認的目錄。當然在給嵌入式設備編譯時這步可以不要。因為具體的內(nèi)核安裝還需要你手工進行。,編譯Linux內(nèi)核,建立依賴

21、關系 make dep,編譯內(nèi)核,make 編譯內(nèi)核 make zImage 編譯壓縮核心(zImage) 編譯生成的Linux映像文件zImage通常保存在arch/arm/boot/目錄下,下載、運行和調(diào)試內(nèi)核,通過調(diào)試器下載內(nèi)核并運行,通過BOOTLOADER下載內(nèi)核到SDRAM中運行,通過BOOTLOADER將內(nèi)核燒寫到FLASH中,然后運行Linux,Linux內(nèi)核移植主要過程1,對于板級移植,內(nèi)核移植主要包括如下幾個部分:,內(nèi)核配置,包括板級包配置,體系結(jié)構(gòu)相關代碼修改,根據(jù)板級包的配置,修改相應的體系結(jié)構(gòu)相關代碼,包括: 壓縮核心啟動代碼:linux/arch/arm/boot/ 內(nèi)核啟動代碼:linux/arch/arm/kernel/ 板級相關代碼:linux/arch/arm/mach-s3c2440/,連接腳本 核心連接腳本:linux/arch/arm/vmlinux.lds 壓縮核心連接腳本:linux/arch/arm/boot/compressed/linux.lds,Linux內(nèi)核移植主要過程2,加

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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

提交評論