新書推薦:
《
大模型启示录
》
售價:HK$
112.0
《
东法西渐:19世纪前西方对中国法的记述与评价
》
售價:HK$
201.6
《
养育男孩:官方升级版
》
售價:HK$
50.4
《
小原流花道技法教程
》
售價:HK$
109.8
《
少女映像室 唯美人像摄影从入门到实战
》
售價:HK$
110.9
《
詹姆斯·伍德系列:不负责任的自我:论笑与小说(“美国图书评论奖”入围作品 当代重要文学批评家詹姆斯·伍德对“文学中的笑与喜剧”的精湛研究)
》
售價:HK$
87.4
《
武当内家散手
》
售價:HK$
50.4
《
诛吕:“诸吕之乱”的真相与吕太后时期的权力结构
》
售價:HK$
99.7
編輯推薦:
唯一专注XNU内核开发实践的图书
一线设备驱动程序开发人员现身说法
轻松理解内核开发的复杂难懂之处
內容簡介:
《OS X与iOS内核编程》面向Mac OS
X和iOS操作系统,介绍了操作系统和内核架构等基础知识,以及内存管理、线程同步、IO
Kit框架等基本概念。通过最贴近实战的方法帮助读者编写高效的内核级代码。本书两位作者具备丰富的计算机硬软件以及设备驱动程序开发经验,在他们的指引下,读者定能为USB和Thunderbolt等设备开发设备驱动程序。
如果你对iOS和Mac OS X操作系统感兴趣,关注内核开发实践,或者你是驱动程序开发人员,那么《OS
X与iOS内核编程》适合你阅读。
關於作者:
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版面市一年以前,他就开始接触IO
Kit,从那以后一直在使用它。目前Clarke正在为实时视频应用开发驱动程序,他拥有澳大利亚莫纳什大学计算机科学学士学位。
目錄 :
第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 IO Kit
2.2 小结
第3章 Xcode和内核开发环境
3.1 语言的选择:C++
3.2 Xcode
3.3 “Hello World”内核扩展
3.4 加载和卸载内核扩展
3.5 使用控制台查看输出
3.6 小结
第4章 IO Kit框架
4.1 IO 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 IO 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 IO Kit内存分配
6.2.6 使用C++的new操作符分配内存
6.3 内存描述符
6.3.1 IOBufferMemoryDescriptor
6.3.2 其他的内存描述符
6.4 映射内存
6.4.1 用户空间任务到内核空间的内存映射
6.4.2 IOMemoryMap类
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 IO 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 执行批量端点和中断端点的IO
8.3 小结
第9章 PCI Express和Thunderbolt
9.1 IO Kit中的PCI
9.1.1 匹配和加载驱动程序
9.1.2 驱动程序示例:一个简单的PCI驱动程序
9.1.3 访问配置空间寄存器
9.1.4 PCI IO内存区
9.1.5 处理设备移除
9.2 中断
9.2.1 IO 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.4 IODMACommand类
9.4 小结
第10章 电源管理
10.1 响应电源状态改变
10.2 请求电源状态改变
10.3 处理设备空闲
10.4 观察设备电源状态改变
10.5 汇总
10.6 小结
第11章 串行端口驱动程序
11.1 Mac OS X串行端口体系结构概览
11.2 串行端口驱动程序
11.3 实现IOSerialDriverSync类
11.4 串行端口状态
11.5 串行端口事件
11.6 串行数据传输
11.7 从用户空间访问串行端口
11.8 小结
第12章 音频驱动程序
12.1 数字音频和音频设备简介
12.2 Core Audio
12.3 IO Kit音频支持
12.4 实现一个音频驱动程序
12.4.1 驱动程序和硬件初始化
12.4.2 注册音频控制
12.4.3 实现音频引擎
12.4.4 IO引擎初始化
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 IO 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 编写IO 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 小结
索引
內容試閱 :
内核开发是一项艰巨的任务,它与传统的用户应用程序开发完全不同。内核开发环境更多变、更复杂。由于任何问题都会对系统的稳定性、安全性及性能造成严重的后果,所以我们必须非常注意,要确保内核代码没有任何错误。本书介绍了内核编程必需的基本知识。从理论和实践两方面讲述了内核开发,并介绍了内核开发的基本概念(如虚拟内存和同步)和更多的实用知识。本书主要面向Mac
OS
X操作系统,而iOS操作系统也使用XNU内核,因此本书的理论知也适用于iOS操作系统。目前在内核执行环境下进行开发主要是因为需要通过实现设备驱动程序,控制内部或外部的硬件设备。因此,本书着重介绍设备驱动程序开发。在XNU内核中,设备驱动程序开发的主要框架是IO
Kit,我们将详细介绍它。当然,光讲理论是很枯燥的,我们提供了一些能正常运行的代码示例,亲自动手能让你学到更多,你也能从这些示例入手,构建自己的驱动程序。
希望你在阅读本书时充满乐趣,就像我们写作本书时的感觉一样。
本书读者对象
本书面向所有对苹果的iOS和Mac OS
X操作系统感兴趣,并且关注内核开发实践的人,特别是驱动程序开发者。不管你是一名爱好者、学生还是专业工程师,我们都希望能为你提供感兴趣的内容。我们在关注内核程序设计和开发的同时,也将介绍许多操作系统技术理论,并详细概述OS
X和iOS内核环境。本书的目的是介绍一些必要的知识,帮助你着手开发自己的内核扩展和驱动程序。为此,我们将特别介绍IO
Kit框架,以开发设备驱动程序及其扩展,也将介绍一些基本知识,帮你更深刻地理解IO Kit和操作系统如何交互。如果你主要对OS
X或iOS用户应用程序开发感兴趣,本书可能不适合你。本书不会介绍Cocoa应用程序或其他终端用户应用程序框架的开发。本书讲述的是内核编程主题,如基于苹果的OS
X和iOS平台开发驱动程序和内核扩展程序。
读者若有一些操作系统内部构件的知识,将能更好地理解本书内容。如果你学过计算机科学或计算机工程的入门课程,那么你的起点不错。另外,为了理解本书中的例子,你至少要掌握一种编程语言。因为我们重点介绍IO
Kit,它是采用C++语言的子集(称为嵌入式C++)写成的,拥有一些C++语言(至少是C)的经验对充分利用本书将非常有益。本书不会涉及一般的编程主题或理论,将简要介绍一些操作系统基本原理,讲述背景知识以便进一步讨论。
本书结构
下面简要说明本书各章的内容。
第1章,“操作系统原理”。详细介绍操作系统的功能,以及它在管理计算机硬件资源方面所起的作用。描述设备驱动程序的作用及何时需要它,并介绍内核环境编程与标准应用程序开发的不同。
第2章,“Mac OS X和iOS”。概述XNU(Mac OS X和iOS使用的内核)技术框架。
第3章,“Xcode和内核开发环境”。概述苹果公司提供的面向Mac OS X和iOS的开发工具。本章结尾介绍一个简单的“Hello
World”内核扩展程序。
第4章,“IO Kit框架”。介绍为Mac OS X提供驱动程序模型的IO
Kit框架,及其面向对象的体系结构。这部分内容将解释IO
Kit如何找到适合的设备驱动程序去管理一个硬件设备,以一个一般性的设备驱动程序为例来阐述IO Kit驱动程序的基本结构。
第5章,“应用程序与驱动程序的交互”。解释应用程序代码如何访问内核驱动程序。举例说明如何搜索和匹配一个特定的驱动程序,以及如何安装一个通知以等待驱动程序或特殊设备的到达。还要展示应用程序如何向驱动程序发送命令并等待由驱动程序发送的事件。
第6章,“内存管理”。将概述内核内存管理,以及驱动程序在工作时所需的不同种类的内存。我们描述了物理及内核虚拟内存地址和用户空间内存的不同点,也将向读者介绍内存描述符和内存映射等概念。
第7章,“同步和线程”。将讲述同步的基本原理,以及为什么对每个内核驱动程序来说同步都是必需的。本章将讨论内核锁机制(如IOLock、
IOCommandGate)及相应的用法,还将说明在自己的线程、用户空间线程和硬件中断之间,常见的驱动程序如何使用同步机制。本章还将讨论创建内核线程和异步时钟的内核设施。
第8章,“USB”。将为读者介绍USB设备的体系结构,以及驱动程序如何与USB设备协同工作。本章将概述IO Kit USB
API,以及它提供的用于枚举设备和与USB设备之间传送数据的类。本章也将讨论支持设备移除所需的步骤,并通过示例讲述驱动如何枚举管道等资源。
第9章,“PCIExpress和Thunderbolt”。将概述PCI系统架构。本章也将描述PCI驱动程序特有的概念,如内存映射IO、DMA高速数据传输、设备中断处理等。本章还将概述IOPCIDevice类,它是IO
Kit为了访问和配置PCI设备提供的一个类。本章也将讨论较新的Thunderbolt的相关技术。
第10章,“电源管理”。将描述驱动程序需要实现的支持系统进入低电源状态(如机器休眠)的方法。本章还将讲述高级电源管理,当硬件有一段时间不使用之后,驱动程序可让其进入低电源状态。
第11章,“串行端口驱动程序”。将描述在Mac OS
X上如何实现一个串行端口驱动程序。本章将介绍相关的数据结构(如循环队列)和通过阻塞IO和通知事件来管理数据流的技术。本章也会展示一个用户应用程序如何枚举和访问串行端口驱动程序。
第12章,“音频驱动程序”。将讨论如何使用IOAudioFamily框架开发全系统的音频输入和输出设备;举例说明一个简单的虚拟音频设备,该设备能将它的音频输出复制到音频输入。
第13章,“网络”。将描述如何使用IONetworkingFamily框架实现网络接口。本章也将讲述如何编写一个网络过滤器来过滤、阻塞和修改网络分组。本章最后将介绍一个示例,说明如何编写以太网驱动程序。
第14章,“存储系统”。将介绍在Mac OS
X上支持存储设备(如硬盘和CD)的存储器驱动程序。本章将描述各层存储栈上的驱动程序,包括如何写RAM磁盘、分区模式和硬盘加密的过滤器驱动程序。
第15章,“用户空间USB驱动程序”。将介绍在用户应用程序中如何完全实现某些驱动程序。本章将讲述该方法的优点,以及该方法不适用的情况。
第16章,“调试”。将介绍如何调试驱动程序的实践信息,以及常见的问题和易犯的错误。学完本章,读者能够根据内核崩溃报告倒推出自己的代码哪里有问题,这是内核开发人员会经常面临的任务。本章将讨论OS
X提供的调试工具(如GDB,即GNU debugger)。
第17章,“高级内核编程”。将分析内核编程中一些更高级的主题,如使用SSE或浮点以及实现高级驱动程序架构。
第18章,“部署”。最后本书将介绍如何向最终用户发布驱动程序。本章将介绍如何使用苹果安装系统进行首次安装和升级。本章包括一些避免常见驱动程序安装问题的实践小技巧。