深入 Linux Kernel 程式設計:kernel 內部原理、模組開發與同步機制, 2/e (Linux Kernel Programming : A comprehensive and practical guide to kernel internals, writing modules, and kernel synchronization, 2/e)
Kaiwan N. Billimoria 著 廖明沂 譯
- 出版商: 碁峰資訊
- 出版日期: 2026-04-24
- 定價: $980
- 售價: 7.9 折 $774
- 語言: 繁體中文
- 頁數: 912
- ISBN: 6264252905
- ISBN-13: 9786264252904
-
相關分類:
Linux
- 此書翻譯自: Linux Kernel Programming : A comprehensive and practical guide to kernel internals, writing modules, and kernel synchronization, 2/e (Paperback)
尚未上市,歡迎預購
商品描述
專為Linux kernel新手程式設計師與希望深化核心開發能力的工程師所撰寫!是一本兼具系統性與實務導向的程式設計指南。內容循序漸進,從基礎概念出發,引領讀者深入Linux kernel的設計思維與運作核心。
本書以6.1長期支援(LTS,Long-Term Support)的Linux kernel為基礎,該版本具備高度穩定性,並廣泛應用於實務環境中。此外,Civil Infrastructure Project已承諾將6.1超長期支援(SLTS,Super LTS)kernel維護至2033年8月,使本書在未來多年內仍具高度實務與參考價值。
你將從學習如何由原始碼編譯(build)kernel開始,逐步學習如何運用kernel強大的可載入核心模組(LKM,Loadable Kernel Module)架構,撰寫並管理你的第一個kernel模組。在奠定模組開發基礎後,將進一步帶你深入核心內部關鍵主題,包括Linux kernel架構、記憶體管理與CPU(task)排程等重要機制。
最後,本書將聚焦於kernel開發中極為關鍵的——平行性(concurrency),深入說明各種同步與上鎖(locking)技術的設計理念與實務應用,包含mutex、spinlock、atomic/refcount運算子、rw-spinlock,以及per-CPU與RCU等lock-free技術,協助你撰寫更安全、穩定且可擴充的kernel程式碼。
閱讀完本書後,你將能以更宏觀且結構化的視角理解Linux kernel與kernel模組的運作方式,並具備實際應用於真實專案與產品中的能力。內容包括:
■ 從原始碼設定並編譯6.1 LTS Linux kernel
■ 為6.x kernel設計高品質、可維護的模組化程式碼(LKM架構)
■ 探索現代Linux kernel架構設計
■ 掌握kernel內記憶體管理的關鍵細節
■ 理解並使用各種動態kernel記憶體alloc/dealloc API
■ 深入解析kernel內CPU排程機制,包含cgroups v2
■ 洞悉kernel平行性(concurrency)問題與常見陷阱
■ 正確運用關鍵的kernel同步原語(synchronization primitives)
作者簡介
Kaiwan 長期深耕Linux系統程式設計,技術橫跨Bash腳本、C語言使用者空間程式開發,以及作業系統層級的Linux kernel內部機制開發與除錯,並參與多項商業與開源專案。
他曾為Linux主線核心提交裝置驅動程式,亦在GitHub上發起多個開源專案。目前專注於Linux kernel強化與安全領域。
二十多年來,他持續培訓工程師,教授Linux作業系統原理與安全、穩定程式設計實務,致力於培養具備紮實核心能力的開發者。
目錄大綱
前言
chapter 1 Linux 核心程式設計 -快速入門
核心工作區設定
技術要求
chapter 2 從原始碼構建 6.x Linux 核心 -第一部分
2-1 技術要求
2-2 核心建構的準備工作
2-3 從原始碼建構 kernel 的步驟
2-4 步驟1:取得 Linux kernel 原始碼樹
2-5 步驟2:提取 kernel 原始碼樹
2-6 步驟3:配置 Linux kernel
2-7 客製化 kernel 選單、Kconfig,並新增選單項目
chapter 3 從原始碼建置 6.x Linux 核心 -第二部分
3-1 技術要求
3-2 步驟4:編譯 kernel 映像檔和模組
3-3 步驟5:安裝核心模組
3-4 步驟6:產生 initramfs 映像和bootloader 設定
3-5 了解 initramfs 框架
3-6 步驟7:自訂 GRUB 開機載入程式
3-7 驗證新核心的設定
3-8 為 Raspberry Pi 編譯核心
3-9 核心編譯的雜項技巧
chapter 4 編寫第一個核心模組 -第一部分
4-1 技術要求
4-2 了解核心架構 - 第一部分
4-3 探索 LKM
4-4 編寫第一個核心模組
4-5 核心模組的常見操作
4-6 了解核心日誌記錄和 printk
4-7 了解核心模組 Makefile 的基本知識
chapter 5 編寫第一個核心模組 -第二部分
5-1 技術要求
5-2 給你的核心模組「更好的」Makefile 範本
5-3 跨平台編譯核心模組
5-4 蒐集最少的系統資訊
5-5 Kernel 模組的授權
5-6 模擬 kernel 模組的「類似函式庫」功能
5-7 將參數傳遞給 kernel 模組
5-8 kernel 中不允許使用浮點數
5-9 在系統開機時自動載入模組
5-10 kernel 模組和資訊安全 - 概述
5-11 Kernel 開發者的程式碼風格指南
5-12 為 mainline kernel 做出貢獻
chapter 6 Kernel 內部基礎 -行程和執行緒
6-1 技術要求
6-2 了解行程和 interrupt context
6-3 了解行程虛擬位址空間的基礎知識
6-4 組織行程、執行緒及其堆疊 - 使用者空間和 kernel 空間
6-5 了解和存取 kernel task 結構
6-6 透過「current」使用 task 結構
6-7 遍歷 kernel 的 task 串列
chapter 7 記憶體管理內部 -要素
7-1 技術要求
7-2 了解 VM 拆分
7-3 檢查行程 VAS
7-4 檢查 kernel VAS
7-5 隨機化記憶體布局 - KASLR
7-6 了解實體記憶體組成
chapter 8 模組作者的核心記憶體分配 -第一部分
8-1 技術要求
8-2 kernel 記憶體配置器簡介
8-3 了解和使用 kernel 分頁配置器(或 BSA)
8-4 了解和使用 Kernel Slab 配置器
8-5 kmalloc API 的大小限制
8-6 Slab 配置器 - 一些補充細節
8-7 使用 slab 配置器的注意事項
chapter 9 模組作者的核心記憶體分配 -第二部分
9-1 技術要求
9-2 建立自訂 slab 快取
9-3 快速說明 kernel 記憶體問題除錯
9-4 了解與使用 kernel 的 vmalloc() API
9-5 Kernel 中的記憶體配置 - 何時使用哪個 API?
9-6 記憶體回收:kernel 的重要家務工作
9-7 生存之道:OOM 終結者
chapter 10 CPU 排程器 -第一部分
10-1 技術要求
10-2 學習 CPU 排程內部機制 - 第一部分:基礎背景
10-3 視覺化流程(Visualizing the flow)
10-4 學習 CPU 排程內部機制 - 第二部分
10-5 查詢指定執行緒的排程政策與優先權
10-6 學習 CPU 排程內部機制 - 第三部分
chapter 11 CPU 排程器 -第二部分
11-1 技術要求
11-2 理解、查詢與設定 CPU 親和性遮罩(affinity mask)
11-3 查詢與設定執行緒的排程政策與優先權
11-4 cgroups 簡介
11-5 讓 Linux 成為 RTOS:簡介
11-6 與排程相關的其他主題
chapter 12 核心同步 -第一部分
12-1 技術要求
12-2 臨界區間、互斥執行與原子性
12-3 Linux kernel 中的平行性問題
12-4 互斥鎖或自旋鎖?何時使用何種鎖
12-5 使用互斥鎖
12-6 使用 spinlock
12-7 上鎖與中斷
12-8 上鎖:常見錯誤和指導原則
12-9 解答
chapter 13 核心同步 -第二部分
13-1 技術要求
13-2 使用 atomic_t 與 refcount_t 介面
13-3 使用 RMW atomic 運算子
13-4 使用讀寫者自旋鎖
13-5 了解 CPU 快取基礎、快取效應和假共享
13-6 使用 per-CPU 和 RCU 達成 Lock-free 程式設計
13-7 Kernel 內的 Lock 除錯
13-8 記憶體屏障簡介
索引









