linux核心原始碼分析與探索01 預備知識

2021-09-23 13:29:12 字數 2166 閱讀 6942

傳統的作業系統,核心應具備多方便的功能或者成分,既包含用於管理屬於應用層的 程序 的成分,也包含為這些程序提供的各種服務的成分,如程序間通訊  裝置驅動 檔案系統等,核心中提佛那個各種服務的成分,與使用這些服務的程序之間形成了典型的 client-server 的關係,其實這些服務的提供者不一定都得留在核心中,他們本身也可以被設計並實現耨些服務程序,其中必須留在核心中的成分只有程序間通訊,如果把服務提供者從核心轉移到程序的層次上,那麼核心本身的結構就可以大大減小,而各個服務程序,既然從核心中游離出來,就可以單獨設計 實現 除錯,更重要的是,可以按需配置和啟動。基於這種想法,微核心應運而生。特別是對一些專用的系統。比如實時系統和嵌入式系統。但是微核心也優缺點,把服務都放在程序層次上,再通過程序間通訊-經常是報文傳遞-提供服務,會增加系統的執行開銷,降低效率。

與微核心對應,傳統核心結構都是單核心,或者成為一體化核心,通用的系統需要的服務面廣,一體化核心就更為合適。

傳統核心unix是封閉式的,如果在核心中增加乙個裝置--增加一種服務,做法是編寫這個裝置的驅動程式,並變動核心源程式中的某些設局結構--裝置表,再重新編譯整個核心,再重新引導整個系統。這樣做系統安全,但是太僵化。linux比unix進步,允許把裝置驅動程式在編譯時,靜態地連線在核心中,或者也可以在執行時安裝,或者執行時需要的話由系統自動安裝。這樣的模組依然執行在核心中,而不是像在微核心一樣作為單獨的程序執行。模組:就是裝置驅動程式。

linux最初是在intel 80386系列cpu架構上實現的,但是已經被移植到各種主要的cpu系列上,包括,alpha,m68k,mips,sparc,power pc等。pentium 奔騰ii均屬於i386系列。可以說linux核心是覆蓋面最廣的一體化核心。同時在同乙個系列的cpu上,linux還支援不同的系統結構,單cpu和多cpu都支援。接下來以單cpu講解為主,最後會有一節專門討論多cpu.

2023年發布了linux 的0.02版,各其他公司,發行linux,如red  hat,ubuntu等,只是在核心上整合了大量應用軟體:在安裝程式,安裝介面,軟體包多少,軟體包的安裝和管理,等方面不一致,其實**只有一種,那就是linux主持開發和維護的核心版本。不要把發行商的linux版本,和linux的核心版本混為一談,原則上全世界只有乙個linux.

linux核心的源**位於/usr/src/linux,核心原始碼結構:

linux 核心源**包含如下目錄。

● arch :包含和硬體體系結構相關的**,每種平台佔乙個相應的目錄,如i386、arm、

arm64、powerpc、mips 等。linux 核心目前已經支援30 種左右的體系結構。在arch

目錄下,存放的是各個平台以及各個平台的晶元對linux 核心程序排程、記憶體管理、

中斷等的支援,以及每個具體的soc 和電路板的板級支援**。

● block:塊裝置驅動程式i/o 排程。

● crypto:常用加密和雜湊演算法(如aes、sha 等),還有一些壓縮和crc 校驗演算法。

● documentation:核心各部分的通用解釋和注釋。

● drivers :裝置驅動程式,每個不同的驅動占用乙個子目錄,如char、block、net、

mtd、i2c 等。

● fs:所支援的各種檔案系統,如ext、fat、ntfs、jffs2 等。

● include:標頭檔案,與系統相關的標頭檔案放置在include/linux 子目錄下。

● init:核心初始化**。著名的start_kernel() 就位於init/main.c 檔案中。

● ipc:程序間通訊的**。

● kernel :核心最核心的部分,包括程序排程、定時器等,而和平台相關的一部分**

放在arch/*/kernel 目錄下。

● lib:庫檔案**。

● mm:記憶體管理**,和平台相關的一部分**放在arch/*/mm 目錄下。

● net:網路相關**,實現各種常見的網路協議。

● scripts:用於配置核心的指令碼檔案。

● security:主要是乙個selinux 的模組。

● sound:alsa、oss 音訊裝置的驅動核心**和常用裝置驅動。

● usr:實現用於打包和壓縮的cpio 等。

● include:核心api 級別標頭檔案。

2.x86系列定址方式

Linux核心 fork 原始碼分析

核心版本 linux 4.4.18 原始碼位置 這裡 接著 呼叫copy process 它設定了程序描述符以及子程序所需的任何其他核心資料結構。ftrace graph init task 初始化ftrace,核心追蹤函式呼叫。rt mutex init task 初始化鎖。copy creds ...

原始碼分析 Linux 核心工具Sparse

sparse誕生於2004年,是由linux之父開發的,目的就是提供乙個靜態檢查 的工具,從而減少linux核心的隱患。起始,在sparse之前已經有了乙個不錯的 靜態檢查工具 swat 只不過這個工具不是免費軟體,使用上有一些限制。所以linus自己開發了乙個靜態檢查工具。核心 中有乙個對spar...

linux核心原始碼目錄結構分析

注 本文是學習朱老師課程整理的筆記,基於linux2.6.35.7和九鼎x210bv3s開發板進行移植。arch。arch是architecture的縮寫。arch目錄下是好多個不同架構的cpu的子目錄,譬如arm這種cpu的所有檔案都在arch arm目錄下,x86的cpu的所有檔案都在arch ...