Linux內(nèi)核模塊開(kāi)發(fā)技術(shù)指南
定 價(jià):119 元
- 作者:葉常華、王步冉 編著
- 出版時(shí)間:2025/7/1
- ISBN:9787122479280
- 出 版 社:化學(xué)工業(yè)出版社
- 中圖法分類:TP316.85-62
- 頁(yè)碼:434
- 紙張:
- 版次:01
- 開(kāi)本:16開(kāi)
《Linux內(nèi)核模塊開(kāi)發(fā)技術(shù)指南》旨在幫助讀者快速理解Linux內(nèi)核,并掌握內(nèi)核模塊開(kāi)發(fā)及性能調(diào)優(yōu)的能力。
本書(shū)以Linux 5.10版本內(nèi)核為藍(lán)本,通過(guò)對(duì)內(nèi)核工作原理的闡釋與諸多核心模塊的動(dòng)手實(shí)現(xiàn),詳細(xì)介紹了內(nèi)核模塊相關(guān)基礎(chǔ)、并發(fā)與互斥、系統(tǒng)調(diào)用、內(nèi)核監(jiān)控與調(diào)試、字符和塊設(shè)備驅(qū)動(dòng)、外部中斷、塊I/O調(diào)度、文件系統(tǒng)、進(jìn)程調(diào)度、網(wǎng)絡(luò)數(shù)據(jù)包過(guò)濾、安全模塊等內(nèi)容。
本書(shū)不僅適合初學(xué)者學(xué)習(xí)Linux內(nèi)核開(kāi)發(fā)的基礎(chǔ)知識(shí),也適合有一定基礎(chǔ)的開(kāi)發(fā)者深入學(xué)習(xí)高級(jí)主題和前沿技術(shù)。
第1章 第一個(gè)內(nèi)核模塊Hello,Linux Kernel 001
1.1 內(nèi)核模塊的程序構(gòu)成 001
1.1.1 最簡(jiǎn)單的內(nèi)核模塊 002
1.1.2 許可證協(xié)議 004
1.1.3 模塊參數(shù) 004
1.1.4 模塊導(dǎo)出符號(hào) 006
1.1.5 模塊作者 007
1.1.6 描述信息 008
1.2 打印級(jí)別 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 紅黑樹(shù) 012
1.4.4 XArray 013
第2章 proc文件 018
2.1 創(chuàng)建proc文件 018
2.2 文件讀寫(xiě) 022
2.2.1 數(shù)據(jù)傳遞接口 022
2.2.2 實(shí)現(xiàn)數(shù)據(jù)讀寫(xiě) 022
2.3 創(chuàng)建目錄 024
2.4 通過(guò)偏移量讀寫(xiě)文件 025
2.5 打開(kāi)的文件 027
2.6 移動(dòng)讀寫(xiě)位置 029
2.7 目錄項(xiàng)和文件節(jié)點(diǎn) 032
2.8 I/O控制操作 039
2.9 小結(jié) 042
第3章 內(nèi)核模塊開(kāi)發(fā)基礎(chǔ) 043
3.1 內(nèi)核補(bǔ)丁 043
3.1.1 補(bǔ)丁頭 043
3.1.2 補(bǔ)丁塊 044
3.1.3 創(chuàng)建補(bǔ)丁文件 044
3.1.4 安裝補(bǔ)丁文件 045
3.1.5 撤銷補(bǔ)丁文件 046
3.2 常用的內(nèi)存分配和釋放接口 046
3.2.1 kmalloc和kfree 047
3.2.2 vmalloc和vfree 048
3.2.3 分配連續(xù)的內(nèi)存頁(yè) 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 進(jìn)程的狀態(tài) 064
3.6.2 創(chuàng)建內(nèi)核線程 067
3.6.3 二號(hào)進(jìn)程 069
3.7 工作隊(duì)列 070
3.8 等待隊(duì)列 071
3.9 實(shí)現(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 定時(shí)器 086
3.11.1 毫秒級(jí)定時(shí)器 086
3.11.2 高精度定時(shí)器 089
3.12 延時(shí)任務(wù) 093
第4章 并發(fā)與互斥 095
4.1 信號(hào)量 096
4.2 互斥體 098
4.3 完成量 099
4.4 原子操作 102
4.4.1 整型原子操作 103
4.4.2 位原子操作 105
4.5 自旋鎖 105
4.6 讀寫(xiě)鎖 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 死鎖檢測(cè) 117
第5章 系統(tǒng)調(diào)用 120
5.1 執(zhí)行系統(tǒng)調(diào)用 120
5.1.1 系統(tǒng)調(diào)用的執(zhí)行過(guò)程 120
5.1.2 系統(tǒng)調(diào)用的三種執(zhí)行方式 121
5.2 C與匯編 123
5.2.1 C語(yǔ)言和匯編語(yǔ)言函數(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)用的實(shí)現(xiàn)方式 136
5.5 通過(guò)軟件中斷實(shí)現(xiàn)系統(tǒng)調(diào)用 138
5.5.1 通過(guò)0x80軟件中斷執(zhí)行系統(tǒng)調(diào)用 138
5.5.2 自己動(dòng)手實(shí)現(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ū)動(dòng) 175
7.1 最簡(jiǎn)單的字符設(shè)備驅(qū)動(dòng) 175
7.1.1 相關(guān)接口 175
7.1.2 示例程序 178
7.2 通過(guò)字符設(shè)備驅(qū)動(dòng)訪問(wèn)串口 181
7.2.1 串行通信 181
7.2.2 相關(guān)寄存器 181
7.2.3 串口接收/發(fā)送配置 183
7.2.4 示例程序 183
7.3 通過(guò)ioctl操作配置串口參數(shù) 188
7.3.1 相關(guān)寄存器 188
7.3.2 示例程序 188
第8章 外部中斷 191
8.1 基本概念 191
8.2 通過(guò)中斷讀取串口數(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 工作隊(duì)列 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í)行過(guò)程 207
9.1.2 VFS管理的對(duì)象 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ū)動(dòng) 235
10.1 塊設(shè)備 235
10.2 相關(guān)概念 236
10.2.1 通用磁盤(pán)結(jié)構(gòu)體gendisk 236
10.2.2 塊設(shè)備對(duì)象block_device 239
10.2.3 I/O處理基本單元bio 240
10.3 第一個(gè)塊設(shè)備驅(qū)動(dòng) 244
10.4 塊I/O請(qǐng)求隊(duì)列 247
10.4.1 塊I/O請(qǐng)求 247
10.4.2 請(qǐng)求隊(duì)列 249
10.4.3 相關(guān)接口 251
10.5 在塊設(shè)備驅(qū)動(dòng)中使用請(qǐng)求隊(duì)列 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 寫(xiě)一個(gè)塊I/O調(diào)度器 265
11.4 Mq-Deadline調(diào)度器 269
第12章 文件系統(tǒng) 271
12.1 注冊(cè)文件系統(tǒng) 271
12.1.1 超級(jí)塊 271
12.1.2 相關(guān)接口 273
12.1.3 示例程序 273
12.2 創(chuàng)建超級(jí)塊 275
12.3 創(chuàng)建根目錄 278
12.4 本級(jí)目錄和上級(jí)目錄 281
12.5 增加一個(gè)文件 285
12.6 增加文件的讀寫(xiě)操作 288
12.7 動(dòng)態(tài)創(chuàng)建文件 289
12.8 文件的刪除操作 294
12.9 寫(xiě)一個(gè)磁盤(pán)文件系統(tǒng) 295
12.9.1 磁盤(pán)文件系統(tǒng) 295
12.9.2 注冊(cè)并創(chuàng)建超級(jí)塊 297
12.9.3 目錄下文件的遍歷 304
12.9.4 在根目錄下創(chuàng)建文件 308
12.9.5 讀取文件數(shù)據(jù) 310
12.9.6 向文件寫(xiě)入數(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章 進(jìn)程調(diào)度 333
14.1 基本概念 333
14.1.1 進(jìn)程調(diào)度器 333
14.1.2 調(diào)度實(shí)體 338
14.1.3 調(diào)度域 338
14.1.4 進(jìn)程控制塊 341
14.1.5 運(yùn)行隊(duì)列 344
14.1.6 進(jìn)程調(diào)度流程 346
14.2 動(dòng)手實(shí)現(xiàn)進(jìn)程調(diào)度器 347
14.3 公平調(diào)度器分析 353
14.3.1 權(quán)重和虛擬運(yùn)行時(shí)間 353
14.3.2 負(fù)載的計(jì)算 355
14.3.3 進(jìn)程的遷移 357
14.3.4 為新進(jìn)程/被喚醒進(jìn)程選擇合適的CPU 360
第15章 網(wǎng)絡(luò)數(shù)據(jù)包過(guò)濾 362
15.1 Netfilter原理 362
15.2 實(shí)現(xiàn)最簡(jiǎ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 連接跟蹤機(jī)制 387
15.6 NF Queue 391
15.6.1 將數(shù)據(jù)包傳遞給應(yīng)用程序 391
15.6.2 創(chuàng)建并監(jiān)聽(tīng)NF Queue套接字 392
15.6.3 示例程序 400
15.7 Iptables 412
15.8 ARP數(shù)據(jù)包過(guò)濾 412
第16章 Linux安全模塊 415
16.1 LSM的實(shí)現(xiàn)原理 415
16.2 編寫(xiě)一個(gè)簡(jiǎn)單的LSM模塊 417
16.2.1 打內(nèi)核補(bǔ)丁 417
16.2.2 編寫(xiě)LSM模塊 419
16.2.3 控制目錄的創(chuàng)建 422
16.3 理解LSM框架 425
16.4 目錄訪問(wèn)控制 427
16.5 inode節(jié)點(diǎn)訪問(wèn)控制 430
16.6 文件訪問(wèn)控制 432
16.7 小結(jié) 434