第1部分 Linux内核源代码分析 3
第1章 Linux进程管理代码分析 3
1.1 基本概念 3
1.2 进程的状态和标志 4
1.3 Linux中进程间的状态转换 9
1.3.1 进程的创建 9
1.3.2 进程的调度 10
1.3.3 进程间通信 12
1.3.4 进程从运行态到停止态的转换 24
1.3.5 进程从停止态到运行态的转换 25
1.3.6 进程的终止 26
1.4 小结 27
第2章 内存管理分析 29
2.1 概述 29
2.1.1 Linux内存管理的基本特点 29
2.1.2 Linux内存管理的主要实现技术 29
2.1.3 虚拟内存模型 31
2.1.4 页面管理 31
2.2 Linux内存管理数据结构 35
2.2.1 32位虚拟地址 35
2.2.2 Linux的多级页表结构 35
2.2.3 页表项的格式 36
2.2.4 动态地址映射 37
2.2.5 用户进程的虚拟内存结构 38
2.3 进程内存管理数据结构的建立、维护及其系统调用 39
2.3.1 进程载入、创建及内存管理数据结构和链接建立 39
2.3.2 缺页中断服务 42
2.4 主要函数分析 44
2.4.1 内存管理的主要文件 44
2.4.2 内存映射文件 48
2.5 小结 55
第3章 虚拟文件系统 56
3.1 基本概念 56
3.2 VFS的数据结构 57
3.2.1 VFS的超级块结构 57
3.2.2 VFSinode及其相关数据结构 59
3.3 高速缓存的管理 60
3.3.1 缓冲区高速缓存 60
3.3.2 VFSinode高速缓存 66
3.3.3 VFS目录高速缓存 67
3.4 VFS inode资源链 69
3.4.1 资源链的组织及主要操作 69
3.4.2 VFS inode的主要操作 70
3.5 文件系统的管理 73
3.6 文件系统的系统调用 74
3.6.1 sys_open系统调用 74
3.6.2 sys_close()系统调用 75
3.7 小结 76
第4章 EXT2文件系统 77
4.1 概述 77
4.2 EXT2文件系统的数据结构 78
4.2.1 EXT2文件系统的物理布局 78
4.2.2 EXT2文件系统的超级块结构 78
4.2.3 EXT2文件系统的inode结构 81
4.2.4 EXT2文件系统的组描述符 83
4.3 文件管理 84
4.3.1 系统打开文件表 84
4.3.2 EXT2的目录项 85
4.3.3 文件的访问 85
4.3.4 数据块的管理 86
4.4 EXT2文件系统的系统调用 88
4.4.1 sys_mkdir系统调用 88
4.4.2 sys_rmdir系统调用 90
4.5 小结 91
第5章 Linux的网络设备接口 93
5.1 网络设备概述 93
5.2 网络设备的数据结构 95
5.3 网络设备的初始化 99
5.3.1 模块初始化模式的分析 99
5.3.2 启动初始化模式的分析 105
5.4 网络设备的打开和关闭 111
5.5 数据包的传输和接收 113
5.5.1 Socket缓冲区及相关操作 114
5.5.2 数据包的传输 115
5.5.3 数据包的接收 117
5.6 网络设备驱动程序的开发 120
5.6.1 网络设备驱动程序的开发步骤 120
5.6.2 设备驱动程序的开发实例 120
5.7 小结 126
第6章 系统调用的原理 127
6.1 系统调用概述 127
6.2 Linux系统调用流程 127
6.2.1 Linux系统调用的中断机制 127
6.2.2 相关的数据结构及函数 128
6.2.3 Linux系统调用的流程 136
6.3 系统调用的实例分析 141
6.3.1 mlock系统调用简介 141
6.3.2 mlock所用到的主要数据结构和重要常量 142
6.3.3 mlock系统调用代码分析 145
6.4 系统调用的创建 155
6.4.1 系统调用编程 155
6.4.2 系统调用的连接和使用 156
6.5 小结 157
第2部分 Linux系统编程 161
第7章 Bash编程 161
7.1 Bash的编程步骤 161
7.2 Bash中的变量 162
7.2.1 特殊变量 163
7.2.2 Bash中的引号 164
7.3 Bash中的数值运算 164
7.4 Bash中的特殊语句 166
7.4.1 条件语句 166
7.4.2 循环语句 168
7.4.3 移位语句 170
7.5 在Bash中使用函数 170
7.6 正则表达式 171
7.6.1 句点的单字符匹配 171
7.6.2 行首和行尾的匹配 172
7.6.3 星号和反斜杠的使用 172
7.6.4 括号匹配和指定次数匹配 173
7.6.5 Bash脚本中常用的正则表达式 174
7.7 Bash编程实例 175
7.7.1 网络检测脚本 175
7.7.2 备份脚本 175
7.7.3 限制访问脚本 181
7.7.4 清除日志脚本 183
7.8 小结 184
第8章 GNU make管理项目与Gcc编程 185
8.1 make管理项目简介 185
8.2 编写Makefile的规则 186
8.2.1 虚拟目标 187
8.2.2 Makefile的变量 187
8.2.3 make的变量 188
8.2.4 隐式规则 189
8.2.5 模式规则 190
8.3 make命令 190
8.4 Makefile实例分析 191
8.5 Gcc的基本概念 197
8.6 Gcc命令 199
8.7 Gcc扩展简介 202
8.8 Gcc编程实例分析 203
8.8.1 串行口通信程序 203
8.8.2 网络通信程序 205
8.9 小结 207
第9章 GNU C++编程 208
9.1 Gcc与GNU C++的比较 208
9.2 GNU C++程序概述 209
9.3 GNU C++的编译和调试 211
9.3.1 警告与错误 211
9.3.2 编译选项 212
9.3.3 调试技术 217
9.4 GNU C++编程特点 221
9.4.1 内存管理的特点 221
9.4.2 指针使用的特点 222
9.4.3 异常处理的特点 223
9.4.4 类对象复制的特点 226
9.5 GNU C++程序实例分析 227
9.5.1 接收变元的程序示例 227
9.5.2 类对象复制程序示例 229
9.5.3 多重继承程序示例 230
9.5.4 异常处理程序示例 233
9.6 小结 235
第10章 多线程编程 236
10.1 Linux线程简介 236
10.1.1 线程的基本概念 236
10.1.2 线程的实现和创建 236
10.1.3 线程创建源代码 237
10.2 LinuxThreads线程库 242
10.2.1 pthread_create() 243
10.2.2 pthread_join() 243
10.2.3 pthread_self() 243
10.2.4 pthread_detach() 244
10.2.5 pthread_exit() 244
10.2.6 pthread_cancel() 244
10.3 线程间通信 244
10.3.1 pthread_once() 245
10.3.2 pthread_key_create() 245
10.3.3 pthread_getspecific() 246
10.3.4 pthread_setspecific() 246
10.3.5 pthread_mutex_lock() 246
10.3.6 pthread_mutex_unlock() 246
10.3.7 pthread_cond_init() 246
10.3.8 pthread_cond_wait() 247
10.4 守护线程分析 247
10.5 多线程编程实例分析 249
10.5.1 X Window GUI示例程序 249
10.5.2 TCP/IP服务器示例程序 252
10.5.3 生产者和消费者模型示例程序 257
10.5.4 同步线程测试示例程序 258
10.5.5 同步线程读写缓冲区示例程序 259
10.6 小结 260
第3部分 建立嵌入式Linux系统 263
第11章 修改和编译Linux内核 263
11.1 概述 263
11.2 修改Linux内核示例 264
11.2.1 虚拟内存 264
11.2.2 实时调度 304
11.3 编译Linux内核 307
11.3.1 初始化环境 307
11.3.2 配置核心 307
11.3.3 编译内核 307
11.3.4 应用内核 307
11.4 小结 308
第12章 嵌入式Linux系统中的脚本控制 309
12.1 Linux启动和退出过程简介 309
12.2 自定义决定运行级别的脚本 311
12.3 特定运行级别脚本 314
12.4 自定义公共启动脚本 316
12.5 自定义退出脚本 330
12.6 小结 334
第13章 组建嵌入式Linux系统的文件系统 335
13.1 概述 335
13.2 组建嵌入式Linux系统的文件系统脚本 335
13.3 分析嵌入式Linux系统的文件系统 337
13.4 小结 340
第4部分 嵌入式Linux系统的应用 343
第14章 IP电话的实现原理 343
14.1 IP电话应用结构 343
14.2 H.323协议栈结构及应用 344
14.3 H.323系统的组成 346
14.4 H.323协议实体的功能 348
14.4.1 终端功能 348
14.4.2 网关功能 349
14.4.3 网守功能 350
14.4.4 多点通信端点的功能 351
14.5 相关协议简介 352
14.5.1 RAS协议 352
14.5.2 H.255.0 353
14.5.3 H.245 355
14.5.4 RTP 356
14.5.5 RTCP 356
14.5.6 RSVP 357
14.6 小结 358
第15章 利用PPCBOOT引导系统 359
15.1 开发步骤简介 359
15.2 开发模型 360
15.3 修改PPCBOOT源代码 361
15.3.1 与主板有关的文件 361
15.3.2 与CPU有关的文件 362
15.3.3 头文件 364
15.3.4 公共函数文件 368
15.3.5 网络传输代码文件 371
15.3.6 Makefile文件 375
15.4 PPCBoot的监视界面 376
15.5 小结 377
第16章 建立开发平台 378
16.1 安装CDK1.2 378
16.2 设置目标系统 379
16.3 设置开发主机 379
16.3.1 设置DHCP 380
16.3.2 设置TFTP 380
16.3.3 设置NFS 381
16.4 测试目标系统的内核装载与引导 381
16.5 开发平台的调试模型 383
16.5.1 开发应用 383
16.5.2 调试应用 384
16.6 小结 385
第17章 应用软件开发实例 386
17.1 需求分析 386
17.2 使用的协议栈和函数库 386
17.3 应用软件源代码 388
17.3.1 main.cxx 388
17.3.2 main.h 398
17.3.3 version.h 399
17.3.4 Makefile 399
17.4 小结 400
参考文献 401