天天看點

十五.linux開發之Kernel移植——話說linux核心有道雲筆記位址:一、Linux Kernel簡介二.核心和驅動的關聯三.linux核心的子產品化設計四.選擇合适版本的核心

有道雲筆記位址:

詳情看這裡連結,記錄太多,就不一一排版了。

http://note.youdao.com/noteshare?id=7cc3e91b91754d1ba42913229eb18689&sub=E4714EDA91904A59AF9460249A4E1B6F

一、Linux Kernel簡介

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

(2)作業系統本質上是一個程式,由很多個源檔案構成,需要編譯連接配接成作業系統程式

1、作業系統核心功能:

(1)記憶體管理。如果沒有作業系統,記憶體是需要程式自己來管理的。譬如在uboot中要使用記憶體的哪裡是自己随便用的,沒有注冊也沒有限制。這時候如果程式自己不小心把同一塊記憶體重複用了就會出現程式邏輯錯誤。系統大了之後(記憶體多了)記憶體管理非常麻煩;有了作業系統之後,作業系統負責管控所有的記憶體,所有的應用程式需要使用記憶體時都要向作業系統去申請和注冊,由作業系統的記憶體管理子產品來配置設定記憶體給你使用,這樣好處是可以保證記憶體使用不會沖突。

(2)程序排程。作業系統下支援多個應用程式同時運作(是以可以一邊聊QQ一邊看電影···),這是宏觀上的并行。實際上在單核心CPU上微觀上是不能并行的,宏觀上的并行就是作業系統提供的分時複用機制。作業系統的程序排程子產品負責在各個程序之間進行切換。

(3)硬體裝置管理。沒有作業系統時要控制任何硬體都要自己寫代碼,有了作業系統後作業系統本身會去控制各個硬體,應用程式就不用考慮硬體的具體細節了。作業系統的硬體裝置管理子產品就是驅動子產品。

(4)檔案系統。檔案系統是管理儲存設備的一種方式。儲存設備是由很多個扇區組成的,每個扇區有512/1024/2048/4096位元組,儲存設備要以扇區為機關進行讀寫。如果沒有檔案系統,程式要自己去讀寫扇區,就得記得哪個檔案在哪個扇區。有了檔案系統之後我們人不用再關注扇區,人隻用關注檔案系統中的目錄和檔案名,而不用管這個檔案在實體磁盤的哪個扇區。

2、作業系統擴充功能:

(1)協定棧

(2)有用的應用程式包。應用程式本身不屬于作業系統核心的一部分,應用程式是給人用的,面向某種功能的。譬如ping程式用來測試網絡是否聯通,ifconfig程式用來配置網卡。

3、核心和發行版的差別

差別:

(1)核心隻有一個。核心是作業系統核心的簡稱,核心負責實作作業系統的核心功能(資源管理子產品,譬如記憶體管理、排程系統······),核心不包括應用程式。是以說隻有核心人是沒法用的,因為人做任何事情都是通過相應的應用程式來完成的。

(2)Linux的發行版本是一些組織或廠家,将Linux kernel與外圍實用程式軟體和文檔包裝起來,并提供一些系統安裝界面和系統配置、設定與管理工具,就構成了一種發行版本(distribution)。

Linux的發行版本實質就是Linux kernel再加上外圍的實用程式組成的軟體包。

    目前最流行的幾個正式版本有:SUSE、RedHat、Fedora、 Debian、Ubuntu、CentOS、Gentoo,Mint等等,使用者可根據自己的經驗和喜好選用合适的Linux發行版。

4.什麼是 Linux kernel??

(轉載:http://blog.51cto.com/9291927/1793511)

linux核心下載下傳位址:www.kernel.org

 Linux kernel是一個一體化核心(monolithic kernel)系統,提供硬體抽象層、磁盤及檔案系統控制、多任務等功能的系統軟體,不是一套完整的作業系統。

十五.linux開發之Kernel移植——話說linux核心有道雲筆記位址:一、Linux Kernel簡介二.核心和驅動的關聯三.linux核心的子產品化設計四.選擇合适版本的核心

    核心空間與使用者空間是程式執行的兩種不同的狀态,通過系統調用和硬體中斷能夠完成從使用者控件到核心空間的轉移。

linux kernel架構

十五.linux開發之Kernel移植——話說linux核心有道雲筆記位址:一、Linux Kernel簡介二.核心和驅動的關聯三.linux核心的子產品化設計四.選擇合适版本的核心

wKiom1dx0QqR6iPkAAORvn7YUAs387.png

系統調用接口SCI:

        SCI層為使用者空間空間提供了一套标準的系統調用函數來通路linux核心,搭起了使用者空間到核心空間的橋梁。

程序排程管理PM:

    程序管理的重點是建立程序(fork, exec), 停止程序(kill, exit), 并控制它們之間的通信(signal或者POSIX機制). 程序管理還包括控制活動程序如何共享CPU,即程序排程。

記憶體管理MM:

    記憶體管理的主要作用是控制多個程序安全地共享記憶體區域

網絡協定棧:

    核心協定棧為linux提供了豐富的網絡協定實作。

Virtual File System:

        VFS隐藏各種檔案系統的具體細節,為檔案操作提供個統一的接口。

裝置驅動:

    裝置驅動子產品是linux kernel的一部分,是核心中的硬體裝置管理子產品。

5.如何學習 Linux kernel???

(1)、學習linux的思路

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

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

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

二.核心和驅動的關聯

1、驅動屬于核心的一部分

(1)驅動就是核心中的硬體裝置管理子產品

(2)驅動工作在核心态。

(3)驅動程式故障可能導緻整個核心崩潰

(4)驅動程式漏洞會使核心不安全

2、核心和應用的關系

(1)應用程式不屬于核心,而是在核心之上的

(2)應用程式工作在使用者态,是受限制的。

(3)應用程式故障不會導緻核心崩潰

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

(5)總結1:應用程式是最終目标

(6)總結2:核心就是為應用程式提供底層資源管理的服務員

3、核心和根檔案系統

(1)根檔案系統提供根目錄。

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

繼續閱讀