當前位置:
首頁 > 科技 > 學習Linux,這些內核常識你應該要知道

學習Linux,這些內核常識你應該要知道

一、內核功能、內核發行版

1、到底什麼是操作系統

(1)linux、windows、android、ucos就是操作系統;

(2)操作系統本質上是一個程序,由很多個源文件構成,需要編譯連接成操作系統程序(vmlinz、zImage);

(3)操作系統的主要作用就是管理計算機硬體,給應用程序提供一個運行環境。

2、操作系統核心功能(管理資源)

(1)內存管理

如果沒有操作系統,內存需要程序自己來管理。譬如在uboot中要使用哪塊內存,由程序自己決定的,沒有註冊也沒有限制。此時如果程序不小心把同一塊內存重複使用,就會出現程序邏輯錯誤。

有了操作系統之後,操作系統負責管控所有的內存。應用程序需要使用內存時,都要向操作系統去申請和註冊,由操作系統的內存管理模塊來分配內存。這樣好處是可以保證內存使用不會衝突。

(2)進程調度

操作系統下支持多個應用程序同時運行,這是宏觀上的並行。實際上在單核心CPU上微觀上是不能並行的,宏觀上的並行就是操作系統提供的分時復用機制。操作系統的進程調度模塊負責在各個進程之間進行切換。

(3)硬體設備管理

沒有操作系統時,控制任何硬體都要自己寫代碼,有了操作系統後操作系統本身會去控制各個硬體,應用程序就不用考慮硬體的具體細節了。

操作系統的硬體設備管理模塊就是驅動模塊。

(4)文件系統

文件系統是管理存儲設備的一種方式。存儲設備由很多扇區組成,每個扇區有512/1024/2048/4096位元組,存儲設備以扇區為單位進行讀寫。如果沒有文件系統,程序要自己去讀寫扇區,就得記得哪個文件在哪個扇區。有了文件系統之後,我們不用再關注某個文件在物理磁碟的哪個扇區,只用關注文件系統中的目錄和文件名。

3、操作系統擴展功能

(1)協議棧

(2)有用的應用程序包

應用程序本身不屬於操作系統內核的一部分。

應用程序是給人用的,面向某種功能的,譬如ping程序用來測試網路是否聯通,ifconfig程序用來配置網卡。

4、內核和發行版的區別

(1)內核是操作系統內核的簡稱。

內核負責實現操作系統的核心功能,內核不包括應用程序。

因此只有內核是無法使用的,因為做任何事情都是通過相應的應用程序來完成的。

賣操作系統的人把內核和一些常用的應用程序打包在一起提供給普通用戶,這就是操作系統的發行版(也就是普通意義上的操作系統)。

(2)內核只有一個(www.kernel.org),發行版有很多(集成不同的應用程序,譬如ubuntu、redhat、suse、centos……)。

二、內核和驅動的關聯

1、學習linux的思路

(1)對龐大的整體要有個認識。學習路線就是先建立框架和整體,然後逐漸去學習各個細節部分,逐步細化。

(2)對各分層的作用要清楚。

(3)對層次間的關聯和互相調用要理解。

2、驅動屬於內核的一部分

(1)驅動就是內核中的硬體設備管理模塊,屬於發展非常活躍的部分。

(2)驅動工作在內核態(cpu在跑操作系統)(與用戶態(cpu在跑應用程序)的區別:許可權不同)

(3)驅動程序故障可能導致整個內核崩潰。

(4)驅動程序漏洞會使內核不安全。

三、內核和應用程序、根文件系統的關聯

1、應用和內核的關係

(1)應用程序不屬於內核,而是在內核之上的;

(2)應用程序工作在用戶態,是受限制的;

(3)應用程序故障不會導致內核崩潰;

(4)應用程序通過內核定義的API介面來調用內核工作

(5)總結:應用程序是最終目標,內核就是為應用程序提供底層資源管理的服務員

2、內核和根文件系統

(1)根文件系統提供根目錄;屬於內核?NO!

(2)進程1存放在根文件系統中,進程1會使得內核態變為用戶態。

(3)內核啟動最後會去裝載根文件系統;

(4)總結:根文件系統為操作系統啟動提供了很多必備的資源,如根目錄、進程1。

四、linux內核的模塊化設計

1、什麼是模塊化設計

(1)因為linux內核很龐大,代碼量很大、東西很多,如果設計時完全設計成一體(各個文件、各個函數之間緊耦合),複雜度超出了人所能理解的範圍。所以模塊化設計是一種必要。

(2)模塊化設計就是內核中各個功能模塊在代碼上是彼此獨立的,譬如說調度系統和內存管理系統之間並沒有全局變數的互相引用,甚至函數互相調用也很少,就算有也是遵循一個介面規範的。模塊化設計的目的就是實現功能模塊的松耦合。

2、模塊化設計的體現

(1)配置時可裁剪。linux內核在編譯之前可以進行配置,配置時可以選擇將組成內核的成千上萬個模塊每一個要或者不要。要了之後還有更多的一些細節的配置。

(2)模塊化編譯和安裝。為了操作方便,從靜態的升級逐漸變成了動態的升級(不需要重啟系統,更不需要重新燒錄系統)。這種動態的升級也是由模塊化來支持的。

(3)源碼中使用條件編譯。這種在uboot中已經見過了。

3、模塊化設計的好處

(1)功能可裁剪、靈活性;

(2)可擴展性(動態安裝卸載、新硬體支持);

(3)利於協作;

4、模塊化設計是一種普遍性的系統設計原則

五、選擇合適版本的內核

1、linux內核版本變遷簡史

(1)linux0.01。初版

(2)linux0.11。很多講linux內核源代碼解析的書都是以這個版本為原本來講。《圖解linux內核設計的藝術》

(3)linux2.4。比較接近現代的版本,很多經典的書都是以2.4版本內核為參照的,譬如《LDD3》。

linux2.4的晚期內核在前幾年還會經常碰到有用的。

(4)linux2.6早期。2.6的早期和2.4晚期內核挺像的。

(5)linux2.6晚期。2.6的晚期內核較早期內核有一些改變,尤其是驅動相關的部分和一些頭文件的位置。2.6的晚期內核目前還算是比較主流。

(6)linux3.x 4.x

2、如何選擇合適的內核版本

(1)並不是越新版本的內核越好;

(2)選擇SoC廠家移植版本會減少工作量。

3、S5PV210適用的內核版本

(1)2.6.35.7 + android2.3/QT4.8.3

(2)3.0.8 + android4.0

4、本課程使用2.6.35.7版本內核講解

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 電子產品世界 的精彩文章:

藍牙技術的升級和分代史

TAG:電子產品世界 |