与传统的用户应用程序开发不同,内核环境更加复杂多变,任何问题都会严重影响系统的稳定性、安全性和性能,所以一定要确保内核代码中没有任何错误。本书介绍了非常实用的内核开发方法,是XNU内核开发者必备的“九阴真经”。
本书两位作者都活跃在计算机软硬件以及驱动程序开发一线,具有丰富的实战经验。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和iOS12
2.1 XNU内核17
2.1.1 内核扩展(KEXT)18
2.1.2 Mach18
2.1.3 BSD层27
2.1.4 I/O Kit29
2.2 小结31
第3章 Xcode和内核开发环境32
3.1 语言的选择:C++32
3.2 Xcode33
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 IORegistryExplorer50
4.4 内核库:libkern52
4.4.1 OSObject52
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 IOBufferMemoryDescriptor94
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 IOCommandGate115
7.4.2 定时器116
7.4.3 释放工作环117
7.5 内核线程118
7.6 小结119
第8章 USB120
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 Prober132
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/O144
8.3 小结147
第9章 PCI Express和Thunderbolt148
9.1 I/O Kit中的PCI150
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 启用MSI166
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 Audio217
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 内核控制KPI242
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 KDB340
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 内核控制KPI359
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
《中风偏瘫家庭康复》内容简介:吴镇阳主编的《中风偏瘫家庭康复》简要介绍了中风防治的基本知识,详细阐述了中风偏瘫康复的基本知
中文版Photoshop CC标准教程(视频教学版)(附光盘) 本书特色 本书以实用、够用为原则,按照平面设计工作的实际需求组织内容。全书共17章,其中第1~1...
《跟动物交换身体2》内容简介:★畅销书《跟动物交换身体》第二弹重磅上市!魔性画风+专业知识+奇趣解读,以独特的视角直观解读动物
"数十亿人身在其中、数十万亿美元的新生意,你我此生最大的科技革命,这次转型将如何改变我们的生活?又如何使我们做生意的方式起
《唐诗三百首(经典译林)》内容简介:《唐诗三百首》编成于乾隆年间,全书共选五七言古近体诗三百一十首为八卷,或作六卷。附录有
《缘缘堂新笔》内容简介:1931年,丰子恺先生第一本散文集《缘缘堂随笔》在开明书店出版,深受读者喜爱。此后,“缘缘堂”系列作品
《完美教学:素描基础入门108例》内容简介:每一个人都有绘画的天赋。拿起笔,你也能快速画出生动的画面。这本书从专业的角度告诉我
《微积分的人生哲学》内容简介:这是国际知名数学家、《微积分的力量》作者史蒂夫·斯托加茨献给高中数学老师的深情力作。对他们师
《音乐漫游记:带着古典音乐去旅行》内容简介:每一首音乐作品,都是一幅鲜活的游历图,诉说了音乐家自己的生活故事;每一首音乐作
《新文科背景下的外语教学研究》内容简介:本书共收集34篇论文,涵盖语言学、文学、外语教学等各个学科领域,结合新文科建设,围绕
基于SPSS Modeler的数据挖掘-(第二版) 本书特色 数据挖掘具有广阔的应用领域和发展前景。spss modeler因界面友好且操作简捷,成为公认的数据...
《Excel 2010办公应用实战从入门到精通(超值版)》内容简介:《Excel 2010办公应用实战从入门到精通(超值版)》通过精选案例引导
《关羽:神化的《三国志》英雄》内容简介:《三国志》中的豪杰,为什么会被人们作为商业之神来崇拜呢?从史实到故事,再到信仰的对
《随波逐源》内容简介:本书是作者在追寻生命和物质本源的基础上,探寻人生意义过程中的一些认识及体会,书中汇集了作者对于人生观
《持久内存架构与工程实践》内容简介:《持久内存架构与工程实践》以工程实践为导向,详细阐述了持久内存的整体技术节。对硬件和固
Thisbookprovidesthefoundationforunderstandingthetheoryandpracitceofcompilers.Rev...
《Linux系统管理技术手册(第2版)》延续了《Linux系统管理技术手册(第2版)》前一版以及《uMx系统管理技术手册》的讲解风格,以当前
《他山之石:哈佛大学通识教育改革解读》内容简介:通识教育旨在培养能够适应当代社会发展、有责任心的公民,并依据这样的目标设计
别样诠释——一个VisualC++老鸟10年学习与开发心得 本书特色 《别样诠释:一个visual c++老鸟10年学习与开发心得》着眼于实际应用,循序渐进地介...
《xHTML+CSS+DreamweaverCS3标准网站构建实例详解》特别适合网站美工、网站前端架构师、网页设计爱好者、Wap页面设计师作为学习W