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用户深入学习,并适合计算机专业本科、硕士等专业的学生学习參考。

  为特定server的应用程序调整关键參数。从而产生优异的性能。

  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 
资深软件project师。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 分析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

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

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

  • ssh免密码登陆失败的原因

    今天因为需要在两台服务器上进行ssh免登陆 xff0c 所以安装网上的教程 xff0c ssh keygen t rsa xff0c 然后把相互的密钥加入到对方的authorized keys 问题是我们虽然这样做了 xff0c 却一直要密
  • ESP32-s2芯片esp32-s2-saola-1开发板 micropython的repl连接

    本文只是解决通过esp32 s2 saola 1开发板 自带microUSB 作为repl与micro python通信的问题 如果你对esp32 xff0c micropython不熟 xff0c 本文不适合你 如果你用的不是esp32
  • 机械臂模拟2.0

    机械臂模拟 void MobileCrane updateHopeLength int center x int center y int center z int armNodeNum int ropePitchNum int baseN
  • Qt获取时间戳作为图片名

    Qt获取时间戳作为图片名 保存图片 void SaveRealsenseImg QString picIndexName 61 dataSavePath picIndexName append 34 34 获取当前时间 QDateTime
  • [转&精]IO_STACK_LOCATION与IRP的一点笔记

    IO STACK LOCATION和IRP算是驱动中两个很基础的东西 xff0c 为了理解这两个东西 xff0c 找了一点资料 1 IRP可以看成是Win32窗口程序中的消息 xff08 Message xff09 xff0c DEVICE
  • wireshark抓包结果很多[TCP Retransmission]怎么办?

    有一同事问用wireshark抓包时发现很多 TCP Retransmission xff0c 这些包极大影响了自己真正想看的http数据包 xff0c 如下图 我拿到pcapng后首先看到这些包的来源ip都是固定的两个 xff0c 所以首
  • MATLAB神经网络训练结果各参数解释

    最上面的图形显示的是神经网络的结构图 xff0c 可知有一个隐层一个输出层 第二部分显示的是训练算法 xff0c 这里为学习率自适应的梯度下降BP算法 xff1b 误差指标为MSE 第三部分显示训练进度 xff1a Epoch xff1a
  • SQL语句统计个数大于一的记录

    1 主要是利用Having语句进行 xff0c 由于where不能与聚合函数一起使用 xff0c 所以用having SELECT MC COUNT MC AS SL FROM JSB GROUP BY MC HAVING COUNT MC
  • You must give at least one requirement to install (see "pip help install")

    语言 python why install 后面没有参数 xff0c 也就是说没有给想要安装的包 way pip install 后面要跟想要安装的包名 转载于 https www cnblogs com 2bjiujiu p 902966
  • VHDL乘除法及转换

    首先鄙视一下这个不智能的语言 1 要进行乘法与除法 xff0c 数据类型必须是signed 2 两个16位的数相乘 xff0c 结果必须是32位的 3 乘以2的n次幂的数可以直接乘 xff0c 之后截位也比较方便 xff0c xff08 其
  • C语言真正的编译过程

    说实话 xff0c 很多人做了很久的C C 43 43 也用了很多IDE xff0c 但是对于可执行程序的底层生成一片茫然 xff0c 这无疑是一种悲哀 xff0c 可以想象到大公司面试正好被问到这样的问题 xff0c 有多悲催不言而喻 x
  • Docker 删除&清理镜像

    文章首发自个人网站 xff1a https www exception site docker docker delete image 本文中 xff0c 您将学习 Docker 如何删除及清理镜像 xff1f 一 通过标签删除镜像 通过如
  • 解决:invalid application of `sizeof' to incomplete type `({anonymous})'错误

    这个错误的原因 xff1a sizeof不能用在extern变量 xff0c sizeof 的计算发生在代码编译 的时刻 extern 标注的符号 在链接的时刻解析 所以 sizeof 不知道 这个符号到底占用了多少空间 发生错误的程序是这
  • 自制吸锡带

    焊接qfp封装芯片的时候 xff0c 由于两个引脚间距过小 xff0c 常常会在引脚上留有焊锡 xff0c 这个时候就需要吸锡带 xff0c 但是一般情况下我们手边的设备并不齐全 xff0c 所以我们可以利用手边的工具自制 工具 xff1a
  • 实验六

    芯片派生 include lt iostream gt using namespace std class Base public void add int x int y cout lt lt x lt lt 34 43 34 lt lt
  • geometry_msgs.msg.PoseStamped 代码示例

    https programtalk com python examples geometry msgs msg PoseStamped 转载于 https www cnblogs com sea stream p 11129929 html
  • ubuntu 执行apt-get update报错Failed to fetch

    在ubuntu下执行sudo apt get update时 xff0c 经常会遇到报错 xff1a Err http security ubuntu com precise security InReleaseErr http secur
  • github中的wiki是干嘛的_在 Hyperf 框架中,如何定制 gen:model 命令

    Hyperf v2 0 版本中 xff0c 会将 decimal 转化为 float xff0c 从而存在精度丢失的风险 如果直接修改这个问题 xff0c 可能会导致 v2 0 出现 BC xff0c 所以我们在 v2 1 中得到了处理 x
  • APM飞控修改数传模块方法

    APM飞控修改数传模块方法 硬件 ARDUCOPTER第二代数传模块 USB接口 数传模块 telem接口 usb ttl模块 修改方法 注意 xff1a APM固件版本和数传模块估计版本是分开的 xff0c 但有一定的对应关系 xff0c
  • HTTP AUTH 那些事

    谨以此文献给那些需要实现HTTP AUTH的 程序猿 们 关于HTTP AUTH的文档不多 RFC在 http www ietf org rfc rfc2617 txt wiki在 http en wikipedia org wiki Ba

随机推荐

  • 基于超声波的四轴定高控制简析

    笔者是来自武汉理工的小青同学 xff0c 接下来为大家讲一下基于超声波的定高问题 xff0c 鉴于笔者能力有限 xff0c 所以如有错误请多指教 xff0c 且很多仅仅是工程上的近似化应用 xff0c 没有做过仿真模拟 我讲的东西更加偏重于
  • Android 新建工程 卡在Gradle:Resolve dependencies':app:_debugCompile'

    今天更新 androidSDK 到 5 0 xff0c 发现新建工程时卡在 Gradle Resolvedependencies 39 app debugCompile 39 首先 xff0c googledevelop是访问不了的 xff
  • 数学公式

    一 泰勒公式 数学中 xff0c 泰勒公式是一个用函数在某点的信息描述其附近取值的公式 如果函数足够平滑的话 xff0c 在已知函数在某一点的各阶导数值的情况之下 xff0c 泰勒公式可以用这些导数值做系数构建一个多项式来近似函数在这一点的
  • python内置方法和属性

    1 del 方法 作用 当使用类名 创建对象时 xff0c 为对象分配完空间后 xff0c 会自动调用 init 方法 xff0c 当对象被从内存中销毁前 xff0c del 方法会被自动调用 应用场景 xff1a init 方法可以重新设
  • Linux行人识别,0.kcf-tracker 机器人跟踪编程,基于opencv的行人检测和 ,当 发现 后自动进行 。 Linux Network 网络 276万源代码下载- www.pudn.co...

    文件名称 0 kcf tracker下载 收藏 5 4 3 2 1 开发工具 Windows Unix 文件大小 95560 KB 上传时间 2017 05 14 下载次数 0 详细说明 xff1a 机器人跟踪编程 xff0c 基于open
  • 【VirtualBox】快照

    一 快照备份 虚拟机系统快照下来 xff0c 以后就可以恢复到快照之前的系统 右上角 gt 虚拟电脑工具 gt 快照 转载于 https www cnblogs com chenxiaomeng p 9497166 html
  • TX2-start 6 CPU kernel-开启高功耗模式

    1 TX2简介 Jetson TX2是由一个GPU和一个CPU集群组成 CPU集群由双核denver2处理器和四核ARM Cortex A57组成 xff0c 通过高性能互连架构连接 拥有 xff16 个CPU核心和一个GPU xff0c
  • 生成正太随机变量

    clc clear close format long syms u v x y u1 u2 u3 u3 u x1 x2 x3 x4 x5 d L int int int int 1 x5 x4 1 x4 x3 1 x3 x2 1 x2 x
  • 【opencv基础】OpenCV installation stuck at [ 98%] Built target opencv_perf_stitching with no error...

    前言 按照官网步骤安装opencv的过程中进行到98 时一直没有继续进行 原因 后台一直在编译运行 xff0c 只需等待即可 xff0c 参考here xff1b well turns out it gets stuck for quite
  • PX4的UORB通信机制

    在Firmware的msg文件夹里面 xff0c 里面有很多 msg结尾的文件 xff0c 这些msg文件在编译的时候可以生成h头文件 xff0c 这些编译过程中生成的头文件一般是保存在build default src module uo
  • ubuntu下安装和更新R语言

    ubuntu 下安装和更新 R 语言 本文主要讲解在 ubuntu 下如何安装和更新 R 语言 将分别介绍什么是 R 语言 xff0c 简单方法安装 R 语言 xff0c 通过更新源来安装或更新 R 语言 xff0c 和安装 R 语言集成开
  • Linux 中各个文件夹的作用

    根目录 包含了几乎所的文件目录 相当于中央系统 进入的最简单方法是 xff1a cd boot 引导程序 xff0c 内核等存放的目录 这个目录 xff0c 包括了在引导过程中所必需的文件 在最开始的启动阶段 xff0c 通过引导程序将内核
  • 转:Fix Bug的五个阶段

    一个非常严重和困难的bug xff0c 能够成就一个饱经沧桑深受压力的有经验的专业程序员的职业生涯 经受这种考验的创伤程度 xff0c 相当你受到了一次严重的身体伤害 xff0c 离婚 xff0c 或是家庭成为的离世 研究人员在研究了计算机
  • 10.app后端选择什么开发语言

    在qq上 xff0c 经常看到有创业团队的创始人一直都招不到技术人员 xff0c 除了项目的因素外 xff0c 很大的原因就是所需要掌握的开发语言偏门 通过阅读本文 xff0c 详细了解选择开发语言的核心原则 xff0c 使各位心里对开发语
  • dell服务器系统开机提示错误解决方法

    DELL 服务器有时会若硬件的改动 xff0c 在开机以后会提示错误信息 信息一般会提示在显示器上 xff0c 以后举出如下信息的解决办法 信息 原因 纠正措施 Alert iDRAC6 not responding Rebooting i
  • 卡尔曼滤波原理

    卡尔曼滤波原理 原文链接 xff1a http www bzarg com p how a kalman filter works in pictures https blog csdn net u010720661 article det
  • 在网络直播中什么叫推流

    参考 xff1a 推流 xff0c 指的是把采集阶段封包好的内容传输到服务器的过程 其实就是将现场的视频信号传到网络的过程 推流 对网络要求比较高 xff0c 如果网络不稳定 xff0c 直播效果就会很差 xff0c 观众观看直播时就会发生
  • Hello, Weka

    转自http dreamhead blogbus com logs 16813833 html Weka xff0c 是一个用Java编写的数据挖掘软件 数据挖掘 xff0c 从字面上来看 xff0c 它是一个从数据中找寻有用信息的过程 x
  • ubuntu基础知识与技巧

    root用户与超级用户的切换 1 sudo i 2 sudo su 3 su root 安装升级 查看软件xxx安装内容 dpkg L xxx 查找软件库中的软件 apt cache search 正则表达式 或 aptitude sear
  • linux多线程编程书籍推荐:linux大牛之路从这几本书開始总结

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