是該好好開始學Linux了!從最紅的Ubuntu Linux動手。
高手不學操作和使用,直接從核心開始,本書甚至教你自己開發一個Linux OS。
想成為真正的作業系統大師,充分了解系統底層的架構,在封閉的Microsoft Windows系統中是無法完成的。只有真正深入Linux中,弄髒你的手,不斷撞牆,不斷打怪,你才能越來越強。但在這看似困難的路途上,如果有一本攻略,幫你避開地雷,讓你能走捷徑,把試誤的時間節省下來,這樣效率才高。
本書就是這樣的一本書,本書將Linux系統方面的基礎原理與實驗相互融合,有助讀者深入瞭解Linux系統的原理和精髓,掌握核心技術和方法,提高分析問題與解決問題的能力。
本書特色突出、內容新穎,除了從核心講解之外,更搭配了完整的實驗環境,並且還兼顧了x86和ARM架構,更可以讓你用樹莓派實作一個完整的OS,在玩樂中學Linux,不但有成就感,更讓你在談笑之間,回頭一看,自己已成為Linux大師!
本書特色
.循序漸進地說明 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書籍,如。建立了「奔跑吧Linux社區」,為廣大Linux愛好者佈道。
陳悅
Linux內核愛好者,主要負責電腦資訊方面的「操作系統」、「彙編語言」與「電腦組成原理」等課程的教學與研究。
目錄
01 Linux 系統基礎知識
1.1 Linux 系統的發展歷史
1.2 Linux 發行版本
1.3 Linux 核心介紹
1.4 如何學習Linux 核心
1.5 Linux 核心實驗入門
02 Linux 核心基礎知識
2.1 Linux 常用的編譯工具
2.2 Linux 核心中常用的C 語言技巧
2.3 Linux 核心中常用的資料結構和演算法
2.4 Vim 工具的使用
2.5 git 工具的使用
2.6 實驗
03 ARM64 架構基礎知識
3.1 ARM64 架構介紹
3.2 ARMv8 暫存器
3.3 A64 指令集
3.4 ARM64 異常處理
3.5 ARM64 記憶體管理
3.6 實驗平台:樹莓派
04 核心編譯和偵錯
4.1 核心設定
4.2 實驗4-1:透過QEMU 虛擬機器偵錯ARMv8 的Linux 核心
4.3 實驗4-2:透過Eclipse + QEMU 單步偵錯核心
05 核心模組
5.1 從一個核心模組開始
5.2 模組參數
5.3 符號共用
5.4 實驗
06 簡單的字元裝置驅動
6.1 從一個簡單的字元裝置開始
6.2 字元裝置驅動詳解
6.3 misc 機制
6.4 一個簡單的虛擬裝置
6.5 阻塞I/O 和非阻塞I/O
6.6 I/O 多工
6.7 增加非同步通知
6.8 本章小結
07 系統呼叫
7.1 系統呼叫的概念
7.2 實驗
08 處理程序管理
8.1 處理程序
8.2 處理程序的創建和終止
8.3 處理程序排程3
8.4 多核心排程
8.5 實驗
09 記憶體管理
9.1 從硬體角度看記憶體管理
9.2 從軟體角度看記憶體管理
9.3 實體記憶體管理
9.4 虛擬記憶體管理
9.5 缺頁異常
9.6 記憶體短缺
9.7 記憶體管理記錄檔資訊以及偵錯資訊
9.8 記憶體管理實驗
10 同步管理
10.1 原子操作與記憶體屏障
10.2 迴旋栓鎖機制
10.3 號誌
10.4 互斥鎖
10.5 讀寫鎖
10.6 RCU
10.7 等待佇列
10.8 實驗
11 中斷管理
11.1 Linux 中斷管理機制
11.2 軟體中斷和tasklet
11.3 工作佇列機制
11.4 實驗
12 偵錯和性能最佳化
12.1 printk() 輸出函數和動態輸出
12.2 proc 和debugfs
12.3 ftrace
12.4 分析Oops 錯誤
12.5 perf 性能分析工具
12.6 記憶體檢測
12.7 使用kdump 解決當機問題
12.8 性能和測試
13 開放原始碼社區
13.1 什麼是開放原始碼社區
13.2 參與開放原始碼社區
13.3 實驗13-1:使用cppcheck檢查程式
13.4 實驗13-2:提交第一個Linux 核心更新
13.5 實驗13-3:管理和提交多個更新組成的更新集
14 檔案系統
14.1 檔案系統的基本概念
14.2 檔案系統的基本概念和知識
14.3 虛擬檔案系統層
14.4 檔案系統的一致性
14.5 一次寫入磁碟的全過程
14.6 檔案系統實驗
15 虛擬化與雲端運算
15.1 虛擬化技術
15.2 容器技術
15.3 雲端運算
15.4 實驗
16 綜合能力訓練:動手寫一個小OS
16.1 實驗準備
16.2 入門動手篇
16.3 進階挑戰篇
16.4 高手完善篇
序/導讀
序
自從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 多個實驗來啟動讀者實現一個小作業系統,並介紹開放性實驗。讀者可以根據實際情況來選做部分或全部實驗。
由於作者知識水準有限,書中難免存在紕漏,敬請各位讀者批評指正。
關於本書的任何問題請發送郵件到runninglinuxkernel@126.com。
✤ 繁體中文出版說明
本書原作者為中國大陸人士,使用簡體中文撰寫,文中少部分圖例無繁體中文版對應產品,為維持全書完整性,維持簡體中文圖例,請讀者對照上下文閱讀。
另全書的執行環境使用優麒麟Linux 20.04 作業系統,優麒麟Linux20.04 為Ubuntu 開發公司Canonical 所開發之中文化之Ubuntu Linux 20.04,和Ubuntu Linux 20.04 完全相容,讀者也可以使用Ubuntu 20.04來進行書中的實驗。