第1章 开源工具的下载和安装 1
1.1简介 1
1.2什么是开放源码 2
1.3开放源码的意义 2
搜索工具 2
版本格式 3
1.4存档文件 4
识别存档文件 5
查询存档文件 6
提取存档文件 9
1.5认识软件包管理器 10
源代码或二进制格式的选择 11
使用软件包 12
1.6关于安全性和软件包 13
验证的必要性 14
软件包的基本认证 14
数字签名的软件包验证机制 15
RPM格式的GPG签名 16
何时不能验证软件包 19
1.7检查软件包目录 20
查看软件包 20
深入理解RPM软件包 22
深入理解Debian软件包 23
1.8软件包更新 25
Apt:高级软件包工具 26
Yum: Yellowdog修订版更新 26
Synaptic: The GUI Front End For Apt 27
up2date: Red Hat软件包更新 28
1.9小结 29
本章用到的工具 29
网络资源 29
第2章 从源代码构建 31
2.1简介 31
2.2构建工具 32
背景知识 32
make工具 34
程序的链接 52
深入理解库 53
2.3创建过程 57
GNU构建工具 57
配置阶段 57
构建阶段:make 59
安装阶段:make install 60
2.4理解错误和警告 60
常见的Makefile错误 61
配置阶段的错误 63
创建阶段的错误 64
理解编译器错误 66
理解编译器警告信息 68
理解链接器错误 76
2.5小结 77
本章用到的工具 77
网络资源 78
第3章 查找帮助 79
3.1简介 79
3.2在线帮助工具 80
man页面 80
man结构 81
查找man页面:apropos 82
查找正确的man页面:whatis 84
在man页面中查找 85
一些推荐的man页面 86
GNU info 88
浏览info页面 88
查找info页面 90
推荐info页面 91
桌面帮助工具 91
3.3其他 92
/usr/share/doc 92
交叉引用和索引 93
查询软件包 94
3.4文件格式 95
TeX/LaTtex/DVI 95
Texinfo 96
DoCbook 96
HTML 97
PostScript 98
便携式文件格式(PDF) 99
troff 100
3.5来自互联网的信息 100
www.gnu.org 100
sourceforge.net 101
Linux文件项目 101
Usenet(世界性的新闻组网络系统) 102
邮件列表 102
其他论坛 102
3.6查找Linux内核信息 103
内核构建 103
内核模块 105
混杂(miscellaneous)文件 106
3.7小结 106
本章用到的工具 106
在线资源 106
第4章 编辑和保存源文件 109
4.1简介 109
4.2文本编辑器 110
默认编辑器 111
在文本编辑器中查找 111
vi和Emacs 113
Vim: vi扩展 113
Emacs 130
反对复制品 137
GUI文本编辑器 139
内存使用率 144
编辑器概述 145
4.3版本控制 145
版本控制基础 145
定义版本控制的术语 147
支持工具 148
diff和patch简介 149
检查和合并更改 152
4.4源代码的优化器和浏览器 157
缩进代码优化器 158
Astyle风格 160
用cflow分析代码 160
用ctags分析代码 163
用cscope浏览代码 163
用Doxygen浏览和记录代码 164
使用编译器分析代码 165
4.5小结 167
本章用到的工具 168
参考资料 168
在线资源 168
第5章 开发者必备内核知识 171
5.1简介 171
5.2用户模式与内核模式 172
系统调用 173
用户空间与内核空间的数据传送 175
5.3进程调度程序 175
初识调度 176
阻塞,抢先占有和放弃 177
调度的优先与公平 178
优先权和Nice值 182
实时优先权 183
创建实时进程 185
进程状态 186
时间度量 190
5.4设备和设备驱动程序 198
设备驱动程序的类型 199
内核模块 200
设备节点 201
设备和输入/输出 210
5.5 I/O调度程序 217
Linus电梯式调度(aka noop) 218
I/O调度程序的截止时间 219
先占I/O调度程序 219
完整的公平地排队I/O调度程序 219
选择一个I/O调度程序 219
5.6用户空间的内存管理 220
虚拟内存的解释 220
内存耗尽 232
5.7小结 241
本章用到的工具 241
本章讨论的APIs 242
在线资源 242
参考资料 242
第6章 进程 243
6.1简介 243
6.2进程的产生 243
fork和vfork 244
写拷贝 244
clone 245
6.3 exec函数 245
可执行脚本 246
可执行目标文件 248
二进制文件 248
6.4 wait实现进程同步 250
6.5进程的内存占用 252
文件描述符 254
堆栈 259
常驻内存和固定内存 260
6.6设定进程限制 260
6.7进程和procfs 263
6.8进程管理工具 265
通过ps命令显示进程信息 265
使用formats增加进程信息 267
查找名中带有ps和pgrep的进程 269
利用pmap查看进程使用的空间 269
通过名字发送信号给进程 271
6.9小结 271
系统调用和本章用到的API 272
本章用到的工具 272
在线资源 272
第7章 进程通信 273
7.1简介 273
7.2使用纯文本文件的IPC 274
文件加锁 279
使用文件进行IPC的缺点 279
7.3共享内存 279
POSIX共享内存API 280
System V共享内存API 283
7.4信号 286
向进程发送信号 286
信号处理 287
信号掩码和信号处理 288
实时信号 291
具有sigqueue和sigaction的高级信号 293
7.5管道 295
7.6套接字 296
创建套接字 296
使用socketpair的本地套接字示例 298
使用本地套接字的客户端/服务器端示例 300
使用网络套接字的客户端/服务器端示例 305
7.7消息队列 305
System V消息队列 306
POSIX消息队列 309
POSIX与System V的消息队列的区别 314
7.8信号量 314
POSIX信号量使用的API 318
System V信号量使用的API 321
7.9小结 323
本章中用到的系统调用和API 323
参考资料 325
在线资源 325
第8章 使用shell命令调试IPC 327
8.1简介 327
8.2打开文件时用到的工具 327
lsof 328
fuser 329
ls 330
file 330
stat 330
8.3查看文件中的数据 331
字符串命令 334
xxd命令 334
hexdump命令 335
od命令 336
8.4用于V IPC系统的内核工具 337
V系统共享内存 337
V系统消息队列 340
V系统的信号量 340
8.5 POSIX IPC用到的工具 341
POSIX共享内存 342
POSIX消息队列 342
POSIX信号量 343
8.6信号用到的工具 344
8.7管道和套接字用到的工具 346
管道和FIFO 346
套接字 347
8.8使用索引识别文件和IPC对象 349
8.9小结 351
本章用到的工具 351
在线资源 351
第9章 性能优化 353
9.1简介 353
9.2系统性能 353
内存问题 354
CPU利用率和总线冲突 363
设备和中断 365
查找系统性能问题的工具 371
9.3应用程序性能 377
计时命令的第一步 378
x86info处理器结构 379
使用Valgrind检查指令效率 382
ltrace简介 385
使用strace监视程序性能 387
传统性能优化工具:gcov和gprof 388
OProfile简介 394
9.4多处理器平台 400
SMP硬件的类型 400
SMP机上的编程实现 404
9.5小结 406
本章介绍的基本性能 406
本章介绍的专业术语 406
本章用到的工具 406
在线资源 407
参考资料 407
第10章 调试 409
10.1简介 409
10.2最基本的调试工具:printf 410
使用printf存在的问题 410
有效地使用printf 414
关于printf调试工具的结束语 421
10.3 GNU下最好用的调试器:gdb 422
使用gdb运行代码 423
停止和重新执行 424
检查和管理数据 432
使用gdb连接正在运行的进程 441
调试内核文件 442
使用gdb进行多线程调试 445
调试优化的代码 446
10.4调试共享对象 449
使用共享对象的时间和原因 449
创建共享对象 449
定位共享对象 450
覆盖默认共享目标的位置 451
共享对象的安全问题 451
共享对象使用的工具 452
10.5查找内存问题 454
两次释放 454
内存泄露 455
缓冲区溢出 455
glibc工具 457
使用valgrind调试内存 460
使用Electric Fence检测内存泄漏 465
10.6非常规技术 467
创建自己的黑匣子 467
获取运行时的堆栈轨迹 470
强制内核转储 471
使用信号 473
使用procfs调试 473
10.7小结 475
本章用到的工具 476
在线资源 476
参考资料 476