OS X与iOS内核编程

OS X与iOS内核编程
作 者: Ole Henry Halvorsen Douglas Clarke 贾伟
出版社: 人民邮电出版社
丛编项:
版权说明: 本书为公共版权或经版权方授权,请支持正版图书
标 签: 操作系统/系统开发 计算机/网络
ISBN 出版时间 包装 开本 页数 字数
未知 暂无 暂无 未知 0 暂无

作者简介

  Ole Henry Halvorsen,目前在一家生产专业视频设备的公司担任高级软件工程师,负责面向Mac、Linux和PC的高端高清视频硬件驱动程序和软件开发。他是最早一批为USB 3.0和Thunderbolt创建视频硬件设备的开发者,曾是美国SGI公司的研发工程师,致力于研究NAS和SAN存储技术,以及为超级计算和高性能计算提供解决方案。Halvorsen拥有澳大利亚莫纳什大学网络计算学士学位以及信息技术硕士学位。Douglas Clarke,有15年以上的麦金塔计算机专业开发经验。他职业生涯的大部分时间都致力于硬件和设备驱动程序开发,曾为Mac OS 9、Mac OS X和Windows编写驱动程序。早在Mac OS X第1版面市一年以前,他就开始接触I/O Kit,从那以后一直在使用它。目前Clarke正在为实时视频应用开发驱动程序,他拥有澳大利亚莫纳什大学计算机科学学士学位。

内容简介

与传统的用户应用程序开发不同,内核环境更加复杂多变,任何问题都会严重影响系统的稳定性、安全性和性能,所以一定要确保内核代码中没有任何错误。《OS X与iOS内核编程》介绍了非常实用的内核开发方法,是XNU内核开发者必备的“九阴真经”。《OS X与iOS内核编程》两位作者都活跃在计算机软硬件以及驱动程序开发一线,具有丰富的实战经验。Ole Henry Halvorsen是最早一批为USB 3.0和Thunderbolt创建视频硬件设备的开发人员。Douglas Clarke具有15年以上的麦金塔计算机专业软硬件开发经验。本书汇集了两位作者多年的实战经验与智慧感悟,展现了一幅XNU内核编程与设备驱动程序开发的斑斓画卷。相信在作者循循善诱、通俗易懂的讲解下,读者定能为书中的精彩内容深深吸引,渐入化境,在不知不觉中炼就内核开发的绝世武功。如果你对iOS和Mac OS X操作系统感兴趣,关注内核开发,或者你本身就是驱动程序开发人员,那么如此精彩的一本好书绝对不容错过。

图书目录

第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.2  IOMemoryMap类  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.4  IODMACommand类  173

9.4  小结  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 OS X串行端口体系结构概览  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