主要內容:
linux核心基本知識
www.kernel.org
git clone git:
git pull
核心發布:
patch -p1 < ../patch-x.y.z
目錄說明
arch
特定體系結構的**
block
塊裝置i/o層
crypo
加密api
documentation
核心原始碼文件
drivers
裝置驅動程式
firmware
使用某些驅動程式而需要的裝置韌體
fsvfs和各種檔案系統
include
核心標頭檔案
init
核心引導和初始化
ipc程序間通訊**
kernel
像排程程式這樣的核心子系統
lib同樣核心函式
mm記憶體管理子系統和vm
net網路子系統
samples
示例,示範**
scripts
編譯核心所用的指令碼
security
linux 安全模組
sound
語音子系統
usr早期使用者空間**(所謂的initramfs)
tools
在linux開發中有用的工具
virt
虛擬化基礎結構
copying:核心許可證
credits:核心開發者列表
maintainers:維護者列表
makefile:核心makefile
(1)配置項:
(2)配置 make menuconfig
(3)編譯 make
(1)對於核心來說,哪怕是乙個c庫的子集都太大太低效。
(2)大部分常用的c庫函式在核心中都實現了,如操作字串的函式組位於lib/string.c檔案中。只要包含即可。
(3)標頭檔案
基本標頭檔案在核心目錄下的include中,--》 include/linux/inotify.h
體系結構相關的標頭檔案在arch/arm/include/asm中,核心通過asm引用。
(4)printk()函式
把格式化好的字串拷貝到核心日誌緩衝區上。syslog程式就可以通過讀取該緩衝區來獲取核心資訊。
printk(kern_err "this is a error \n");
(1)linux核心是用c語言寫的。核心不完全符合ansi c標準。
(2)內聯函式:
函式會在呼叫的地方展開,消除函式呼叫和返回所帶來的開銷。
c99和gun c都支援內聯函式
什麼時候用:對時間要求高,本身長度又比較短的函式定義為內聯函式。
定義形式:static inline void wolf(),必須在使用前定義(一般在標頭檔案中定義)。
(3)內聯彙編
核心使用彙編+c實現,偏向體系結構底層或者時間要求高的用彙編實現。
(4)分支宣告
likely() 、unlikely()
(1)使用者程式非法記憶體訪問,核心會發現錯誤,傳送sigsegv訊號,並結束整個程序。
(2)核心錯誤會導致oops
核心需要特性都要求能夠併發的訪問共享資料。要求存在同步機制不出現競爭條件:
大部分c**應該與體系結構無關
核心擁有系統最高的管理權
補充學習:
(1)libc庫
libc是s
tantard c library的簡稱,它是符合ansi c標準的
乙個標準函式庫
。libc庫提供c語言中所使用的巨集,型別的定義,字串操作符,數學計算函式以及輸入輸出函式等。正如ansi c是c語言的標準一樣,libc只是乙個函式庫標準,每個作業系統都會按照該標準對標準庫進行具體實現。通常我們所說的libc是特指某個作業系統的標準庫,比如:在linux作業系統下所說的libc即glibc。glibc是類unix作業系統中使用最廣泛的libc庫,它的全稱是gnu c library.
(2)syslog程式
syslog是linux系統預設的日誌守護程序
。預設的主配置檔案和輔助配置檔案分別是/etc/syslog.conf和/etc/sysconfig/syslog檔案。通常,syslog 接受來自系統的各種功能的資訊,每個資訊都包括重要級。/etc/syslog.conf 檔案通知 syslogd 如何根據裝置和資訊重要級別來報告資訊。
(3)gun c
gnu計畫,又稱革奴計畫,是由richard stallman在2023年9月27日公開發起的。它的目標是建立一套完全自由的作業系統。它在編寫linux的時候自己製作了乙個標準成為 gnu c標準。ansi 美國國家標準協會,它對c做的標準ansi c標準後來被國際標準協會接收成為 標準c 所以 ansi c 和標準c是乙個概念。
glibc和libc都是linux下的c函式庫,
libc是linux下的ansi c的函式庫;
glibc是linux下的gun c的函式庫;
ansi c和gnu c有什麼區別呢?
ansi
c是基本的c語言函式庫,包含了c語言最基本的庫函式。
而gnu
c函式庫是一種類似於第三方外掛程式的東西,由於linux是用c語言寫的,所以linux的一些操作是用c語言實現的,所以gun組織開發了乙個c語言的庫.
Linxu核心設計與實現 第5章 系統呼叫
使用者程序與核心互動的介面,使應用程式受限的訪問硬體裝置,提供了建立新程序並與已有程序通訊的機制,也提供了申請作業系統其它資源的能力。應用程式發出請求,核心來滿足這些請求,或者返回乙個錯誤。1 系統呼叫在使用者空間和硬體裝置之間新增了乙個中間層 為使用者空間提供抽象的介面 保證了系統的穩定與安全 2...
Linxu核心設計與實現 第4章 程序排程
主要內容 1 程序排程 是確保核心穩定工作的乙個核心子系統。在可執行態程序之間分配有限的處理器資源的核心子系統。2 作用 程序排程決定將哪個程序投入執行,何時執行,執行多長時間。3 效果 通過合理的排程,系統資源才能最大限度的發揮,多程序才會有併發執行的效果。4 限制 只要有可執行的程序,那麼總會有...
《Linux核心設計與實現》 第4章(程序排程)
排程程式 在可執行態程序之間分配有限處理器時間資源的核心子系統 多工作業系統 同時併發地互動執行多個程序的作業系統 linux提供了搶占式的多工模式,對程序強制的掛起動作即搶占 程序可分為 i o消耗型 和 處理器消耗型 i o消耗型指程序的大多數時間用來提交i o請求或等待i o請求 處理器消費型...