×
深入Linux Kernel程式設計:kernel內部原理、模組開發與同步機制(第二版)
作者: Kaiwan N. Billimoria
譯者:廖明沂
書號: ACL068900
出版日: 2026/04/21
ISBN:9786264252904
附件: 線上下載
定價: 980
電子書: 未出版
內容特色
專為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 記憶體屏障簡介

索引
超值加贈
本書範例程式,請見書內說明線上下載
深入Linux Kernel程式設計:kernel內部原理、模組開發與同步機制(第二版) 分享
  • 作者: Kaiwan N. Billimoria
  • 書號:ACL068900
  • ISBN:9786264252904
  • 出版日:2026/04/21
  • 定價:$ 980
  • 電子書:已出版
  • 購買紙本書

    內容特色
    專為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 記憶體屏障簡介

    索引
    超值加贈
    本書範例程式,請見書內說明線上下載