新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 學習Linux,這些內核常識你應該要知道

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

作者: 時間:2018-01-18 來源:網(wǎng)絡 收藏

  一、功能、發(fā)行版

本文引用地址:http://www.butianyuan.cn/article/201801/374602.htm

  1、到底什么是操作系統(tǒng)

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

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

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

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

  (1)內存管理

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

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

  (2)進程調度

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

  (3)硬件設備管理

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

  操作系統(tǒng)的硬件設備管理模塊就是驅動模塊。

  (4)文件系統(tǒng)

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

  3、操作系統(tǒng)擴展功能

  (1)協(xié)議棧

  (2)有用的應用程序包

  應用程序本身不屬于操作系統(tǒng)的一部分。

  應用程序是給人用的,面向某種功能的,譬如ping程序用來測試網(wǎng)絡是否聯(lián)通,ifconfig程序用來配置網(wǎng)卡。

  4、內核和發(fā)行版的區(qū)別

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

  內核負責實現(xiàn)操作系統(tǒng)的核心功能,內核不包括應用程序。

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

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

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

  二、內核和驅動的關聯(lián)

  1、學習linux的思路

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

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

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

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

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

  (2)驅動工作在內核態(tài)(cpu在跑操作系統(tǒng))(與用戶態(tài)(cpu在跑應用程序)的區(qū)別:權限不同)

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

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

  三、內核和應用程序、根文件系統(tǒng)的關聯(lián)

  1、應用和內核的關系

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

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

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

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

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

  2、內核和根文件系統(tǒng)

  (1)根文件系統(tǒng)提供根目錄;屬于內核?NO!

  (2)進程1存放在根文件系統(tǒng)中,進程1會使得內核態(tài)變?yōu)橛脩魬B(tài)。

  (3)內核啟動最后會去裝載根文件系統(tǒng);

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

  四、linux內核的模塊化設計

  1、什么是模塊化設計

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

  (2)模塊化設計就是內核中各個功能模塊在代碼上是彼此獨立的,譬如說調度系統(tǒng)和內存管理系統(tǒng)之間并沒有全局變量的互相引用,甚至函數(shù)互相調用也很少,就算有也是遵循一個接口規(guī)范的。模塊化設計的目的就是實現(xiàn)功能模塊的松耦合。

  2、模塊化設計的體現(xiàn)

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

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

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

  3、模塊化設計的好處

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

  (2)可擴展性(動態(tài)安裝卸載、新硬件支持);

  (3)利于協(xié)作;

  4、模塊化設計是一種普遍性的系統(tǒng)設計原則

  五、選擇合適版本的內核

  1、linux內核版本變遷簡史

  (1)linux0.01。初版

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

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

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

  (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版本內核講解



關鍵詞: Linux 內核

評論


相關推薦

技術專區(qū)

關閉