linux多线程编程书籍推荐:linux大牛之路从这几本书开始总结

2023-05-16

 linux多线程编程是指基于Linux操作系统下的多线程编程,包括多任务程序的设计,并发程序设计,网络程序设计,数据共享等。Linux系统下的多线程遵循POSIX线程接口,称为pthread。编写Linux下的多线程程序,需要使用头文件pthread.h,连接时需要使用库libpthread.a。小编今天就来把几本linux多线程编程书籍推荐给大家,希望能够帮助到想要了解和学习linux多线程编程的攻城狮们。

  linux多线程编程书籍推荐no.1:《精通Linux》

  

精通Linux(第2版)

  我们学习Linux的原因可能各不相同。对于IT从业者(如系统运维人员)来说,他们需要了解本书中的几乎所有内容。对于Linux软件架构和开发人员来说,他们同样需要了解这些内容,以便发挥操作系统的最大功效。对于研究人员和学生来说,本书能够让他们理解为什么我们要这样设置系统。本书菜鸟与老鸟通吃,既可作为菜鸟的入门教程,也可以作为老鸟的进阶指南。

  linux多线程编程书籍推荐no.2:《Linux设备驱动开发详解:基于最新的Linux 4.0内核》

  

Linux设备驱动开发详解:基于最新的Linux 4.0内核(china-pub首发)

  历时8年,三次重构,内窖愈加炉火纯青。

  全部代码更新至全新的Linux4.0版本。

  全面讲解ARM Linux新版本内核架构,如设备树等。

  不仅仅注重知识和程序的讲解,更注重程序的思想、演变、架构和算法。

  linux多线程编程书籍推荐no.3:《深度实践KVM:核心技术、管理运维、性能优化与项目实施》

  

深度实践KVM:核心技术、<a href=

  中国运维领域里划时代著作,国内顶尖KVM专家和运维专家多年大规模生产环境实践经验总结,国内数十位运维专家鼎力支持和推荐。

  从核心技术、管理运维、性能优化、项目实施等多个维度系统、深入讲解KVM虚拟化技术的工作原理、应用方法和技术生态,并针对生产环境中的各种难题给出了解决方案。

  linux多线程编程书籍推荐no.4:《Linux性能优化大师》

  

Linux性能优化大师

  本书适合广大Linux用户深入学习,并适合计算机专业本科、硕士等专业的学生学习参考。

  为特定服务器的应用程序调整关键参数,从而产生优异的性能。

  linux多线程编程书籍推荐no.5:《精通Linux内核网络》

  

精通Linux内核网络

  专注于各网络协议实现技术的精髓及其遵循的指导方针和原则。

  重点讲解数据包在Linux内核网络栈中的传输过程,阐述其与网络各层及各子系统之间的交互。

  从网络开发者视角,配合清晰图表,深入剖析Linux内核网络子系统的内部细节及核心实现。

  最详尽的Linux内核网络专著,深入剖析IPsec、Wireless、InfiniBand等重要内核网络子系统。

  linux多线程编程的学习一定要与时俱进,杜绝闭门造车。以上的linux多线程编程书籍推荐如果还是不能满足你的需求,你还想要寻找更多重磅的计算机好书,请点击关注》》计算机图书频道。



《精通Linux内核网络》讨论Linux 内核网络栈的实现及其原理,深入而详尽地分析网络子系统及其架构,主要内容包括:内核网络基础知识、Netlink 套接字、ARP、邻居发现和ICMP 等重要协议的实现、IPv4 和IPv6 的深入探索、Linux 路由选择、Netfilter 和IPsec 的实现、Linux 无线网络、InfiniBand 等。
《精通Linux内核网络》不仅适合从事网络相关项目的专业人员参考,也能为相关研究人员和学生提供极大帮助。 

作译者

Rami Rosen 
资深软件工程师,Linux内核网络专家。从业十余年间,参与过多个尖端Linux内核项目,曾就Linux内核网络和虚拟化发表过多篇文章,并做过多次演讲。博客地址:http://ramirose.wix.com/ramirosen
译者简介:
袁国忠 
自由译者;2000年起专事翻译,主译图书,偶译新闻稿、软文;出版译著40余部,其中包括《C++ Prime Plus中文版》《CCNA学习指南》《CCNP ROUTE学习指南》《面向模式的软件架构:模式系统》《Android应用UI设计模式》《风投的选择:谁是下一个十亿美元级公司》等,总计700余万字;专事翻译前,从事过三年化工产品分析和开发,做过两年杂志和图书编辑。 

目录

第1章 绪论 1
1.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操作系统 1
1.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 分析服务器性能 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和运维领域的干货内容,同时还运营着多个运维相关的微信群。此外,他还是华章“运维前线”系列图书的总策划,无偿地在组织大量愿意无私分享经验的运维工程师们来参与写作。
汪爱伟,资深运维专家,安居客资深系统工程师,曾就职于阿里云、UCloud、盛大游戏等知名互联网公司。对KVM技术有深入的研究,在虚拟化集群方面有丰富的生产环境经验,擅长KVM虚拟化项目的实施和运维。
杨俊俊,资深虚拟化技术专家和运维工程师,就职于盛大,担任盛大游戏公有云“G云”运维负责人和Intel联合实验室技术负责人,曾任职51。com,精通虚拟化项目的评估与实施,精通开源分布式文件系统在生产环境的运维与实践。
赵德禄,资深运维工程师和虚拟化工程师,就职于携程,担任高级云平台运维工程师,曾就职于盛大游戏,担任资深虚拟化工程师。精通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 服务器BIOS设置 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物理服务器转换虚拟机操作 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 服务器网卡选型 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 

对于嵌入式工程师来说,进入更高阶段后,学习Linux设备驱动开发无疑就是职业生涯的一次“重生”。这是因为Linux设备驱动开发不仅仅涉及操作系统的转换,开发方式的转换,更重要的是思维上的转变。对于Linux这样一个复杂系统,如何从复杂的代码中抓住设备驱动开发的关键是任何一个Linux设备驱动开发者入门时需要面对的挑战。除了知识、工具之外,往往还需要思路上的指导。本书不但帮助Linux设备驱动开发的初学者厘清必要的概念,还从具体的实例、设备驱动开发的指导原则循序渐进地引导读者渐入学习佳境。为了让读者能够达到Linux设备驱动开发的至臻境界,作者更是从软件工程的角度抽象出设备驱动开发的一般思想。毫无疑问,本书将成为读者学习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/O端口和I/O内存的访问 267
11.4.1 Linux I/O端口和I/O内存访问接口 267
11.4.2 申请与释放设备的I/O端口和I/O内存 268
11.4.3 设备I/O端口和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 



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux多线程编程书籍推荐:linux大牛之路从这几本书开始总结 的相关文章

  • 八.200多万元得到的创业教训--从3款产品学到的3点

    摘要 xff1a 先后开发了3款移动互联网产品 xff0c 有两款产品是从创意阶段就参与进去 xff0c 从中学会了最重要的3点 xff1a 快速迭代 xff0c 不断试错 xff0c 了解用户的需求 健生干货分享 xff1a 第8篇 第一
  • 九. 200多万元得到的创业教训--“雕爷”是忽悠吗?

    摘要 xff1a 这一年 xff0c 是移动互联网火爆的一年 xff0c 互联网思维 伴随着这股热潮红遍大江南北 xff0c 其中的一位 互联网思维 代表者是雕爷 xff0c 它带来的是真理还是在忽悠 xff1f 健生干货分享 xff1a
  • 推荐《十倍速影像阅读法》

    文章标题 推荐 十倍速影像阅读法 文章作者 newjueqi 作者邮箱 zengjiansheng1 64 126 com 作者 QQ 190678908 作者 blog http blog csdn net newjueqi 文章说明 欢
  • 十. 加班等于团队建设?

    摘要 xff1a 在IT界 xff0c 加班是不可避免的事情 但是 xff0c 加班的方式和心态 xff0c 将会影响加班的效率和加班的效果 健生干货分享 xff1a 第10篇 在移动互联网的日常工作中 xff0c 不能不提的是加班 总体来
  • 十一. 没有这4项素质,别想在创业公司

    摘要 xff1a 习惯了在大企业工作方式 xff0c 初次来到创业公司工作会觉得很不习惯 xff0c 因为创业公司中 xff0c 对人员有很特殊的素质要求 健生干货分享 xff1a 第11篇 在创业公司里工作久了 xff0c 慢慢就习惯了里
  • 十二.200多万元得到的创业教训--app名字是关键

    摘要 xff1a 当完成了一个app后 xff0c 就要需要上应用市场 xff0c 下面讲一下起名和上应用市场的一些技巧 健生干货分享 xff1a 第12篇 1 必须是先上app store xff0c 再上其他应用市场 为啥要这样做 xf
  • 解决bug: .cpython-37m-x86_64-linux-gnu.so: undefined symbol:

    解决bug cpython 37m x86 64 linux gnu so undefined symbol 时间 xff1a 2023年1月23日 一 问题 用python下pytorch编写cuda算子时 xff0c 在执行setup
  • 十三.200多万元得到的创业教训--用户体验就是人性

    摘要 用户体验是在产品或服务中重要的一环 xff0c 懂得人性 xff0c 什么是良好的用户体验就很明了 健生干货分享 xff1a 第13篇 在百度百科中的定义 xff1a 用户体验 xff08 UserExperience xff0c 简
  • 软件DIY----用汇编语言给XP记事本添加“自动保存”功能

    文章标题 用汇编语言 给XP记事本添加 自动保存 功能 文章作者 newjueqi 作者邮箱 zengjiansheng1 64 126 com 作者 QQ 190678908 使用工具 OD xff0c LordPE xff0c eXeS
  • 用16进制编辑器编写一个DLL文件

    文章标题 用16进制编辑器编写一个DLL文件 文章作者 newjueqi 作者邮箱 zengjiansheng1 64 126 com 作者QQ号 190678908 软件名称 Hello 软件大小 4K 编写语言 机器码 使用工具 Win
  • 浅谈快速阅读法

    文章标题 浅谈快速阅读法 文章作者 newjueqi 作者邮箱 zengjiansheng1 64 126 com 作者 QQ 190678908 作者 blog http blog csdn net newjueqi 文章说明 欢迎转载文
  • 十四.200多万元得到的创业教训--不健康,别创业

    摘要 xff1a 34 年轻时拿命换钱 xff0c 岁数大后拿钱换命 34 xff0c 这种说法 xff0c 真的是正确的吗 xff1f 健生干货分享 xff1a 第14篇 有多少人想过 xff0c 自己创业的目的是什么 xff1f 是为了
  • 十五.电商业老二,老三也能生存

    摘要 在互联网行业 xff0c 有句话 xff1a 人们只记得老大 xff0c 但随着移动互联网的崛起 xff0c 依托于社交红利 xff0c 这个现象正慢慢发生变化 健生干货分享 xff1a 第15篇 在传统的互联网中 xff0c 入口少
  • 十六.月收入过万的淘宝从业者的执行力,吓呆我了

    摘要 淘宝开店现在好不好做 xff0c 很多人说现在淘宝已经不好做 xff0c 但淘宝的生意真的没有生存的空间了吗 在不久前 xff0c 和一个做淘宝行业相关的哥们聊天 xff0c 他自曝月收入过万 xff0c 被他那狠狠的执行力吓呆了 健
  • 自媒体16天后的总结

    摘要 在网上写了一些文章 xff0c 16天过去了 xff0c 总结一下自己在16天里的得失 健生干货分享 xff1a 第17篇 写了16天的文章 xff0c 有的文章我很用心的写 xff0c 但反应平淡 xff0c 有的文章 xff0c
  • 改变Windows窗口颜色,保护好眼睛

    研究表明 xff0c 绿色和蓝色对眼睛最好 xff0c 在长时间用电脑后 xff0c 经常看看蓝天 绿地就能在一定程度上缓解视疲劳 如果我们把电脑屏幕和网页的底色变为淡淡的苹果绿 xff0c 也可在一定程度上有效地缓眼睛疲劳症状了 在桌面上
  • 一个保护眼睛的小技巧

    一般情况用我都是800 600分辨率 xff0c 字体比较大 xff0c 看着舒服 如果在阅读文字资料时 xff0c 我喜欢用比较大的字体 xff0c 背景色是蓝色 xff0c 如下图 嘻嘻 xff0c 是不是看起来一点都不费神 xff0c
  • MySQL四种安装方式

    仓库安装 先在mysql官网上找到需要版本的域名然后用rpm安装下载下来 root 64 bb rpm ivh https repo mysql com mysql80 community release el9 1 noarch rpm
  • 十八. 200多万元得到的创业教训--社交软件之殇

    健生干货分享 xff1a 第18篇 摘要 xff1a 用了两年时间 xff0c 完成了两款社交app的开发 xff0c 两款app都挂掉了 xff0c 社交app成功的关键的是对用户 xff0c 产品的把握 xff0c 整合资源的能力 xf
  • 初学python

    文章作者 newjueqi 作者邮箱 zengjiansheng1 64 126 com 作者QQ号 190678908 作者博客 http blog csdn net newjueqi 作者声明 欢迎转载文章 xff0c 但转载请保持文章

随机推荐

  • 十九. 想快速开发app,需要找外包吗?

    健生干货分享 xff1a 第19篇 摘要 xff1a 最近和两位准备开发app的创业者聊天 xff0c 他们之前没有移动互联网的相关经验 xff0c 有的是想法和资金 他们在纠结 想快速开发app xff0c 需要找外包吗 xff1f 最近
  • 一种进制转换的特殊方法

    文章标题 一种进制转换的特殊方法 文章作者 曾健生 作者邮箱 zengjiansheng1 64 126 com 作者 QQ 190678908 作者博客 http blog csdn net newjueqi 编程环境 JDK 1 6 0
  • 从计算机的核心思想探讨一种进制转换的方法

    文章标题 从计算机的核心思想探讨一种进制转换的方法 文章作者 曾健生 作者邮箱 zengjiansheng1 64 126 com 作者 QQ 190678908 作者博客 http blog csdn net newjueqi 编程环境
  • 用面向对象的思想探讨游戏“魔兽争霸”(1)

    文章标题 用面向对象的思想探讨游戏 魔兽争霸 xff08 1 xff09 文章作者 曾健生 作者邮箱 zengjiansheng1 64 126 com 作者 QQ 190678908 作者博客 http blog csdn net new
  • 用面向对象的思想探讨游戏“魔兽争霸”(2)-继承和多态的应用(修改版)

    文章标题 用面向对象的思想探讨游戏 魔兽争霸 2 继承和多态的应用 修改版 文章作者 曾健生 作者邮箱 zengjiansheng1 64 126 com 作者 QQ 190678908 作者博客 http blog csdn net ne
  • 改良用简单工厂模式构造的计算器代码—“反射”技术

    文章标题 改良用简单工厂模式构造的计算器代码 反射 技术 文章作者 曾健生 作者邮箱 zengjiansheng1 64 126 com 作者 QQ 190678908 作者博客 http blog csdn net newjueqi 编程
  • 用面向对象的思想探讨游戏“魔兽争霸”(3)-模板模式的应用(修改版)

    文章标题 用面向对象的思想探讨游戏 魔兽争霸 3 模板模式的应用 修改版 文章作者 曾健生 作者邮箱 zengjiansheng1 64 126 com 作者 QQ 190678908 作者博客 http blog csdn net new
  • 打造山寨产品和伪造产品的利器——装饰模式

    文章标题 打造山寨产品和伪造产品的利器 装饰模式 文章作者 曾健生 作者邮箱 zengjiansheng1 64 126 com 作者 QQ 190678908 作者博客 http blog csdn net newjueqi 编程环境 J
  • 信号中断 与 慢系统调用

    1 术语 1 1 慢系统调用 xff08 Slow system call xff09 该术语适用于那些可能永远阻塞的系统调用 永远阻塞的系统调用是指调用永远无法返回 xff0c 多数网络支持函数都属于这一类 如 xff1a 若没有客户连接
  • nodejs中处理回调函数的异常

    如果是使用nodejs 43 express3这个经典的组合 xff0c 那么有一种很方面的处理回调函数异常的方法 xff1a 1 安装模块 xff1a express domain middleware 2 加入如下的代码 xff1a a
  • 简单模拟Java中创建多线程的两种方法

    文章标题 简单模拟 Java 中创建多线程的两种方法 文章作者 曾健生 作者邮箱 zengjiansheng1 64 126 com 作者 QQ 190678908 作者博客 http blog csdn net newjueqi 编程环境
  • 虚拟桌面技术的初步探讨

    文章标题 虚拟桌面技术的初步探讨 文章作者 newjueqi 作者邮箱 zengjiansheng1 64 126 com 作者QQ号 190678908 编写语言 VC 43 43 6 0 操作平台 XP SP2 作者声明 感觉到这是一种
  • 一个网游盗号木马的汇编源码分析

    文章标题 xff1a 一个网游盗号木马的汇编源码分析 文章作者 newjueqi 作者邮箱 zengjiansheng1 64 126 com 作者QQ号 190678908 使用工具 IDA 操作平台 XP SP2 作者声明 今年7月份学
  • miranda分析报告

    文章标题 miranda分析报告 文章作者 曾健生 作者邮箱 zengjiansheng1 64 126 com 作者 QQ 190678908 作者博客 http blog csdn net newjueqi 作者声明 欢迎转载文章 xf
  • Java线程类小结(附思维导图)

    文章标题 Java 线程类小结 xff08 附思维导图 xff09 文章作者 曾健生 作者邮箱 zengjiansheng1 64 126 com 作者 QQ 190678908 作者博客 http blog csdn net newjue
  • Java集合类小结(思维导图版)

    文章标题 Java 集合类小结 思维导图版 文章作者 曾健生 作者邮箱 zengjiansheng1 64 126 com 作者 QQ 190678908 作者博客 http blog csdn net newjueqi 编程环境 JDK
  • 简单文件分割合并器的Java实现

    文章标题 简单文件分割合并器的 Java 实现 文章作者 曾健生 作者邮箱 zengjiansheng1 64 126 com 作者 QQ 190678908 作者博客 http blog csdn net newjueqi 编程环境 JD
  • 层级菜单动态效果的实现

    文章标题 层级菜单动态效果的实现 文章作者 曾健生 作者邮箱 zengjiansheng1 64 126 com 作者 QQ 190678908 作者博客 http blog csdn net newjueqi 编程环境 Dreamweav
  • 简单实现邮件系统的界面功能

    文章标题 简单实现邮件系统的界面功能 文章作者 曾健生 作者邮箱 zengjiansheng1 64 126 com 作者 QQ 190678908 作者博客 http blog csdn net newjueqi 编程环境 Dreamwe
  • linux多线程编程书籍推荐:linux大牛之路从这几本书开始总结

    linux多线程编程是指基于Linux操作系统下的多线程编程 xff0c 包括多任务程序的设计 xff0c 并发程序设计 网络程序设计 xff0c 数据共享等 Linux系统下的多线程遵循POSIX线程接口 xff0c 称为pthread