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