linux多线程编程书籍推荐:linux大牛之路从这几本书開始总结
linux多線程編程是指基于Linux操作系統下的多線程編程,包含多任務程序的設計,并發程序設計,網絡程序設計。數據共享等。Linux系統下的多線程遵循POSIX線程接口,稱為pthread。編寫Linux下的多線程程序,須要使用頭文件pthread.h,連接時須要使用庫libpthread.a。
小編今天就來把幾本linux多線程編程書籍推薦給大家,希望可以幫助到想要了解和學習linux多線程編程的攻城獅們。
linux多線程編程書籍推薦no.1:《精通Linux》
我們學習Linux的原因可能各不相同。對于IT從業者(如系統運維人員)來說,他們須要了解本書中的差點兒全部內容。
對于Linux軟件架構和開發者來說。他們相同須要了解這些內容,以便發揮操作系統的最大功效。對于研究人員和學生來說,本書可以讓他們理解為什么我們要這樣設置系統。本書菜鳥與老鳥通吃。既可作為菜鳥的新手教程。也可以作為老鳥的進階指南。
linux多線程編程書籍推薦no.2:《Linux設備驅動開發具體解釋:基于最新的Linux 4.0內核》
歷時8年。三次重構。內窖愈加爐火純青。
所有代碼更新至全新的Linux4.0版本號。
全面解說ARM Linux新版本號內核架構,如設備樹等。
不只注重知識和程序的解說,更注重程序的思想、演變、架構和算法。
linux多線程編程書籍推薦no.3:《深度實踐KVM:核心技術、管理運維、性能優化與項目實施》
中國運維領域里劃時代著作。國內頂尖KVM專家和運維專家多年大規模生產環境實踐經驗總結,國內數十位運維專家鼎力支持和推薦。
從核心技術、管理運維、性能優化、項目實施等多個維度系統、深入解說KVM虛擬化技術的工作原理、應用方法和技術生態。并針對生產環境中的各種難題給出了解決方式。
linux多線程編程書籍推薦no.4:《Linux性能優化大師》
本書適合廣大Linux用戶深入學習,并適合計算機專業本科、碩士等專業的學生學習參考。
為特定server的應用程序調整關鍵參數。從而產生優異的性能。
linux多線程編程書籍推薦no.5:《精通Linux內核網絡》
專注于各網絡協議實現技術的精髓及其遵循的指導方針和原則。
重點解說數據包在Linux內核網絡棧中的傳輸過程。闡述其與網絡各層及各子系統之間的交互。
從網絡開發人員視角,配合清晰圖表。深入剖析Linux內核網絡子系統的內部細節及核心實現。
最詳盡的Linux內核網絡專著,深入剖析IPsec、Wireless、InfiniBand等重要內核網絡子系統。
linux多線程編程的學習一定要與時俱進。杜絕閉門造車。以上的linux多線程編程書籍推薦假設還是不能滿足你的需求,你還想要尋找很多其它重磅的計算機好書,請點擊關注》》計算機圖書頻道。
《精通Linux內核網絡》討論Linux 內核網絡棧的實現及其原理,深入而詳盡地分析網絡子系統及其架構,主要內容包含:內核網絡基礎知識、Netlink 套接字、ARP、鄰居發現和ICMP 等重要協議的實現、IPv4 和IPv6 的深入探索、Linux 路由選擇、Netfilter 和IPsec 的實現、Linux 無線網絡、InfiniBand 等。
《精通Linux內核網絡》不僅適合從事網絡相關項目的專業人員參考,也能為相關研究人員和學生提供極大幫助。?
作譯者
Rami Rosen?資深軟件project師。Linux內核網絡專家。
從業十余年間,參與過多個尖端Linux內核項目,曾就Linux內核網絡和虛擬化發表過多篇文章,并做過多次演講。博客地址:http://ramirose.wix.com/ramirosen
譯者簡單介紹:
袁國忠?
自由譯者;2000年起專事翻譯,主譯圖書,偶譯新聞稿、軟文。出版譯著40余部,當中包含《C++ Prime Plus中文版》《CCNA學習指南》《CCNP ROUTE學習指南》《面向模式的軟件架構:模式系統》《Android應用UI設計模式》《風投的選擇:誰是下一個十億美元級公司》等,總計700余萬字。專事翻譯前,從事過三年化工產品分析和開發,做過兩年雜志和圖書編輯。?
文件夾
第1章 緒論 11.1 Linux網絡棧 2
1.2 網絡設備 4
1.2.1 網絡設備中的NAPI 5
1.2.2 數據包的收發 5
1.2.3 套接字緩沖區 7
1.3 Linux內核網絡開發模型 10
1.4 總結 12
第2章 Netlink套接字 13
2.1 Netlink簇 13
2.1.1 Netlink套接字庫 15
2.1.2 結構sockaddr_nl 15
2.1.3 用于控制TCP/IP聯網的用戶
空間包 15
2.1.4 內核Netlink套接字 16
2.1.5 Netlink消息報頭 20
2.1.6 NETLINK_ROUTE消息 22
2.1.7 在路由選擇表中加入和刪除
路由選擇條目 24
2.2 通用Netlink協議 25
2.2.1 創建和發送通用Netlink消息 29
2.2.2 套接字監視接口 31
2.3 總結 32
2.4 高速參考 32
第3章 Internet控制消息協議(ICMP) 36
3.1 ICMPv4 36
3.1.1 ICMPv4的初始化 37
3.1.2 ICMPv4報頭 38
3.1.3 接收ICMPv4消息 42
3.1.4 發送ICMPv4消息:目的地
不可達 43
3.2 ICMPv6 47
3.2.1 ICMPv6初始化 47
3.2.2 ICMPv6報頭 48
3.2.3 接收ICMPv6消息 49
3.2.4 發送ICMPv6消息 52
3.3 ICMP套接字(ping套接字) 55
3.4 總結 56
3.5 高速參考 56
3.5.1 方法 56
3.5.2 表格 57
3.5.3 procfs條目 58
3.5.4 使用iptables創建“目的地
不可達”消息 59
第4章 IPv4 61
4.1 IPv4報頭 62
4.2 IPv4的初始化 63
4.3 接收IPv4數據包 64
4.4 接收IPv4組播數據包 67
4.5 IP選項 69
4.5.1 時間戳選項 71
4.5.2 記錄路由選項 74
4.5.3 IP選項和分段 82
4.5.4 創建IP選項 84
4.6 發送IPv4數據包 85
4.7 分段 89
4.7.1 高速路徑 90
4.7.2 慢速路徑 93
4.8 重組 94
4.9 轉發 99
4.10 總結 101
4.11 高速參考 101
4.11.1 方法 102
4.11.2 宏 104
第5章 IPv4路由選擇子系統 105
5.1 轉發和FIB 105
5.2 在路由選擇子系統中進行查找 107
5.3 FIB表 110
5.3.1 FIB信息 110
5.3.2 緩存 115
5.3.3 下一跳 115
5.3.4 策略路由選擇 117
5.3.5 FIB別名 118
5.4 ICMPv4重定向消息 121
5.4.1 生成ICMPv4重定向消息 122
5.4.2 接收ICMPv4重定向消息 123
5.4.3 IPv4路由選擇緩存 125
5.5 總結 126
5.6 高速參考 126
5.6.1 方法 127
5.6.2 宏 128
5.6.3 表 128
5.6.4 路由標志 129
第6章 高級路由選擇 131
6.1 組播路由選擇 131
6.1.1 IGMP 132
6.1.2 組播路由選擇表 133
6.1.3 組播轉發緩存(MFC) 134
6.1.4 組播路由器 136
6.1.5 vif設備 137
6.1.6 IPv4組播接收路徑 138
6.1.7 方法ip_mr_forward() 141
6.1.8 方法ipmr_queue_xmit() 143
6.1.9 方法ipmr_forward_finish() 145
6.1.10 組播流量中的TTL 146
6.2 策略路由選擇 146
6.2.1 策略路由選擇的管理 147
6.2.2 策略路由選擇的實現 147
6.3 多路徑路由選擇 148
6.4 總結 149
6.5 高速參考 149
6.5.1 方法 149
6.5.2 宏 151
6.5.3 procfs組播條目 152
6.5.4 表 152
第7章 Linux鄰接子系統 153
7.1 鄰接子系統的核心 153
7.1.1 創建和釋放鄰居 160
7.1.2 用戶空間和鄰接子系統之間
的交互 161
7.1.3 處理網絡事件 163
7.2 ARP協議(IPv4) 163
7.2.1 ARP:發送請求 165
7.2.2 ARP:接收請求和應答 168
7.3 NDISC協議(IPv6) 174
7.3.1 反復地址檢測(DAD) 174
7.3.2 NIDSC:發送請求 176
7.3.3 NDISC:接收鄰居請求和
通告 179
7.4 總結 185
7.5 高速參考 186
7.5.1 方法 186
7.5.2 宏 189
7.5.3 結構neigh_statistics 190
7.5.4 表 191
第8章 IPv6 192
8.1 IPv6簡單介紹 192
8.2 IPv6地址 193
8.2.1 特殊地址 193
8.2.2 組播地址 194
8.3 IPv6報頭 195
8.4 擴展報頭 197
8.5 IPv6初始化 199
8.6 自己主動配置 200
8.7 接收IPv6數據包 201
8.7.1 本地投遞 204
8.7.2 轉發 206
8.8 接收IPv6組播流量 210
8.9 組播偵聽者發現(MLD) 211
8.9.1 增加和退出組播組 212
8.9.2 MLDv2組播偵聽者報告 215
8.9.3 組播源過濾 215
8.10 發送IPv6數據包 220
8.11 IPv6路由選擇 221
8.12 總結 221
8.13 高速參考 221
8.13.1 方法 221
8.13.2 宏 224
8.13.3 表 224
8.13.4 特殊地址 225
8.13.5 IPv6路由選擇表的管理 226
第9章 Netfilter 227
9.1 Netfilter框架 227
9.2 Netfilter掛接點 228
注冊Netfilter鉤子回調函數 229
9.3 連接跟蹤 230
9.3.1 連接跟蹤的初始化 231
9.3.2 連接跟蹤條目 234
9.3.3 連接跟蹤輔助方法和期望
連接 238
9.3.4 iptables 241
9.3.5 投遞到當前主機 243
9.3.6 轉發數據包 245
9.3.7 網絡地址轉換(NAT) 245
9.3.8 NAT鉤子回調函數和連接
跟蹤鉤子回調函數 247
9.3.9 NAT鉤子回調函數 250
9.3.10 連接跟蹤擴展 252
9.4 總結 253
9.5 高速參考 253
9.5.1 方法 253
9.5.2 宏 255
9.5.3 表 255
9.5.4 工具和庫 256
第10章 IPsec 257
10.1 概述 257
10.2 Internet密鑰交換(IKE) 257
10.3 IPsec和加密 259
10.4 XFRM框架 259
10.4.1 XFRM的初始化 260
10.4.2 XFRM策略 260
10.4.3 XFRM狀態(安全關聯) 263
10.5 IPv4 ESP的實現 266
10.6 接收IPsec數據包(傳輸模式) 268
10.7 發送IPsec數據包(傳輸模式) 271
10.8 XFRM查找 272
10.9 IPsec的NAT穿越功能 275
10.10 總結 276
10.11 高速參考 276
10.11.1 方法 276
10.11.2 表 278
第11章 第4層協議 280
11.1 套接字 280
11.2 創建套接字 281
11.3 用戶數據包協議(UDP) 285
11.3.1 UDP的初始化 286
11.3.2 發送UDP數據包 287
11.3.3 接收來自網絡層(L3)的
UDP數據包 290
11.4 傳輸控制協議(TCP) 293
11.4.1 TCP報頭 293
11.4.2 TCP的初始化 295
11.4.3 TCP定時器 296
11.4.4 TCP套接字的初始化 297
11.4.5 TCP連接的建立 297
11.4.6 接收來自網絡層(L3)的
TCP數據包 298
11.4.7 發送TCP數據包 299
11.5 流控制傳輸協議(SCTP) 300
11.5.1 SCTP數據包和數據塊 301
11.5.2 SCTP塊頭 302
11.5.3 SCTP塊 302
11.5.4 SCTP關聯 303
11.5.5 建立SCTP關聯 305
11.5.6 接收SCTP數據包 305
11.5.7 發送SCTP數據包 306
11.5.8 SCTP心跳 306
11.5.9 SCTP多流 306
11.5.10 SCTP多宿主 307
11.6 數據報擁塞控制協議(DCCP) 307
11.6.1 DCCP報頭 307
11.6.2 DCCP的初始化 309
11.6.3 DCCP套接字的初始化 310
11.6.4 接收來自網絡層(L3)的
DCCP數據包 311
11.6.5 發送DCCP數據包 311
11.6.6 DCCP和NAT 312
11.7 總結 313
11.8 高速參考 313
11.8.1 方法 313
11.8.2 宏 315
11.8.3 表 315
第12章 無線子系統 317
12.1 mac80211子系統 317
12.2 802.11 MAC幀頭 318
12.3 802.11 MAC幀頭的其它成員 320
12.4 網絡拓撲 321
12.4.1 基礎設施BSS 321
12.4.2 IBSS(對等模式) 322
12.5 省電模式 322
12.5.1 進入省電模式 322
12.5.2 退出省電模式 322
12.5.3 處理組播/廣播緩沖區 323
12.6 管理層 325
12.6.1 掃描 325
12.6.2 身份驗證 325
12.6.3 關聯 325
12.6.4 又一次關聯 325
12.7 mac80211的實現 326
12.7.1 接收路徑 328
12.7.2 傳輸路徑 328
12.7.3 分段 329
12.7.4 mac80211 debugfs 330
12.7.5 無線模式 331
12.8 高吞吐量(IEEE 802.11n) 331
12.9 網狀網絡(802.11s) 334
12.9.1 HWMP 335
12.9.2 組建網狀網絡 336
12.10 Linux無線開發流程 337
12.11 總結 337
12.12 高速參考 338
12.12.1 方法 338
12.12.2 表 341
第13章 InfiniBand 343
13.1 RDMA和InfiniBand概述 343
13.1.1 RDMA棧的組織結構 344
13.1.2 RDMA技術的長處 345
13.1.3 InfiniBand硬件組件 345
13.1.4 InfiniBand中的編址 345
13.1.5 InfiniBand的功能 346
13.1.6 InfiniBand數據包 346
13.1.7 管理實體 347
13.2 RDMA資源 348
13.2.1 RDMA設備 348
13.2.2 PD 350
13.2.3 AH 350
13.2.4 MR 350
13.2.5 FMR池 351
13.2.6 MW 352
13.2.7 CQ 352
13.2.8 XRC 353
13.2.9 SRQ 353
13.2.10 QP 355
13.2.11 工作請求的處理 360
13.2.12 RDMA架構支持的操作 361
13.2.13 組播組 365
13.2.14 用戶空間RDMA API
和內核級RDMA API
的區別 365
13.3 總結 366
13.4 高速參考 366
第14章 高級主題 372
14.1 網絡命名空間 372
14.1.1 命名空間的實現 373
14.1.2 UTS命名空間的實現 381
14.1.3 網絡命名空間的實現 383
14.1.4 網絡命名空間的管理 388
14.2 cgroup 392
14.2.1 cgroup的實現 393
14.2.2 cgroup設備控制器:一個
簡單演示樣例 395
14.2.3 cgroup內存控制器:一個
簡單演示樣例 396
14.2.4 net_prio模塊 396
14.2.5 分類器cls_cgroup 397
14.2.6 掛載cgroup子系統 398
14.3 頻繁輪詢套接字 399
14.3.1 全局啟用 400
14.3.2 對特定套接字啟用 401
14.3.3 調整和配置 401
14.3.4 性能 401
14.4 Linux藍牙子系統 401
14.4.1 HCI層 404
14.4.2 HCI連接 406
14.4.3 L2CAP 407
14.4.4 BNEP 407
14.4.5 藍牙數據包接收示意圖 408
14.4.6 L2CAP擴展功能 409
14.4.7 藍牙工具 409
14.5 IEEE 802.15.4和6LoWPAN 410
14.5.1 鄰居發現優化 411
14.5.2 Linux內核的6LoWPAN
實現 412
14.6 NFC 415
14.6.1 NFC標簽 415
14.6.2 NFC設備 416
14.6.3 通信模式和操作模式 416
14.6.4 主機控制器接口 417
14.6.5 Linux對NFC的支持 417
14.6.6 用戶空間架構 421
14.6.7 Android NFC 421
14.7 通知鏈 422
14.8 PCI子系統 425
14.9 組合網絡設備 428
14.10 PPPoE協議 428
14.10.1 PPPoE報頭 429
14.10.2 PPPoE的初始化 430
14.10.3 PPPoE數據包的收發 432
14.11 Android 435
14.11.1 Android聯網技術 436
14.11.2 Android內部原理:資料 437
14.12 總結 438
14.13 高速參考 438
14.13.1 方法 438
14.13.2 宏 443
附錄A Linux API 444
附錄B 網絡管理 520
附錄C 術語表 537?
性能調優有時被稱為"黑色藝術",由于有時有效地調整一個系統,要求具有更深層次的知識,且須要了解一個系統的硬件和軟件組成。以及系統之間的相互作用。
性能優化是針對特定環境來定制系統的配置過程,或者是讓某個特定的應用程序得到更好的響應時間或吞吐量的過程。
《Linux性能優化大師》首先對Linux 操作系統進行了深入剖析,并對最經常使用的企業監控工具Benchmark 及其它監控工具進行了具體的介紹。此外分析了系統中識別和分析瓶頸的過程,最后闡述怎樣使用性能衡量工具。以及怎樣對系統的4 大子系統進行調整,使系統以最優狀態應對不同的工作環境。
《Linux性能優化大師》適合廣大Linux 用戶深入學習,并適合計算機專業本科、碩士等專業的學生學習參考。?
作譯者
趙永剛,2006-2008年期間主要從事思科網絡研究,并在2008年獲得思科CCNA 與CCNP國際認證。2009至今一直在從事Linux系統的研究。并在2009年和2010年分別獲得紅帽RHCE和RHCA國際認證。
文件夾
第1章深入理解Linux操作系統 11.1 Linux進程管理 1
1.1.1 什么是進程 2
1.1.2 進程的生命周期 2
1.1.3 線程 3
1.1.4 進程優先級和nice等級 4
1.1.5 上下文切換 4
1.1.6 中斷處理 5
1.1.7 進程狀態 5
1.1.8 進程的內存段 6
1.1.9 Linux CPU調度程序 7
1.2 Linux內存體系結構 8
1.2.1 物理內存和虛擬內存 8
1.2.2 虛擬內存管理 10
1.3 Linux文件系統 12
1.3.1 虛擬文件系統 12
1.3.2 文件系統日志 13
1.3.3 Ext2 13
1.3.4 Ext3 15
1.3.5 Ext4 15
1.3.6 XFS 18
1.3.7 Btrfs 19
1.3.8 JFS 20
1.3.9 ReiserFS 20
1.4 Linux 磁盤 I/O 子系統 20
1.4.1 I/O子系統的體系結構 20
1.4.2 Cache 20
1.4.3 塊層 23
1.4.4 I/O 設備驅動程序 25
1.4.5 RAID與文件系統 26
1.5 Linux 網絡子系統 26
1.5.1 網絡化的實現 26
1.5.2 TCP/IP 30
1.5.3 Offload 32
1.5.4 Bonding模塊 32
1.6 了解Linux性能度量標準 32
1.6.1 處理器度量標準 32
1.6.2 內存度量標準 33
1.6.3 塊設備度量標準 34
1.6.4 網絡接口度量標準 34
第2章 監控工具 35
2.1 介紹 35
2.2 工具功能概述 35
2.3 監控工具 36
2.3.1 top 36
2.3.2 uptime 38
2.3.3 ps、pstree 38
2.3.4 free 43
2.3.5 mpstat 44
2.3.6 vmstat 46
2.3.7 iostat 50
2.3.8 netstat、ss 53
2.3.9 sar 58
2.3.10 numastat 70
2.3.11 pmap 72
2.3.12 iptraf 73
2.3.13 tcpdump和wireshark 76
2.3.14 strace和ltrace 92
2.3.15 gnuplot 97
2.3.16 Gnome System Monitor 106
2.3.17 KDE System Guard 114
第3章 Benchmark工具 123
3.1 CPU2006 124
3.1.1 安裝與執行 126
3.1.2 runspec命令 130
3.1.3 配置文件 139
3.2 STREAM 167
3.2.1 什么是STREAM 167
3.3 Bonnie++ 172
3.4 Netperf 177
3.4.1 Netperf介紹 177
3.4.2 Netperf設計 178
3.4.3 CPU使用率 179
3.4.4 全局命令行選項 181
3.4.5 使用Netperf測量"批量數據"傳輸 186
3.4.6 使用Netperf測量"請求/響應" 192
3.4.7 使用netperf來測試整體性能 196
3.4.8 使用netperf測量雙向傳輸 201
3.4.9 omni測試 203
3.4.10 其它的nerperf測試 206
第4章分析性能瓶頸 208
4.1 識別系統瓶頸 208
4.1.1 收集信息 208
4.1.2 分析server性能 210
4.2 CPU瓶頸 210
4.2.1 查找CPU瓶頸 211
4.2.2 SMP 211
4.2.3 性能調整選項 211
4.3 內存瓶頸 212
4.3.1 查找內存瓶頸 212
4.3.2 性能調整選項 213
4.4 磁盤瓶頸 214
4.4.1 查找磁盤瓶頸 214
4.4.2 性能調整選項 216
4.5 網絡瓶頸 216
4.5.1 查找網絡瓶頸 216
4.5.2 性能調整選項 217
第5章調整操作系統 218
5.1 調整原則 218
5.1.1 變更管理 219
5.2 安裝注意事項 219
5.2.1 安裝 219
5.2.2 檢查當前的配置 220
5.2.3 最小化資源使用 227
5.2.4 SELinux 231
5.2.5 編譯內核 232
5.3 更改內核參數 233
5.3.1 proc文件系統 233
5.3.2 存儲參數的位置 235
5.3.3 使用sysctl命令 235
5.4 調整處理器子系統 235
5.4.1 調整進程優先級 236
5.4.2 CPU親和力 237
5.4.3 平衡中斷 240
5.4.4 NUMA系統 240
5.5 調整內存子系統 243
5.5.1 內存回收(設置內核交換和刷新臟數據行為) 243
5.5.2 調整swap 245
5.5.3 HugeTLBfs 247
5.5.4 內存同頁合并 250
5.6 調整磁盤子系統 252
5.6.1 安裝Linux前的硬件注意事項 252
5.6.2 I/O調度的調整和選擇 254
5.6.3 文件系統的選擇和調整 258
5.6.4 虛擬化存儲 261
5.7 調整網絡子系統 263
5.7.1 網卡綁定 263
5.7.2 巨幀 265
5.7.3 速度與雙工模式 266
5.7.4 添加網絡緩沖區 268
5.7.5 添加數據包隊列 270
5.7.6 添加傳輸隊列長度 270
5.7.7 配置offload 271
5.7.8 Netfilter 對性能的影響 272
5.7.9 流量特性的注意事項 275
5.7.10 額外的TCP/IP調整 276
5.8 限制資源使用 278?
虛擬化技術是大數據和云計算應用中的核心技術,經過幾年的友展,KVM已經很成熟和穩定,逐漸代替Xen等商業虛擬化技術和產品,成為該領域其實的標準。由于採用KVM技術的業務規模都比較大。生產環境大多比較復雜,加上KVM整個技術生態中涉及的技術較多,使用起來有一定的門檻,企業的學習成本較高。
當KVM技術在國內鮮有人使用時。本書作者團隊就開始鉆研并在生產環境中使用,短短幾年內,就為公司節省了上億的運莒成本。幫助公司多個處于生命周期末的游戲項目實現扭虧為盈。本書中全部的知識和經驗都來自國內一線的互聯網公司的生產環境。比方金山西山居、盛大游戲等,最大的特點就是業務規模大、環境復雜,很具有代表性,極為珍貴。
本書從多個維度具體解說了KVM虛擬化原理、技術及性能調優、軟硬件選型,生產環境虛擬化項目實施方法。開源管理平臺介紹及部署。虛擬化后端存儲方案。開源分布式文件系統GIusterFS、Ceph在虛擬化中的用法,虛擬化監控、報警、應急方案的制定,并附有大量生產環境案例。?
作譯者
肖力,資深運維專家。擁有15年運維經驗,就職于金山西山居,擔任系統運維經理,曾就職于盛大游戲,在運維圈有極大的影響力。國內最頂尖的KVM專家之中的一個,從2009年開始研究KVM技術。是國內較早在生產環境大規模實踐KVM的人之中的一個。積累了很豐富的經驗。
熱衷于技術傳播,一直在無私地為運維領域的發展做貢獻,維護有微信訂閱號“KVM虛擬化實踐”。分享了大量KVM和運維領域的干貨內容。同一時候還運營著多個運維相關的微信群。此外。他還是華章“運維前線”系列圖書的總策劃。無償地在組織大量愿意無私分享經驗的運維project師們來參與寫作。
汪愛偉。資深運維專家。安居客資深系統project師,曾就職于阿里云、UCloud、盛大游戲等知名互聯網公司。對KVM技術有深入的研究。在虛擬化集群方面有豐富的生產環境經驗。擅長KVM虛擬化項目的實施和運維。
楊俊俊,資深虛擬化技術專家和運維project師。就職于盛大,擔任盛大游戲公有云“G云”運維負責人和Intel聯合實驗室技術負責人。曾任職51。com,精通虛擬化項目的評估與實施,精通開源分布式文件系統在生產環境的運維與實踐。
趙德祿,資深運維project師和虛擬化project師。就職于攜程,擔任高級云平臺運維project師。曾就職于盛大游戲,擔任資深虛擬化project師。精通KVM、OpenStack、OpenvSwitch、桌面虛擬化等技術,在生產環境下的實踐經驗很豐富。
文件夾
本書贊譽前 言?
第一篇 KVM技術具體解釋與實踐
第1章 企業虛擬化選型與KVM介紹 2
1.1 KVM的前世今生 2
1.2 KVM與經常使用企業級虛擬化產品的PK 7
1.3 推斷企業是否適合使用KVM的標準 9
1.4 本章小結 10
第2章 開始自己的第一臺虛擬機 11
2.1 serverBIOS設置 11
2.2 宿主機CentOS 6.5、CentOS 7系統安裝與配置技巧 13
2.3 第一臺虛擬機安裝 15
2.4 本章小結 21
第3章 CPU、內存虛擬化技術與應用場景 22
3.1 NUMA技術與應用 22
3.1.1 KVM虛擬機NUMA調優 24
3.1.2 CPU綁定操作方法 27
3.2 CPU熱加入與應用 32
3.3 CPU host-passthrough 技術與應用 36
3.4 CPU Nested 技術與配置方法 38
3.5 KSM技術與應用 39
3.6 內存氣球技術具體解釋與應用 40
3.7 內存限制技術與應用 43
3.8 巨型頁內存技術與應用 44
3.9 本章小結 47
第4章 網絡虛擬化技術與應用場景 48
4.1 半虛擬化網卡技術具體解釋 48
4.1.1 半虛擬化網卡的配置 49
4.1.2 全虛擬化網卡、半虛擬化網卡性能比較 50
4.1.3 全虛擬化網卡、半虛擬化網卡的應用場景 63
4.2 MacVTap和vhost-net技術原理與應用 63
4.2.1 MacVTap技術與應用 64
4.2.2 vhost_net技術 66
4.3 網卡的中斷與多隊列 66
4.4 網卡PCI Passthrough技術 71
4.5 SR-IVO虛擬化技術 72
4.6 虛擬化軟件交換機Open vSwitch的安裝與配置 75
4.6.1 Open vSwitch安裝 75
4.6.2 Open vSwitch典型配置 77
4.7 多網卡綁定與建橋 79
4.8 本章小結 82
第5章 KVM磁盤虛擬化技術與應用場景 83
5.1 磁盤虛擬化方式性能比較與應用場景 83
5.1.1 QEMU磁盤虛擬化方式概述 83
5.1.2 IDE與Virtio性能比較測試 84
5.2 Virtio磁盤緩存方式具體解釋、性能比較與應用場景 85
5.2.1 磁盤緩存具體解釋 86
5.2.2 緩存方式的性能比較測試 87
5.2.3 緩存方式的應用場景 89
5.3 磁盤鏡像格式 89
5.3.1 QEMU支持的磁盤鏡像格式 89
5.3.2 裸設備使用 96
5.3.3 KVM虛擬機鏡像管理利器guestfish 97
5.3.4 raw、qcow2、裸盤、lvm性能比較 106
5.3.5 磁盤鏡像格式的應用場景 107
5.4 文件系統塊對齊 108
5.4.1 什么是塊對齊 108
5.4.2 塊對齊與塊不正確齊性能比較 109
5.4.3 生產環境怎樣配置塊對齊 110
5.5 SSD在KVM虛擬化中的使用實踐 111
5.5.1 SSD原理與寫放大 111
5.5.2 SSD在KVM中的使用 112
5.5.3 Flachcache配置與性能測試 117
5.5.4 DM-cache配置 120
5.5.5 LVM cache配置與性能測試 122
5.5.6 生產環境中SSD使用要點 123
5.6 本章小結 126
第6章 KVM虛擬機的資源限制 127
6.1 哪些場景要做虛擬機的資源限制 127
6.2 使用CGroups 130
6.3 KVM虛擬機CPU資源限制配置 142
6.4 KVM虛擬機網絡資源限制 144
6.5 KVM虛擬機磁盤資源限制 150
6.6 本章小結 151
第7章 物理機轉虛擬機實踐 152
7.1 哪些應用場景適合做物理機轉虛擬機 152
7.2 P2V的技術實施方案 152
7.3 Windows系統物理機轉虛擬機的操作方法 153
7.3.1 WinPE的制作方法 153
7.3.2 Windows系統P2V操作方法 155
7.4 Linux物理server轉換虛擬機操作 155
7.5 使用virt-p2v工具進行P2V轉換 157
7.6 P2V經驗總結 160
7.7 關于V2V 160
7.8 本章小結 160
第8章 KVM桌面虛擬化實踐 161
8.1 桌面虛擬化簡單介紹及Spice協議 161
8.2 桌面虛擬化實踐經驗 162
8.3 本章小結 167
第二篇 分布式文件系統
第9章 幾種常見開源文件系統在KVM中的應用 170
9.1 演示環境基礎配置 170
9.2 DRBD在KVM中的應用 172
9.2.1 DRBD介紹 172
9.2.2 DRBD搭建方法及在KVM中的應用 173
9.2.3 DRBD在KVM虛擬化中的優化方案 183
9.3 GlusterFS在KVM虛擬化中的應用 184
9.3.1 GlusterFS介紹 184
9.3.2 GlusterFS集群搭建與使用 189
9.3.3 GlusterFS在KVM虛擬化中的應用 195
9.3.4 GlusterFS在KVM虛擬化中的優化方案 198
9.4 Sheepdog在KVM中的應用 199
9.4.1 Sheepdog介紹 199
9.4.2 Sheepdog搭建方法及在KVM中的應用 201
9.5 MooseFS在KVM中的應用 207
9.5.1 MooseFS介紹 208
9.5.2 MFS搭建方法及在KVM虛擬化中的應用 208
9.6 本章小結 213
第10章 Ceph在KVM虛擬化中的應用與故障處理 214
10.1 Ceph簡單介紹 214
10.2 Ceph部署方法及在KVM中的應用 217
10.2.1 使用ceph-deploy工具部署Ceph 217
10.2.2 掛載CephFS 221
10.2.3 通過Librbd方式使用Ceph RBD 223
10.2.4 使用內核方式掛載并使用Ceph RBD 226
10.3 CRUSH算法介紹及調優方法 228
10.3.1 CRUSH算法介紹 228
10.3.2 CRUSH算法調優方法 230
10.4 多角度評估Ceph在KVM虛擬化環境中的應用 234
10.5 Ceph生產環境搭建案例 240
10.5.1 使用CephFS集中備份虛擬機 240
10.5.2 使用Librbd將虛擬機執行在Ceph RBD 241
10.5.3 在CephFS上創建qcow2文件作為云硬盤 242
10.6 Ceph常見故障處理 242
10.6.1 Ceph集群監控狀態檢查 243
10.6.2 Ceph常見錯誤提示的含義與處理方法 244
10.7 本章小結 245
第三篇 KVM虛擬化管理平臺
第11章 利用OpenStack管理KVM 248
11.1 OpenStack搭建 248
11.1.1 OpenStack簡單介紹 248
11.1.2 控制節點的安裝 249
11.1.3 計算節點的安裝 266
11.2 OpenStack有用技巧 269
11.2.1 RabbitMQ Cluster搭建 269
11.2.2 利用Haproxy和Keepalived實現控制節點高可用 271
11.2.3 冷遷移虛擬機的方法 277
11.3 本章小結 277
第12章 利用OpenNebula管理KVM 278
12.1 OpenNebula架構 278
12.1.1 OpenNebula架構介紹 278
12.1.2 OpenNebula組件介紹 279
12.2 在KVM中使用OpenNebula 280
12.2.1 在CentOS 6.5上高速搭建OpenNebula 280
12.2.2 使用OpenNebula創建第一臺KVM虛擬機 285
12.2.3 使虛擬機硬盤創建在宿主機本地硬盤上 288
12.3 OpenNebula常見故障處理 291
12.4 本章小結 293
第13章 其它管理平臺介紹 294
13.1 ConVirt管理平臺介紹 294
13.1.1 ConVirt的理念 294
13.1.2 ConVirt的架構 295
13.2 CloudStack管理平臺介紹 295
13.3 oVirt管理平臺介紹 297
13.4 WebVirtMgr管理平臺介紹 299
13.5 怎樣選擇管理平臺 303
13.6 本章小結 304
第四篇 KVM虛擬化項目實施
第14章 業務性能評估與壓力模型建立 306
14.1 Linux 系統性能數據採集原則與方法 306
14.2 Linux 系統壓力模型建立 311
14.3 Windows系統性能數據採集原則與方法 314
14.4 Windows 系統壓力模型建立 317
14.5 本章小結 319
第15章 宿主機選型與基礎性能測試 320
15.1 宿主機CPU選型原則 320
15.2 宿主機內存選型注意事項 322
15.3 宿主機硬盤選型 324
15.4 RAID卡選型 326
15.5 server網卡選型 327
15.6 宿主機性能基準測試實踐 328
15.7 本章小結 345
第16章 虛擬機鏡像制作、配置與測試 346
16.1 Windows虛擬機制作方法 346
16.1.1 Windows鏡像制作 346
16.1.2 Windows虛擬機sysprep初始化封裝 361
16.2 Linux鏡像制作方法 362
16.2.1 RHEL/CentOS鏡像制作方法 362
16.2.2 Ubuntu、Debian虛擬機配置注意點 364
16.3 虛擬機自己主動配置IP的實現辦法 365
16.3.1 通過DHCP給虛擬機配置IP 365
16.3.2 通過Libvirt實現虛擬機自己主動配置IP 365
16.3.3 筆者生產環境虛擬機IP自己主動配置的方法 365
16.4 虛擬機鏡像測試 375
16.5 本章小結 375
第17章 單機虛擬化技術與生產環境實踐 376
17.1 單機虛擬化技術與應用場景 376
17.1.1 單機虛擬化的優勢和劣勢 377
17.1.2 單機虛擬化技術 378
17.1.3 單機虛擬化應用場景 380
17.2 單機虛擬化生產環境注意點 381
17.2.1 單機虛擬化災備與應急方案 381
17.2.2 單機虛擬化生產環境部署實踐 382
17.3 本章小結 385
第18章 KVM虛擬化集群技術與應用場景 386
18.1 虛擬化集群設計思路與架構 386
18.2 虛擬化集群的實施流程與技術方案 389
18.3 虛擬化集群搭建 392
18.3.1 計算節點配置與管理 392
18.3.2 網絡設計與配置 403
18.3.3 虛擬機遷移管理 404
18.3.4 虛擬化集群的備份與恢復 407
18.4 Dell EqualLogic存儲的管理實踐經驗 414
18.5 本章小結 419
第19章 業務遷移到虛擬化環境流程 420
19.1 性能評估與測試環境測試 420
19.2 上線前的檢查工作 428
19.3 小規模部署及逐步切換到虛擬化環境 429
19.4 本章小結 430
第20章 宿主機自己主動化運維管理 431
20.1 Puppet簡單介紹與安裝部署 431
20.2 利用Puppet管理宿主機的運維架構設計 436
20.3 利用Puppet配置宿主機初始化操作 441
20.4 利用Puppet管理宿主機配置與更新 442
20.5 利用Puppet推送宿主機的非一致性配置 445
20.6 本章小結 449
第21章 虛擬化監控、報警與應急響應方案 450
21.1 虛擬化監控內容 450
21.1.1 宿主機CPU監控要點 450
21.1.2 宿主機內存監控注意點 455
21.1.3 宿主機網絡監控注意點 458
21.1.4 宿主機磁盤監控注意點 460
21.1.5 宿主機層面監控虛擬機的方法 461
21.2 監控軟件Cacti、Zabbix 463
21.2.1 用Cacti監控宿主機 464
21.2.2 用Zabbix監控宿主機 471
21.3 應急方案 487
21.3.1 應急方案制定注意要點 487
21.3.2 單機虛擬化應急方案 491
21.3.3 集群虛擬化應急方案 495
21.4 本章小結 497
第五篇 KVM虛擬化典型案例
第22章 生產環境問題案例與分析 500
22.1 游戲在虛擬機上很慢的案例 500
22.2 虛擬機流量過高引起網絡風暴的案例一 502
22.3 虛擬機流量過高引起網絡風暴的案例二 517
22.4 其它生產環境問題案例 520
22.4.1 共享存儲集群虛擬機遷移故障案例 520
22.4.2 宿主機異常關機后虛擬機無法啟動案例 522
22.4.3 宿主機使用CentOS 5.6系統問題案例 523
22.4.4 Windows虛擬機網絡閃斷、不通問題案例 523
22.4.5 Windows 7虛擬機僅僅能使用2個CPU案例 524
22.4.6 生產環境很奇怪的一個案例 524
22.4.7 U盤在虛擬機上掛載問題案例 526
22.4.8 HP ILO4固件Bug引起宿主機重新啟動案例 528
22.4.9 一次機房斷電引起的問題案例 529
22.4.10 CPU綁定問題案例 531
22.4.11 生產環境存儲故障導致50個虛擬機丟失案例 532
22.4.12 生產環境Ubuntu虛擬機故障問題案例 533
22.5 本章小結 538
附錄 筆者推薦的KVM學習資料 539?
對于嵌入式project師來說。進入更高階段后,學習Linux設備驅動開發無疑就是職業生涯的一次“重生”。這是由于Linux設備驅動開發不只涉及操作系統的轉換。開發方式的轉換,更重要的是思維上的轉變。對于Linux這樣一個復雜系統。怎樣從復雜的代碼中抓住設備驅動開發的關鍵是不論什么一個Linux設備驅動開發人員入門時須要面對的挑戰。除了知識、工具之外,往往還須要思路上的指導。本書不但幫助Linux設備驅動開發的剛開始學習的人厘清必要的概念,還從詳細的實例、設備驅動開發的指導原則循序漸進地引導讀者漸入學習佳境。
為了讓讀者可以達到Linux設備驅動開發的至臻境地,作者更是從軟件project的角度抽象出設備驅動開發的一般思想。毫無疑問,本書將成為讀者學習Linux設備驅動開發過程中的一座“燈塔”。
?
作譯者
宋寶華?Linux布道者,知名嵌入式系統專家,《Essential Linux Device Drivers》譯者。作為最早從事Linux內核與設備驅動研究的專家之中的一個,他在眾多國內外知名企業開展Linux技術培訓。他也是一位活躍的Linux開發人員和深度實踐者,為Linux官方內核貢獻了大量的Linux源代碼并承擔代碼審核工作。至今已向Linux官方內核提交逾數萬行代碼和幾百個補丁。
他的《Linux設備驅動開發具體解釋》系列書在嵌入式Linux開發人員中有口皆碑,是眾多Linux書籍中為數不多的暢銷書。
?
文件夾
贊譽?推薦序一?
推薦序二?
前言?
第1章 Linux設備驅動概述及開發環境構建 1
1.1 設備驅動的作用 1
1.2 無操作系統時的設備驅動 2
1.3 有操作系統時的設備驅動 4
1.4 Linux設備驅動 5
1.4.1 設備的分類及特點 5
1.4.2 Linux設備驅動與整個軟硬件系統的關系 6
1.4.3 Linux設備驅動的重點、難點 7
1.5 Linux設備驅動的開發環境構建 8
1.5.1 PC上的Linux環境 8
1.5.2 QEMU實驗平臺 11
1.5.3 源碼閱讀和編輯 13
1.6 設備驅動Hello World:LED驅動 15
1.6.1 無操作系統時的LED驅動 15
1.6.2 Linux下的LED驅動 15
第2章 驅動設計的硬件基礎 20
2.1 處理器 20
2.1.1 通用處理器 20
2.1.2 數字信號處理器 22
2.2 存儲器 24
2.3 接口與總線 28
2.3.1 串口 28
2.3.2 I2C 29
2.3.3 SPI 30
2.3.4 USB 31
2.3.5 以太網接口 33
2.3.6 PCI和PCI-E 34
2.3.7 SD和SDIO 36
2.4 CPLD和FPGA 37
2.5 原理圖分析 40
2.6 硬件時序分析 42
2.6.1 時序分析的概念 42
2.6.2 典型的硬件時序 43
2.7 芯片數據手冊閱讀方法 44
2.8 儀器儀表使用 47
2.8.1 萬用表 47
2.8.2 示波器 47
2.8.3 邏輯分析儀 49
2.9 總結 51
第3章 Linux內核及內核編程 52
3.1 Linux內核的發展與演變 52
3.2 Linux 2.6后的內核特點 56
3.3 Linux內核的組成 59
3.3.1 Linux內核源碼的文件夾結構 59
3.3.2 Linux內核的組成部分 60
3.3.3 Linux內核空間與用戶空間 64
3.4 Linux內核的編譯及載入 64
3.4.1 Linux內核的編譯 64
3.4.2 Kconfig和Makefile 66
3.4.3 Linux內核的引導 74
3.5 Linux下的C編程特點 75
3.5.1 Linux編碼風格 75
3.5.2 GNU C與ANSI C 78
3.5.3 do { } while(0) 語句 83
3.5.4 goto語句 85
3.6 工具鏈 85
3.7 實驗室建設 88
3.8 串口工具 89
3.9 總結 91
第4章 Linux內核模塊 92
4.1 Linux內核模塊簡單介紹 92
4.2 Linux內核模塊程序結構 95
4.3 模塊載入函數 95
4.4 模塊卸載函數 97
4.5 模塊參數 97
4.6 導出符號 99
4.7 模塊聲明與描寫敘述 100
4.8 模塊的使用計數 100
4.9 模塊的編譯 101
4.10 使用模塊“繞開”GPL 102
4.11 總結 103
第5章 Linux文件系統與設備文件 104
5.1 Linux文件操作 104
5.1.1 文件操作系統調用 104
5.1.2 C庫文件操作 108
5.2 Linux文件系統 109
5.2.1 Linux文件系統文件夾結構 109
5.2.2 Linux文件系統與設備驅動 110
5.3 devfs 114
5.4 udev用戶空間設備管理 116
5.4.1 udev與devfs的差別 116
5.4.2 sysfs文件系統與Linux設備模型 119
5.4.3 udev的組成 128
5.4.4 udev規則文件 129
5.5 總結 133
第6章 字符設備驅動 134
6.1 Linux字符設備驅動結構 134
6.1.1 cdev結構體 134
6.1.2 分配和釋放設備號 136
6.1.3 file_operations結構體 136
6.1.4 Linux字符設備驅動的組成 138
6.2 globalmem虛擬設備實例描寫敘述 142
6.3 globalmem設備驅動 142
6.3.1 頭文件、宏及設備結構體 142
6.3.2 載入與卸載設備驅動 143
6.3.3 讀寫函數 144
6.3.4 seek函數 146
6.3.5 ioctl函數 146
6.3.6 使用文件私有數據 148
6.4 globalmem驅動在用戶空間中的驗證 156
6.5 總結 157
第7章 Linux設備驅動中的并發控制 158
7.1 并發與競態 158
7.2 編譯亂序和運行亂序 160
7.3 中斷屏蔽 165
7.4 原子操作 166
7.4.1 整型原子操作 167
7.4.2 位原子操作 168
7.5 自旋鎖 169
7.5.1 自旋鎖的使用 169
7.5.2 讀寫自旋鎖 173
7.5.3 順序鎖 174
7.5.4 讀-復制-更新 176
7.6 信號量 181
7.7 相互排斥體 183
7.8 完畢量 184
7.9 添加并發控制后的globalmem的設備驅動 185
7.10 總結 188
第8章 Linux設備驅動中的堵塞與非堵塞I/O 189
8.1 堵塞與非堵塞I/O 189
8.1.1 等待隊列 191
8.1.2 支持堵塞操作的globalfifo設備驅動 194
8.1.3 在用戶空間驗證globalfifo的讀寫 198
8.2 輪詢操作 198
8.2.1 輪詢的概念與作用 198
8.2.2 應用程序中的輪詢編程 199
8.2.3 設備驅動中的輪詢編程 201
8.3 支持輪詢操作的globalfifo驅動 202
8.3.1 在globalfifo驅動中添加輪詢操作 202
8.3.2 在用戶空間中驗證globalfifo設備的輪詢 203
8.4 總結 205
第9章 Linux設備驅動中的異步通知與異步I/O 206
9.1 異步通知的概念與作用 206
9.2 Linux異步通知編程 207
9.2.1 Linux信號 207
9.2.2 信號的接收 208
9.2.3 信號的釋放 210
9.3 支持異步通知的globalfifo驅動 212
9.3.1 在globalfifo驅動中添加異步通知 212
9.3.2 在用戶空間中驗證globalfifo的異步通知 214
9.4 Linux異步I/O 215
9.4.1 AIO概念與GNU C庫AIO 215
9.4.2 Linux內核AIO與libaio 219
9.4.3 AIO與設備驅動 222
9.5 總結 223
第10章 中斷與時鐘 224
10.1 中斷與定時器 224
10.2 Linux中斷處理程序架構 227
10.3 Linux中斷編程 228
10.3.1 申請和釋放中斷 228
10.3.2 使能和屏蔽中斷 230
10.3.3 底半部機制 230
10.3.4 實例:GPIO按鍵的中斷 235
10.4 中斷共享 237
10.5 內核定時器 238
10.5.1 內核定時器編程 238
10.5.2 內核中延遲的工作delayed_work 242
10.5.3 實例:秒字符設備 243
10.6 內核延時 247
10.6.1 短延遲 247
10.6.2 長延遲 248
10.6.3 睡著延遲 248
10.7 總結 250
第11章 內存與I/O訪問 251
11.1 CPU與內存、I/O 251
11.1.1 內存空間與I/O空間 251
11.1.2 內存管理單元 252
11.2 Linux內存管理 256
11.3 內存存取 261
11.3.1 用戶空間內存動態申請 261
11.3.2 內核空間內存動態申請 262
11.4 設備I/Oport和I/O內存的訪問 267
11.4.1 Linux I/Oport和I/O內存訪問接口 267
11.4.2 申請與釋放設備的I/Oport和I/O內存 268
11.4.3 設備I/Oport和I/O內存訪問流程 269
11.4.4 將設備地址映射到用戶空間 270
11.5 I/O內存靜態映射 276
11.6 DMA 277
11.6.1 DMA與Cache一致性 278
11.6.2 Linux下的DMA編程 279
11.7 總結 285
第12章 Linux設備驅動的軟件架構思想 286
12.1 Linux驅動的軟件架構 286
12.2 platform設備驅動 290
12.2.1 platform總線、設備與驅動 290
12.2.2 將globalfifo作為platform設備 293
12.2.3 platform設備資源和數據 295
12.3 設備驅動的分層思想 299
12.3.1 設備驅動核心層和例化 299
12.3.2 輸入設備驅動 301
12.3.3 RTC設備驅動 306
12.3.4 Framebuffer設備驅動 309
12.3.5 終端設備驅動 311
12.3.6 misc設備驅動 316
12.3.7 驅動核心層 321
12.4 主機驅動與外設驅動分離的設計思想 321
12.4.1 主機驅動與外設驅動分離 321
12.4.2 Linux SPI主機和設備驅動 322
12.5 總結 330
第13章 Linux塊設備驅動 331
13.1 塊設備的I/O操作特點 331
13.2 Linux塊設備驅動結構 332
13.2.1 block_device_operations結構體 332
13.2.2 gendisk結構體 334
13.2.3 bio、request和request_queue 335
13.2.4 I/O調度器 339
13.3 Linux塊設備驅動的初始化 340
13.4 塊設備的打開與釋放 342
13.5 塊設備驅動的ioctl函數 342
13.6 塊設備驅動的I/O請求處理 343
13.6.1 使用請求隊列 343
13.6.2 不使用請求隊列 347
13.7 實例:vmem_disk驅動 349
13.7.1 vmem_disk的硬件原理 349
13.7.2 vmem_disk驅動模塊的載入與卸載 349
13.7.3 vmem_disk設備驅動的block_device_operations 351
13.7.4 vmem_disk的I/O請求處理 352
13.8 Linux MMC子系統 354
13.9 總結 357
第14章 Linux網絡設備驅動 358
14.1 Linux網絡設備驅動的結構 358
14.1.1 網絡協議接口層 359
14.1.2 網絡設備接口層 363
14.1.3 設備驅動功能層 367
14.2 網絡設備驅動的注冊與注銷 367
14.3 網絡設備的初始化 369
14.4 網絡設備的打開與釋放 370
14.5 數據發送流程 371
14.6 數據接收流程 372
14.7 網絡連接狀態 375
14.8 參數設置和統計數據 377
14.9 DM9000網卡設備驅動實例 380
14.9.1 DM9000網卡硬件描寫敘述 380
14.9.2 DM9000網卡驅動設計分析 380
14.10 總結 386
第15章 Linux I2C核心、總線與設備驅動 387
15.1 Linux I2C體系結構 387
15.2 Linux I2C核心 394
15.3 Linux I2C適配器驅動 396
15.3.1 I2C適配器驅動的注冊與注銷 396
15.3.2 I2C總線的通信方法 397
15.4 Linux I2C設備驅動 399
15.4.1 Linux I2C設備驅動的模塊載入與卸載 400
15.4.2 Linux I2C設備驅動的傳輸數據 400
15.4.3 Linux的i2c-dev.c文件分析 400
15.5 Tegra I2C總線驅動實例 405
15.6 AT24xx EEPROM的I2C設備驅動實例 410
15.7 總結 413
第16章 USB主機、設備與Gadget驅動 414
16.1 Linux USB驅動層次 414
16.1.1 主機側與設備側USB驅動 414
16.1.2 設備、配置、接口、端點 415
16.2 USB主機控制器驅動 420
16.2.1 USB主機控制器驅動的總體結構 420
16.2.2 實例:Chipidea USB主機驅動 425
16.3 USB設備驅動 425
16.3.1 USB設備驅動的總體結構 425
16.3.2 USB請求塊 430
16.3.3 探測和斷開函數 435
16.3.4 USB骨架程序 436
16.3.5 實例:USB鍵盤驅動 443
16.4 USB UDC與Gadget驅動 446
16.4.1 UDC和Gadget驅動的重要數據結構與API 446
16.4.2 實例:Chipidea USB UDC驅動 451
16.4.3 實例:Loopback Function驅動 453
16.5 USB OTG驅動 456
16.6 總結 458
第17章 I2C、SPI、USB驅動架構類比 459
17.1 I2C、SPI、USB驅動架構 459
17.2 I2C主機和外設眼里的Linux世界 460
第18章 ARM Linux設備樹 461
18.1 ARM設備樹起源 461
18.2 設備樹的組成和結構 462
18.2.1 DTS、DTC和DTB等 462
18.2.2 根節點兼容性 468
18.2.3 設備節點兼容性 470
18.2.4 設備節點及label的命名 475
18.2.5 地址編碼 477
18.2.6 中斷連接 479
18.2.7 GPIO、時鐘、pinmux連接 480
18.3 由設備樹引發的BSP和驅動變更 484
18.4 經常使用的OF API 490
18.5 總結 493
第19章 Linux電源管理的系統架構和驅動 494
19.1 Linux電源管理的全局架構 494
19.2 CPUFreq驅動 495
19.2.1 SoC的CPUFreq驅動實現 495
19.2.2 CPUFreq的策略 501
19.2.3 CPUFreq的性能測試和調優 501
19.2.4 CPUFreq通知 502
19.3 CPUIdle驅動 504
19.4 PowerTop 508
19.5 Regulator驅動 508
19.6 OPP 511
19.7 PM QoS 515
19.8 CPU熱插拔 518
19.9 掛起到RAM 522
19.10 執行時的PM 528
19.11 總結 534
第20章 Linux芯片級移植及底層驅動 535
20.1 ARM Linux底層驅動的組成和現狀 535
20.2 內核節拍驅動 536
20.3 中斷控制器驅動 541
20.4 SMP多核啟動以及CPU熱插拔驅動 549
20.5 DEBUG_LL和EARLY_PRINTK的設置 556
20.6 GPIO驅動 557
20.7 pinctrl驅動 560
20.8 時鐘驅動 572
20.9 dmaengine驅動 578
20.10 總結 580
第21章 Linux設備驅動的調試 581
21.1 GDB調試器的使用方法 581
21.1.1 GDB的基本使用方法 581
21.1.2 DDD圖形界面調試工具 591
21.2 Linux內核調試 594
21.3 內核信息打印——printk() 596
21.4 DEBUG_LL和EARLY_PRINTK 599
21.5 使用“/proc” 600
21.6 Oops 606
21.7 BUG_ON()和WARN_ON() 608
21.8 strace 609
21.9 KGDB 610
21.10 使用仿真器調試內核 612
21.11 應用程序調試 613
21.12 Linux性能監控與調優工具 616
21.13 總結 618?
轉載于:https://www.cnblogs.com/jzdwajue/p/7243526.html
總結
以上是生活随笔為你收集整理的linux多线程编程书籍推荐:linux大牛之路从这几本书開始总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2017.10.25水题大作战题解
- 下一篇: 腾讯云挂在和格式化数据盘