内容简介
第1章 数据类型及链表
1.1 数据类型所占空间
1.2 有关移植性的其他问题
1.2.1 时间间隔
1.2.2 页面大小
1.2.3 字节存储顺序
1.2.4 数据对齐
1.3 内核通用链表
1.3.1 hlist哈希链表
1.3.2 RCU操作保护的链表
1.4 AT T的汇编格式
1.5 内核中的时间延迟
第2章 进程及进程调度
2.1 进程结构
2.2 进程创建
2.2.1 对象缓存的分配
2.2.2 系统调用sys_fork
2.3 内核线程
2.4 工作队列
2.4.1 工作队列的结构及宏定义
2.4.2 工作队列的建立
2.5 进程调度
2.5.1 runqueue结构
2.5.2 进程调度初始化
2.5.3 负载平衡的启动
2.5.4 负载平衡的方法
2.5.5 函数schedule分析
2.5.6 调度器的实时性能
2.6 Linux内核抢占
第3章 内核同步机制
3.1 内核中的互斥机制
3.1.1 自旋锁
3.1.2 原子操作
3.1.3 信号量
3.2 RCU
3.2.1 RCU原理介绍
3.2.2 RCU应用实例
3.2.3 RCU相关数据结构
3.2.4 内核RCU机制的建立
3.2.5 RCU回调处理
3.3 内核与用户空间的通信机制
3.3.1 热插拔操作
3.3.2 内核发消息到用户空间通信机制
3.3.3 内核空间调用用户空间程序
第4章 内存管理
4.1 内存地址类型和内存保护
4.1.1 地址类型
4.1.2 内存保护
4.2.1 描述符及分段
4.2 80386的段页式管理机制
4.2.2 物理内存分页机制
4.3 IA-64 Linux地址空间划分
4.4 进程的内存组织
4.4.1 内存管理的数据结构
4.4.2 VMA在/proc文件系统中的显示
4.5 虚拟内存管理
4.5.1 大容量对象缓存
4.5.2 内存映射
4.5.3 物理内存的反向映射
4.5.4 虚拟内存的加锁和保护
4.6.1 物理内存的结构
4.6 物理内存管理
4.6.2 物理页位图
4.6.3 物理内存的初始化过程
4.6.4 物理页面的分配和回收
4.6.5 缓存及slab
4.6.6 缓存分配的应用
4.6.7 分配缓存函数的分析
4.6.8 交换空间
4.6.9 请页机制
4.6.10 守护进程kswapd
4.6.11 内存管理相关的高速缓存
4.6.12 内存缓冲池
4.6.13 大块内存页
第5章 虚拟文件系统
5.1 VFS的超级块、dentry和节点结构
5.2 与进程联系的文件系统相关结构
5.3 系统有关操作函数集的结构
5.3.1 super_operations
5.3.2 inode_operations
5.3.3 file_operations
5.3.4 dquot_operations
5.4 文件系统的建立过程
5.5 文件系统的注册、安装与卸载
5.5.1 文件系统的注册
5.6 文件系统的系统调用过程
5.5.2 文件系统的安装与卸载
5.6.1 系统调用open
5.6.2 read系统调用
5.7 文件系统的各种缓存
5.7.1 块缓存buffer
5.7.2 inode缓存
5.7.3 目录条目dentry缓存
5.8 缓存同步操作——sys_sync系统调用
5.8.1 多个节点同步回写操作函数sync_inodes
5.8.2 单个节点同步回写操作函数sync_inodes_sb
5.8.3 节点地址空间数据回写操作函数
5.8.4 块设备节点映射的数据同步回写函数sync_blockdev
5.9 pdflush线程池
5.9.1 pdflush线程池的实现
5.9.2 pdflush线程使用实例——wakeup_bdflush
5.10 限额机制
第6章 EXT2文件系统
6.1 EXT2文件系统的几个数据结构
6.1.1 EXT2超级块
6.1.2 EXT2超级块信息结构
6.1.3 超级块的操作函数结构
6.1.4 EXT2的索引节点inode
6.1.5 EXT2文件系统的节点信息结构
6.1.6 节点操作函数结构
6.1.7 文件操作函数结构
6.1.8 EXT2文件系统的组描述符
6.2 EXT2文件系统建立过程
6.3 ext2_read_inode函数分析
6.4 ext2_write_inode函数分析
6.5 文件的读写
6.6 文件扩展时的数据块分配策略
6.7 EXT2的目录项及文件的定位
6.8 链接文件
7.1 ramfs内存文件系统
7.1.1 ramfs文件系统模块初始化
第7章 其他文件系统
7.1.2 ramfs文件系统操作函数集
7.1.3 文件读写操作
7.1.4 目录及节点操作函数集
7.2 /proc文件系统
7.2.1 /proc文件系统在调试中的作用
7.2.2 /proc文件系统实现分析
7.2.3 在/proc中读写设备信息示例
7.3 VFAT文件系统
7.3.1 FAT文件系统的组成
7.3.2 引导记录区DBR及定义
7.3.3 FAT文件系统结构定义
7.3.4 VFAT文件系统的注册超级块
7.3.5 超级块操作函数集的实现
7.3.6 目录操作函数集
7.4 Devfs文件系统
7.5 sysfs文件系统
7.5.1 内核对象相关结构
7.5.2 sysfs文件系统的建立过程
7.5.3 sysfs提供给对象模型的调用函数
7.5.4 sysfs建立bus子系统
7.5.5 bus子系统的接口函数
7.5.6 在sysfs中建立pci目录示例
第8章 I/O端口资源管理
8.1 I/O资源的描述
8.1.1 内存屏障
8.1.2 资源管理函数
8.2 中断处理
8.2.1 硬件提供的中断机制
8.2.2 Linux的中断处理
8.2.3 中断向量的设置和相关数据的初始化
8.2.4 中断处理全过程
8.2.5 tasklet机制
8.2.6 中断处理在/proc文件系统中的报告
8.2.7 并口中断处理程序示例
8.3 DMA
8.3.1 DMA控制器硬件结构
8.3.2 DMA通道使用的地址
8.3.3 DMA操作函数
8.3.4 DMA映射
8.3.5 DMA池
8.3.6 一个简单的使用DMA例子
8.4 电源管理
8.4.1 ACPI规范介绍
8.4.2 ACPI的一些基本概念
8.4.3 ACPI的运行
8.4.4 ACPI驱动程序分析
8.4.5 pci的ACPI电源管理的实现
8.4.6 APM电源管理模式
9.1 简单模块示例
第9章 模块机制
9.2 内核空间和用户空间
9.2.1 处理器保护级
9.2.2 用户空间和内核空间权限
9.2.3 用户空间和内核空间范围及函数参数传递
9.2.4 内核态和用户态之间数据传递
9.3 模块的使用过程
9.4 实现机制
9.4.1 模块在/proc文件系统中的显示
9.4.2 模块结构
9.4.3 模块数据宏操作
9.4.4 实现函数的分析
9.5 modutils介绍
第10章 设备驱动程序
10.1 设备文件及设备访问方式
10.1.1 轮询与中断
10.1.2 直接内存访问(DMA)
10.1.3 设备驱动使用内存
10.1.4 设备文件及接口
10.2 设备驱动程序模型
10.2.1 驱动模型中的描述结构
10.2.2 驱动程序向新的模型上迁移
10.2.3 即插即用
10.2.4 文件系统中与设备驱动相关的结构
10.3 字符设备操作过程
10.4.1 块设备文件系统初始化
10.4 块设备伪文件系统
10.4.2 文件操作函数集
10.5 通用硬盘GENHD
10.6 通用块层
10.6.1 bio相关结构
10.6.2 bio_vec池
10.6.3 碎片链表
10.6.4 请求及请求队列结构
10.6.5 通用的命令标志请求
10.6.6 I/O调度器
10.7.1 初始化块设备的请求队列
10.7 块设备的读写请求队列及提交过程
10.7.2 块设备读写请求的传递过程
10.8 IOCTL设备控制操作
10.9 编写设备驱动程序的基本步骤
10.9.1 如何添加一个字符设备
10.9.2 如何添加一个块设备
第11章 FLASH闪存及SD/MMC卡设备驱动程序
11.1 MTD内存技术设备
11.1.1 MTD内存技术设备层次结构
11.1.2 设备层和原始设备层的函数调用关系
11.1.3 MTD相关结构
11.1.4 MTD块设备初始化
11.1.5 MTD块设备的读写操作
11.1.6 MTD核心初始化
11.1.7 MTD字符设备
11.1.8 具体flash芯片的探测及映射
11.1.9 驱动程序实例分析
11.2 SD/MMC卡块设备驱动程序
11.2.1 MMC抽象设备层相关结构
11.2.2 MC抽象设备层MMC块设备驱动程序
11.2.3 具体MMC控制器驱动程序示例
第12章 Linux系统初始化
12.1 Boot Loader
12.1.1 PC的Boot Loader
12.1.2 嵌入式系统Boot Loader
12.2 Linux内核启动过程
第13章 系统调用
13.1 设定0x80号中断
13.2 系统调用现场保护
13.3 Linux系统调用的流程
13.3.1 系统调用过程
13.3.2 中断INT 0x80入口处理
第14章 Linux网络系统分层结构
14.1 Linux网络系统分层结构
14.2 数据包结构
14.2.1 msghdr结构
14.2.2 socket结构
14.2.3 sk_buff结构及管理
14.2.4 sock结构
14.3 sockfs文件系统
14.4 利用socket通信
14.4.1 socket层
14.4.2 IP层收发数据包函数
14.4.3 网络核心层
14.5 网卡驱动程序
14.5.1 NAPI
14.5.2 8139CP网卡驱动程序
14.6 netlink
14.6.1 内核netlink调用函数
14.6.2 示例
15.1 动态链接与静态链接
第15章 执行文件的运行过程
15.2 位置无关代码(PIC)的汇编语言编程
15.3 可执行文件格式
15.3.1 a.out文件格式分析
15.3.2 COFF文件格式分析
15.3.3 ELF文件格式分析
15.3.4 符号的重定位
15.3.5 ELF文件加载过程
15.4 可执行文件加载代码分析
第16章 进程间通信
16.1 管道
16.2.1 消息队列结构
16.2 消息队列
16.2.2 消息队列文件系统
16.2.3 消息队列系统调用函数
16.3 共享内存
16.3.1 共享内存相关结构
16.3.2 tmpfs文件系统
16.3.3 共享内存系统调用
16.4 信号
16.4.1 信号相关的结构
16.4.2 设置信号响应
16.4.3 信号分发
16.4.4 信号响应
16.5.1 信号量相关结构
16.5 用户空间信号量操作
16.5.2 系统调用函数的实现
第17章 Linux的安全策略
17.1 Linux常用安全技术
17.1.1 PAM机制
17.1.2 入侵检测系统
17.1.3 加密文件系统
17.1.4 安全审计
17.1.5 基于ACL的自主访问控制
17.1.6 强制访问控制
17.1.7 防火墙
17.2 Linux能力机制
17.3 Flask安全体系结构概述
17.4 SE Linux安全策略配置语言
17.4.1 基本概念
17.4.2 Linux与SE Linux在安全管理上的区别
17.4.3 安全模型
17.4.4 策略语言及配置样例
17.5 SELinux的内部结构
17.6 SELinux的实现
17.6.1 任务的安全管理
17.6.2 AVC分析
17.6.3 security_compute_av函数
17.7 策略库的结构
17.7.1 sidtab结构
17.7.2 symtab结构
17.7.3 avtab结构
17.7.4 class_datum结构
17.7.5 role_datum结构
17.7.6 user_datum结构
17.7.7 role_tran结构
17.7.8 cond_node结构
17.8 安全审计的管理
17.9 sel_fs文件系统
17.10 防火墙
17.10.1 Netfilter框架
17.10.2 iptables管理工具
17.10.3 Netfilter例子
第18章 内核配置与编译
18.1 配置文件的生成
18.2 配置语言
18.3 主Makefile分析
18.3.1 主Makefile中的分析
18.3.2 嵌入式内核的交叉编译
18.4 Rule.make及子目录编译
18.4.1 编译选项变化引起增量编译
18.4.2 子目录的编译
18.4.3 Rule.make分析
18.4.4 驱动程序配置示例
第19章 Linux内核调试
19.1 strace命令
19.2 oops消息分析
19.3 调试工具
19.4 printk打印调试
19.4.1 printk
19.4.2 如何记录消息
19.4.3 sys_syslog系统调用
19.4.4 printk函数分析
19.4.5 控制台
19.4.6 tty代码分析
19.4.7 tty_register_ldisc函数
19.5.1 调试寄存器
19.5 ptrace调试跟踪
19.5.2 TSS中的调度陷阱
19.5.3 INT3
19.5.4 程序的单步执行
19.5.5 ptrace系统调用
19.5.6 系统调用跟踪
19.5.7 调试陷阱处理
19.5.8 调试器运行方法
第20章 USB总线驱动程序
20.1 USB的拓朴结构
20.2 USB 2.0协议
20.2.1 包标志符及传输控制概述
20.2.2 总线枚举
20.2.3 USB设备请求
20.2.4 描述符
20.2.5 OTG规范
20.3 USB总线驱动程序结构
20.3.1 USB主机驱动程序的体系
20.3.2 USB驱动程序的编写
20.3.3 设备结构间的关系
20.4 USB驱动程序初始化
20.5 usbfs文件系统
20.5.1 usbfs文件系统初始化
20.5.2 usbfs文件操作
20.6.1 URB结构
20.6 USB请求块(URB)
20.6.2 URB的操作
20.7 同步消息处理
20.7.1 同步请求完成模型
20.7.2 控制与查询
20.8 用主机控制器驱动层(HCD层)
20.8.1 USB总线的注册与注销
20.8.2 HCD操作函数
20.8.3 注册根集线器
20.9 集线器Hub
20.9.1 Hub初始化
20.9.2 Hub设备的各种事件处理
20.9.3 ehci-hcd控制器
20.10 USB大存储设备
20.10.1 Bulk-Only传输协议
20.10.2 SCSI体系结构模型及命令描述块
20.10.3 大存储类主机驱动程序
20.11 USB从设备驱动程序(Gadget)
20.11.1 Gadget相关结构
20.11.2 Gadget API
20.11.3 pxa2xx控制器
20.11.4 gadgetfs文件系统
20.11.5 大存储设备驱动程序
附录A Linux系统调用
主要参考文献