Linux內(nèi)核模塊開發(fā)技術(shù)指南
定 價:119 元
- 作者:葉常華、王步冉 編著
- 出版時間:2025/7/1
- ISBN:9787122479280
- 出 版 社:化學(xué)工業(yè)出版社
- 中圖法分類:TP316.85-62
- 頁碼:434
- 紙張:
- 版次:01
- 開本:16開
《Linux內(nèi)核模塊開發(fā)技術(shù)指南》旨在幫助讀者快速理解Linux內(nèi)核,并掌握內(nèi)核模塊開發(fā)及性能調(diào)優(yōu)的能力。
本書以Linux 5.10版本內(nèi)核為藍本,通過對內(nèi)核工作原理的闡釋與諸多核心模塊的動手實現(xiàn),詳細介紹了內(nèi)核模塊相關(guān)基礎(chǔ)、并發(fā)與互斥、系統(tǒng)調(diào)用、內(nèi)核監(jiān)控與調(diào)試、字符和塊設(shè)備驅(qū)動、外部中斷、塊I/O調(diào)度、文件系統(tǒng)、進程調(diào)度、網(wǎng)絡(luò)數(shù)據(jù)包過濾、安全模塊等內(nèi)容。
本書不僅適合初學(xué)者學(xué)習(xí)Linux內(nèi)核開發(fā)的基礎(chǔ)知識,也適合有一定基礎(chǔ)的開發(fā)者深入學(xué)習(xí)高級主題和前沿技術(shù)。
第1章 第一個內(nèi)核模塊Hello,Linux Kernel 001
1.1 內(nèi)核模塊的程序構(gòu)成 001
1.1.1 最簡單的內(nèi)核模塊 002
1.1.2 許可證協(xié)議 004
1.1.3 模塊參數(shù) 004
1.1.4 模塊導(dǎo)出符號 006
1.1.5 模塊作者 007
1.1.6 描述信息 008
1.2 打印級別 008
1.3 再談Hello,Linux Kenel 009
1.4 常用數(shù)據(jù)結(jié)構(gòu) 011
1.4.1 鏈表 011
1.4.2 哈希鏈表 011
1.4.3 紅黑樹 012
1.4.4 XArray 013
第2章 proc文件 018
2.1 創(chuàng)建proc文件 018
2.2 文件讀寫 022
2.2.1 數(shù)據(jù)傳遞接口 022
2.2.2 實現(xiàn)數(shù)據(jù)讀寫 022
2.3 創(chuàng)建目錄 024
2.4 通過偏移量讀寫文件 025
2.5 打開的文件 027
2.6 移動讀寫位置 029
2.7 目錄項和文件節(jié)點 032
2.8 I/O控制操作 039
2.9 小結(jié) 042
第3章 內(nèi)核模塊開發(fā)基礎(chǔ) 043
3.1 內(nèi)核補丁 043
3.1.1 補丁頭 043
3.1.2 補丁塊 044
3.1.3 創(chuàng)建補丁文件 044
3.1.4 安裝補丁文件 045
3.1.5 撤銷補丁文件 046
3.2 常用的內(nèi)存分配和釋放接口 046
3.2.1 kmalloc和kfree 047
3.2.2 vmalloc和vfree 048
3.2.3 分配連續(xù)的內(nèi)存頁 048
3.2.4 kmem_cache系列函數(shù) 048
3.2.5 物理地址和虛擬地址 050
3.2.6 幾種內(nèi)存分配接口的關(guān)系 053
3.3 內(nèi)存映射 054
3.3.1 mmap系統(tǒng)調(diào)用 055
3.3.2 proc文件的mmap操作 056
3.4 獲取未映射內(nèi)存區(qū)域 059
3.5 散布讀 060
3.6 內(nèi)核線程 064
3.6.1 進程的狀態(tài) 064
3.6.2 創(chuàng)建內(nèi)核線程 067
3.6.3 二號進程 069
3.7 工作隊列 070
3.8 等待隊列 071
3.9 實現(xiàn)wait_event和wake_up 078
3.10 多路復(fù)用 082
3.10.1 select系統(tǒng)調(diào)用 082
3.10.2 proc文件的poll操作 084
3.11 定時器 086
3.11.1 毫秒級定時器 086
3.11.2 高精度定時器 089
3.12 延時任務(wù) 093
第4章 并發(fā)與互斥 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 相關(guān)接口 115
4.8.3 示例程序 116
4.9 死鎖檢測 117
第5章 系統(tǒng)調(diào)用 120
5.1 執(zhí)行系統(tǒng)調(diào)用 120
5.1.1 系統(tǒng)調(diào)用的執(zhí)行過程 120
5.1.2 系統(tǒng)調(diào)用的三種執(zhí)行方式 121
5.2 C與匯編 123
5.2.1 C語言和匯編語言函數(shù)的參數(shù)傳遞 123
5.2.2 內(nèi)聯(lián)匯編 127
5.3 增加系統(tǒng)調(diào)用 132
5.4 Linux系統(tǒng)調(diào)用的實現(xiàn)方式 136
5.5 通過軟件中斷實現(xiàn)系統(tǒng)調(diào)用 138
5.5.1 通過0x80軟件中斷執(zhí)行系統(tǒng)調(diào)用 138
5.5.2 自己動手實現(xiàn)系統(tǒng)調(diào)用 140
第6章 監(jiān)控與調(diào)試 141
6.1 kprobe 141
6.1.1 結(jié)構(gòu)體和相關(guān)接口 141
6.1.2 示例程序 142
6.2 kretprobe 145
6.2.1 結(jié)構(gòu)體和相關(guān)接口 146
6.2.2 示例程序 147
6.3 uprobe 149
6.3.1 結(jié)構(gòu)體和相關(guān)接口 149
6.3.2 示例程序 151
6.4 perf 154
6.5 bpftrace 160
6.6 kdump 163
6.6.1 產(chǎn)生vmcore文件 163
6.6.2 查看vmcore文件 163
6.6.3 crash工具 164
6.6.4 crash分析示例 167
6.7 kgdb 170
第7章 字符設(shè)備驅(qū)動 175
7.1 最簡單的字符設(shè)備驅(qū)動 175
7.1.1 相關(guān)接口 175
7.1.2 示例程序 178
7.2 通過字符設(shè)備驅(qū)動訪問串口 181
7.2.1 串行通信 181
7.2.2 相關(guān)寄存器 181
7.2.3 串口接收/發(fā)送配置 183
7.2.4 示例程序 183
7.3 通過ioctl操作配置串口參數(shù) 188
7.3.1 相關(guān)寄存器 188
7.3.2 示例程序 188
第8章 外部中斷 191
8.1 基本概念 191
8.2 通過中斷讀取串口數(shù)據(jù) 192
8.2.1 相關(guān)寄存器 192
8.2.2 相關(guān)接口 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 虛擬文件系統(tǒng)(VFS) 206
9.1.1 read系統(tǒng)調(diào)用的執(zhí)行過程 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系統(tǒng)調(diào)用 221
9.6.2 相關(guān)結(jié)構(gòu)體和接口 222
9.6.3 示例程序 227
9.7 copy_file_range操作 229
9.7.1 copy_file_range系統(tǒng)調(diào)用 229
9.7.2 示例程序 230
9.7.3 remap_file_range 233
第10章 塊設(shè)備驅(qū)動 235
10.1 塊設(shè)備 235
10.2 相關(guān)概念 236
10.2.1 通用磁盤結(jié)構(gòu)體gendisk 236
10.2.2 塊設(shè)備對象block_device 239
10.2.3 I/O處理基本單元bio 240
10.3 第一個塊設(shè)備驅(qū)動 244
10.4 塊I/O請求隊列 247
10.4.1 塊I/O請求 247
10.4.2 請求隊列 249
10.4.3 相關(guān)接口 251
10.5 在塊設(shè)備驅(qū)動中使用請求隊列 254
第11章 塊I/O調(diào)度 257
11.1 塊I/O調(diào)度流程 257
11.2 塊I/O調(diào)度相關(guān)結(jié)構(gòu)體 258
11.3 寫一個塊I/O調(diào)度器 265
11.4 Mq-Deadline調(diào)度器 269
第12章 文件系統(tǒng) 271
12.1 注冊文件系統(tǒng) 271
12.1.1 超級塊 271
12.1.2 相關(guān)接口 273
12.1.3 示例程序 273
12.2 創(chuàng)建超級塊 275
12.3 創(chuàng)建根目錄 278
12.4 本級目錄和上級目錄 281
12.5 增加一個文件 285
12.6 增加文件的讀寫操作 288
12.7 動態(tài)創(chuàng)建文件 289
12.8 文件的刪除操作 294
12.9 寫一個磁盤文件系統(tǒng) 295
12.9.1 磁盤文件系統(tǒng) 295
12.9.2 注冊并創(chuàng)建超級塊 297
12.9.3 目錄下文件的遍歷 304
12.9.4 在根目錄下創(chuàng)建文件 308
12.9.5 讀取文件數(shù)據(jù) 310
12.9.6 向文件寫入數(shù)據(jù) 313
第13章 文件數(shù)據(jù)的管理 319
13.1 地址空間 319
13.1.1 數(shù)據(jù)結(jié)構(gòu) 319
13.1.2 地址空間操作函數(shù) 320
13.1.3 文件數(shù)據(jù)的緩存 323
13.2 在文件系統(tǒng)中使用地址空間 324
13.2.1 相關(guān)接口 324
13.2.2 示例程序 327
13.3 小結(jié) 332
第14章 進程調(diào)度 333
14.1 基本概念 333
14.1.1 進程調(diào)度器 333
14.1.2 調(diào)度實體 338
14.1.3 調(diào)度域 338
14.1.4 進程控制塊 341
14.1.5 運行隊列 344
14.1.6 進程調(diào)度流程 346
14.2 動手實現(xiàn)進程調(diào)度器 347
14.3 公平調(diào)度器分析 353
14.3.1 權(quán)重和虛擬運行時間 353
14.3.2 負載的計算 355
14.3.3 進程的遷移 357
14.3.4 為新進程/被喚醒進程選擇合適的CPU 360
第15章 網(wǎng)絡(luò)數(shù)據(jù)包過濾 362
15.1 Netfilter原理 362
15.2 實現(xiàn)最簡單的Netfilter模塊 363
15.3 sk_buff 369
15.3.1 結(jié)構(gòu)體介紹 369
15.3.2 常用接口 373
15.3.3 示例程序 377
15.4 IP數(shù)據(jù)處理的五條鏈 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 將數(shù)據(jù)包傳遞給應(yīng)用程序 391
15.6.2 創(chuàng)建并監(jiān)聽NF Queue套接字 392
15.6.3 示例程序 400
15.7 Iptables 412
15.8 ARP數(shù)據(jù)包過濾 412
第16章 Linux安全模塊 415
16.1 LSM的實現(xiàn)原理 415
16.2 編寫一個簡單的LSM模塊 417
16.2.1 打內(nèi)核補丁 417
16.2.2 編寫LSM模塊 419
16.2.3 控制目錄的創(chuàng)建 422
16.3 理解LSM框架 425
16.4 目錄訪問控制 427
16.5 inode節(jié)點訪問控制 430
16.6 文件訪問控制 432
16.7 小結(jié) 434