LInux內(nèi)核分析及編程是一本計(jì)算機(jī)類書籍,對于想了解Linux開發(fā),以及從事Linux內(nèi)核編程的開發(fā)人員來說,本書是一本集大成之作,它既有講解透徹的原理,也有詳細(xì)實(shí)用的示例,更有作者多年從事實(shí)際開發(fā)工作的心得。歡迎大家前來下載!
LInux內(nèi)核分析及編程內(nèi)容簡介
本書作者在整理自己多年研發(fā)筆記的基礎(chǔ)上,以精心挑選的典型開發(fā)實(shí)例,向讀者詳細(xì)講述了Linux內(nèi)核源代碼的各部分結(jié)構(gòu)、原理及組成框架,主要分析了Linux最新版本(2.6.11)的內(nèi)核源代碼,幫助讀者深入理解Linux內(nèi)核,精通Linux內(nèi)核編程。全書分為20章,內(nèi)容包括進(jìn)程管理、進(jìn)程間通信、內(nèi)存管理、文件系統(tǒng)、I/O接口及資源管理、內(nèi)核的編譯及調(diào)試原理、網(wǎng)絡(luò)通信、內(nèi)核安全、USB驅(qū)動程序等。
對于想了解Linux開發(fā),以及從事Linux內(nèi)核編程的開發(fā)人員來說,本書是一本集大成之作,它既有講解透徹的原理,也有詳細(xì)實(shí)用的示例,更有作者多年從事實(shí)際開發(fā)工作的心得。本書主要針對從事Linux內(nèi)核編程的中高級讀者及軟件工程師,也很合適作為大學(xué)教材和參考書。
LInux內(nèi)核分析及編程目錄
第1章數(shù)據(jù)類型及鏈表1
1.1數(shù)據(jù)類型所占空間1
1.2有關(guān)移植性的其他問題3
1.2.1時(shí)間間隔3
1.2.2頁面大小3
1.2.3字節(jié)存儲順序3
1.2.4數(shù)據(jù)對齊4
1.3內(nèi)核通用鏈表4
1.3.1hlist哈希鏈表7
1.3.2RCU操作保護(hù)的鏈表8
1.4AT&T的匯編格式9
1.5內(nèi)核中的時(shí)間延遲11
第2章進(jìn)程及進(jìn)程調(diào)度13
2.1進(jìn)程結(jié)構(gòu)13
2.2進(jìn)程創(chuàng)建24
2.2.1對象緩存的分配24
2.2.2系統(tǒng)調(diào)用sys_fork25
2.3內(nèi)核線程26
2.4工作隊(duì)列27
2.4.1工作隊(duì)列的結(jié)構(gòu)及宏定義28
2.4.2工作隊(duì)列的建立29
2.5進(jìn)程調(diào)度33
2.5.1runqueue結(jié)構(gòu)34
2.5.2進(jìn)程調(diào)度初始化36
2.5.3負(fù)載平衡的啟動38
2.5.4負(fù)載平衡的方法42
2.5.5函數(shù)schedule分析46
2.5.6調(diào)度器的實(shí)時(shí)性能51
2.6Linux內(nèi)核搶占51
第3章內(nèi)核同步機(jī)制55
3.1內(nèi)核中的互斥機(jī)制55
3.1.1自旋鎖55
3.1.2原子操作59
3.1.3信號量60
3.2RCU64
3.2.1RCU原理介紹64
3.2.2RCU應(yīng)用實(shí)例66
3.2.3RCU相關(guān)數(shù)據(jù)結(jié)構(gòu)67
3.2.4內(nèi)核RCU機(jī)制的建立68
3.2.5RCU回調(diào)處理73
3.3內(nèi)核與用戶空間的通信機(jī)制74
3.3.1熱插拔操作74
3.3.2內(nèi)核發(fā)消息到用戶空間通信機(jī)制75
3.3.3內(nèi)核空間調(diào)用用戶空間程序78
第4章內(nèi)存管理81
4.1內(nèi)存地址類型和內(nèi)存保護(hù)82
4.1.1地址類型82
4.1.2內(nèi)存保護(hù)83
4.280386的段頁式管理機(jī)制84
4.2.1描述符及分段84
4.2.2物理內(nèi)存分頁機(jī)制85
4.3IA-64Linux地址空間劃分86
4.4進(jìn)程的內(nèi)存組織88
4.4.1內(nèi)存管理的數(shù)據(jù)結(jié)構(gòu)88
4.4.2VMA在/proc文件系統(tǒng)中的顯示90
4.5虛擬內(nèi)存管理91
4.5.1大容量對象緩存91
4.5.2內(nèi)存映射94
4.5.3物理內(nèi)存的反向映射110
4.5.4虛擬內(nèi)存的加鎖和保護(hù)113
4.6物理內(nèi)存管理114
4.6.1物理內(nèi)存的結(jié)構(gòu)114
4.6.2物理頁位圖116
4.6.3物理內(nèi)存的初始化過程117
4.6.4物理頁面的分配和回收121
4.6.5緩存及slab125
4.6.6緩存分配的應(yīng)用129
4.6.7分配緩存函數(shù)的分析129
4.6.8交換空間135
4.6.9請頁機(jī)制137
4.6.10守護(hù)進(jìn)程kswapd139
4.6.11內(nèi)存管理相關(guān)的高速緩存144
4.6.12內(nèi)存緩沖池144
4.6.13大塊內(nèi)存頁147
第5章虛擬文件系統(tǒng)149
5.1VFS的超級塊.dentry和節(jié)點(diǎn)結(jié)構(gòu)150
5.2與進(jìn)程聯(lián)系的文件系統(tǒng)相關(guān)結(jié)構(gòu)153
5.3系統(tǒng)有關(guān)操作函數(shù)集的結(jié)構(gòu)155
5.3.1super_operations155
5.3.2inode_operations156
5.3.3file_operations156
5.3.4dquot_operations157
5.4文件系統(tǒng)的建立過程157
5.5文件系統(tǒng)的注冊.安裝與卸載159
5.5.1文件系統(tǒng)的注冊159
5.5.2文件系統(tǒng)的安裝與卸載160
5.6文件系統(tǒng)的系統(tǒng)調(diào)用過程160
5.6.1系統(tǒng)調(diào)用open161
5.6.2read系統(tǒng)調(diào)用170
5.7文件系統(tǒng)的各種緩存172
5.7.1塊緩存buffer172
5.7.2inode緩存182
5.7.3目錄條目dentry緩存185
5.8緩存同步操作——sys_sync系統(tǒng)調(diào)用189
5.8.1多個(gè)節(jié)點(diǎn)同步回寫操作函數(shù)
5.8.1sync_inodes189
5.8.2單個(gè)節(jié)點(diǎn)同步回寫操作函數(shù)sync_inodes_sb190
5.8.3節(jié)點(diǎn)地址空間數(shù)據(jù)回寫操作函數(shù)194
5.8.4塊設(shè)備節(jié)點(diǎn)映射的數(shù)據(jù)同步回寫
5.8.4函數(shù)sync_blockdev200
5.9pdflush線程池203
5.9.1pdflush線程池的實(shí)現(xiàn)203
5.9.2pdflush線程使用實(shí)例
5.9.2——wakeup_bdflush206
5.10限額機(jī)制207
第6章EXT2文件系統(tǒng)208
6.1EXT2文件系統(tǒng)的幾個(gè)數(shù)據(jù)結(jié)構(gòu)210
6.1.1EXT2超級塊210
6.1.2EXT2超級塊信息結(jié)構(gòu)211
6.1.3超級塊的操作函數(shù)結(jié)構(gòu)212
6.1.4EXT2的索引節(jié)點(diǎn)inode212
6.1.5EXT2文件系統(tǒng)的節(jié)點(diǎn)信息結(jié)構(gòu)214
6.1.6節(jié)點(diǎn)操作函數(shù)結(jié)構(gòu)215
6.1.7文件操作函數(shù)結(jié)構(gòu)215
6.1.8EXT2文件系統(tǒng)的組描述符215
6.2EXT2文件系統(tǒng)建立過程215
6.3ext2_read_inode函數(shù)分析220
6.4ext2_write_inode函數(shù)分析221
6.5文件的讀寫223
6.6文件擴(kuò)展時(shí)的數(shù)據(jù)塊分配策略228
6.7EXT2的目錄項(xiàng)及文件的定位234
6.8鏈接文件237
第7章其他文件系統(tǒng)238
7.1ramfs內(nèi)存文件系統(tǒng)238
7.1.1ramfs文件系統(tǒng)模塊初始化238
7.1.2ramfs文件系統(tǒng)操作函數(shù)集240
7.1.3文件讀寫操作240
7.1.4目錄及節(jié)點(diǎn)操作函數(shù)集241
7.2/proc文件系統(tǒng)242
7.2.1/proc文件系統(tǒng)在調(diào)試中的作用243
7.2.2/proc文件系統(tǒng)實(shí)現(xiàn)分析245
7.2.3在/proc中讀寫設(shè)備信息示例250
7.3VFAT文件系統(tǒng)255
7.3.1FAT文件系統(tǒng)的組成255
7.3.2引導(dǎo)記錄區(qū)DBR及定義256
7.3.3FAT文件系統(tǒng)結(jié)構(gòu)定義260
7.3.4VFAT文件系統(tǒng)的注冊超級塊261
7.3.5超級塊操作函數(shù)集的實(shí)現(xiàn)264
7.3.6目錄操作函數(shù)集265
7.4Devfs文件系統(tǒng)270
7.5sysfs文件系統(tǒng)275
7.5.1內(nèi)核對象相關(guān)結(jié)構(gòu)276
7.5.2sysfs文件系統(tǒng)的建立過程277
7.5.3sysfs提供給對象模型的調(diào)用函數(shù)278
7.5.4sysfs建立bus子系統(tǒng)280
7.5.5bus子系統(tǒng)的接口函數(shù)282
7.5.6在sysfs中建立pci目錄示例283
第8章I/O端口資源管理288
8.1I/O資源的描述288
8.1.1內(nèi)存屏障289
8.1.2資源管理函數(shù)290
8.2中斷處理295
8.2.1硬件提供的中斷機(jī)制295
8.2.2Linux的中斷處理297
8.2.3中斷向量的設(shè)置和相關(guān)數(shù)據(jù)的
8.2.3初始化298
8.2.4中斷處理全過程299
8.2.5tasklet機(jī)制303
8.2.6中斷處理在/proc文件系統(tǒng)中的報(bào)告311
8.2.7并口中斷處理程序示例311
8.3DMA315
8.3.1DMA控制器硬件結(jié)構(gòu)315
8.3.2DMA通道使用的地址316
8.3.3DMA操作函數(shù)317
8.3.4DMA映射318
8.3.5DMA池321
8.3.6一個(gè)簡單的使用DMA例子324
8.4電源管理325
8.4.1ACPI規(guī)范介紹326
8.4.2ACPI的一些基本概念328
8.4.3ACPI的運(yùn)行329
8.4.4ACPI驅(qū)動程序分析332
8.4.5pci的ACPI電源管理的實(shí)現(xiàn)337
8.4.6APM電源管理模式341
第9章模塊機(jī)制348
9.1簡單模塊示例348
9.2內(nèi)核空間和用戶空間349
9.2.1處理器保護(hù)級349
9.2.2用戶空間和內(nèi)核空間權(quán)限350
9.2.3用戶空間和內(nèi)核空間范圍及函數(shù)
9.2.3參數(shù)傳遞350
9.2.4內(nèi)核態(tài)和用戶態(tài)之間數(shù)據(jù)傳遞352
9.3模塊的使用過程353
9.4實(shí)現(xiàn)機(jī)制354
9.4.1模塊在/proc文件系統(tǒng)中的顯示354
9.4.2模塊結(jié)構(gòu)354
9.4.3模塊數(shù)據(jù)宏操作356
9.4.4實(shí)現(xiàn)函數(shù)的分析359
9.5modutils介紹369
第10章設(shè)備驅(qū)動程序371
10.1設(shè)備文件及設(shè)備訪問方式372
10.1.1輪詢與中斷372
10.1.2直接內(nèi)存訪問(DMA)372
10.1.3設(shè)備驅(qū)動使用內(nèi)存372
10.1.4設(shè)備文件及接口372
10.2設(shè)備驅(qū)動程序模型374
10.2.1驅(qū)動模型中的描述結(jié)構(gòu)374
10.2.2驅(qū)動程序向新的模型上遷移383
10.2.3即插即用386
10.2.4文件系統(tǒng)中與設(shè)備驅(qū)動相關(guān)
10.2.4的結(jié)構(gòu)389
10.3字符設(shè)備操作過程390
10.4塊設(shè)備偽文件系統(tǒng)393
10.4.1塊設(shè)備文件系統(tǒng)初始化393
10.4.2文件操作函數(shù)集394
10.5通用硬盤GENHD398
10.6通用塊層403
10.6.1bio相關(guān)結(jié)構(gòu)404
10.6.2bio_vec池405
10.6.3碎片鏈表406
10.6.4請求及請求隊(duì)列結(jié)構(gòu)407
10.6.5通用的命令標(biāo)志請求410
10.6.6I/O調(diào)度器411
10.7塊設(shè)備的讀寫請求隊(duì)列及提交過程415
10.7.1初始化塊設(shè)備的請求隊(duì)列415
10.7.2塊設(shè)備讀寫請求的傳遞過程417
10.8IOCTL設(shè)備控制操作423
10.9編寫設(shè)備驅(qū)動程序的基本步驟425
10.9.1如何添加一個(gè)字符設(shè)備425
10.9.2如何添加一個(gè)塊設(shè)備425
第11章FLASH閃存及SD/MMC卡設(shè)備
第11章驅(qū)動程序427
11.1MTD內(nèi)存技術(shù)設(shè)備427
11.1.1MTD內(nèi)存技術(shù)設(shè)備層次結(jié)構(gòu)428
11.1.2設(shè)備層和原始設(shè)備層的函數(shù)
11.1.2調(diào)用關(guān)系430
11.1.3MTD相關(guān)結(jié)構(gòu)430
11.1.4MTD塊設(shè)備初始化432
11.1.5MTD塊設(shè)備的讀寫操作439
11.1.6MTD核心初始化442
11.1.7MTD字符設(shè)備443
11.1.8具體flash芯片的探測及映射444
11.1.9驅(qū)動程序?qū)嵗治?47
11.2SD/MMC卡塊設(shè)備驅(qū)動程序449
11.2.1MMC抽象設(shè)備層相關(guān)結(jié)構(gòu)449
11.2.2MC抽象設(shè)備層MMC塊設(shè)備
11.2.2驅(qū)動程序453
11.2.3具體MMC控制器驅(qū)動程序示例462
第12章Linux系統(tǒng)初始化468
12.1BootLoader468
12.1.1PC的BootLoader468
12.1.2嵌入式系統(tǒng)BootLoader473
12.2Linux內(nèi)核啟動過程478
第13章系統(tǒng)調(diào)用481
13.1設(shè)定0x80號中斷481
13.2系統(tǒng)調(diào)用現(xiàn)場保護(hù)482
13.3Linux系統(tǒng)調(diào)用的流程484
13.3.1系統(tǒng)調(diào)用過程484
13.3.2中斷INT0x80入口處理484
第14章Linux網(wǎng)絡(luò)系統(tǒng)分層結(jié)構(gòu)488
14.1Linux網(wǎng)絡(luò)系統(tǒng)分層結(jié)構(gòu)488
14.2數(shù)據(jù)包結(jié)構(gòu)489
14.2.1msghdr結(jié)構(gòu)489
14.2.2socket結(jié)構(gòu)490
14.2.3sk_buff結(jié)構(gòu)及管理490
14.2.4sock結(jié)構(gòu)495
14.3sockfs文件系統(tǒng)497
14.4利用socket通信499
14.4.1socket層500
14.4.2IP層收發(fā)數(shù)據(jù)包函數(shù)506
14.4.3網(wǎng)絡(luò)核心層513
14.5網(wǎng)卡驅(qū)動程序525
14.5.1NAPI525
14.5.28139CP網(wǎng)卡驅(qū)動程序526
14.6netlink533
14.6.1內(nèi)核netlink調(diào)用函數(shù)535
14.6.2示例536
第15章執(zhí)行文件的運(yùn)行過程544
15.1動態(tài)鏈接與靜態(tài)鏈接544
15.2位置無關(guān)代碼(PIC)的匯編
15.2語言編程548
15.3可執(zhí)行文件格式550
15.3.1a.out文件格式分析550
15.3.2COFF文件格式分析551
15.3.3ELF文件格式分析552
15.3.4符號的重定位557
15.3.5ELF文件加載過程558
15.4可執(zhí)行文件加載代碼分析559
第16章進(jìn)程間通信567
16.1管道567
16.2消息隊(duì)列575
16.2.1消息隊(duì)列結(jié)構(gòu)575
16.2.2消息隊(duì)列文件系統(tǒng)576
16.2.3消息隊(duì)列系統(tǒng)調(diào)用函數(shù)579
16.3共享內(nèi)存585
16.3.1共享內(nèi)存相關(guān)結(jié)構(gòu)586
16.3.2tmpfs文件系統(tǒng)587
16.3.3共享內(nèi)存系統(tǒng)調(diào)用593
16.4信號599
16.4.1信號相關(guān)的結(jié)構(gòu)600
16.4.2設(shè)置信號響應(yīng)601
16.4.3信號分發(fā)603
16.4.4信號響應(yīng)607
16.5用戶空間信號量操作610
16.5.1信號量相關(guān)結(jié)構(gòu)610
16.5.2系統(tǒng)調(diào)用函數(shù)的實(shí)現(xiàn)611
第17章Linux的安全策略618
17.1Linux常用安全技術(shù)618
17.1.1PAM機(jī)制618
17.1.2入侵檢測系統(tǒng)618
17.1.3加密文件系統(tǒng)619
17.1.4安全審計(jì)620
17.1.5基于ACL的自主訪問控制620
17.1.6強(qiáng)制訪問控制621
17.1.7防火墻621
17.2Linux能力機(jī)制621
17.3Flask安全體系結(jié)構(gòu)概述622
17.4SELinux安全策略配置語言624
17.4.1基本概念625
17.4.2Linux與SELinux在安全管理
17.4.2上的區(qū)別626
17.4.3安全模型626
17.4.4策略語言及配置樣例626
17.5SELinux的內(nèi)部結(jié)構(gòu)634
17.6SELinux的實(shí)現(xiàn)636
17.6.1任務(wù)的安全管理637
17.6.2AVC分析640
17.6.3security_compute_av函數(shù)644
17.7策略庫的結(jié)構(gòu)647
17.7.1sidtab結(jié)構(gòu)648
17.7.2symtab結(jié)構(gòu)649
17.7.3avtab結(jié)構(gòu)649
17.7.4class_datum結(jié)構(gòu)649
17.7.5role_datum結(jié)構(gòu)650
17.7.6user_datum結(jié)構(gòu)651
17.7.7role_tran結(jié)構(gòu)651
17.7.8cond_node結(jié)構(gòu)652
17.8安全審計(jì)的管理653
17.9sel_fs文件系統(tǒng)654
17.10防火墻660
17.10.1Netfilter框架661
17.10.2iptables管理工具662
17.10.3Netfilter例子663
第18章內(nèi)核配置與編譯664
18.1配置文件的生成664
18.2配置語言665
18.3主Makefile分析667
18.3.1主Makefile中的分析667
18.3.2嵌入式內(nèi)核的交叉編譯671
18.4Rule.make及子目錄編譯673
18.4.1編譯選項(xiàng)變化引起增量編譯673
18.4.2子目錄的編譯673
18.4.3Rule.make分析674
18.4.4驅(qū)動程序配置示例680
第19章Linux內(nèi)核調(diào)試683
19.1strace命令683
19.2oops消息分析683
19.3調(diào)試工具684
19.4printk打印調(diào)試688
19.4.1printk688
19.4.2如何記錄消息689
19.4.3sys_syslog系統(tǒng)調(diào)用690
19.4.4printk函數(shù)分析692
19.4.5控制臺694
19.4.6tty代碼分析695
19.4.7tty_register_ldisc函數(shù)701
19.5ptrace調(diào)試跟蹤702
19.5.1調(diào)試寄存器702
19.5.2TSS中的調(diào)度陷阱704
19.5.3INT3704
19.5.4程序的單步執(zhí)行705
19.5.5ptrace系統(tǒng)調(diào)用705
19.5.6系統(tǒng)調(diào)用跟蹤710
19.5.7調(diào)試陷阱處理711
19.5.8調(diào)試器運(yùn)行方法712
第20章USB總線驅(qū)動程序715
20.1USB的拓樸結(jié)構(gòu)715
20.2USB2.0協(xié)議717
20.2.1包標(biāo)志符及傳輸控制概述717
20.2.2總線枚舉718
20.2.3USB設(shè)備請求719
20.2.4描述符719
20.2.5OTG規(guī)范720
20.3USB總線驅(qū)動程序結(jié)構(gòu)722
20.3.1USB主機(jī)驅(qū)動程序的體系722
20.3.2USB驅(qū)動程序的編寫723
20.3.3設(shè)備結(jié)構(gòu)間的關(guān)系725
20.4USB驅(qū)動程序初始化727
20.5usbfs文件系統(tǒng)729
20.5.1usbfs文件系統(tǒng)初始化729
20.5.2usbfs文件操作731
20.6USB請求塊(URB)732
20.6.1URB結(jié)構(gòu)732
20.6.2URB的操作733
20.7同步消息處理735
20.7.1同步請求完成模型736
20.7.2控制與查詢737
20.8用主機(jī)控制器驅(qū)動層(HCD層)737
20.8.1USB總線的注冊與注銷738
20.8.2HCD操作函數(shù)739
20.8.3注冊根集線器741
20.9集線器Hub741
20.9.1Hub初始化742
20.9.2Hub設(shè)備的各種事件處理744
20.9.3ehci-hcd控制器752
20.10USB大存儲設(shè)備758
20.10.1Bulk-Only傳輸協(xié)議759
20.10.2SCSI體系結(jié)構(gòu)模型及命令描述塊761
20.10.3大存儲類主機(jī)驅(qū)動程序765
20.11USB從設(shè)備驅(qū)動程序(Gadget)779
20.11.1Gadget相關(guān)結(jié)構(gòu)781
20.11.2GadgetAPI783
20.11.3pxa2xx控制器786
20.11.4gadgetfs文件系統(tǒng)794
20.11.5大存儲設(shè)備驅(qū)動程序804
附錄ALinux系統(tǒng)調(diào)用819
主要參考文獻(xiàn)823
- PC官方版
- 安卓官方手機(jī)版
- IOS官方手機(jī)版