《OS X与IOS内核编程》PDF下载

  • 购买积分:13 如何计算积分?
  • 作  者:(澳)OleHenryHalvorsen,(澳)DouglasClarke;贾伟译者
  • 出 版 社:北京:人民邮电出版社
  • 出版年份:2013
  • ISBN:9787115318244
  • 页数:388 页
图书介绍:本书面向Mac OS X和iOS操作系统,介绍了操作系统和内核架构等基础知识,以及内存管理、线程同步、I/O Kit框架等基本概念。通过最贴近实战的方法帮助读者编写高效的内核级代码。本书两位作者具备丰富的计算机硬软件以及设备驱动程序开发经验,在他们的指引下,读者定能为USB和Thunderbolt等设备开发设备驱动程序。

第1章 操作系统原理 1

1.1操作系统的作用 3

1.2进程管理 3

1.3进程地址空间 4

1.4操作系统服务 5

1.5虚拟内存 6

1.6调度 8

1.7硬件和驱动程序 9

1.8小结 11

第2章Mac OS X和iOS 12

2.1 XNU内核 17

2.1.1内核扩展(KEXT) 18

2.1.2 Mach 18

2.1.3 BSD层 27

2.1.4 I/O Kit 29

2.2小结 31

第3章Xcode和内核开发环境 32

3.1语言的选择:C++ 32

3.2 Xcode 33

3.3 “Hello World”内核扩展 34

3.4加载和卸载内核扩展 37

3.5使用控制台查看输出 39

3.6小结 40

第4章I/O Kit框架 41

4.1 I/O Kit模型 41

4.2对象关系 43

4.3 Info.plist文件 43

4.3.1驱动程序类 46

4.3.2 IORegistryExplorer 50

4.4内核库:libkern 52

4.4.1 OSObject 52

4.4.2容器类 54

4.5小结 56

第5章 应用程序与驱动程序的交互 57

5.1 I/O Kit框架 58

5.2查找驱动程序 58

5.3观察设备移除 63

5.4修改设备驱动程序属性 65

5.5基于状态的交互 68

5.6驱动程序的通知 79

5.7小结 83

第6章 内存管理 84

6.1内存类型 84

6.1.1 CPU物理地址 85

6.1.2总线物理地址 85

6.1.3用户和内核虚拟地址 85

6.1.4内存顺序:大端序和小端序 86

6.1.5 32位和64位内存寻址 87

6.2内存分配 88

6.2.1底层分配机制 89

6.2.2 Mach内存域分配器 89

6.2.3 kalloc家族 89

6.2.4 BSD中的内存分 90

6.2.5 I/O Kit内存分配 91

6.2.6使用C++的new操作符分配内存 92

6.3内存描述符 92

6.3.1 IOBufferMemoryDescriptor 94

6.3.2其他的内存描述符 95

6.4映射内存 95

6.4.1用户空间任务到内核空间的内存映射 95

6.4.2IOMemoryMap类 97

6.4.3内核到用户空间任务的内存映射 98

6.4.4将内存映射到指定的用户空间任务 99

6.4.5物理地址映射 100

6.5小结 101

第7章 同步和线程 102

7.1同步原语 102

7.2原子操作 104

7.3锁 107

7.3.1自旋锁 107

7.3.2互斥 109

7.3.3条件变量 110

7.3.4读/写互斥 112

7.4同步异步事件:工作环 113

7.4.1 IOCommandGate 115

7.4.2定时器 116

7.4.3释放工作环 117

7.5内核线程 118

7.6小结 119

第8章USB 120

8.1 USB体系结构 120

8.1.1 USB传输速度 122

8.1.2主机控制器 123

8.1.3 USB协议 124

8.1.4端点 126

8.1.5 USB描述符 126

8.1.6 USB设备类 127

8.2 I/O Kit USB支持 128

8.2.1 USB设备和驱动程序处理 129

8.2.2加载USB驱动程序 130

8.2.3 USB Prober 132

8.2.4驱动程序示例:USB大容量存储器设备驱动程序 133

8.2.5驱动程序启动 138

8.2.6处理设备移除 138

8.2.7枚举接口 139

8.2.8枚举端点 140

8.2.9执行设备请求 141

8.2.10执行批量端点和中断端点的I/O 144

8.3小结 147

第9章PCI Express和Thunderbolt 148

9.1 I/O Kit中的PCI 150

9.1.1匹配和加载驱动程序 151

9.1.2驱动程序示例:一个简单的PCI驱动程序 154

9.1.3访问配置空间寄存器 156

9.1.4 PCI I/O内存区 158

9.1.5处理设备移除 161

9.2中断 162

9.2.1 I/O Kit中断机制 163

9.2.2注册接收中断 164

9.2.3启用MSI 166

9.2.4处理主中断 166

9.2.5处理二级中断 168

9.3直接内存访问 168

9.3.1将物理地址转换为总线地址 170

9.3.2为DMA准备内存 171

9.3.3建立分散/聚集列表 172

9.3.4IODMACommand类 173

94小结 175

第10章 电源管理 177

10.1响应电源状态改变 179

10.2请求电源状态改变 184

10.3处理设备空闲 185

10.4观察设备电源状态改变 186

10.5汇总 187

10.6小结 191

第11章 串行端口驱动程序 192

11.1 Mac OSX串行端口体系结构概览 192

11.2串行端口驱动程序 194

11.3实现IOSerialDriverSync类 197

11.4串行端口状态 200

11.5串行端口事件 204

11.6串行数据传输 207

11.7从用户空间访问串行端口 211

11.8小结 214

第12章 音频驱动程序 215

12.1数字音频和音频设备简介 215

12.2 Core Audio 217

12.3 I/O Kit音频支持 218

12.4实现一个音频驱动程序 219

12.4.1驱动程序和硬件初始化 221

12.4.2注册音频控制 223

12.4.3实现音频引擎 225

12.4.4 I/O引擎初始化 226

12.4.5其他的音频引擎功能 235

12.5小结 236

第13章 网络 238

13.1网络内核扩展 242

13.1.1内核控制KPI 242

13.1.2套接字过滤器 242

13.1.3因特网协议过滤器 250

13.1.4接口过滤器 255

13.2调试和测试网络扩展 258

13.3 I/O Kit中的网络 259

13.3.1构建简单以太网控制器驱动程序 261

13.3.2 MyEthernetDriver设计 262

13.3.3驱动程序初始化和启动 264

13.3.4介质和状态选择 266

13.3.5配置设备硬件地址 268

13.3.6启用和禁用设备 268

13.3.7传输网络分组 270

13.3.8接收分组 271

13.3.9对MyEthernetDriver进行测试 274

13.4小结 276

第14章 存储系统 277

14.1传输层驱动程序 278

14.2 IOBlockStorageDevice接口 279

14.3构建RAM磁盘设备 282

14.4分区规则 292

14.4.1实现一个示例分区规则 293

14.4.2媒介内容线索属性 300

14.5媒介过滤器驱动程序 300

14.5.1加密过滤器规则示例 302

14.5.2创建一个自定义GUID分区表 306

14.6小结 308

第15章 用户空间USB驱动程序 310

15.1背景 310

15.2 IOUSBLib框架 311

15.3处理异步操作 315

15.4 IOUSBDeviceInterface类 316

15.5 IOUSBInterfaceInterface类 320

15.5.1属性方法 321

15.5.2端点数据传输方法 322

15.5.3低延迟同步传输 328

15.6小结 330

第16章 调试 331

16.1常见的问题类型 331

16.2内核恐慌 332

16.3调试机制 333

16.3.1启动时修复崩溃 335

16.3.2采用IOLog()追踪 335

16.3.3输出栈跟踪 336

16.3.4通过FireWire远程跟踪 337

16.3.5远程内核核心转储 339

16.3.6 KDB 340

16.3.7通过以太网或FireWire使用GDB远程调试 340

16.3.8实时调试运行的内核 344

16.3.9使用虚拟机调试 344

16.3.10在内核中使用GDB调试 344

16.3.11使用Activity Monitor诊断挂起进程 354

16.3.12查找内存和资源泄漏 355

16.4小结 356

第17章 高级内核编程 357

17.1内核中的SSE和浮点 357

17.2多功能驱动程序 358

17.3编写I/O Kit族 358

17.4内核控制KPI 359

17.4.1内核控制注册 361

17.4.2客户端连接 362

17.4.3获取和设置选项 363

17.4.4从用户空间访问内核控制 364

17.5内核中的进程处理 365

17.6加载资源 366

17.7 KEXT资源之外的内容 367

17.8内核驱动程序通知 368

17.9小结 371

第18章 部署 372

18.1安装和加载内核扩展 372

18.2加载首选项和设置 374

18.3内核扩展的版本管理 375

18.4测试和品质保证 375

18.5打包KEXT和软件 376

18.5.1构建Hello World内核扩展安装包 378

18.5.2将内容添加至安装包 378

18.5.3配置安装包 379

18.5.4构建安装包 382

18.5.5卸载安装包 383

18.6小结 383

索引 385