Linux核心除錯實務

Linux核心除錯實務

Linux Kernel Debugging

出版日期:
2024/07/30
9
800720
查詢門市庫存
藉由實用工具與進階技術,對Linux kernel與kernel模組進行有效除錯!

內容簡介

藉由實用工具與進階技術,對Linux kernel與kernel模組進行有效除錯!

Linux kernel是世界公認最好的作業系統核心。但是要對kernel進行除錯,則是一件相當複雜的工作。本書是學習一切高階kernel除錯的全面性指南。深入涵蓋許多領域,例如基於工具的除錯(debug)技術(printk與動態除錯框架),並展示如何使用Kprobes。涉及記憶體的bug往往是一場惡夢,我們用兩個章節的篇幅來講解針對記憶體除錯的工具與技術。當kernel賞你一個Oops時,該如何準確地解讀才能解開最根本的問題呢?這本書提供了解答。

並行性(concurrency)往往是一個複雜的主題,本書能幫助你確切地了解何謂資料競爭(data race),包括使用KCSAN來檢測這類問題。還有一些棘手的問題,無論是在除錯還是效能方面,都需要詳細的kernel層級追蹤;你將學習到如何使用Ftrace及其前端(frontend)的強大功能,還將會知道如何在kernel內部的GDB工具(KGDB)與許多其他工具,用於處理kernel lockup、hangs與可怕的kernel panic。

讀完本書,你將能掌握各種強大的kernel debug工具與技術,以及具有在何時間點使用適當工具和技術的敏銳能力。
你將學到的內容:
*探索基於工具的printk,以及功能強大的動態除錯框架(dynamic debug framework)
*使用靜態與動態的Kprobes,trap kernel/module 的函式
*使用KASAN、UBSAN、SLUB debug 和kmemleak捕捉kernel 的記憶體問題
*深入解譯Oops,並精準識別程式碼的行號位置
*了解資料競爭,並使用KCSAN捕捉難以捉摸的並行性(concurrency)問題
*利用Ftrace與trace-cmd詳細追蹤kernel流程
*撰寫自訂的kernel panic handler(處理常式),並檢測kernel lockup與hands
*使用 KGDB 單步執行,以及 debug kernel/module 的原始碼

展開看更多

產品目錄

【PART 1 Kernel 除錯的簡介與方法】
chapter 1 軟體除錯概論
  1.1 技術需求
  1.2 軟體除錯 - 定義、起源與由來
  1.3 軟體錯誤:真實案例
  1.4 設定工作區
  1.5 兩個 kernel 的故事
  1.6 幾個簡單的 Debug 技巧提示
  結論
chapter 2 Debug Kernel 的方法
  2.1 技術需求
  2.2 分類 bug type
  2.3 Debug Kernel:方法不同的原因
  2.4 概述 debug kernel 的不同方法
  結論

【PART 2 Kernel 與驅動程式的除錯工具與技術】
chapter 3 透過檢測除錯:使用 printk 與其族類
  3.1 技術需求
  3.2 無所不在的 kernel printk
  3.3 將 printk 用於除錯目的
  3.4 使用 kernel 強大的動態 debug 功能
  3.5 剩下的 printk 雜項字元
  結論
chapter 4 透過Kprobes 儀器進行debug
  4.1 了解 kprobes 基礎
  4.2 使用 static kprobes - 傳統的探測方法
  4.3 了解 ABI 的基本概念
  4.4 使用 static kprobes - 範例 3 與範例 4
  4.5 開始使用 kretprobes
  4.6 Kprobes:限制性與不利因素
  4.7 更簡單的方法:動態 kprobes 或基於 kprobes 的事件追蹤
  4.8 透過 perf 和 eBPF 工具,對 execve() API 進行 trap
  結論
chapter 5 Kernel 記憶體除錯問題初探
  5.1 技術需求
  5.2 記憶體到底出了什麼問題?
  5.3 使用 KASAN 和 UBSAN 找到記憶體 bug
  5.4 使用 Clang 編譯 kernel 和 module
  5.5 捕捉 kernel 中的記憶體缺陷:比較與注意事項 (Part 1)
  結論
chapter 6 再論 Kernel 記憶體除錯問題
  6.1 技術需求
  6.2 透過 SLUB debug 偵測 slab 記憶體損毀
  6.3 使用 kmemleak 找出記憶體洩漏問題
  6.4 捕捉 kernel 中的記憶體缺陷:比較與注意事項(Part 2)
  結論
chapter 7 Oops!解讀 kernel 的 bug 診斷
  7.1 技術需求
  7.2 產生一個簡單的 kernel bug 和 Oops
  7.3 介紹 Kernel Oops 以及所代表的意義
  7.4 魔鬼藏在細節裡:解碼 Oops
  7.5 協助判斷 Oops 位置的工具與技術
  7.6 ARM Linux 系統上的 Oops 及使用 Netconsole
  7.7 幾個實際的 Oops
  結論
chapter 8 鎖的除錯
  8.1 技術需求
  8.2 上鎖與 debug 因鎖產生的 bug
  8.3 上鎖:快速總結要點
  8.4 使用 KCSAN 攔截 concurrency bug
  8.5 一些實際案例:由於上鎖問題導致的 kernel bug
  結論

【PART 3 額外的 Kernel 除錯工具與技術】
chapter 9 追蹤 Kernel 流程
  9.1 技術需求
  9.2 Kernel 追蹤技術:概論
  9.3 使用 ftrace kernel 追蹤程式
  9.4 使用 trace-cmd、KernelShark 與 perf-tools ftrace 前端工具
  9.5 用 LTTng 和 Trace Compass 追蹤 kernel 的簡介
  結論
chapter 10 Kernel Panic、Lockup 以及 Hang
  10.1 技術需求
  10.2 Panic!Kernel panic 時會發生什麼事?
  10.3 撰寫自訂的 kernel panic 處理常式
  10.4 偵測 kernel 中的 lockup 和 CPU 停止
  10.5 採用 kernel 的掛起任務和工作佇列停止偵測器
  結論
chapter 11 使用 Kernel GDB (KGDB)
  11.1 技術需求
  11.2 從概念上理解 KGDB 的運作
  11.3 為 KGDB 建立 ARM target 系統和 kernel
  11.4 使用 KGDB debug kernel
  11.5 使用 KGDB debug kernel 模組
  11.6 [K]GDB:一些提示和技巧
  結論
chapter 12 再談談一些 kernel debug 方法
  12.1 Kdump/crash 架構簡介
  12.2 淺談 kernel 程式碼的靜態分析
  12.3 Kernel code coverage 工具和測試框架簡介
  12.4 其他:使用 journalctl、斷言 (assertions) 和警告
  結論

  索引

作者介紹

Kaiwan 在 Linux 系統程式設計的各方面都貢獻良多,包括 Bash、C 語言的系統程式設計、Kernel 內部研究、裝置驅動程式與嵌入式 Linux 系統。他積極地參與商業/自由和開放原始碼軟體專案,包括Linux 作業系統的驅動程式,以及許多放在 GitHub 的小型專案。他現已從事相關工作將近30年,著有《Hands-On System Programming with Linux and Linux Kernel Programming》。同時,他也是一個業餘跑者。

規格

誠品貨碼 / 2682610859001
ISBN13 / 9786263248465
ISBN10 /
EAN貨碼 / 9786263248465
頁數 / 644
裝訂 / P:平裝
語言 / 1:中文/繁體
尺寸 / 17X23X3CM
級別 / N:無

退貨說明

退貨須知:

  1. 依照消費者保護法的規定,您享有商品貨到次日起七天猶豫期(含例假日)的權益(請注意!猶豫期非試用期),辦理退貨之商品必須是全新狀態(不得有刮傷、破損、受潮)且需完整(包含全部商品、配件、原廠內外包裝、贈品及所有附隨文件或資料的完整性等)。
  2. 請您以送貨廠商使用之包裝紙箱將退貨商品包裝妥當,若原紙箱已遺失,請另使用其他紙箱包覆於商品原廠包裝之外,切勿直接於原廠包裝上黏貼紙張或書寫文字。若原廠包裝損毀將可能被認定為已逾越檢查商品之必要程度,本公司得依毀損程度扣除回復原狀必要費用(整新費)後退費;請您先確認商品正確、外觀可接受,再行拆封,以免影響您的權利;若為產品瑕疵,本公司接受退貨。

依「通訊交易解除權合理例外情事適用準則」,下列商品不適用七日猶豫期,除產品本身有瑕疵外,不接受退貨:

  1. 易於腐敗、保存期限較短或解約時即將逾期。(如:生鮮蔬果、乳製品、冷凍冷藏食材、蛋糕)
  2. 依消費者要求所為之客製化給付。(如:客製印章、鋼筆刻字)
  3. 報紙、期刊或雜誌。
  4. 經消費者拆封之影音商品或電腦軟體。
  5. 非以有形媒介提供之數位內容或一經提供即為完成之線上服務,經消費者事先同意始提供。(如:電子書)
  6. 已拆封之個人衛生用品。(如:內衣褲、襪類、褲襪、刮鬍刀、除毛刀等貼身用品)
  7. 國際航空客運服務。

若您退貨時有下列情形,可能被認定已逾越檢查商品之必要程度而須負擔為回復原狀必要費用(整新費),或影響您的退貨權利,請您在拆封前決定是否要退貨:

  1. 以數位或電磁紀錄形式儲存或著作權相關之商品(包含但不限於CD、VCD、DVD、電腦軟體等) 包裝已拆封者(除運送用之包裝以外)。
  2. 耗材(包含但不限於墨水匣、碳粉匣、紙張、筆類墨水、清潔劑補充包等)之商品包裝已拆封者(除運送用之包裝以外)。
  3. 衣飾鞋類/寢具/織品(包含但不限於衣褲、鞋子、襪子、泳裝、床單、被套、填充玩具)或之商品缺件(含購買商品、附件、內外包裝、贈品等)或經剪標或下水或商品有不可回復之髒污或磨損痕跡。
  4. 食品、美容/保養用品、內衣褲等消耗性或個人衛生用品、商品銷售頁面上特別載明之商品已拆封者(除運送用之包裝外一切包裝、包括但不限於瓶蓋、封口、封膜等接觸商品內容之包裝部分)或已非全新狀態(外觀有刮傷、破損、受潮等)與包裝不完整(缺少商品、附件、原廠外盒、保護袋、配件紙箱、保麗龍、隨貨文件、贈品等)。
  5. 家電、3C、畫作、電子閱讀器等商品,除商品本身有瑕疵外,退回之商品已拆封(除運送用之包裝外一切包裝、包括但不限於封膜等接觸商品內容之包裝部分、移除封條、拆除吊牌、拆除貼膠或標籤等情形)或已非全新狀態(外觀有刮傷、破損、受潮等)與包裝不完整(缺少商品、附件、原廠外盒、保護袋、配件紙箱、保麗龍、隨貨文件、贈品等)。
  6. 退貨程序請參閱【客服專區→常見問題→誠品線上退貨退款】之說明。
付款/配送