序
自從2019 年Linux 社區宣佈了Linux 5.0 的全新版本之後,Linux 社區邁向了全新的發展。2019 年5 月,紅帽公司宣佈了RHEL8 正式發佈,採用Linux 4.18 核心。2020 年4 月,Canonical 公司發佈了全新的Ubuntu Linux 20.04 版本,並且提供長達5 年的支援,這個版本採用了最新的Linux 5.4 核心。從Linux
4.0 核心到目前的Linux 5.4 核心,其間經歷了20 多個版本,加入了很多新特性並且很多核心的設計與實現已經發生了巨大變化。本書由笨叔和陳悅編寫。陳悅第一時間在「作業系統」課程中採用本書作為實驗教材。獲得了非常好的效果。
✤ 本書特色
.基於 Linux 5.0 核心全面修訂。
基於Linux 5.0 核心對第1 版的內容做了全面的修訂和更新。
.以 ARM64 架構作為藍本。
很多公司在探索使用ARM64 架構來建構自己的硬體生態,包括手機晶片、伺服器晶片等,本書基於ARM64 處理器架構介紹Linux 核心的入門與實踐。
.突出動手實驗和能力訓練。
本書擁有不少實驗,透過20 多個實驗逐步實現一個有一定使用價值的小作業系統,從而達到能力訓練的目的。
.以樹莓派作為實驗開發板。
不少讀者已經購買了樹莓派,本書以樹莓派作為硬體開發平台,讀者可以在樹莓派上做實驗。
.循序漸進地說明 Linux 核心入門知識。
Linux 核心龐大而複雜,任何一本厚厚的Linux 核心書都可能會讓人看得昏昏欲睡。因此,對初學者來說,Linux 核心的入門需要循序漸進,一步一個腳印。初學者可以從如何編譯Linux 核心開始入門,學習如何偵錯Linux 核心,動手編寫簡單的核心模組,逐步深入Linux核心的核心模組。
.突出動手實驗。
對於初學者,瞭解作業系統最好的辦法之一就是動手實驗。因此,本書在每章中都設定了幾個經典的實驗,讀者可以在學習基礎知識後透過實驗來加深瞭解。
.反映 Linux 核心社區新發展。
除了介紹Linux 核心的基本理論之外,本書還介紹了當前Linux 社區中新的開發工具和社區運作方式,比如如何使用Vim 8 閱讀Linux 核心程式,如何使用git 工具進行社區開發,如何參與社區開發等。
.結合 QEMU 偵錯環境說明,並列出大量核心偵錯技巧。
在學習Linux 核心時,大多數人希望使用功能全面且好用的圖形化介面來單步偵錯核心。本書會介紹一種單步偵錯核心的方法—基於Eclipse + QEMU + GDB。另外,本書提供首個採用"-O0" 編譯和偵錯Linux 核心的實驗,可以解決偵錯時出現的游標亂跳和
等問題。本書也會介紹實際工程中很實用的核心偵錯技巧,例如ftrace、systemtap、記憶體檢測、鎖死檢測、動態輸出技術等,這些都可以在QEMU + ARM64 實驗平台上驗證。
✤ 本書主要內容
Linux 核心涉及的內容包羅萬象,但本書重點說明Linux 核心的入門和實踐。
本書共有16 章。
第1 章首先介紹什麼是Linux 系統以及常用的Linux 發行版本,然後介紹巨核心和微核心之間的區別,以及如何學習Linux 核心等內容。該章還包括如何安裝Linux 系統、如何編譯Linux 核心等實驗。
第2 章介紹GCC 工具、Linux 核心常用的C 語言技巧、Linux 核心常用的資料結構、Vim 工具以及git 工具等內容。
第3 章主要介紹ARM64 架構以及實驗平台樹莓派的相關知識。 第4 章主要說明核心的設定和編譯技巧,實驗包括使用QEMU 虛擬機器來編譯和偵錯ARM 的Linux 核心。
第5 章從一個簡單的核心模組入手,說明Linux 核心模組的編寫方法,實驗圍繞Linux 核心模組展開。
第6 章從如何編寫簡單的字元裝置入手,介紹字元裝置驅動的編寫。
第7 章主要說明系統呼叫的基本概念。
第8 章討論處理程序概述、處理程序的創建和終止、處理程序排程以及多核心排程等內容。
第9 章介紹從硬體角度看記憶體管理、從軟體角度看記憶體管理、實體記憶體管理、虛擬記憶體管理、缺頁異常、記憶體短缺等內容,以及多個與記憶體管理相關的實驗。
第 10 章說明原子操作、記憶體屏障、迴旋栓鎖機制、號誌、讀寫入鎖、RCU、等待佇列等內容。
第11 章介紹Linux 核心中斷管理機制、軟體中斷、tasklet 機制、工作隊列機制等內容。
第12 章討論printk() 輸出函數、動態輸出、proc、debugfs、ftrace、分析Oops 錯誤、perf 性能分析工具、記憶體檢測,以及使用kdump 工具解決當機問題等內容,並介紹偵錯和性能最佳化方面的18 個實驗。
第13 章說明開放原始碼社區、如何參與開放原始碼社區、如何提交更新、如何在Gitee 中創建和管理開放原始碼專案等內容。
第14 章介紹檔案系統方面的知識,包括檔案系統的基礎知識、虛擬檔案系統層、檔案系統的一致性、一次寫入磁碟的全過程、檔案系統實驗等內容。
第 15 章介紹虛擬化與雲端運算方面的入門知識,包括 CPU 虛擬化、記憶體虛擬化、I/O 虛擬化、Docker、Kubernetes 等方面的知識。
第16 章透過20 多個實驗來啟動讀者實現一個小作業系統,並介紹開放性實驗。讀者可以根據實際情況來選做部分或全部實驗。
由於作者知識水準有限,書中難免存在紕漏,敬請各位讀者批評指正。
關於本書的任何問題請發送郵件到
[email protected]。
✤ 繁體中文出版說明
本書原作者為中國大陸人士,使用簡體中文撰寫,文中少部分圖例無繁體中文版對應產品,為維持全書完整性,維持簡體中文圖例,請讀者對照上下文閱讀。
另全書的執行環境使用優麒麟Linux 20.04 作業系統,優麒麟Linux20.04 為Ubuntu 開發公司Canonical 所開發之中文化之Ubuntu Linux 20.04,和Ubuntu Linux 20.04 完全相容,讀者也可以使用Ubuntu 20.04來進行書中的實驗。