《LINUX內核設計與實現》第1、二章學習總結

第一章 Linux內核簡介html

(一)Unix是一個強大、健壯和穩定的操做系統,特色是:linux

  1. Unix很簡潔,僅僅提供幾個幾百個系統調用而且有一個很是明確的設計目的
  2.  在Unix中,全部的東西都被看成文件對待,經過一套相同的系統調用接口來進行:open(),read(),write(),lseek(),close()
  3. Unix的內核和相關的系統工具軟件是用C語言編寫而成
  4.  Unix的進程建立很是迅速
  5. Unix系統具有清晰的層次化結構

(二)操做系統和內核簡介:操做系統是指在整個系統中負責完成最基本功能和系統管理的那些部分。git

  1.  內核是管理者或者是操做系統核心
  2.  在系統中運行的應用程序經過系統調用來與內核通訊
  3. 內核還要負責管理系統的硬件設備

(三)處理器在任何指定時間點上的活動範圍能夠歸納爲下列三者之一:編程

 

  1. 運行於用戶空間,執行用戶進程
  2. 運行於內核空間,處於進程上下文,表明某個特定的進程執行
  3. 運行於內核空間,處於中斷上下文,與任何進程無關,處理某個特定的中斷

(四)Linux內核和傳統UNIX內核特色的比較(Linux是一個單內核)安全

  1.  Linux支持動態加載內核模塊
  2. Linux支持對稱多處理(SMP)機制
  3.   Linux內核能夠搶佔
  4.  Linux內核並不區分線程和其餘的通常進程

(五)Linux內核版本ruby

版本號是偶數,穩定版;版本號是奇數,開發版
enter description here

網絡

 

第二章 從內核出發併發

(一)獲取內核源碼異步

1. Git是一種開源的分佈式版本控制工具。git能夠下載和管理Linux的源代碼
Linux獲取最新提交到版本樹的一個副本
$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
下載代碼後,更新到最新分支
$ git pull

2.安裝內核源代碼

若是壓縮形式爲bzip2:$ tar xvjf linux-x.y.z.tar.bz2分佈式

若是壓縮形式爲zip:$ tar xvzf linux-x.y.z.tar.gz

3. 使用補丁:$ patch -p1 < ../patch-x,y,z

(二)內核源碼結構的根目錄及其子目錄

目 錄 描 述
arch 特定體系結構的代碼
block 塊設備I/O層
crypo 加密API
Documentation 內核源碼文檔
drivers 設備驅動程序
firmware 使用某些驅動程序而須要的設備固件
fs VFS和各類文件系統
include 內核頭文件
init 內核引導和初始化
ipc 進程間通訊代碼
kernel 像調度程序這樣的核心子系統
lib 一樣內核函數
mm 內存管理子系統和VM
net 網絡子系統
samples 示例,示範代碼
scripts 編譯內核所用的腳本
security Linux 安全模塊
sound 語音子系統
usr 早期用戶空間代碼(所謂的initramfs)
tools 在Linux開發中有用的工具
virt 虛擬化基礎結構

 

 

(三)編譯內核

1.配置內核
基於字符頁面的命令行工具    make config
基於圖形界面工具     make menuconfig
基於默認配置     make defconfig 
驗證和更新配置    make oldconfig 
  • Makefile:根據配置的狀況,構造出須要編譯的源文件列表,而後分別編譯,並把目標代碼連接到一塊兒,最終造成 Linux 內核二進制文件。
  • config.in:內核配置文件,給用戶提供配置選擇的功能。
  • .config:用戶用來存放內核配置後結果的文件。
  • make:默認的Makefile自動化編譯。
2. 減小垃圾信息
3.衍生多個編譯做業
make程序能把編譯過程拆分紅多個並行的做業。其中每一個做業獨立併發地運行,有助於加快多處理器系統上的編譯過程,也有利於改善處理器的利用率。默認狀況下,make只衍生一個做業。
$ make > ../detritus #將錯誤報告和警告信息重定向到文件中 $ make > /dev/null #將無用的輸出信息重定向到/dev/null中 - /dev/null:空設備,輸入的信息直接丟棄

$ make -jn #以多個做業編譯內核,- j:指定同時執行多任務,- n:要衍生出的做業數
4. 安裝新內核
make modules_install #把全部已編譯的模塊安裝到正確的主目錄/lib/modules下
System.map文件:編譯時在內核代碼樹的根目錄下建立的用來將內核符號與它們的起始地址對應起來。符號對照表,

(四)Linux內核開發的的特色

(1)       Linux內核編成時不能訪問C庫

(2)       Linux內核編程時必須使用GNU C

(3)       Linux內核編程時缺少像用戶空間那樣的內存保護機制

(4)       Linux內核編程時浮點數很難使用

(5)       內核只有一個很小的定長堆棧

(6)       因爲內核支持異步中斷、搶佔式和SMP,所以必須時刻注意同步和併發

(7)       要考慮可移植性的重要性

 

 學習體會

       本次學習了LINUX內核的一些基本常識,從何處獲取源碼,如何編譯,如何安裝內核。。。。。。。。

 

 

參考資料:

(1)《Linux內核設計與實現》課本一二章

(2)http://www.cnblogs.com/hyq20135317/p/5277142.html  博客

相關文章
相關標籤/搜索