Linux內核模塊開發技術指南

葉常華 王步冉

  • 出版商: 化學工業
  • 出版日期: 2025-07-01
  • 售價: $714
  • 語言: 簡體中文
  • 頁數: 434
  • ISBN: 7122479285
  • ISBN-13: 9787122479280
  • 相關分類: Linux
  • 下單後立即進貨 (約4週~6週)

相關主題

商品描述

《Linux內核模塊開發技術指南》旨在幫助讀者快速理解Linux內核,並掌握內核模塊開發及性能調優的能力。 本書以Linux 5.10版本內核為藍本,通過對內核工作原理的闡釋與諸多核心模塊的動手實現,詳細介紹了內核模塊相關基礎、並發與互斥、系統調用、內核監控與調試、字符和塊設備驅動、外部中斷、塊I/O調度、文件系統、進程調度、網絡數據 濾、安全模塊等內容。 本書不僅適合初學者學習Linux內核開發的基礎知識,也適合有一定基礎的開發者深入學習 主題和前沿技術。

目錄大綱

第1章 個內核模塊Hello,Linux Kernel 001
1.1 內核模塊的程序構成 001
1.1.1 簡單的內核模塊 002
1.1.2 許可證協議 004
1.1.3 模塊參數 004
1.1.4 模塊導出符號 006
1.1.5 模塊作者 007
1.1.6 描述信息 008
1.2 打印級別 008
1.3 再談Hello,Linux Kenel 009
1.4 常用數據結構 011
1.4.1 鏈表 011
1.4.2 哈希鏈表 011
1.4.3 紅黑樹 012
1.4.4 XArray 013

第2章 proc文件 018
2.1 創建proc文件 018
2.2 文件讀寫 022
2.2.1 數據傳遞接口 022
2.2.2 實現數據讀寫 022
2.3 創建目錄 024
2.4 通過偏移量讀寫文件 025
2.5 打開的文件 027
2.6 移動讀寫位置 029
2.7 目錄項和文件節點 032
2.8 I/O控制操作 039
2.9 小結 042

第3章 內核模塊開發基礎 043
3.1 內核補丁 043
3.1.1 補丁頭 043
3.1.2 補丁塊 044
3.1.3 創建補丁文件 044
3.1.4 安裝補丁文件 045
3.1.5 撤銷補丁文件 046
3.2 常用的內存分配和釋放接口 046
3.2.1 kmalloc和kfree 047
3.2.2 vmalloc和vfree 048
3.2.3 分配連續的內存頁 048
3.2.4 kmem_cache系列函數 048
3.2.5 物理地址和虛擬地址 050
3.2.6 幾種內存分配接口的關系 053
3.3 內存映射 054
3.3.1 mmap系統調用 055
3.3.2 proc文件的mmap操作 056
3.4 獲取未映射內存區域 059
3.5 散布讀 060
3.6 內核線程 064
3.6.1 進程的狀態 064
3.6.2 創建內核線程 067
3.6.3 二號進程 069
3.7 工作隊列 070
3.8 等待隊列 071
3.9 實現wait_event和wake_up 078
3.10 多路覆用 082
3.10.1 select系統調用 082
3.10.2 proc文件的poll操作 084
3.11 定時器 086
3.11.1 毫秒級定時器 086
3.11.2 高精度定時器 089
3.12 延時任務 093

第4章 並發與互斥 095
4.1 信號量 096
4.2 互斥體 098
4.3 完成量 099
4.4 原子操作 102
4.4.1 整型原子操作 103
4.4.2 位原子操作 105
4.5 自旋鎖 105
4.6 讀寫鎖 108
4.7 RCU 111
4.7.1 原理 111
4.7.2 接口及示例 112
4.8 PER_CPU 114
4.8.1 原理 114
4.8.2 相關接口 115
4.8.3 示例程序 116
4.9 死鎖檢測 117

第5章 系統調用 120
5.1 執行系統調用 120
5.1.1 系統調用的執行過程 120
5.1.2 系統調用的三種執行方式 121
5.2 C與匯編 123
5.2.1 C語言和匯編語言函數的參數傳遞 123
5.2.2 內聯匯編 127
5.3 增加系統調用 132
5.4 Linux系統調用的實現方式 136
5.5 通過軟件中斷實現系統調用 138
5.5.1 通過0x80軟件中斷執行系統調用 138
5.5.2 自己動手實現系統調用 140

第6章 監控與調試 141
6.1 kprobe 141
6.1.1 結構體和相關接口 141
6.1.2 示例程序 142
6.2 kretprobe 145
6.2.1 結構體和相關接口 146
6.2.2 示例程序 147
6.3 uprobe 149
6.3.1 結構體和相關接口 149
6.3.2 示例程序 151
6.4 perf 154
6.5 bpftrace 160
6.6 kdump 163
6.6.1 產生vmcore文件 163
6.6.2 查看vmcore文件 163
6.6.3 crash工具 164
6.6.4 crash分析示例 167
6.7 kgdb 170

第7章 字符設備驅動 175
7.1 簡單的字符設備驅動 175
7.1.1 相關接口 175
7.1.2 示例程序 178
7.2 通過字符設備驅動訪問串口 181
7.2.1 串行通信 181
7.2.2 相關寄存器 181
7.2.3 串口接收/發送配置 183
7.2.4 示例程序 183
7.3 通過ioctl操作配置串口參數 188
7.3.1 相關寄存器 188
7.3.2 示例程序 188

第8章 外部中斷 191
8.1 基本概念 191
8.2 通過中斷讀取串口數據 192
8.2.1 相關寄存器 192
8.2.2 相關接口 193
8.2.3 示例程序 194
8.3 中斷底半部 197
8.3.1 工作隊列 197
8.3.2 tasklet 198
8.3.3 軟中斷 200
8.4 常用接口 203

第9章 文件操作 206
9.1 虛擬文件系統(VFS) 206
9.1.1 read系統調用的執行過程 207
9.1.2 VFS管理的對象 208
9.2 write_iter操作 208
9.3 flush操作 211
9.4 flock操作 215
9.5 lock操作 218
9.6 splice_read和splice_write 221
9.6.1 splice系統調用 221
9.6.2 相關結構體和接口 222
9.6.3 示例程序 227
9.7 copy_file_range操作 229
9.7.1 copy_file_range系統調用 229
9.7.2 示例程序 230
9.7.3 remap_file_range 233

0章 塊設備驅動 235
10.1 塊設備 235
10.2 相關概念 236
10.2.1 通用磁盤結構體gendisk 236
10.2.2 塊設備對象block_device 239
10.2.3 I/O處理基本單元bio 240
10.3 個塊設備驅動 244
10.4 塊I/O請求隊列 247
10.4.1 塊I/O請求 247
10.4.2 請求隊列 249
10.4.3 相關接口 251
10.5 在塊設備驅動中使用請求隊列 254

1章 塊I/O調度 257
11.1 塊I/O調度流程 257
11.2 塊I/O調度相關結構體 258
11.3 寫一個塊I/O調度器 265
11.4 Mq-Deadline調度器 269

2章 文件系統 271
12.1 註冊文件系統 271
12.1.1 塊 271
12.1.2 相關接口 273
12.1.3 示例程序 273
12.2 創建 塊 275
12.3 創建根目錄 278
12.4 本級目錄和上級目錄 281
12.5 增加一個文件 285
12.6 增加文件的讀寫操作 288
12.7 動態創建文件 289
12.8 文件的刪除操作 294
12.9 寫一個磁盤文件系統 295
12.9.1 磁盤文件系統 295
12.9.2 註冊並創建 塊 297
12.9.3 目錄下文件的遍歷 304
12.9.4 在根目錄下創建文件 308
12.9.5 讀取文件數據 310
12.9.6 向文件寫入數據 313

3章 文件數據的管理 319
13.1 地址空間 319
13.1.1 數據結構 319
13.1.2 地址空間操作函數 320
13.1.3 文件數據的緩存 323
13.2 在文件系統中使用地址空間 324
13.2.1 相關接口 324
13.2.2 示例程序 327
13.3 小結 332

4章 進程調度 333
14.1 基本概念 333
14.1.1 進程調度器 333
14.1.2 調度實體 338
14.1.3 調度域 338
14.1.4 進程控制塊 341
14.1.5 運行隊列 344
14.1.6 進程調度流程 346
14.2 動手實現進程調度器 347
14.3 公平調度器分析 353
14.3.1 權重和虛擬運行時間 353
14.3.2 負載的計算 355
14.3.3 進程的遷移 357
14.3.4 為新進程/被喚醒進程選擇合適的CPU 360

5章 網絡數據 濾 362
15.1 Netfilter原理 362
15.2 實現 簡單的Netfilter模塊 363
15.3 sk_buff 369
15.3.1 結構體介紹 369
15.3.2 常用接口 373
15.3.3 示例程序 377
15.4 IP數據處理的五條鏈 384
15.4.1 PREROUTING鏈 384
15.4.2 INPUT鏈 385
15.4.3 FORWARD鏈 386
15.4.4 OUTPUT鏈 386
15.4.5 POSTROUTING鏈 387
15.5 連接跟蹤機制 387
15.6 NF Queue 391
15.6.1 將數據包傳遞給應用程序 391
15.6.2 創建並監聽NF Queue套接字 392
15.6.3 示例程序 400
15.7 Iptables 412
15.8 ARP數據 濾 412

6章 Linux安全模塊 415
16.1 LSM的實現原理 415
16.2 編寫一個簡單的LSM模塊 417
16.2.1 打內核補丁 417
16.2.2 編寫LSM模塊 419
16.2.3 控制目錄的創建 422
16.3 理解LSM框架 425
16.4 目錄訪問控制 427
16.5 inode節點訪問控制 430
16.6 文件訪問控制 432
16.7 小結 434