内容简介
第1章 操作系统原理
1.1操作系统的作用
1.2进程管理
1.3进程地址空间
1.4操作系统服务
1.5虚拟内存
1.6调度
1.7硬件和驱动程序
1.8小结
第2章Mac OS X和iOS
2.1 XNU内核
2.1.1内核扩展(KEXT)
2.1.2 Mach
2.1.3 BSD层
2.1.4 I/O Kit
2.2小结
第3章Xcode和内核开发环境
3.1语言的选择:C++
3.2 Xcode
3.3 “Hello World”内核扩展
3.4加载和卸载内核扩展
3.5使用控制台查看输出
3.6小结
第4章I/O Kit框架
4.1 I/O Kit模型
4.2对象关系
4.3 Info.plist文件
4.3.1驱动程序类
4.3.2 IORegistryExplorer
4.4内核库:libkern
4.4.1 OSObject
4.4.2容器类
4.5小结
第5章 应用程序与驱动程序的交互
5.1 I/O Kit框架
5.2查找驱动程序
5.3观察设备移除
5.4修改设备驱动程序属性
5.5基于状态的交互
5.6驱动程序的通知
5.7小结
第6章 内存管理
6.1内存类型
6.1.1 CPU物理地址
6.1.2总线物理地址
6.1.3用户和内核虚拟地址
6.1.4内存顺序:大端序和小端序
6.1.5 32位和64位内存寻址
6.2内存分配
6.2.1底层分配机制
6.2.2 Mach内存域分配器
6.2.3 kalloc家族
6.2.4 BSD中的内存分
6.2.5 I/O Kit内存分配
6.2.6使用C++的new操作符分配内存
6.3内存描述符
6.3.1 IOBufferMemoryDescriptor
6.3.2其他的内存描述符
6.4映射内存
6.4.1用户空间任务到内核空间的内存映射
6.4.2IOMemoryMap类
6.4.3内核到用户空间任务的内存映射
6.4.4将内存映射到指定的用户空间任务
6.4.5物理地址映射
6.5小结
第7章 同步和线程
7.1同步原语
7.2原子操作
7.3锁
7.3.1自旋锁
7.3.2互斥
7.3.3条件变量
7.3.4读/写互斥
7.4同步异步事件:工作环
7.4.1 IOCommandGate
7.4.2定时器
7.4.3释放工作环
7.5内核线程
7.6小结
第8章USB
8.1 USB体系结构
8.1.1 USB传输速度
8.1.2主机控制器
8.1.3 USB协议
8.1.4端点
8.1.5 USB描述符
8.1.6 USB设备类
8.2 I/O Kit USB支持
8.2.1 USB设备和驱动程序处理
8.2.2加载USB驱动程序
8.2.3 USB Prober
8.2.4驱动程序示例:USB大容量存储器设备驱动程序
8.2.5驱动程序启动
8.2.6处理设备移除
8.2.7枚举接口
8.2.8枚举端点
8.2.9执行设备请求
8.2.10执行批量端点和中断端点的I/O
8.3小结
第9章PCI Express和Thunderbolt
9.1 I/O Kit中的PCI
9.1.1匹配和加载驱动程序
9.1.2驱动程序示例:一个简单的PCI驱动程序
9.1.3访问配置空间寄存器
9.1.4 PCI I/O内存区
9.1.5处理设备移除
9.2中断
9.2.1 I/O Kit中断机制
9.2.2注册接收中断
9.2.3启用MSI
9.2.4处理主中断
9.2.5处理二级中断
9.3直接内存访问
9.3.1将物理地址转换为总线地址
9.3.2为DMA准备内存
9.3.3建立分散/聚集列表
9.3.4IODMACommand类
94小结
第10章 电源管理
10.1响应电源状态改变
10.2请求电源状态改变
10.3处理设备空闲
10.4观察设备电源状态改变
10.5汇总
10.6小结
第11章 串行端口驱动程序
11.1 Mac OSX串行端口体系结构概览
11.2串行端口驱动程序
11.3实现IOSerialDriverSync类
11.4串行端口状态
11.5串行端口事件
11.6串行数据传输
11.7从用户空间访问串行端口
11.8小结
第12章 音频驱动程序
12.1数字音频和音频设备简介
12.2 Core Audio
12.3 I/O Kit音频支持
12.4实现一个音频驱动程序
12.4.1驱动程序和硬件初始化
12.4.2注册音频控制
12.4.3实现音频引擎
12.4.4 I/O引擎初始化
12.4.5其他的音频引擎功能
12.5小结
第13章 网络
13.1网络内核扩展
13.1.1内核控制KPI
13.1.2套接字过滤器
13.1.3因特网协议过滤器
13.1.4接口过滤器
13.2调试和测试网络扩展
13.3 I/O Kit中的网络
13.3.1构建简单以太网控制器驱动程序
13.3.2 MyEthernetDriver设计
13.3.3驱动程序初始化和启动
13.3.4介质和状态选择
13.3.5配置设备硬件地址
13.3.6启用和禁用设备
13.3.7传输网络分组
13.3.8接收分组
13.3.9对MyEthernetDriver进行测试
13.4小结
第14章 存储系统
14.1传输层驱动程序
14.2 IOBlockStorageDevice接口
14.3构建RAM磁盘设备
14.4分区规则
14.4.1实现一个示例分区规则
14.4.2媒介内容线索属性
14.5媒介过滤器驱动程序
14.5.1加密过滤器规则示例
14.5.2创建一个自定义GUID分区表
14.6小结
第15章 用户空间USB驱动程序
15.1背景
15.2 IOUSBLib框架
15.3处理异步操作
15.4 IOUSBDeviceInterface类
15.5 IOUSBInterfaceInterface类
15.5.1属性方法
15.5.2端点数据传输方法
15.5.3低延迟同步传输
15.6小结
第16章 调试
16.1常见的问题类型
16.2内核恐慌
16.3调试机制
16.3.1启动时修复崩溃
16.3.2采用IOLog()追踪
16.3.3输出栈跟踪
16.3.4通过FireWire远程跟踪
16.3.5远程内核核心转储
16.3.6 KDB
16.3.7通过以太网或FireWire使用GDB远程调试
16.3.8实时调试运行的内核
16.3.9使用虚拟机调试
16.3.10在内核中使用GDB调试
16.3.11使用Activity Monitor诊断挂起进程
16.3.12查找内存和资源泄漏
16.4小结
第17章 高级内核编程
17.1内核中的SSE和浮点
17.2多功能驱动程序
17.3编写I/O Kit族
17.4内核控制KPI
17.4.1内核控制注册
17.4.2客户端连接
17.4.3获取和设置选项
17.4.4从用户空间访问内核控制
17.5内核中的进程处理
17.6加载资源
17.7 KEXT资源之外的内容
17.8内核驱动程序通知
17.9小结
第18章 部署
18.1安装和加载内核扩展
18.2加载首选项和设置
18.3内核扩展的版本管理
18.4测试和品质保证
18.5打包KEXT和软件
18.5.1构建Hello World内核扩展安装包
18.5.2将内容添加至安装包
18.5.3配置安装包
18.5.4构建安装包
18.5.5卸载安装包
18.6小结
索引