閱讀655 返回首頁    go 微軟 go windows


linux內核體係結構

linux內核第一記
 
1.linux體係結構

linux內核 - 毛毛蟲 - 毛毛雨的刻薄
 
從上圖可知,Linux分為:用戶空間和內核空間。內核空間和用戶空間是程序執行的兩種不同的狀態,通過係統調用和硬件中斷能夠完成從用戶空間到內核空間的轉移。
  www.2cto.com  
2.linux內核架構

linux內核 - 毛毛蟲 - 毛毛雨的刻薄
 
2.1係統調用接口(SCI)
SCI層為用戶空間提供了一套標準的係統調用函數來訪問Linux內核,搭起了用戶空間到內核的橋梁。
2.2進程管理(PM)
進程管理的重點是創建進程(fork,exec),停止進程(kill,exit),並控製他們之間的通信(singal或POSIX機製),進程管理還包括控製活動進程如何共享CPU(進程調度).。
 
2.3內存管理(MM)
內存管理的主要作用是控製多個進程安全的共享內存區域。
2.4網絡協議棧(NS)
網絡協議棧為Linux提供了豐富的網絡協議實現。
2.5虛擬文件係統(VFS)  www.2cto.com  
VFS隱藏各種文件係統的具體細節,為文件操作提供統一的接口。

linux內核 - 毛毛蟲 - 毛毛雨的刻薄
 
2.6設備驅動(DD)
Linux內核中有大量的代碼都在設備驅動程序中,他們控製特定的硬件設備。
2.7 Arch
Arch中包含內核所支持的每種CPU體係,在Arch目錄中,都有每種CPU體係對應的子目錄,子目錄中又包含boot,mm,kenerl等子目錄,分別控製係統引導,內存管理,係統調用等。如X86體係如下圖:
 
linux內核 - 毛毛蟲 - 毛毛雨的刻薄
 
linux內核第二記
 
目錄結構(一般修改Arch和Drivers目錄中的文件)
  www.2cto.com  
1.block目錄
部分塊設備驅動程序
2.crypto目錄
加密、壓縮、CRC校驗算法
3.documentation
內核的文檔
4.drivers目錄
設備驅動程序
5.fs目錄
存放各種文件係統的實現代碼。每個子目錄對應一中文件係統的實現,公用的源程序用於實現虛擬文件係統VFS
  www.2cto.com  
linux內核 - 毛毛蟲 - 毛毛雨的刻薄
 
6.include目錄
內核所需要的頭文件。與平台無關的頭文件在include/linux子目錄下,與平台相關的都文件則放在相應的子目錄中。
7.init目錄
內核初始化代碼
8.ipc目錄
進程間通信實現代碼
9.kenerl目錄
Linux大多數核心功能都在這個目錄實現(調度程序、進程控製、模塊化)。
10.lib目錄
庫文件代碼
11.mm目錄
mm目錄中的文件用於實現內存管理中與體係結構無關的部分
12.net目錄
網絡實現的協議代碼
  www.2cto.com  
linux內核 - 毛毛蟲 - 毛毛雨的刻薄

13.samples目錄
一些內核編程的範例
14.script目錄
配置內核的腳本
15.security目錄
SElinux的模塊
16.sound目錄
音頻設備的驅動程序
17.usr目錄
cpio命令實現
18.virt目錄
內核虛擬機
 

linux內核第三記
 
Linux內核配置
Linux內核具有可定製的優點,具體步驟如下:
 
1.清理臨時文件,中間文件和配置文件
·make clean:刪除大部分產生文件(如編譯中的.o文件)但是把配置保留下來。
·make mrproper:刪除所有產生文件並把配置文件也刪除了。
·make distclean:在make mrproper的基礎上,還要刪除編輯器文件和補丁文件。

linux內核 - 毛毛蟲 - 毛毛雨的刻薄
 
2.確定目標係統的軟硬件配置情況,比如CPU的型號,網卡的型號,所支持的網絡協議等。
 
3.使下列的命令之一配置內核:
 
·make config:基於文本模式的交互式配置(以提問的方式配置)。

linux內核 - 毛毛蟲 - 毛毛雨的刻薄
 
·make menuconfig:基於文本模式的菜單型配置(推薦使用)。

linux內核 - 毛毛蟲 - 毛毛雨的刻薄
 
·make oldconfig:使用已有的配置文件(.config),但是會詢問新增的配置選項。

linux內核 - 毛毛蟲 - 毛毛雨的刻薄
 
·make xconfig:圖形化的配置(需要安裝圖形化係統)
 
如果沒有安裝qt:  www.2cto.com  
sudo apt-get install libqt3-mt
sudo apt-get install libqt3-mt-dev
sudo make xconfig:

linux內核 - 毛毛蟲 - 毛毛雨的刻薄
 
在make menuconfig後,ls -a:注意多了一個.config文件

linux內核 - 毛毛蟲 - 毛毛雨的刻薄

linux內核 - 毛毛蟲 - 毛毛雨的刻薄
 
一般情況下都用make menuconfig:如上圖,y=*、n=[]、M,y或*代表的是將這個項目編譯到內核中,n或空為不選擇,M表示編譯成模塊。
 
[*]A.c---->A.o\
                        --->zimage(*要經曆編譯和連接)
[*]B.c---->B.o/
[M]D.c---->D.o(指編譯)
[]E.c---X(不編譯不連接)
 
配置項的選擇:
參見內核配置參考.doc
常常利用已有的內核配置參考進行修改。例如進入arm中的s3c2410的配置:
 
linux內核 - 毛毛蟲 - 毛毛雨的刻薄

linux內核 - 毛毛蟲 - 毛毛雨的刻薄
 
把該配置拷貝到liunx內核下的.config中,然後在此基礎上進行修改。
如:cp s3c2410_defconfig ../../../.config  www.2cto.com  
 
假如我要將我修改本身係統運行的內核:
 
linux內核 - 毛毛蟲 - 毛毛雨的刻薄
 
 

最後更新:2017-04-03 16:48:37

  上一篇:go 第II篇PCI Express體係結構概述
  下一篇:go 1.3 PCI總線的存儲器讀寫總線事務