Linux內核分析(一)---linux體系簡介|內核源碼簡介|內核配置編譯安裝


Linux內核分析(一)

從本篇博文開始我將對linux內核進行學習和分析,整個過程必將十分艱辛,但我會堅持到底,同時在博文中如果那些地方有問題還請各位大神為我講解。

今天我們會分析到以下內容:

1.      Linux體系結構簡介

2.      Linux內核源碼簡介

3.      Linux內核配置、編譯、安裝

 

l  Linux體系結構簡介

1.       Linux體系結構(linux系統構成)

Linux可以分為兩部分,分別為用戶空間和內核空間具體如下圖:

a)        用戶空間包括:用戶的應用程序、C

b)        內核空間包括:系統調用接口、內核(狹義內核)、平台架構相關的代碼

2.       為什么要分為內核空間和用戶空間

我們在分析u-boot的時候就說到過,我們的cpu在不同的工作模式下可以訪問的寄存器是不一樣的,所以為了保護我們的操作系統,避免用戶程序將內核搞崩,所以進行了內核空間和用戶空間的划分。

a)        Arm處理器工作模式划分:usrFIQIRQsvcabtundsys(具體介紹在http://www.cnblogs.com/wrjvszq/p/4199682.html

b)        X86處理器工作模式划分:Ring0Ring3Ring0下可以執行特權指令,可以訪問IO設備,Ring3則有很多的限制

注:我們可以通過系統調用硬件中斷來完成用戶空間到內核空間的轉移

3.       Linux內核結構(廣義內核)

Linux內核由七個部分構成,具體如下圖:

a)        系統調用接口(SCI):openreadwrite等系統調用

b)        進程管理(PM):創建進程、刪除進程、調度進程等

c)        內存管理(MM):內存分配、管理等

d)        虛擬文件系統(VFS):為多種文件系統提供統一的操作接口

e)        網絡協議棧:提供各種網絡協議

f)         CPU架構相關代碼(Arch):為的是提高至移植性

g)        設備驅動程序(DD):各種設備驅動,占到內核的70%左右代碼

l  Linux內核源碼簡介

1.       源碼獲取

Linux內核獲取有兩種方法,一種是在www.kernel.org 直接獲取,另一種是使用git獲取(具體方法參考網絡)。

2.       源碼目錄簡介

其源碼主要有以下目錄(介紹重要目錄):

a)        Arch目錄:存放處理器相關的代碼。下設子目錄,分別對應具體的CPU,每個子目錄有bootmm,以及kernel三個子目錄,分別對應系統引導以及存儲管理,和系統調用

b)        Include目錄:內核所需要的大部分頭文件目錄。與平台無關的在include/linux子目錄下,與平台相關的則放在include相應的子目錄中。

c)        fs目錄:存放各種文件系統的實現代碼。

d)        init目錄:init子目錄包含核心的初始化代碼(不是系統的引導代碼)。其包含兩個文件main.cversion.c,可以用來研究核心如何工作。

e)        ipc目錄:包含核心進程間的通信代碼。

f)         kernel目錄:包含內核管理的核心代碼。與硬件相關代碼放在arch/*/kernel目錄下。

g)        mm目錄:包含了所有的內存管理代碼。與硬件相關的內存管理代碼位於arch/*/mm目錄下。

h)        scripts目錄:包含用於配置核心的腳本文件。

i)          lib目錄:包含了核心的庫代碼,與硬件相關的庫代碼被放在arch/*/lib/目錄下

l  Linux內核配置、編譯、安裝

1.       X86配置

Linux內核的編譯有兩種方法,具體如下:

a)        交互式:在內核頂層的目錄下運行make config,按照提示一步一步的按照自己的需求對內核進行配置。

b)        菜單式:在內核頂層的目錄下運行make menuconfig,菜單式的按照自己的需求對內核進行配置。

2.       X86編譯

Linux內核的編譯要經過以下步驟,具體如下:

1.        內核編譯:linux內核的編譯有以下兩種方法。

n  make zImage編譯出的內核小於512k(老版本內核)

n  make bzImage通用編譯命令

注:在以上兩個命令中加V=1可查看編譯過程中的詳細信息

2.        內核模塊編譯:執行make modules編譯內核模塊。

3.        內核模塊安裝:執行make modules_install將編譯好的內核模塊復制到當前系統的/lib/modules下的**目錄下。

4.        內核模塊打包:執行mkinitrd initrd-$version $version對內核模塊進行打包,其中initrd-$version表示要打包為的文件的名字,$version表示要打包的目錄即我們上一步生成的目錄。

3.       X86安裝

Linux內核的安裝要經過以下步驟,具體如下:

a)        拷貝內核:復制1編譯出來的內核映像到啟動目錄cp arch/$cpu/boot/bzImage1編譯出來的bzimage/boot/vmlinuz-$version

b)        拷貝內核模塊文件:執行cp initrd-$version4生成的文件) /boot/ 4生成的文件拷貝到boot

c)        修改啟動配置文件:修改/etc/grub.conf文件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM