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

Linux內核分析(一)html

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

今天咱們會分析到如下內容:git

1.      Linux體系結構簡介網絡

2.      Linux內核源碼簡介架構

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

 

l  Linux體系結構簡介spa

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

Linux能夠分爲兩部分,分別爲用戶空間和內核空間具體以下圖:3d

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

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文件

相關文章
相關標籤/搜索